トレーディングビュー(TradingView)Pineスクリプト入門#4|ストラテジーに利確、損切の設定を加える

タイトル「利確、損気の設定」

前回作成した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)での決済方法をご紹介しましたが、他にもパーセンテージやトレイリングストップを使用する方法などがあります。これについてはまた別の記事でご紹介しようと思います。

今回は以上になります。ありがとうございました。

コメント

タイトルとURLをコピーしました