スポンサーリンク

Pine Script(Pineスクリプト)入門解説(9)line.new関数・line.set関数、ピボット・インジケータ

はじめに

今回は、Tradingviewのユーザーマニュアルにあるピボット・インジケータのサンプルを採り上げて、lineの描画に関連する関数「Line.new関数」「line.set関数」「line.get関数」などを使えるようにしたいと思います。

lineとlabelの描画は、Pineスクリプトのバージョン4で新規に追加された機能です。

サンプルスクリプトとして、Tradingviewのユーザーマニュアルの中のピボット・インジケータを採り上げます。

サンプルのピボット・インジケータ

今回のサンプルのピボット・インジケータを表示させた結果は、以下の通りです。1時間足チャートにデイリーピボットを表示しています。

ピボット・インジケータのスクリプトの説明

今回のサンプルのピボット・インジケータのスクリプトは以下の通りです。
説明用に、(A)から(K)までの英字を注釈で加えています。

//@version=4
study("Pivot Points Standard", overlay=true)
higherTF = input("D", type=input.resolution) //-----(A)
prevCloseHTF = security(syminfo.tickerid, higherTF, close[1], lookahead=true)//-----(B)
prevOpenHTF = security(syminfo.tickerid, higherTF, open[1], lookahead=true)
prevHighHTF = security(syminfo.tickerid, higherTF, high[1], lookahead=true)
prevLowHTF = security(syminfo.tickerid, higherTF, low[1], lookahead=true)

pLevel = (prevHighHTF + prevLowHTF + prevCloseHTF) / 3//-----(C)
r1Level = pLevel * 2 - prevLowHTF
s1Level = pLevel * 2 - prevHighHTF

var line r1Line = na//-----(D)
var line pLine = na
var line s1Line = na

if pLevel[1] != pLevel//-----(E)
    line.set_x2(r1Line, bar_index)//-----(F)
    line.set_x2(pLine, bar_index)
    line.set_x2(s1Line, bar_index)
    line.set_extend(r1Line, extend.none)//-----(G)
    line.set_extend(pLine, extend.none)
    line.set_extend(s1Line, extend.none)
    r1Line := line.new(bar_index, r1Level, bar_index, r1Level, extend=extend.right)//--(H)
    pLine := line.new(bar_index, pLevel, bar_index, pLevel, width=3, extend=extend.right)
    s1Line := line.new(bar_index, s1Level, bar_index, s1Level, extend=extend.right)
    label.new(bar_index, r1Level, "R1", style=label.style_none)//-----(I)
    label.new(bar_index, pLevel, "P", style=label.style_none)
    label.new(bar_index, s1Level, "S1", style=label.style_none)

if not na(pLine) and line.get_x2(pLine) != bar_index//-----(J)
    line.set_x2(r1Line, bar_index)//-----(K)
    line.set_x2(pLine, bar_index)
    line.set_x2(s1Line, bar_index)

 

(A) higherTF = input(“D”, type=input.resolution)
「input.resolution」は、input関数の時間足の入力タイプの名前付き定数です。これによってピボットの対象の時間足(1日、1週、1月など)をプルダウンで選択できます。デフォルトを1日(デイリーピボット)で設定しています。

(B) prevCloseHTF = security(syminfo.tickerid, higherTF, close[1], lookahead=true)
security関数の引数は、security(symbol, resolution, expression, gaps, lookahead)
「resolution」は時間足、「close[1]」はここでは前日の終値です。lookahead=trueはデータの先読み有り、という意味です。(lookaheadについては、別の記事で詳しくご説明したいと思います。)

(C) pLevel = (prevHighHTF + prevLowHTF + prevCloseHTF) / 3
ピボット(クラシック・ピボット)の計算式は、以下の通りです。
ピボットポイント PP = ( C + H + L ) / 3
S1 = PP – ( H – PP )
R1 = PP + ( PP – L )
S2 = PP – ( H – L )
R2 = PP + ( H – L )
S3 = S1 – ( H – L )
R3 = R1 + ( H – L )

(D) var line r1Line = na
ラインの変数を変数名「r1line」として設定し、初期値をna(値無し。「null」と同じ意味です。)で設定します。

(E) if pLevel[1] != pLevel

「前の足のピボットの値と、現在の足のピボットの値が異なるとき」、すなわち、(デフォルトのデイリーピボットで言えば)日足より短い時間足チャートを表示しているときの日が変わったタイミングの足、という意味です。


(F) line.set_x2(r1Line, bar_index)

変数名「r1Line」のラインの終点を、日が変わったタイミングの足に設定します。

(G) line.set_extend(r1Line, extend.none)
変数名「r1Line」のラインの描画の延長を設定します。extend=extend.none の場合、始点 (x1, y1) から終点 (x2, y2) までを描画して、延長は無しという意味です。(extendが extend.right または extend.left の場合には、それぞれ右側、左側の延長線を描画します。)

(F)と(G)によって、日足より短い時間足チャートの、日が変わったタイミングの足で、(前日分の)デイリーピボットラインの描画の終点をこの時点とする(右側への延長線はこれ以上はなし)と設定します。

(H) r1Line := line.new(bar_index, r1Level, bar_index, r1Level, extend=extend.right)
変数名「r1Line」のラインへの代入は、2回目以降の代入では「=」ではなく、「:=」を使います。
変数名「r1Line」のラインへの代入として、始点が(x1:現在の足、y1:r1revel)と終点(x1:現在の足、y1:r1revel)、右に延長あり、を設定します。
line.new関数の引数:line.new(x1, y1, x2, y2, xloc, extend, color, style, width)

さらに本日のデイリーピボットを、日が変わったタイミングのこの足から引き始めます。右への延長線は有りです。

(I) label.new(bar_index, r1Level, “R1”, style=label.style_none)
ラベルを、バーインデックスのr1Levelの位置に設定します。
label.new(x, y, text, xloc, yloc, color, style, textcolor, size, textalign, tooltip)

日が変わったタイミングのこの足で、ピボットのラベルを描画します。

(J) if not na(pLine) and line.get_x2(pLine) != bar_index
(K) line.set_x2(r1Line, bar_index)

「変数名pLineがNullでなく、且つ変数名pLineのラインの終点の足が、現在の足と異なるとき」に、このラインの終点を現在の足に設定します。

日が変わるタイミングの足以外の足について、ラインの終点を現在の足に設定更新していきます。延長線の設定は、(H)で設定したままなので、右側への延長線は有りです。

タイトルとURLをコピーしました