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)