前回作成したPineスクリプトのエグジット条件
以下は前回の記事で作成したスクリプトです。
//@version=4
strategy("マイストラテジー", overlay=true)
//開始日時
test_start = timestamp(2018, 4, 1, 00, 00)
//終了日時
test_end = timestamp(2019, 4, 1, 00, 00)
//テスト期間の指定
is_test = test_start <= time and time <= test_end
//ポジショニング条件
longCondition = crossover(sma(close, 14), sma(close, 28))
shortCondition = crossunder(sma(close, 14), sma(close, 28))
//エントリー条件
if (is_test)
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
このスクリプトにはエントリー条件は指定していますが、エグジット条件を指定していないため、ロングポジションの決済はショートポジションのエントリー条件となります。つまり、MA14と28のクロスでドテンしているということです。
今回は、このスクリプトにエグジット条件を追加する方法をご紹介します。
エグジット条件を指定したストラテジースクリプト
前回の記事で作成したスクリプトにエグジット条件(利確、損切)を追加したスクリプトが以下になります。
//@version=4
strategy("マイストラテジー", overlay=true)
//開始日時
test_start = timestamp(2018, 4, 1, 00, 00)
//終了日時
test_end = timestamp(2019, 4, 1, 00, 00)
//テスト期間の指定
is_test = test_start <= time and time <= test_end
//ポジショニング条件
longCondition = crossover(sma(close, 14), sma(close, 28)) and strategy.position_size == 0
shortCondition = crossunder(sma(close, 14), sma(close, 28)) and strategy.position_size == 0
//エントリー条件
if (is_test)
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
//エグジット条件
strategy.exit("My Long Exit Id", "My Long Entry Id", profit=1000, loss=500)
strategy.exit("My Short Exit Id", "My Short Entry Id", profit=1000, loss=500)
エグジット条件の箇所が追加したコードになります。
たったこれだけで利確、損切が設定できます。簡単ですね!
それでは詳しく見ていきましょう。
スクリプトの解説
冒頭の「バージョン、ストラテジーの定義」はこちら。
「バックテスト期間を指定する方法」についてはこちらの記事を参考にしてください。
if文についてはこちらで詳しく解説しています。
ポジショニング条件を修正する
//ポジショニング条件
longCondition = crossover(sma(close, 14), sma(close, 28)) and strategy.position_size == 0
shortCondition = crossunder(sma(close, 14), sma(close, 28)) and strategy.position_size == 0
このスクリプトを日本語に変換すると 「lognConditionという変数は、単純移動平均線14(終値)が単純移動平均線28(終値)を上抜けすることを示します」「shortConditionという変数は、単純移動平均線14(終値)が単純移動平均線28(終値)をした抜けすることを示します」といった意味でしたね。
今回は、黄色マーカーの部分を追加しています。この部分を日本語に変換すると「加えて、ポジションを持っていない場合」といった意味になります。要するに、すでにポジションを持っている場合はエントリーせず、ポジションを持っていない場合にのみエントリーするという条件付きになります。
このコードを追加することで、利確、損切条件を満たす前に単純移動平均線14と28のクロスが起こった場合、ドテンして決済することを防ぐことができます。なお、ドテン決済も許容する場合はこのコードの追加は必要ありません。
エグジット条件を設定する
//エグジット条件
strategy.exit("My Long Exit Id", "My Long Entry Id", profit=1000, loss=500)
strategy.exit("My Short Exit Id", "My Short Entry Id", profit=1000, loss=500)
このスクリプトを日本語に変換すると「”My Long Entry Id”というポジションを利益1000ティック(ドル円なら100pips)または損失500ティック(ドル円なら50pips)に到達したときに決済する(”My Long Exit Id”というエグジット識別子)」といった意味になります。2行目のショートポジションの場合も同じなので省略します。
これでスクリプトは完成です。「チャートに追加」で結果を確認してみましょう。
チャート上にはこのようにエントリーした場所、エグジットした場所が表示されます。画像はわかりやすいように利確幅、損切幅を追記しています。
今回のまとめ
今回はPineスクリプトのストラテジーで利確、損切を設定する方法をご説明しました。
ビルトイン変数の「strategy.exit」を使用することで簡単に利確、損切を設定することができます。今回はティック数(pips)での決済方法をご紹介しましたが、他にもパーセンテージやトレイリングストップを使用する方法などがあります。これについてはまた別の記事でご紹介しようと思います。
今回は以上になります。ありがとうございました。
コメント