(1)概要
(2)plot関数
(3)change関数・iff関数
(4)input関数
(5)security関数、相関係数インジケータ
(6)fill関数
(7)bgcolor関数
(8)複数行を一括でコメントアウトできる?
(9)line.new関数・line.set関数、ピボット・インジケータ
(10)関数宣言(カスタム関数)、ピボット・ハイ・ロー・インジケータ
(11)ジグザグ(ZigZag)インジケータ
(12)平均足バー・マルチタイムフレーム(MTF)
(13)ストラテジー・バックテストの概要
(14)ストラテジー・サンプル「EMAクロス+固定TP/SL」
(15)ストラテジーの「最適化」をめぐるTradingViewとMetaTraderの違い
(16)Security関数のgapsとlookaheadとは?
(17)アラート条件の設定:alertcondition
はじめに
今回は、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)で設定したままなので、右側への延長線は有りです。