Pine バージョン3 移行ガイド

From TradingView Wiki
Jump to: navigation, search
Language: English  • 日本語 • 한국어 • Русский

このドキュメントは、Pineスクリプトのコードを @version=2 から @version=3 に移行するためのヒントです。

security 関数のデフォルト動作が変更されました

こちらのシンブルな 'security' 関数の使用例を見てみます。イントラデイチャートにこのインジケーターを適用します。

// Add this indicator on an intraday (e.g. '30' minutes) chart
//@version=2
study("My Script", overlay=true)
s = security(tickerid, 'D', high, false)
plot(s)

このインジケーターは過去のバーに基づいて計算され、過去バーでは未来のセッション内の高値を先読みして表示します。すべてのセッションの最初のバーはその日の高値を描画します。これは分析には有益である場合がありますが、ストラテジーのバックテストでは機能しません。

私達はこの点に取り組み Pine v3 で変更しました。//@version=3 を指定してコンパイルすると、全く異なった形で描画されます。

V3.png

security 関数に5番目パラメーター、lookahead を追加しています。そのパラメーターの設定で古い動作は引き続き利用可能です。

このパラメーターは2つの異なる値の形式を取ります。ひとつは barmerge.lookahead_off で、これは Pine v3 のデフォルト値です。もうひとつは barmerge.lookahead_on で、こちらは Pine v2 のデフォルト値です。

自己参照変数は削除されました

自己参照変数を含む Pine version = 2 のコード

//@version=2
//...
s = nz(s[1]) + close

このコードを Pine v3 でコンパイルすると Undeclared identifier 's' のエラーが発生します。次のように書き直します。

//@version=3
//...
s = 0.0
s := nz(s[1]) + close

s は可変変数で3行目で初期化されています。3行目で初期値はPineトランスレーターに変数の型の情報を渡しています。この例では float(浮動小数点数型)です。

場合によっては、s の様な可変変数を na値で初期化することができます。しかし複雑なケースではうまくいかないでしょう。

前方参照変数は削除されました

//@version=2
//...
d = nz(f[1])
e = d + 1
f = e + close

この例では、f は前方参照変数です。なぜならば宣言され、初期化される前に、3行目で参照されているからです。Pine v3では、Undeclared identifier 'f' のエラーが表示されます。Pine v3 ではこの例を次のように書き直します。

//@version=3
//...
f = 0.0
d = nz(f[1])
e = d + 1
f := e + close

security 式での可変変数の問題を解決

スクリプトを v3 に移行した時、自己参照変数や前方参照変数を削除した後に、Pineトランスレーターが Cannot use mutable variable as an argument for security function! のエラーを表示することがあります。

//@version=3
//...
s = 0.0
s := nz(s[1]) + close
t = security(tickerid, period, s)

この制限は、可変変数が Pine、具体的には Pine v2で導入されたために存在します。こちらも同様に解決できます。可変変数のコードを関数で包みます。

//@version=3
//...
calcS() =>
    s = 0.0
    s := nz(s[1]) + close
t = security(tickerid, period, calcS())

論理値の数値演算ができなくなりました

Pineスクリプト v2では、論理型 (bool) を数値型に暗黙的に変換するルールがありました。Pine v3ではこれは禁じられています。代わりに数値型から論理型への変換があります(zero や 'na'値は false、そのたすべての数字は true)。

例。このコードは、Pine v2では正常にコンパイルされました。

//@version=2
study("My Script")
s = close >= open
s1 = close[1] >= open[1]
s2 = close[2] >= open[2]
sum = s + s1 + s2
col = sum == 1 ? white : sum == 2 ? blue : sum == 3 ? red : na
bgcolor(col)

変数 ss1s2 は論理型 (boolean) です。6行目で、変数 sum にこれら3つの変数の合計を格納しています。しかし sum は数値であり論理値を加算できません。その為、論理値は暗黙的に数値に変換され (true値は 1.0 に、false は 0.0 に) 、それらは加算されています。

しかしこの方法ではより複雑なスクリプトで意図しないエラーを導きます。ですから暗黙的な論理値の数値への変換は利用できなくなりました。

Pine v3 でこの例をコンパイルしようとすると、Cannot call `operator +` with arguments (series__bool, series__bool); <...> のエラーになります。これは加算演算子は論理値で利用できないことを意味します。この例を Pine v3 で動作させる為には次のように修正します。

//@version=3
study("My Script")
bton(b) =>
    b ? 1 : 0
s = close >= open
s1 = close[1] >= open[1]
s2 = close[2] >= open[2]
sum = bton(s) + bton(s1) + bton(s2)
col = sum == 1 ? white : sum == 2 ? blue : sum == 3 ? red : na
bgcolor(col)

関数 bton ('boolean-to-number' の省略名) は、必要に応じて、論理値を数値に明示的に「変換」します。


関連記事: Pineスクリプトリリースノート, メニューに戻る Pineスクリプトチュートリアル