Little Bird Trading

Pine Script のよくある質問:バックテストとアラート

4分で読めます · 更新日

これは、TradingViewでほぼ全員がつまずく2つのPineの疑問を、わかりやすく説明するFAQです。ストラテジーのバックテストが本番の取引の実感より良く見える理由と、アラートが予想と違う瞬間や価格で発動することがある理由です。どちらも根本の原因は同じで、判断した時点で実際に使えたデータと、足が確定した後に目に見えるものとのずれです。

インジケーター、ストラテジー、アラートの違いは何ですか?

インジケーター(indicator())は描画と計算だけを行い、線、色、ラベルを表示します。ストラテジー(strategy())は注文をシミュレーションします。strategy.entry/strategy.exitを呼び出し、過去の足で約定させ、純利益、ドローダウン、勝率を含むストラテジーテスターのレポートを作ります。アラートは、条件が真になったときにTradingViewが発する別の通知の層で、それ自体は何も取引しません。混乱が始まるのは、バックテストを約束のように読んだり、アラートを約定だと思い込んだりするときです。この3つはそれぞれ別の仕事です。さらに詳しい違いは、インジケーターとストラテジーの比較ガイドをご覧ください。

バックテストはすばらしいのに、本番の成績が一致しないのはなぜですか?

現実と比べてバックテストを膨らませる要因は4つあり、どれも直せます:

  • 足の確定時か足の途中かの前提。ストラテジーテスターは既定で、足の確定時にロジックを評価します。条件が、足の確定後にしかわからない形で現在の足の高値・安値やcloseを使っていると、過去の約定は本番のトレードでは持ち得なかった情報を使っていることになります。
  • 非現実的な価格での既定の約定。テスターの成行注文は次の足の始値で約定します。速い寄り付きでは、本番の価格は数ティックから数ポイント離れることがあります。
  • 手数料とスリッページを再現していない。strategy()でcommission_valueとslippageを0のままにすると、シミュレーション上のトレードはすべて摩擦ゼロです。現実的な値を入れてください。1ティックに満たないスリッページでも、「利益が出る」スキャルピングのシステムの多くがマイナスに転じます。(手数料はcommission_typeとcommission_valueで設定します。)
  • 小さすぎるサンプル。全部うまくいった12回のトレードでは、エッジと呼ぶにはサンプルが小さすぎます。どんな曲線も信じる前に、過剰最適化されたトレードシステムの見抜き方をご覧ください。

具体例:コストゼロでESの40回のトレードで+$4200を示すシステムも、往復$2.50の手数料と、エントリーとエグジットの各側に1ティックのスリッページを加えると、まったく違って見えます。ESの1ティックは0.25ポイント = $12.50なので、2ティックで$25.00。$2.50の手数料を足すと、1トレードあたり$27.50の摩擦になります。40回のトレードで約$1100となり、見出しの+$4200はおよそ+$3100に減ります。実際のスリッページが1ティックより大きくなる荒れた寄り付きにエントリーが集中すれば、さらに悪くなります。

リペイントとは何ですか?それはスクリプトが壊れているということですか?

必ずしもそうとは限りません。「リペイント」とは、スクリプトが過去の足に、リアルタイムで出していたのと異なる値を表示することの総称です。正直な確かめ方は簡単です。本番で、同じ情報、同じ瞬間に、その判断ができたか?足の確定後にだけ確定するシグナルは、きちんと役目を果たしています。確定を待ってから確認しているのです。問題になるのは、形成中の足にシグナルを表示し、足が確定すると動かしてしまうスクリプトや、先読みを有効にして上位時間軸のデータを取り込むスクリプトです。行動に移せるシグナルが欲しいなら、確定した足にだけ反応するbarstate.isconfirmed(足の確定)で評価してください。

アラートが遅れて、違う価格で、または2回発動したのはなぜですか?

  • 「Once Per Bar Close」と「Once Per Bar」の違い。形成中の足で発動するよう設定したアラートは、足の途中で条件が一瞬真になった時点で発動することがあり、その後に足が別の場所で確定すると「間違って」見えます。足の確定時の発動は遅くなりますが、確定したストラテジーが実際に判断する瞬間と一致します(ストラテジーはその後、次の足の始値で動きます)。
  • アラートの価格は、アラートが発動した瞬間のスナップショットです。証券会社はリアルタイムの市場価格で約定させ、その価格はアラートから注文までの数ミリ秒の間にも動きます。
  • 重複して発動する場合はたいてい、条件が複数のティックにわたって真のままで、アラートが毎ティック発動する設定になっています。1本の足につき1回発動する設定にしてください。

これはトレードプランの手法とどうつながりますか?

トレードプランは、固定された事前に計画済みの水準を提供することで、「シグナルがリペイントしたか?」という問題をまるごと避けています。寄り付き前にES、SPY、NQ、QQQに描かれる毎日の水準は前日の大引け後に計算され、取引セッション中は動かないので、リペイントするものがありません。各水準は東部時間午前9:30より前に決まり、そのまま動きません。MyLinedChartはその水準を描くだけで、注文のシミュレーションは一切しないので、上記のバックテストの約定に関する前提も一切持ち込みません。公開された水準が自分のアラートやストラテジーと食い違うなら、それを情報として扱ってください。答えは待つことである場合が多いです。用語についてはトレードプランの用語集をご覧ください。

Pineの結果を信じる前の実践チェックリスト

  • ロジックをbarstate.isconfirmedで確認し、バックテストと本番で判断の瞬間をそろえる。
  • 実際に取引する銘柄に合わせて、strategy()のcommission_type、commission_value、slippageに現実的な手数料とスリッページを設定する。
  • アラートの頻度は意図して選ぶ。確認には足の確定時、重複を避けるには1本の足につき1回。
  • 意味のある数のトレードで結果を判断してください。
  • 公開された水準のような参考の重ね表示と、執行の決定権は分けておく。チャートは判断の材料で、判断を下すのは書き出した自分のルールです。

関連記事

出典

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

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