{{tag>pine pine基礎}}
====== 【Pine 基礎】スクリプト構造 ======
{{INLINETOC}}
===== 構造 =====
Pine スクリプトの一般的な構造は下記の通り。\\
おおきく 3 つに区分できる。
<バージョン>
<宣言文>
<コード>
===== バージョン =====
下のコードは、スクリプトが Pine スクリプトのどのバージョンで書かれているかをコンパイラに伝える。([[:tradingview:pine:script_structure#コンパイラアノテーション|コンパイラアノテーション]])
//@version=5
* バージョンは 1 から 5 まである。
* 省略した場合は 1 になる。マニュアルでは最新バージョンの使用を強く推奨している。
* コードのどこに記述しても構わないが、先頭行に記述することが推奨されている。
* 最新バージョンにおける重要な変更は [[https://www.tradingview.com/pine-script-docs/en/v5/Release_notes.html|リリースノート]] に掲載される。
===== 宣言文 =====
スクリプトは必ず一つの宣言文を含まなければならない。宣言文は 3 種類ある。
* indicator()
* strategy()
* library()
indicator() を宣言した例
//@version=5
indicator("My Script")
plot(close)
宣言文の役割:
* スクリプトの種類を特定し、スクリプト内で許可されるコンテンツや、スクリプトの使用方法、実行方法を決定する。
* スクリプトの主要なプロパティを設定する。
* スクリプトの名前
* チャートに追加したときの表示位置
* 表示する値の精度と形式
* ランタイムを制御する設定値 (チャートに表示する描画オブジェクトの最大数など) など
各スクリプトには、それぞれ異なる要件がある。
* インジケーター:少なくとも 1 つのチャート上に出力を生成する関数呼び出し(''plot()''、 ''plotshape()''、''barcolor()''、''line.new()'' など)が含まれていなければならない。
* ストラテジー:少なくとも 1 つの ''strategy.*()'' 関数の呼び出し(''strategy.entry()'' など)が含まれていなければならない。
* ライブラリ:少なくとも 1 つのエクスポート関数またはユーザー定義型が含まれていなければならない。
===== コード =====
スクリプトのアルゴリズムを書くところ
* 変数の宣言
* 変数の再割り当て
* 関数の宣言
* 組み込み関数呼び出し
* ユーザー定義関数呼び出し
* ライブラリー関数呼び出し
* if、for、while、switch、型構造。
===== コメント =====
ダブルスラッシュ(%%//%%)はコメント。\\
コメントは行のどこから始めても構わない。
//@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'' は折りたたみ可能なコード領域を作成する。
===== 参考 =====
* Pine Script® v5 User Manual [[https://www.tradingview.com/pine-script-docs/en/v5/language/Script_structure.html|Script structure]]