plot() の便利ワザ

plot() を工夫して利用することにより下記のようなトリッキーな表示を行うことができる。

  • 動的に変動する水平線を表示する
  • 垂直線を表示する

動的に変動する水平線を表示する

水平線を表示させる関数として hline() があるが、この関数には定数しか設定できない。変数の値の変化によって、チャート上で動的に変動する水平線を表示させるには、別の方法を考える必要がある。

簡単なものとして plot() を利用する方法がある。plot() の引数には trackprice があり、これを true に設定すると、plot() の直近の値を水平線で表示してくれる。そして、transp=100 に設定し透明度を100にする。すると、plot() の実態の線は透明で見えなくなるが、trackprice=true で表示される水平線は、この透明度設定の影響を受けないため表示が残る。こうして動的に変動する水平線を表示することが可能となる。


//@version=4
study("dynamic horizontal line", overlay=true)

plot(highest(high, 20), trackprice=true, transp=100, color=color.green)
plot(lowest(low, 20), trackprice=true, transp=100, color=color.red)

//plot(close, trackprice=true, transp=100) // debug 水平線が動的に変動するか確認
//plot(highest(high, 20), color=color.green) // debug
//plot(lowest(low, 20), color=color.red) // debug

垂直線を表示する

ある条件になったらチャート上に垂直線を引きたいというとき、簡単な方法として plot() を使う方法がある。

下記の例のように、study()scale=scale.none を指定し、plot() で巨大な値 1e10 をヒストグラムでチャート上に表示させることで垂直線もどきを実現している。

ポイントは scale=scale.none を指定していること。これにより、巨大な値が表示画面に収まるようにチャートがリサイズされるのを防いでいる。


//@version=4
study("vertical line", overlay=true, scale=scale.none)

ma = sma(close, 20)
co = crossover(close, ma)
cu = crossunder(close, ma)

plot(co ? 1e10 : na, style=plot.style_histogram, color=color.green)
plot(cu ? 1e10 : na, style=plot.style_histogram, color=color.red)