【Pineスクリプト】security関数の書き方を徹底解説!【Trading View】

Pineスクリプト、security関数の書き方を徹底解説

Trading View独自のプログラム言語である「Pineスクリプト」には数々の関数が設定されており、中でも特徴的な関数がsecurityです。この関数を使うことで表示しているチャートとは別のシンボル・銘柄を同じチャート上に表示させたり、上位時間足のインジケーターを表示させたりすることができます!securityの使い方をマスターできればインジケーターの作成やバックテストの幅が広がります!

今回はsecurityにつかえる引数を一つづつ丁寧に解説し、関数をつかったコード例もご紹介します。

Pineスクリプトsecurity関数の引数一覧

securityに使える引数を簡単な以下のコードを使って解説していきます。

//@version=4
study("マイスクリプト", overlay=true)
D = security(syminfo.ticker, "D", close, barmerge.gaps_off, barmerge.lookahead_off)
plot(D)

このコードは同じシンボルのチャート上に日足の終値をプロットするコードです。例えばUSDJPYの4時間足チャートを表示させたときは下の画像のように青線(日足の終値)が表示されます。要するに下位時間足にしても日足の終値を常に確認できるようになります。

securityを使って同じシンボルの日足終値を表示

symbol:シンボル、銘柄を指定する

symbolsecurityに使う値のシンボル、銘柄を指定する引数です。使い方は2パターンあります。

表示しているチャートと同じシンボルの値を使う場合

市場の接頭辞が無いシンボルにはsyminfo.ticker接頭辞が有るシンボルにはsyminfo.tickeridを使います。

市場の接頭辞が有るシンボルとは、”OANDA:USDJPY”のように取引所の指定があるときです。

市場の接頭辞が無いシンボルとは、”USDJPY”のように単純にシンボル名のみの時です。

表示しているチャートと異なるシンボルの値を使う場合

securityを使うことで異なるシンボルの値も使うことができます。

例えば、USDJPYのチャート上にEURJPYの日足の終値を表示させたい場合は以下のようにコードを書きます。

D = security("EURJPY", "D", close)

シンボルを指定するときはダブルクォーテーション” “で囲います。

また、取引所を指定しないでシンボルを指定した場合、シンボル検索時に一番先頭に表示させる値が適用されます。

securityを使ってシンボルを指定しない場合は先頭シンボルが適用

取引所を指定したい場合は、”OANDA:USDJPY”のように”取引所名:シンボル名”と書きます。

resolution:時間足を指定する

扱う時間足を指定する引数です。各時間足は以下のように入力します。

  • 数字をそのまま入力すると「分足」 (例)60 ⇒ 1時間足(60分足)
  • アルファベットのDを入力すると「日足」 (例)D ⇒ 日足
  • アルファベットのWを入力すると「週足」 (例)W ⇒ 週足
  • アルファベットのMを入力すると「月足」 (例)M ⇒ 月足

値はダブルクォーテーション” “で囲います。

expression(series):使用する値

seriesには以下の価格値や変数、計算式を設定できます。

  • close:終値
  • open:始値
  • high:高値
  • low:安値
  • hl2:(高値+安値)/2
  • hlc3:(高値+安値+終値)/3
  • ohlc4:(始値+高値+安値+終値)/4

例えば、12日単純移動平均線を使用したい場合以下のようにコードを書きます。

D_SMA = security(syminfo.ticker, "D", sma(close, 12))

gaps:データを滑らかにする

使用可能な値は barmerge.gaps_onbarmerge.gaps_off の2つです。デフォルト値はbarmerge.gaps_off です。

ON/OFFの違いを以下のコードで確認してみます。

//@version=4
study("マイスクリプト", overlay=true)
D1 = security(syminfo.ticker, "D", close, barmerge.gaps_off, barmerge.lookahead_off)
plot(D1)
D2 = security(syminfo.ticker, "D", close, barmerge.gaps_on, barmerge.lookahead_off)
plot(D2, color=color.red)

同じシンボルの日足データを取得し、チャート表示は4時間足にしてみると2つのラインが違うことがわかります。

barmerge.gaps_off(青線)の場合、終値は一定の値を示しますbarmerge.gaps_on(赤線)の場合、前日の終値と当日の終値の値を直線でつなぐためスムーズな線が得られます。

barmerge.gapsのON/OFF

lookahed:データ適用タイミングの設定

使用可能な値はbarmerge.lookahead_onbarmerge.lookahead_offの2つです。デフォルト値はbarmerge.lookahed_offです。

この引数をバックテスト(ストラテジー)で設定するときは要注意です!基本的にはOFFを推奨します。

なぜバックテストでOFFが推奨なのか、ON/OFFの違いを以下のコードで確認してみます。

//@version=4
study("マイスクリプト", overlay=true)
D1 = security(syminfo.ticker, "D", close, barmerge.gaps_off, barmerge.lookahead_off)
plot(D1)
D2 = security(syminfo.ticker, "D", close, barmerge.gaps_off, barmerge.lookahead_on)
plot(D2, color=color.red)

下の画像はおなじシンボルの日足データを取得し、チャート表示を4時間足にしています。

barmerge.lookahed_offの場合(青線)は、当日の日足終値が確定したタイミングで値が変動します。

一方でbarmerge.lookahed_onの場合(赤線)は、日足の終値が確定したタイミングでその日すべての時間足に当日の終値が表示されています。つまり、下位時間足でバックテストを行った場合、当日の終値を先取りすることができてしまい、現実とはかけ離れたバックテストの結果がえられてしまうことがあります。

barmerge.lookahedのON/OFF
スポンサーリンク

security関数のPineスクリプトコード例

引数の説明が一通り終わったので、securityを使ったコード例をいくつかご紹介します。

オリジナルのインジケーターの作成やストラテジーの作成の参考にしてみてください!

チャート上に前日の高値・安値ラインを表示させる

//@version=4
study("高値・安値ライン表示", overlay = true)   

//日足の高値・安値
dailyhigh=security(syminfo.ticker, "D", high)
dailylow=security(syminfo.ticker, "D", low)

//前日の高値・安値プロット
plot(dailyhigh[1], style=plot.style_stepline)  
plot(dailylow[1], style=plot.style_stepline)

このコードを改良したインジケーターが前月、前週、前日の高値・安値を表示するHigh Lowラインで紹介しているインジケーターです。

全ての時間足で日足の25日単純移動平均を表示させる

//@version=4
study("全時間足で25日SMA表示", overlay=true)
SMA = security(syminfo.ticker, "D", sma(close, 25), barmerge.gaps_on)
plot(SMA)

このコードを改良したインジケーターが異なる時間足の移動平均線を表示!マルチタイムフレームSMA!で紹介しているインジケーターです。

 

 

security関数の解説は以上になります。

他にも使用頻度の高い関数について解説した記事もあるので是非参考にしてみてください。

参考サイト:https://www.tradingview.com/pine-script-docs/en/v4/annotations/Script_inputs.html?highlight=session

Pineスクリプト入門の記事では、プログラミング初心者でも理解できるように一つづつ丁寧に解説しています。Pineスクリプトを触ったことがない方でもPineスクリプト入門#1から順にみていただければ、バックテストやインジケーターのコードも作成することができます。興味のある方は是非、他の記事もご覧ください。

コメント

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