line
はチャートに線を引きたいときに利用する。
Plot
とどう違うの?基本的にはPlot
は何らかの連続した(または離散した)一連の変数を表現するものであり、いわゆるグラフなので
途中で**「線を増やしたり消したりできない」**
そこで使うのがこのline
。
公式BLOGにて公開されているコードを少しいじって
「10個前の安値と、最新のバーの安値を結ぶ」線を描く。
//@version=4
study("Line", overlay=true)
l = line.new(bar_index, low, bar_index[10], low[10], width = 4)
line.delete(l[1])
簡単。わかりやすい。
ここで覚えておくビルトイン変数(予めシステムで用意されている変数)は
bar_index
は現在のバーlow
は安値そしてbar_index[10]
とすると10本前のバーの位置を指す。low[10]
も同様に10個前の安値だ。
ここは少しPine独特の表現方法なので覚えてなければ覚えておく。[数字]
の数字分過去に戻る。マイナス値は入れない。
これもPineのクセで、先程の
l = line.new(bar_index, low, bar_index[10], low[10], width = 4)
を見ると、変数が直接入っている項目
(1-4番目の引数)と with=4
と変数名=値となっている引数に分かれている。
前者のように値を直接入れる引数は必須項目。後者の変数名=値になっている箇所は省略可能だ。
line.new()
とはここでようやく本題。
以上を踏まえてline.new()
は最小で4つの引数を渡してやることで線を描画する。
想像は簡単だ。始点と終点だ。
先程のコードをより省略して
line.new(bar_index, low, bar_index[10], low[10])
にしてみよう。
線は細くなってしまったが(width
のオプションを消したため)エラー無く実行できる。
line.new
の引数の決まりは
line.new(始点のx, 始点のy, 終点のx, 終点のy)
となっている。
x
はバーの個数なのでbar_index
がそのまま使える。y
は縦軸の価格を入れるのでlow
やclose
などを入れれば良い。
line.delete()
とはさいごの行のdelete
文がそろそろ気になると思う。
こちらは前に描いた線を後から消すことができる。(new.label
でも同じように使用する)
例として最初のコードからこのdelete
の行を書かないで実行すると
//@version=4
study("Line", overlay=true)
l = line.new(bar_index, low, bar_index[10], low[10])
//line.delete(l[1])
消えないので線が複数残ってしまう。
これはこれで良いかもしれない。
そう、左半分に線がない。
これはPine
の制約によるもので線が増えすぎると自動的に古いものからdelete
する仕様。
l[1]
って?引数に入っているl[1]
はなんだろうか。
最初に l = line.new()...
としているので、l
という変数そのものが描かれたラインだと考えよう。
さらにその[1]
。つまり先程述べたように「1個前のバーで描いた線」のことを指している。
よって
line.delete(l[1])
があることによって、バーが更新されるたびに「一つ前に描いた線」を消している。
つまり最新のバーに対応した1本の線以外は消えるようにコーディングされているのだ。
line.new
のオプションまず変数名=値の省略可能なオプションは、先程述べた値を入れるのが必須の引数(line
では1-4個目)以降であれば
自由に位置を変更してよい。
つまり
line.new(bar_index, low, bar_index[10], low[10], width=10, color=color.red) //前半4つは位置を変更してはいけない
でもいいし
line.new(bar_index, low, bar_index[10], low[10],color=color.red, width=10) //後ろの2つの順番は自由に変えられる。
でも良い。
先程のwidth
は線の幅を指定する。
color
は線の色。color=color.green
やcolor=color.red
などで表現するほかcolor=color(#E040FB)
のように16新数のカラーコード表現でも良い。
先程までは始点と終点で線が終わってしまったが、この線を左右に延長してレジスタンスやサポートとして効いているか見たいときがある。
そんなときはextend=extend.both
を指定する。片方だけでよければright
かleft
を指定する。
注意:次はright
(右)
extend=extend.right
にすると右側は消えたままで左側に線画伸びる模様。ちょっと変な印象。
トレンド方向などを矢印で表現したい事があるがそんなときはstyle
を使う。
style=line.style_arrow_left
これもleft
なのに右側。
他にも
style=line.style_dotted
style=line.style_dashed
line.style_arrow_both
※いずれもwidth=6
などがある。
下降トレンドなら赤。上昇トレンドなら青にしてみたい。
こういうときはline.set_
~~で用意されている関数を使う。
色ならline.set_color
だ。
冒頭で指定したl = line.new()
の l
に対して指定するので書式は
line.set_color(l, color.red) //第一引数に l , 第2引数に色のビルトイン関数。color(#16進数)でもよい。
//@version=4
study("Line", overlay=true)
if(dayofweek == 1)
l = line.new(bar_index, low, bar_index[10], low[10], style=line.style_arrow_left, width=3 )
if(low>low[10])
line.set_color(l,color.blue)
else
line.set_color(l,color.red)
例えば上のようなコードにして日足チャートにセットすると
にすることができる。
次のようにチャートのリプレイを使ってみるとリアルタイムにどんな感じでラインが出るのかが分かる。
//@version=4
study("Line", overlay=true)
l = line.new(bar_index, low, bar_index[10], low[10], style=line.style_arrow_left, width=3 )
if(low>low[10])
line.set_color(l,color.blue)
else
line.set_color(l,color.red)
line.delete(l[1])
上りで青、下りで赤にするだけのコード
set
がある多いので列挙しないが、こちらから公式のドキュメントを参照。
下にスクロールしていくと全てのset
に関する説明がある。
line
はlabel
と比べるとオプションが少なく楽である。
個人的にこれを使ってレジスタンス等を判定する手法は持ち合わせていないが、かなり便利そうなので色々試してみてほしい。