Little Bird Trading

Pine Scriptのインジケーターとストラテジー:違いと使い分け

6分で読めます · 更新日

TradingViewでは、インジケーターとストラテジーはPineエディター上でほとんど同じに見えます。インジケーターはチャートに描画します。ストラテジーは売買をシミュレーションし、その取引でいくら稼げたかを報告します。この2つを混同することが、過去データでは素晴らしく見えるスクリプトが実運用で期待外れになる最も多い原因です。このガイドでは、結果を左右する違いと、3つ目のスクリプトタイプであるライブラリを解説します。

インジケーター、ストラテジー、ライブラリ:それぞれの用途

  • インジケーター(indicator()):計算して描画します。水準、plotshape()で描くシグナル、ダッシュボード、相場の方向感、alertcondition()によるアラートに使います。
  • ストラテジー(strategy()):インジケーターが描けるものすべてに加え、strategy.entry、strategy.exit、strategy.closeによる模擬注文が使えます。TradingViewがその注文を実行し、ストラテジーテスターに取引統計を表示します。
  • ライブラリ(library()):再利用できる関数のセットで、公開してから他のスクリプトにimportして使います。ライブラリ単体をチャートに追加することはできません。

1つのスクリプトが宣言できるのは3つのうち1つだけなので、1つのスクリプトをインジケーターとストラテジーの両方にすることはできません。よくある構成は、共通ロジックを持つライブラリ、チャートとアラート用のインジケーター、テスト用のストラテジーの組み合わせです。

違いを一行で

Pine scriptの一行目で、そのスクリプトの種類が決まります。indicator()で始まるスクリプトができるのは計算と描画だけで、ライン、色、ラベル、塗りつぶしを扱います。ポジション、約定価格、損益という概念はありません。strategy()で始まるスクリプトには注文シミュレーションのエンジンが加わります。strategy.entryやstrategy.exitなどの関数を呼び出せ、TradingViewはその注文を過去のバーに当てはめてストラテジーテスターのレポートを作ります。純利益、最大ドローダウン、勝率、プロフィットファクター、シミュレーション上のトレード一覧です。

つまり区別はこうです。インジケーターは状況を描写し、ストラテジーはその状況でいくら稼げたはずかを主張する。後者の主張は前者よりはるかに重いものです。注文をシミュレーションした瞬間に、その注文がいつ、いくらで約定したかについて、いくつもの前提を背負うことになるからです。

バックテストエンジンが黙って置いている前提

ストラテジーの損益曲線の信頼性は、その下にある約定の前提で決まります。損害の大半は4つのデフォルト設定から生じます。

  • バー確定時の評価。デフォルトでは、テスターはバーが確定した時点でロジックを評価します。条件がそのバー自身の高値、安値、終値を参照していると、過去の「約定」は、実際のトレードではバー確定後まで知り得なかった情報を使っている可能性があります。
  • 次のバーの始値での約定。シグナルで出した成行注文は、シミュレーション上は次のバーの始値で約定します。動きの速い寄り付きでは、その価格が実際の約定価格から数ティック、あるいは数ポイント離れていることがあります。
  • コストゼロ。strategy()の呼び出しで手数料とスリッページをゼロのままにすると、シミュレーション上のトレードはすべて無料になります。実際のトレードでは毎回手数料とスリッページがかかります。
  • サンプル数。テスターは、わずか12回のトレードから作った美しい曲線でも平然と表示します。12連勝は、エッジの衣装を着たノイズです。

計算例

あるストラテジーが、コストをゼロのままES先物で40回のトレードで+$4200を示したとします。往復手数料として約$5を加えます。個人向けの先物手数料はブローカーによって大きく違うので、自分の数字を使ってください。さらに片道1ティックのスリッページを加えます。ESの1ティックは0.25ポイントで$12.50に相当するので、往復1ティックずつで$25です。1トレードあたり約$30のコストになり、40回のトレードで約$1200、見出しの+$4200は~$3000近くまで下がります。しかもこれは控えめな見積もりです。エントリーが荒れた寄り付きに集中すれば、実際のスリッページは1ティックより大きくなり、差はさらに広がります。同じロジックのインジケーター版には、こうしたコストは一切現れません。インジケーターはそもそも約定を主張しないからです。本物のエッジと過剰に当てはめたエッジを見分ける方法は、過剰最適化されたトレードシステムの見抜き方を参照してください。

シグナル:インジケーターではplotshape、ストラテジーでは注文

インジケーターは、plotshape()やplotchar()でシグナルを示します。条件が成立したバーに三角形やラベルが表示されます。実際には何も買わないので、インジケーターには取引統計がありません。ストラテジーは同じ条件をstrategy.entry()で注文に変え、ストラテジーテスターが純利益、勝率、ドローダウン、全取引リストを報告します。シグナルの精度を測るには、条件をストラテジーに移し、現実的なコストを加えて、取引リストを確認してください。

シグナルのテスト:終値ベースとバー内ベース

デフォルトでは、ストラテジーは1本のバーにつき1回、終値で計算し、成行注文は次のバーの始値で約定します。この動作を変える設定が3つあります。

  • process_orders_on_close = trueは、シグナルが出たバーの終値で注文を約定させます。
  • calc_on_every_tick = trueは、リアルタイムのティックごとに再計算します。過去データには確定したバーしかないため、リアルタイムと過去の結果が異なる場合があります。
  • use_bar_magnifier = trueは、ストップとターゲットが1本のバーの中に両方ある場合に、どちらの価格が先に付いたかを下位足のデータで判定します。

バーの終値で確定したシグナルが、バックテストと実運用の結果を最も近づけます。

バー内シグナルにも使いどころはあります。価格がレベルを越えた瞬間に動く必要があるブレイクアウト戦略では、calc_on_every_tick をライブで使えます。ただし、バックテストではバー内でシグナルがどう動くかを確認できないため、まずペーパーアカウントでライブ版のフォワードテストを行うことが条件です。インジケーターでもアラートで同じ使い分けがあります。「Once Per Bar Close」は確定したバーを待ち、「Once Per Bar」はバー内で条件が最初に真になった時点で発火します。そのバーが後で逆の形で終わっても発火は取り消されません。アラート設定の詳細はPine Script FAQをご覧ください。

Pineスクリーナーで使えるスクリプトタイプは?

Pineスクリーナーが実行するのはインジケーターです。ストラテジーのセットアップでスクリーニングするには、その条件をインジケーターに入れ、絞り込みたい値をプロットしてください。

リペイントの本当の意味

「リペイント」という言葉は、後から見た値がリアルタイムで表示された値と違うスクリプト全般に使われがちですが、多くの場合は誤用です。正直な判定基準は一つの問いです。その判断は、同じ情報で、同じ瞬間に、リアルタイムで下せたか?バー確定時にだけ確定するシグナルは、確定まで待つよう求めているだけです。本当に誤解を招くのは、形成中のバー上に描かれたシグナルがバー確定時に動いてしまうケースや、上位足のデータを先読みで取得しているケースです。確定したバーでロジックを評価すれば、インジケーターを作る場合もストラテジーを作る場合も、バックテストと実際の体験が正直に一致します。

トレードプランとの関係

トレードプランは、事前に決めた固定の水準を渡すことで、リペイントの問題を意図的に避けています。毎日の水準、つまりES, SPY, NQとQQQの水準は前日の大引け後に計算され、取引セッション中は動きません。リペイントするものは何もありません。各水準は米東部時間9:30より前に決まり、そのまま動きません。それらのラインを描くMyLinedChartはインジケーターと同じように動作します。水準を描画するだけで何もシミュレーションしないので、上で述べた約定や手数料の前提は一切含まれません。公開された水準が自分のストラテジーの示す内容と食い違うなら、その食い違い自体が情報であり、多くの場合、答えは待つことです。

自分の水準からストラテジーを作る

ほとんどのストラテジーは、トレーダーが手作業で引いた価格(サポート、レジスタンス、ピボット)を軸に売買します。MyLinedChartは、チャート上のすべてのライン、水準、メモ、インジケーターをJSON、CSV、XLSX形式で書き出します。そのファイルをChatGPT、Claude、または自作のコードに渡し、その価格どおりに売買するPine Scriptのストラテジーを頼んでください。エントリーとエグジットの方法は、あなたとAIが決めます。

どちらのスクリプトを信頼する前にも確認する短いチェックリスト

  • 自分がどちらを使っているかを把握する:indicator()は描画するだけ。strategy()は注文をシミュレーションし、ストラテジーテスターのレポートを作ります。
  • ストラテジーでは、利益の数字を一つでも見る前に、実際に取引する銘柄に合った現実的な手数料とスリッページを設定する。
  • 過去データとリアルタイムで判断の瞬間がそろうよう、確定したバーでロジックを確認する。
  • 意味のある数のトレードで結果を判断してください。
  • 参考用のオーバーレイ(公開された水準など)は、執行の判断とは切り分けておく。チャートは判断材料を与え、判断を下すのは書き出した自分のルールです。

このように使えば、インジケーターはレンズ、ストラテジーは仮説です。どちらも信頼する前に、実際の約定で検証してください。

関連記事

出典

教育目的のコンテンツです。投資助言ではありません。

教育目的のコンテンツです。投資助言ではありません。