Seriesとは
はじめに
PineScriptを使用する上で、最も重要なのがSeriesの理解です。
Seriesは若干クセがあるので、しっかりと理解する必要があります。
Pineスクリプトの型システム
Pineスクリプトには以下の基本的な9つの型が存在します。
- int
- float
- bool
- color
- string
- line
- label
- plot
- hline
これらの型はいくつかの形式で存在します。形式には5種類あります。
- literal
- const
- input
- simple
- series
型と形式は合わせて参照されます。
例えばliteral bool型、input bool型…のようにコンパイラによって識別されます。
また、以下のような型も存在します。
- array
- void
- na (not available)
- tuple type
形式
Literal
Literalは固定された値を表すための特別な表記法です。
Literalは常に以下のどれかの型形式になります。
- literal float (3.14, 6.02E-23, 3e8)
- literal int (42)
- literal bool (true, false)
- literal string (“A text literal”)
- literal color (#FF55C6)
ビルトインのopen,high,low,…などはLiterarlではありません。
これらはserires formです。
Const
Const形式の値は次の特徴があります。
- PineScript実行中に変更されない
- コンパイル時に確定されるか計算される
例えば
c1 = 0
c2 = c1 + 1
c3 = c1 + 1
if open > close
c3 := 0
c1はconst intです。
理由はliteral intによって初期化されるからです。c2もconst intで、const intだけの計算で初期化されるからです。c3はseries intで、理由は実行中に変更されるからです。
Input
Inputは以下の特徴があります。
- PineScript実行中に変更されない
- コンパイル時には未確定
- input関数に基づいている
例えば
p = input(10, title="Period")
pはinput integerです。
Simple
Simpleは以下の特徴があります。
- PineScript実行中に変更されない
- コンパイル時に未確定
この値は、チャートのシンボルの情報に基づいています。
例えば、ビルトイン変数のsyminfo.mintickはsimple floatです。simpleは省略されることもあるので、単にfloatと呼ばれることもあります。
Series
Seriesは以下の特徴があります。
- PineScript実行中に変更される
- メインチャートのシンボルの各バーに関連付けられた履歴の値を保存します
[]演算子を使用してアクセスできる- seriesの最後(つまり最新のバー)に関連付けられている値のみが読み書き両方できる
seriesはPineScriptで最も一般的な形式です。
ビルトインのseries変数は例えば、open、high、low、close、volume、timeなどです。
これらのseriesのサイズは現在のティッカーの時間枠で使用可能なバーの数と同じです。
Seriesには数値かna(not avairable:使用不可)が含まれる場合があります。
例えば
a = open + close // 2つのSeriesの加算
b = high / 2 // integer literal const による、Seriesの除算
c = close[1] // 前のcloseの値の参照
参考
ボックス描画機能
はじめに PineScriptにボックス描画機能が追加されました。 この機能ではチャート上に長方形を簡単に書くことができます。 サンプルを踏まえて、PineScriptでの使い方を見ていきます。 サンプル //@version=4 study("Box Example", overlay=true) c_green = color.rgb(33, 150, 243, 80) ll = lowest(10) hh = highest(10) b1 = box(na) if barstate.islast b1 := box.new(bar_index[9], hh, bar_index, ll, bgcolor=c_green, border_style=line.style_dashed) box.delete(b1[1]) //@version=4 バージョン4のPineScriptを使用しています。 study("Box Example", overlay=true) Box Exampleという名前でインジケータを作成します。 overlay=trueでチャートを重ねて表示します。 c_green = color.rgb(33, 150, 243, 80) color.rgb(red, green, blue, transp)の文法で色を定義します。 各色は0~255,transpは0(不透明)~100(不可視)です。 ll = lowest(10) lowestは指定された過去バーの範囲での最安値を意味します。 この場合は過去10本のバーの中での最安値のことです。 hh = highest(10) lowestと逆で過去10本のバーの中で最高値を意味します。 b1 = box(na) ifが別のスコープを作成するので、再代入する元になるb1変数を先に空で定義しておきます。 if barstate.islast barstate....
ZigZag解説
はじめに ZigZagのインジケーターを見つけたので、自分で作れるレベルまで理解を進めたいと思います。 PineScript //@version=3 study("ZigZag!",overlay=true) use_current_res=input(true,title="Use Current Resolution?") length = input(title="Length", type=integer, defval=10) phase = input(title="Phase", type=integer, defval=50) power = input(title="Power", type=integer, defval=2) line_widht = input(title="Line Width", type=integer, defval=1) do_col = input(true,title="color up and down moves?") //UseFixed = input(title="Use Fixed Timeframes?", type=bool, defval=false) htf = input(title="Higher Timeframe", defval="005", options=["M", "W", "3D", "D", "720", "360", "240", "180", "120", "060", "030", "015", "010", "005", "003", "001"]) o = security(tickerid, htf, open) h = security(tickerid, htf, high) l = security(tickerid, htf, low) c = security(tickerid, htf, close) src = use_current_res ?...