(1)概要
(2)plot関数
(3)change関数・iff関数
(4)input関数
(5)security関数、相関係数インジケータ
(6)fill関数
(7)bgcolor関数
(8)複数行を一括でコメントアウトできる?
(9)line.new関数・line.set関数、ピボット・インジケータ
(10)関数宣言(カスタム関数)、ピボット・ハイ・ロー・インジケータ
(11)ジグザグ(ZigZag)インジケータ
(12)平均足バー・マルチタイムフレーム(MTF)
(13)ストラテジー・バックテストの概要
(14)ストラテジー・サンプル「EMAクロス+固定TP/SL」
(15)ストラテジーの「最適化」をめぐるTradingViewとMetaTraderの違い
(16)Security関数のgapsとlookaheadとは?
(17)アラート条件の設定:alertcondition
はじめに
今回はPineScript入門ガイドの16回目です。今回は、Security関数の引数の中の、「gaps」と「lookahead」とについてまとめておきたいと思います。
Security関数は、現在チャートに表示されているシンボルと違うシンボルや時間足の値を取得するもので、とても便利で頻繁に使う関数です。ここで、Security関数の中の引数の「gaps」と「lookahead」がわかりずらいので最初は戸惑います。
今回はその「gaps」と「lookahead」の意味を、設定結果の実例を見ながら説明していきたいと思います。
「gaps」と「lookahead」とは
security関数の引数は、以下の通りです。
security(symbol, resolution, expression, gaps, lookahead)
PineScriptの公式リファレンスマニュアルでは、gapsとlookaheadについて以下のように解説されています。
リクエストされたデータのマージ方法(リクエストされたデータは自動的にメイン系列 (OHLCデータ) とマージされます)。可能な値は: barmerge.gaps_on, barmerge.gaps_off です。barmerge.gaps_on – リクエストされたデータはギャップ (na値) ありでマージされます。 barmerge.gaps_off – リクエストされたデータはギャップなしで連続してマージされ、すべてのギャップは以前の最も近い既存の値で埋められます。デフォルト値は barmerge.gaps_off です。
リクエストされたデータ位置のマージ方法。可能な値は: barmerge.lookahead_on, barmerge.lookahead_off です。デフォルト値はバージョン3から barmerge.lookahead_off です。2つのパラメータの動作はリアルタイム時には同じで、ヒストリカルデータの時のみ異なる事ににご注意下さい。
むむむ・・・。読んでもよくわからないですね。そこで、サンプルスクリプトを実際にチャートに表示させて、違いをみることにします。
gaps_on/offの違いと、lookahead_on/offの違いをチャートで見てみよう
日足の安値を取得する以下のサンプルスクリプトを使って、1時間足チャートに表示させてみます。
//@version=4 study('My Script', overlay=true) a = security(syminfo.tickerid, 'D', low, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off) plot(a, color=color.red) b = security(syminfo.tickerid, 'D', low, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(b, color=color.green) c = security(syminfo.tickerid, 'D', low, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) plot(c, color=color.blue) d = security(syminfo.tickerid, 'D', low, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_on) plot(d, color=color.orange)
a, b, c, dは、それぞれ以下の組み合わせです。
a: gaps=「barmerge.gaps_off」かつ「barmerge.lookahead_off」
b: gaps=「barmerge.gaps_off」かつ「barmerge.lookahead_on」
c: gaps=「barmerge.gaps_on」かつ「barmerge.lookahead_off」
d: gaps=「barmerge.gaps_on」かつ「barmerge.lookahead_on」
gaps_offのケースで、lookaheadのon/offの違い
まず、gaps=barmerge.gaps_offのケースで;
a: lookahead=barmerge.lookahead_off
b: lookahead=barmerge.lookahead_on
の違いを、1時間足で表示したものが以下のチャートです。
日足の安値に相当する水平線が、1日ずれていることがわかりますね。
barmerge.lookahead_offの場合は、当日の日足の安値は当日の最後の1時間足確定のタイミング(すなわち、当日の日足の安値が確定したタイミング)で取得されます。
一方、barmerge.lookahead_onの場合は、当日の日足の安値は、当日中、最新の安値を常にリアルタイムで表示していることがわかります。(当日中に安値を更新するたびに当日のラインは変わります(「リペイント」されます。)
「lookahead(先読み)」の意味が、これでわかりますね。
gaps_onのケースで、lookaheadのon/offの違い
次に、gaps=barmerge.gaps_onのケースで;
c: lookahead=barmerge.lookahead_off
d: lookahead=barmerge.lookahead_on
の違いを、1時間足で表示したものが以下のチャートです。
lookaheadのon/offの違いで1日ずれることは、前述のbarmerge.gaps_offのケースと同じですが、水平線ではなく、斜めの線になっていますね。
すなわち;
barmerge.gaps_onでは、日中の1時間足の部分は値無しとする(ギャップ有りとする)
barmerge.gaps_offでは、日中の1時間足の部分は、直近の1時間足の時点の値と同じとする(連続してギャップ無しにする)ということですね。
これをふまえて、公式リファレンスの以下の記述を再度読むと、理解できます。
barmerge.gaps_onでは、「ギャップ (na値) ありでマージ」
barmerge.gaps_offでは、「ギャップなしで連続してマージされ、すべてのギャップは以前の最も近い既存の値で埋められる