Pine Scriptを使って線を引くときに使える関数が主に3つあります。その使い分けを解説します。
2021年3月12日
Pine Scriptを使ってチャートに線を引く
インジケーターを作るときに欠かせないのが、線を引くことです。 ひと口に線と言っても、計算結果の出力だけでなく補助線などを引きたい場合もあるでしょう。
どういった線を引きたいかによって、以下の3つを使い分ける必要があります。
hline
水平なラインを引く場合に使用するのがhline
です。頭に着く「h」はHorizonの頭文字なのでしょう。
オシレーターの「買われ過ぎ/売られ過ぎ」のラインを引く場合などに使用します。
また、fill
と組み合わせることで、線ではなく範囲を塗りつぶすことも可能です。
定数しか受け取れない
水平線を引くだけなら、plot
に定数を渡すことでも同じことができます。
value = 80
hline(value)
plot(value)
上の2つは共に80のところに水平線を描写します。 これらは同じような見た目になりますが、行なっていることには大きな違いがあります。
plot
による描写は足ごとに行なわれています。
上記のコードの場合、全ての足において80のところに線を引いており、それらがずっと同じ値なので水平線に見えているだけです。
足ごとに描写が行われるので、水平線の終わりは現在の足と同じ位置になります。
一方、hline
には時間の概念がありません。その証拠に、hlineで引いた水平線は、チャートを右側にスクロールしても続いていきます。
時間の概念が無いということは、時間による値の変化に対応できないということです。
value = sma(close, 20)
hline(value)
このように、足ごとに値の変わる水平線をhline
で引こうとしてもエラーとなります。
専用のスタイルが用意されている
hline
には、plotとは異なるスタイルが用意されています。
- hline.style_solid
- hline.style_dotted
- hline.style_dashed
ドットやダッシュはplotでは使えないスタイルです。hline
の見た目を変更したいときは、引数にlinestyle
として上記のどれかをを渡します。
plot
plot
は、インジケーターの計算結果をチャートに出力したいときに使う関数です。
ですから、plotに渡す引数は、定数ではなくシリーズデータであることが一般的です。
状態が変化するまで同じ値を表示する
plotに関しては特に述べることが無いので、良く使うテクニックを紹介します。
plotに渡すシリーズを作る際、一定期間変化しないデータを用意したい場合があります。 例えば、支持抵抗線などです。
value = 0.0
value := value[1]
if open > close
value := high
plot(value)
その場合、上記コードのような流れを作ることで実現できます。これを言葉にすると、
- 変数を初期化
- 1つ前の値を変数に代入
- 条件にマッチしたら値を上書き
となります。
line.new
line.new
は、新しいラインオブジェクトを作成するための関数です。
起点(x1, y1)から終点(x2, y2)までの直線を引きます。 例えば、ZIGZAGの安値と高値を線で結ぶといったときに使用します。
垂直の線を引く
line.new
を使って「縦線」を引くことも可能です。TradingViewには垂直線を引く関数が用意されていないため、line.newで代用します。
起点と終点のx座標を同じにしてやれば、描写される線は垂直となります。
isHour = hour == 12
isMinute = minute == 0
if(isHour and isMinute)
line.new(bar_index, low, bar_index, high, xloc.bar_index, extend.both)
このコードでは12時に縦線を引いています。引数にextend.both
を指定してチャートを縦断する線にするのがポイントです。