私たちはプログラミング言語の改良を続けていますが、皆様からのご要望にお応えすることが私たちの課題にもなっています。今回の投稿では、最近の改良の中でもきわめて重要なものをご紹介しています。どうかお見逃しなく。
平均足チャートでのバックテストがよりリアルに
平均足チャートでバックテストを実行した結果については、通常、信頼性が低いものになっていました。というのも、合成された値を使う平均足チャートの場合、ブローカーエミュレータは常にそのチャート上の合成価格を使って発注するからです。そこで「標準のOHLC値で約定」という機能を新たに追加して、この問題の軽減を図りました。この機能を使用すると、平均足チャート上で稼動するストラテジーは実際の市場価格で発注を行うため、リアルタイムでどのようにストラテジーが動作するかについて忠実なシミュレーションが可能になります。
ストラテジーを稼働させる際にこの機能を有効にするには、「プロパティ」タブで有効化を行います。デフォルトではこの機能はオフになっています。
ただし、これはストラテジーが平均足チャート上で実行される場合に限って変更されることにご注意ください。たとえば、練行足のような他の合成チャートタイプにおけるバックテストについては、この機能の設定にかかわりなく、合成チャート上の価格を使用した発注が引き続き行われることになります。
input.*()関数に表示パラメーターが新登場
新しく加えられた表示パラメーターを使用すると、スクリプト名の横にあるパラメーター表示の制御がより簡単になります。display.status_line、display.data_window、display.all、display.none の4つの引数が使用可能です。プラスまたはマイナスの記号を使用して引数を組み合わせることも可能です。また、使用する引数にかかわりなく、パラメーターの値は常にスクリプトの設定ダイアログの「パラメーター」タブに引き続き表示されます。
この表示パラメーターを使って、通常はステータスラインに表示されているパラメーターを非表示にしたり、通常は非表示になっているパラメーターの値(ブール値・色・日付)を表示することができます。また、データウィンドウのスクリプト名の横にパラメーターを表示することも可能です。この表示パラメーターを使用しなければ、パラメーターのデフォルト表示は変更されません。
//@version=5 indicator("RSI") rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line) rsiSourceInput = input.source(close, "Source", display=display.data_window) rsi = ta.rsi(rsiSourceInput, rsiLengthInput) plot(rsi, "RSI")
銘柄情報にアクセスする新たなビルドイン
syminfo の名前空間にビルドインが3つ追加されました: syminfo.sector、syminfo.industry、syminfo.countryです。現在のシンボルに関して詳細情報を示す文字列を返します。国の情報は ISO 3166-1 alpha-2 のフォーマットに従ってコードが提供されます。
ストラテジーで約定済の注文に対するアラートを無効化
注文を作成する関数で disable_alert = true を使用すると、ストラテジーの個々の注文についての通知を無効にできます。下記の例をご覧ください:
//@version=5 strategy("My strategy", overlay=true) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) if (longCondition) strategy.entry("Long", strategy.long, alert_message = "Go Long!") strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)
これは特定の注文をフィルタリングするのに役立つ機能で、ストラテジーの実行中に alert() 関数を使って通知やWebhookのカスタムメッセージを生成する場合に便利です。
ストラテジーにおける最大ドローダウンと最大可能利益の計算方法の変更
最大ドローダウンと最大可能利益の計算が改善され、取引の間に到達する可能性があった潜在的な資本値を考慮に入れるようになりました。これまではエントリーと決済ポイントでの資本値だけしか考慮されていなかったため、最大ドローダウンと最大可能利益の値が、あり得たかもしれない最大値に対応していない可能性がありました。この新しい計算方法については、ヘルプセンターの最大ドローダウンと最大可能利益の記事で説明されています。
varip修飾子をユーザー定義型でサポート
同一のバーでスクリプトが実行されても変数の値を保持可能にする varip 修飾子が、ユーザー定義型のフィールドにも適用できるようになりました。ただし、varip を使って定義されていないフィールドについては各バーでロールバックされるため、たとえその値を含むオブジェクトが varip を使用して作成されたとしても、同一のバーで複数回実行される間に割り当てられた値については保持されないことに注意してください。
例:
//@version=5 indicator("`varip` field") type TypeWithVaripField varip int varipCounter = 0 int counter = 0 varip TypeWithVaripField myCounter = TypeWithVaripField.new(0) // This field preserves values between script executions. myCounter.varipCounter := myCounter.varipCounter + 1 // This field does not because it wasn't declared using `varip`. myCounter.counter := myCounter.counter + 1 plot(myCounter.varipCounter, "myCounter.varipCounter") plot(myCounter.counter, "myCounter.counter")
通貨換算レートのリクエスト
ある通貨から他の通貨への換算レートを取得できるように新しく request.currency_rate() 関数を導入しました。この関数には2つのパラメーターが必要です: fromとtoの2つで、その各々は ISO 4217 に従った3文字の文字列コードになります。
この関数を使用して、ある銘柄の価格を英ポンド (GBP) に変換する例です:
//@version=5 indicator("Close in British Pounds") rate = request.currency_rate(syminfo.currency, "GBP") plot(close * rate)
配列の名前空間に新しい関数を追加
配列に使用する関数を新しく4つ追加しました:
- array.first() — 配列の最初の要素を返します。
- array.last() — 配列の最後の要素を返します。
- array.every() — 配列のすべての要素が true であれば true を返し、そうでない場合は、false を返します。
- array.some() — 配列の中で少なくとも1つの要素が true であれば true を返し、そうでない場合は、false を返します。
Pine Script® の新機能についての最新情報については、ユーザーマニュアルのリリースノートでご覧になれます。 PineCodersアカウントでは、Telegramの Squawk Box、Twitterアカウント、そしてTradingViewのPineスクリプト® Q&A 公開チャットからも最新情報を発信しています。
ご要望が多かった機能だけに、今回の改良は皆様のお役に立つと信じております。引き続き、フィードバックやご提案をお寄せください。私たちは皆様のためにTradingViewを構築しています。ご意見をいつでもお待ちしております。
チーム・トレーディングビュー