Pine Scriptの「security関数」。マルチタイムインジケーターで必須の関数ですが、これが分かりにくい。 今回は引数の「gap」について調べてみました。
security関数の引数
security()
が取れる引数は全部5個。
上3つは、まぁ分かるのですが、問題となるのが下の2つのgaps
とlookahead
です。
「security関数って何?」という方は概要をまとめましたので、下記リンクをご覧ください。
gaps
この内、今回はgaps
についてです。設定できる値は2つ。
この2つでどういった違いになるのかを、コードを書いて確認してみました。
コード
//@version=4
study("security Test", overlay=true)
res = input(title="EMA TimeFrame", type=input.resolution, defval="60")
len = input(title="EMA Period", type=input.integer, defval=50)
col = input(title='Change Color EMA', type=input.bool, defval=true)
smooth = input(title="Smooth", type=input.bool, defval=true)
ema = ema(close, len)
emaSmooth = security(syminfo.tickerid, res, ema, barmerge.gaps_on, barmerge.lookahead_off)
emaStep = security(syminfo.tickerid, res, ema, barmerge.gaps_off, barmerge.lookahead_off)
plot(smooth ? emaSmooth : emaStep, color=col ? close > emaStep ? color.green : color.red : color.white)
コードをPine エディタにコピペしてもらって、「チャートに追加ボタン」を押してください。やはり、動作を体感してみるのが理解に役立ちます。
パラメーターの設定から、Smoothをオフにすると、barmerge.gaps_off
のemaStepが描写されます。
Smoothをオンにすると、barmerge.gaps_on
のemaSmoothが描写されます。
画像で確認
下の画像は、60分足のチャートに日足終値で計算したEMAを表示したものです。
SmoothをOFFにした場合
SmoothをONにした場合
トレードオフの関係
見栄えがするのはgaps=barmerge.gaps_on
のemaSmoothの方でしょう。ギザギギザがなくなって見た目がよくなっています。
なぜギザギザが発生するのかというと、
- 24時間に1回だけ終値が決まる
- 24時間の中に60分足は24本含まれる
日足終値で計算するなら、計算結果の更新は24時間ごとです。 これを60分足の視点で見れば、一度決まった終値はその後23本継続することになるはずです。
次の終値が確定するとEMAの計算結果に変化が起こって、値がジャンプします。 これが繰り返されることでギザギザが描かれます。
barmerge.gaps_on
を設定すると、確定していない終値を使って計算することになります。
その後の値動きによってインジケーターの計算結果が変わってしまう可能性があり、その意味では正確性に欠けると言っていいでしょう。
ですから、見た目を取るか正確さを取るかという話になります。
まとめ
今回はgap引数について調べてみました。
マルチタイムで相場分析をする人にとってsecurity()
は非常に重要な関数です。
是非、細部まで挙動を理解して、使いこなしたいところ。
まだlookahead
が残っていますので、こちらについても分かったことがあったら共有させてもらいます。