トレーディングビュー(TradingView)Pineスクリプト入門#5|「input」を使えば条件変更が超簡単

Pineスクリプト入門#5「input」の使い方

前回の記事では「利確、損切の設定」方法をご紹介しました。

利確、損切の値を変更するには、Pineスクリプト内の値変更が必要です(黄色のマーカー部分)。

//エグジット条件
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)

コードを毎回編集するのはちょっと手間ですよね。

今回ご紹介する関数inputを使用することで簡単に、利確、損切値やテスト期間などの値を変更することが可能になります!

「input」を使用したストラテジースクリプト

ビルトイン関数「input」とは?

input関数とは、inputを使って宣言した変数を使うことで、UI上の設定から変更すことが可能になります(いちいちスクリプト内の数値を変更する手間が省ける)。

数値だけではなく、「文字列」「通貨ペア」などにも使うことができます。

「input」を使うとこう変わる!

前回の記事で作成したスクリプトをinputを使って修正しました。

  • エグジット条件(利確、損切の値)
  • テスト期間の指定
  • 移動平均線の値

修正を加えると、下の画像のように設定画面から値を変更することが可能になります。

input使用後の設定画面

修正後のスクリプト

修正後のスクリプトが以下になります。

//@version=4
strategy("マイストラテジー", overlay=true)

//期間設定用入力値------------------------------------------------
startYear = input(2018, minval = 1900, maxval = 2100, title = "開始 年")
startMonth = input(01, minval = 01, maxval = 12, title = "開始 月")
startDay = input(01, minval = 01, maxval = 31, title = "開始 日")
endYear = input(2019, minval = 1900, maxval = 2100, title = "終了 年")
endMonth = input(01, minval = 01, maxval = 12, title = "終了 月")
endDay = input(01, minval = 01, maxval = 31, title = "終了 日")

//移動平均線パラメーター設定用入力値------------------------------------------------
ma_src = input(close, title="MA 価格ソース")
short_len = input(14, title="短期 MA 期間")
long_len = input(28, title="長期 MA 期間")

//エグジット設定用入力値------------------------------------------------
take_profit = input(1000, title="利確幅", minval=1)
stop_loss = input(500, title="損切幅", minval=1)

//開始日時-------------------------------
test_start = timestamp(startYear, startMonth, startDay, 00, 00)

//終了日時------------------------------------------------
test_end = timestamp(endYear, endMonth, endDay, 00, 00)

//テスト期間の指定------------------------------------------------
is_test = test_start <= time and time <= test_end

//ポジショニング条件------------------------------------------------
short_sma = sma(ma_src, short_len)
long_sma = sma(ma_src, long_len)
longCondition = crossover(short_sma, long_sma) and strategy.position_size == 0
shortCondition = crossunder(short_sma, long_sma) 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=take_profit, loss=stop_loss)
strategy.exit("My Short Exit Id", "My Short Entry Id", profit=take_profit, loss=stop_loss)

変更箇所が今までよりちょっと多いと思うかもしれませんが、やっていることは全然難しくないので大丈夫です。

それでは詳しく見ていきましょう。

スポンサーリンク

スクリプトの解説

テスト期間指定用の「input」設定

//期間設定用入力値------------------------------------------------
startYear = input(2018, minval = 1900, maxval = 2100, title = "開始 年")
startMonth = input(01, minval = 01, maxval = 12, title = "開始 月")
startDay = input(01, minval = 01, maxval = 31, title = "開始 日")
endYear = input(2019, minval = 1900, maxval = 2100, title = "終了 年")
endMonth = input(01, minval = 01, maxval = 12, title = "終了 月")
endDay = input(01, minval = 01, maxval = 31, title = "終了 日")

上記スクリプトではテストを開始する「年」「月」「日」と終了する「年」「月」「日」の変数を宣言しています。

例えば、開始「年」はstartYearに該当する行です。

startYearの行を日本語に変換するとstartYear(変数)は設定画面の表示が”開始 年”で、初期値が2018、最小出力値が1900、最大出力値が2100であることを出力します。」といった意味になります。

以降も同様に宣言していきます。ただし、「月」に該当する値は最小出力値が1、最大出力値が12、「日」に該当する値は最小出力値が1、最大出力値が31になりますので注意してください。

minval

input変数の最小可能値。inputの種類がinteger(整数)またはfloat(浮動小数点)の時に使用する。

maxval

input変数の最大可能値。inputの種類がinteger(整数)またはfloat(浮動小数点)の時に使用する。

//開始日時------------------------------------------------
test_start = timestamp(startYear, startMonth, startDay, 00, 00)

//終了日時------------------------------------------------
test_end = timestamp(endYear, endMonth, endDay, 00, 00)

inputを使って変数を宣言したら、対応する箇所(年、月、日)に代入しましょう。これで、設定画面からバックテスト期間の設定が可能になりました。

移動平均線パラメーター用の「input」設定

//移動平均線パラメーター設定用入力値--------------------------------------
ma_src = input(close, title="MA 価格ソース")
short_len = input(14, title="短期 MA 期間")
long_len = input(28, title="長期 MA 期間")

ここでは、移動平均線のパラメーターである「価格ソース(終値、始値など)」と「短期、長期の期間」をinputを使って宣言します。

それぞれ、日本語に変換すると「ma_srcという変数は、パラメーターに終値を使う。」「short_lenという変数のパラメーター初期値は14とする。」「long_lenという変数はのパラメーター初期値は28とする。」といった意味になります。

価格ソースにはclose(終値)以外に、open(始値)、high(高値)、low(安値)、hl2((高値+安値)/2)、hl3((高値+安値+終値)/3)、ohlc4((始値+高値+安値+終値)/4)が使用できます。

//ポジショニング条件------------------------------------------------
short_sma = sma(ma_src, short_len)
long_sma = sma(ma_src, long_len)

ビルトイン関数sma内の引数には、先ほど宣言した変数を代入します。

longCondition = crossover(short_sma, long_sma) and strategy.position_size == 0
shortCondition = crossunder(short_sma, long_sma) and strategy.position_size == 0

さらに、ビルトイン関数cossover,crossunder内の値にも、変数を代入します。

これで、設定変更画面から移動平均線のパラメーター変更が可能になりました。

エグジット条件変更用の「input」設定

//エグジット設定用入力値------------------------------------------------
take_profit = input(1000, title="利確幅", minval=1)
stop_loss = input(500, title="損切幅", minval=1)

エグジット設定も同様に、inputを使って、”利確幅””損切幅”に該当する値と表示名を宣言します。

//エグジット条件------------------------------------------------
strategy.exit("My Long Exit Id", "My Long Entry Id", profit=take_profit, loss=stop_loss)
strategy.exit("My Short Exit Id", "My Short Entry Id", profit=take_profit, loss=stop_loss)

最後に、strategy.exti内の該当する箇所に先ほど宣言した変数を代入して完了です。

input使用後の設定画面全体

このように設定画面からinputで宣言した変数の値を変更することができるようになりました!

inputについてもう少し詳しく知りたい方はinput関数の書き方を徹底解説!をご覧ください。

今回のまとめ

今回はinputを使って設定画面から変数の値を変更する方法をご説明しました。

スクリプトを開かずに値を変更できるため、設定画面で直感的に、効率よくバックテストの検証を行うことができるようになります。よく変更する変数を作成するときはinputを使うと便利ですね。

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

コメント

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