06 25, 2019

Pineスクリプトv4をご紹介します!

Pineスクリプトプログラミング言語の新しいバージョン v4 が登場しました!Pine v4 には数多くの新機能が含まれています。言語構造を改善して数多くの課題が修正されました。そして待望の極めて重要な機能である「描画オブジェクト」がサポートされています。

このブログ記事では新機能について簡単にご紹介します。より詳細な内容については、Pine v4のドキュメントリファレンスマニュアルをご参照ください。直接描画オブジェクトの説明の章を開くこともできます。

ラベルオブジェクトの描画

label.new関数を使用して、チャート上に任意のテキストを記載したラベルを描画することができます。こちらは現在のバーの終値を記載したラベルを描画するスクリプトの例です。

//@version=4
study("Last Bar Price", overlay=true)

l = label.new(bar_index, na, 'last price is '+tostring(close), 
  color=close >= open ? color.green : color.red, 
  textcolor=color.white,
  style=label.style_labeldown, yloc=yloc.abovebar)

label.delete(l[1])


一連のlabel.*関数を利用して、作成後もラベルオブジェクトの編集削除が可能です。ラベルを使用したより複雑なスクリプトの例がこちらにあります — Pivot Points High/Low(ピボットポイント高値/安値)

ラインオブジェクトの描画

line.new関数を使用して、チャート上にラインを描画することができます。こちらは10本前のヒストリカルバーと現在のバーの高値を結ぶラインを描画する簡単なスクリプトの例です。

//@version=4
study("Line", overlay=true)
l = line.new(bar_index, high, bar_index[10], low[10], width = 4)
line.delete(l[1])


line.*系列の適切な関数を利用してラインオブジェクトの編集削除を行う事ができます。こちらはラインオブジェクトを利用したより複雑なスクリプトの例です — Zig Zag(ジグザグ).

現在の所、チャート上でスクリプト毎に表示できるのは、単一種類(ラベルまたはライン)の合計でおよそ50から55の描画です。これはサーバーの過剰な使用を防ぐ為に設計されている意図的な制限です。

この新しいラインとラベルデータのタイプは、Pineスクリプトの機能を大幅に強化し、様々なインジケーターの複雑なロジックの実装を可能とします。ドキュメントで例をご確認頂けます。

系列文字列

系列文字列のデータ型変数をご利用頂けるようになりました。こちらはラベルで系列文字列を使用する例です。

//@version=4
study("Series string", overlay = true)
draw_label(title) =>
    label.new(bar_index, high, text=title)
t = close >= open ? "green" : "red"
draw_label(t)

Varキーワード

通常の方法で宣言された変数はスクリプトが計算される度に再初期化されます。この場合スクリプトで変数の前の値を明示的に伝える事が要求されました。varキーワードは変数を宣言してそれを一度だけ初期化します。こちらの方法では、初期化の際や最後の代入の際にバーの間で変数の値は自動的に保存されます。こちらはチャート上の陽線の数をカウントするスクリプトの例です。

//@version=4
study("My Script")
var s = 0.0
if close >= open
    s := s + 1
plot(s)

close >= openの条件が合致する度に、s変数の値は一つずつ増加します。初期化の値は任意の算術式にすることができます。

varキーワードで変数を宣言する構文では以下のコードを使わずに済みます: s := nz(s[1], s)var修飾子を使った変数の宣言は描画を処理する時にとても便利です。

ビルトイン定数、変数、関数の名前変更について

Pineスクリプトv4では、次の組み込み定数、変数、関数の名前が変更されました。

  1. Color定数(例.red)はcolor.*の名前空間に移動されました(例.color.red)。
  2. color関数はcolor.newにリネームされています。
  3. inputの定数タイプ(例.integer)はinput.*の名前空間に移動されました(例.input.integer)。
  4. plotのスタイル定数(例.histogram)はplot.style_*の名前空間に移動されました(例.plot.style_histogram)。
  5. hline関数のスタイル定数(例.dotted)はhline.style_*の名前空間に移動されました(例.hline.style_dotted)。
  6. 曜日を表す定数(例.sunday)はdayofweek.*の名前空間に移動されました(例.dayofweek.sunday)。
  7. 現在のチャートのタイムフレームの変数(例.period, isintraday)は、timeframe.*の名前空間に移動されました(例.timeframe.period, timeframe.isintraday)。
  8. interval変数は、timeframe.multiplierにリネームされました。
  9. tickertickerid変数は、それぞれsyminfo.tickersyminfo.tickeridにリネームされました。
  10. バーのインデックス値を示すn変数は、bar_indexにリネームされました。

上記すべての名前変更の理由は、標準の言語ツールを構造化してコードをより扱いやすくする為です。新しい名前は、標準のプレフィックスの割当に従ってグループ化されています。例えば、Pineエディタで “color” と入力して、「Ctrl + Space」を押すことで、すべての利用可能なcolor定数の一覧を確認することができます。

明示的な変数タイプの宣言

Pineスクリプトv4では、変数の宣言時に未知のデータ型を持つ変数を作成することはできなくなりました(na valueをご参照ください)。これは、na値で初期化された後に変数の型が変更される事で発生する多くの問題を回避するために行われました。今後はna値の変数を宣言するときには、キーワードやタイプ関数(例.float)を使用してそれらの型を明示的に指定する必要があります。

//@version=4
study("NA", overlay=true)
float a = na
a := if close >= open
    high
else
    low
plot(a)

新しいPineスクリプトv4をお試しください!一部のユーザーは既に新機能をテストして、描画を使用した素晴しいスクリプトをコーディングしています。

例えば、Ricardo Santosがコーディングした一連のスクリプトを下記でご確認いただけます。

Joris Duyckは、Trendlinesのスクリプトをコーディングして、ラインの描画の可能性について示しています。

これらの例があなたにインスパイアを与える事を願っています!ご質問や問題点の議論、フィードバックをチャットにお寄せください。ベータテストを行って頂き多くの助言を寄せて頂いたPinescriptersのコミュニティメンバー全員に感謝を申し上げます!コード関連のご質問については、Stack Overflowのページでお尋ね頂く事も可能です。