Pine スクリプトの一般的な構造は下記の通り。
おおきく 3 つに区分できる。
<バージョン> <宣言文> <コード>
下のコードは、スクリプトが Pine スクリプトのどのバージョンで書かれているかをコンパイラに伝える。(コンパイラアノテーション)
//@version=5
スクリプトは必ず一つの宣言文を含まなければならない。宣言文は 3 種類ある。
indicator() を宣言した例
//@version=5 indicator("My Script") plot(close)
宣言文の役割:
各スクリプトには、それぞれ異なる要件がある。
plot()
、 plotshape()
、barcolor()
、line.new()
など)が含まれていなければならない。strategy.*()
関数の呼び出し(strategy.entry()
など)が含まれていなければならない。スクリプトのアルゴリズムを書くところ
ダブルスラッシュ(//)はコメント。
コメントは行のどこから始めても構わない。
//@version=5 indicator("") // これはコメントです。 a = close // これもコメントです。 plot(a)
なお、Pine エディタは ctrl + / でコメントアウト、コメントアウト解除ができる。
長い行は折り返しできる。折り返しは 4 の倍数以外の数のスペースを挿入して行う。
(4 の倍数のスペースはローカルスコープのインデントとして認識される)
a = open + high + low + close
折り返して記述
a = open + high + low + close
長い関数呼び出しは以下のようにできる。
plot(ta.correlation(src, ovr, length), color = color.new(color.purple, 40), style = plot.style_area, trackprice = true)
ユーザー定義関数宣言内のステートメントも折り返しできる。
updown(s) => isEqual = s == s[1] isGrowing = s > s[1] ud = 0 ud := isEqual ? 0 : isGrowing ? (nz(ud[1]) <= 0 ? 1 : nz(ud[1])+1) : (nz(ud[1]) >= 0 ? -1 : nz(ud[1])-1)
コンパイラアノテーションは、スクリプトに特別な指示を出すコメント。
//@version=
は、コンパイラが使用する Pine スクリプトのバージョンを指定する。//@description
は、library() 宣言文を使用するスクリプトの custom description を設定する。//@function
、//@param
、//@returns
は、関数宣言の上に置くと、ユーザー定義関数、そのパラメーター、その戻り値の custom description を追加する。//@type
と //@field
は、型宣言の上に置くと、ユーザー定義型とそのフィールドの custom description を追加する。//@variable
は、変数の宣言の上に置くと、その変数の custom description を追加する。//@strategy_alert_message
は、アラート作成ダイアログの “Message “フィールドの初期値を設定する。//#region
と //#endregion
は折りたたみ可能なコード領域を作成する。