【Pine Script】ラインオブジェクト(line)の使い方【Version 4】

June 12, 2020

先日に引き続きVer4で追加された線を引く機能 line を解説する。

pine_line

チャートに線を引きたい時

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])

image-20200611211921026

簡単。わかりやすい。

ここで覚えておくビルトイン変数(予めシステムで用意されている変数)は

  • 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])

にしてみよう。

image-20200611212630774

線は細くなってしまったが(widthのオプションを消したため)エラー無く実行できる。

line.newの引数の決まりは

line.new(始点のx, 始点のy, 終点のx, 終点のy) となっている。

xはバーの個数なのでbar_indexがそのまま使える。yは縦軸の価格を入れるのでlowcloseなどを入れれば良い。

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])

image-20200611212843981

消えないので線が複数残ってしまう。

これはこれで良いかもしれない。

消えてるんじゃ?

そう、左半分に線がない。

これは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.greencolor=color.redなどで表現するほかcolor=color(#E040FB)のように16新数のカラーコード表現でも良い。

線を無限に引きたい

先程までは始点と終点で線が終わってしまったが、この線を左右に延長してレジスタンスやサポートとして効いているか見たいときがある。

そんなときはextend=extend.both を指定する。片方だけでよければrightleftを指定する。

image-20200611214346346

注意:次はright(右)

image-20200611214504765

extend=extend.right にすると右側は消えたままで左側に線画伸びる模様。ちょっと変な印象。

線を矢印にしたい(形を変えたい)

トレンド方向などを矢印で表現したい事があるがそんなときはstyleを使う。

image-20200611214710106

style=line.style_arrow_left

これもleftなのに右側。

他にも

image-20200611214811644

style=line.style_dotted

image-20200611214850353

style=line.style_dashed

image-20200611214933129

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)

例えば上のようなコードにして日足チャートにセットすると

  • 日曜だけラインを描画
  • 下側に矢印が下がっているときは「赤」
  • 上側に矢印が登っているときは「青」

にすることができる。

image-20200611220346241

次のようにチャートのリプレイを使ってみるとリアルタイムにどんな感じでラインが出るのかが分かる。

//@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に関する説明がある。

さいごに

linelabelと比べるとオプションが少なく楽である。

個人的にこれを使ってレジスタンス等を判定する手法は持ち合わせていないが、かなり便利そうなので色々試してみてほしい。

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
プログラミングや仮想通貨のシステムトレードに関する情報を更新中!どんな情報を流しても詰まらないトイレ。