Pineスクリプトリリースノート

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

このページには、Pineスクリプトの注目すべき変更点についてのリリースノートが記載されています。

2017-05-17: コンパイル時定数

Pineスクリプトには、リテラル、非リテラル、シリアルの3種類の定数がありました。。そこにもうひとつ加わりました。しかしまず既存のものを見てみます。

input や color といった一部の関数では、特定の引数としてのみリテラルを受け取ることが可能です。私達はより便利になる様にコンパイル時に計算される新しいタイプの定数を加えました。それらはリテラルに加えて、他のリテラルや定数で使われる数式を含みます。

シリアル型が最も一般的であるのに対し、Pineスクリプトのリテラル (integer, float, boolean, string) はどれも最も具体的な型です。コンパイル時定数はリテラルと非リテラルタイプの間に位置します。引数としてリテラルを受け取るすべての関数は、コンパイル時定数も受け入れるようになりました。

2017-04-26: オプション付き input

いくつかの内蔵インジケーターには、複数のオプションを選択する設定があります。Pine Scriptでも同じことが可能になりました。

2017-04-17: すべてのビルトイン関数でのキーワード引数の構文

Pineスクリプトでは、アノテーション関数 (study, plot,…) とビルトイン関数 (sma, security, …) では呼び出し方が異なりました。アノテーション関数ではキーワード引数が利用可能でしたが、ビルトイン関数では利用できませんでした。

このアップデートですべてビルトイン関数でキーワード引数が利用できるようになりました。これは security 関数で gaps 引数を省略して、lookahead 引数を指定する場合に特に有効です。

security('TSLA', 'D', close, lookahead=barmerge.lookahead_off)

2017-03-20: Pine バージョン3

リペイントバックテスト の問題が度々報告されました。これらの問題は同一の問題ではありませんが、相互に関連した問題です。バージョン3の目的はこのバックテストの問題を解決することです。以下により詳細な解説があります。

リペイントの問題

Pineスクリプトのインジケーターやストラテジーで利用する過去データとリアルタイムデータには大きな違いがあります。重要な違いは、過去バーには高値、安値の間の価格変動の情報は含まれないという事です。わずかではありますがいくつかのPineスクリプト言語のツールは、この違いに影響されます。

  • security - 現在の時間足よりも大きな時間足のデータを要求する場合
  • ビルトイン変数 barstate.isrealtime, barstate.ishistory, barstate.islast, barstate.isnew を利用する場合
  • calc_on_every_tick=true でストラテジーを使用する場合
  • ビルトイン変数 timenow や n を利用する場合(過去とリアルタイムデーターの違いには関連しませんが、しばしばリペイントの問題が発生します).

このリペイントの問題は通常上記を利用した場合に発生します。インジケーターではリアルタイムデータが先に計算される為です。チャートをリロードすると、同じ期間ですが(変化した)過去データで再計算されます。結果インジケーターの表示は変わります。

このケースでは「リペイント」の動きはバグではありません。異なる計算メソッドを持つPine言語の特定ツールを適用した結果です。Pineスクリプトを使用する上でこの点を理解し、考慮する必要があります。

こちらはこのケースを示す基本的な例です。

//@version=2
study("My Script")
a = barstate.isrealtime or barstate.islast ? close : na
plot(a)

上記のスクリプトは過去データでは常に na を返します。過去データとリアルタイムデータの双方において最新のバーのみ描画されます。(F5キーを押して)チャートをリロードすると、現在の期間に応じて、過去データとリアルタイムを分ける境界線は移動します。

バックテストの問題

2つ目の問題は security 関数です。security 関数は、過去データを使用して計算する場合に「未来の」データを取得します。例えば過去データで security(tickerid, “D”, high) を実行すると、その日の最初の時間足のバーでその日の高値(未来の値)を示します。これによりストラテジーの不正なバックテストが作成されてしまいます。

//@version=2
strategy("Fake strategy", overlay=true)

r = input("D", type=resolution)
l = security(tickerid, r, low)
h = security(tickerid, r, high)

longCondition = low == l
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = high == h
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

しかしながら、この種の security 関数の動作は、インジケーターで用いられる時に有用であると考えています。例えば ChrisMoody は Pivotラインを描画する、3000超えのいいねがある人気のインジケーター CM_Pivot Points_M-W-D-4H-1H_Filtered でこの効果を用いています。

他にも Open Close Daily LineTime Frame SuperimposeGetSatisfactionのコメント といった例があります。その為私達は、明示的に指定されている場合に限っては、古い挙動を残すべきと判断しました。

デフォルトでは security関数は未来のデーターを戻しません。この動作は後方互換性を維持するために、Pineスクリプト v3 (//@version=3) からデフォルトで有効となります。

また新しい lookahead パラメーターとその2つの値も追加しました。barmerge.lookahead_offbarmerge.lookahead_on は、security 関数の新しい動作と古い動作を切り換える為に用いることができます。

このパラメーターについての詳細な解説は、Pineチュートリアルのsecurityの項目を確認して下さい。

型システムの変更

  • 自己参照変数と前方参照変数は削除されました
  • 論理値の数値演算ができなくなりました

詳細についてはPine バージョン3 移行ガイドを参照してください。


関連記事: Pine バージョン3 移行ガイド, メニューに戻る Pineスクリプトチュートリアル