トレーディングビューの投資戦略テスター(Pineスクリプト)で利確、損切りを指定する

以前の投稿で記載した注文ドテンのみの投資戦略テスターを修正して、注文のクローズを利確、損切りで行う投資戦略テスターを作成しました。

過去記事
トレーディングビューの投資戦略テスター(Pineスクリプト)でテスト期間を指定する

 

投資戦略テスターの内容

・エントリー条件
ロング :短期SMAと長期SMAのゴールデンクロス
ショート:短期SMAと長期SMAのデッドクロス

・クローズ条件
ロング :ポジションがロング中 かつ 利確・損切額に価格が到達
ショート:ポジションがショート中 かつ 利確・損切額に価格が到達

過去記事からの修正点は以下の3つです。

  1. 利確、損切りを入力値に追加
  2. ポジションがある場合は、新規の注文を入れない
  3. 注文のクローズを利確、損切りにて行う

また、作成時は下記のチャートで検証しています。

  • 通貨:BITMEX:XBTUSD
  • 時間:1時間

投資戦略テスターのイメージ画像

設定画面(入力)

Pineスクリプトのコード

解説

利確、損切りを入力値に追加

rikaku = input(100, title="利確", type=float)
songiri = input(50, title="損切", type=float)
tick = input(10, title="最小ティックの桁", type=float)

input関数で利確、損切、最小ティックの桁を設定できるようにします。
後のクローズ判定で利用します。

エントリー判定

// 売買判定
// ゴールデンクロス かつ ポジションなし の場合、True
longCondition = crossover(short_sma, long_sma) and pos_size == 0
// デッドクロス かつ ポジションなし の場合、True
shortCondition = crossunder(short_sma, long_sma) and pos_size == 0

ロング判定

  • 「crossover(short_sma, long_sma)」で短期SMA、長期SMAのゴールデンクロスか判定
  • 「pos_size == 0」で現在ポジションを持っていないか判定

ショートエントリー判定

  • 「crossunder(short_sma, long_sma)」で短期SMA、長期SMAのデッドクロスか判定
  • 「pos_size == 0」で現在ポジションを持っていないか判定

クローズ判定

    // ポジションがロング中の時、利確、損切り額に到達したらクローズ
    strategy.exit("Exit L", "L", profit=rikaku*tick, loss=songiri*tick, when=pos_size > 0)
    // ポジションがショート中の時、利確、損切り額に到達したらクローズ
    strategy.exit("Exit S", "S", profit=rikaku*tick, loss=songiri*tick, when=pos_size < 0)

strategy.exit関数で注文をクローズします。

ロングクローズ判定

  • 「profit=rikaku*tick, loss=songiri*tick」で利確、損切を設定(※1)
  • 「when=pos_size > 0」でポジションがロングか判定(※2)

ショートクローズ判定

  • 「profit=rikaku*tick, loss=songiri*tick」で利確、損切を設定(※1)
  • 「when=pos_size < 0」でポジションがショートか判定(※2)

(※1)「profit」に利確を設定し、「loss」に損切を設定します。「*tick」しているのは、そのまま設定すると価格が10分の1になったためです。”XBTUSD”の価格が”XXXX.0″の単位で表示されているため、最小ティックが”0.1″になるということでしょうか。。。

(※2)ポジションがロングかショートか判定することで、同じ足の中で注文がクローズされないようにしています。デメリットとしては大きく価格が変動した場合に、利確、損切額をオーバーします。(最速でも次の足でクローズとなるため、1時間足なら最遅で1時間後となります)