WeCore
アルゴリズム取引

バックテストと実運用:実際の成績が食い違う理由を徹底解説

実運用の成績がバックテストと違う理由を解説。約定、スリッページ、手数料、レイテンシー、データ品質、先読みバイアス、相場環境の変化、そして事前の正しい検証方法まで紹介します。

WeCore·公開日 ·約5分で読めます

戦略を作ったことのあるトレーダーなら、ほぼ誰もが経験する瞬間があります。バックテストは素晴らしいのに、実運用を数週間続けるとまったく違う結果になる。これは必ずしも戦略が悪いという意味ではありません。バックテストは現実のモデルであり、どんなモデルにも前提があるということです。この記事では、ギャップの主な原因とそれを縮める方法を順に見ていきます。

バックテストが実際に測っているもの

バックテストは、戦略のルールを過去の価格データに当てはめ、そのとおりに取引していたら何が起きたかを計算するものです。たとえばTradingViewでは、ストラテジーテスターがPine Scriptで書かれた戦略に対してこれを行います。結果はあくまで推定であり、過去の記録ではありません。

問題は、バックテストがデータに含まれていることしか「知らない」点です。データが5分足なら、足の中で何が起きたかはわかりません。手数料を設定しなければ取引はタダだと仮定し、スリッページを設定しなければ、すべての注文が狙いどおりの価格でぴったり約定すると仮定します。こうした前提はどれも結果を上振れさせます。

約定とスリッページ

多くのトレーダーにとって、これがギャップの最大の原因です。

  • 成行注文は、判断した瞬間のチャート上の価格ではなく、次に利用可能な価格で約定します。雇用統計の発表のような荒れた場面では、その差が数ティックになることもあります。
  • 指値注文は価格を保証しますが、約定は保証しません。多くのバックテストは、価格がその水準に触れたら約定したと仮定します。実際には板の列の後ろにいて約定しないこともあり、それが往々にして最も良いトレードで起こります。
  • 逆指値注文は発動すると成行注文になるため、指定水準から大きく離れて約定することがあります。

仮の例を挙げます。ある戦略がMNQで年間400回取引するとします。各トレードでエントリーとエグジットにそれぞれ平均1ティックのスリッページが出れば、バックテストには現れなかった800ティックが年間で積み上がります。エッジの小さい戦略にとっては、それが損益の差のすべてになり得ます。詳しくはスリッページと執行コストをご覧ください。

手数料、取引所手数料、データ費用

先物の取引には必ずコストがかかります。ブローカー手数料、取引所や規制当局の手数料、場合によってはプラットフォーム利用料です。比較的取引頻度の高い戦略ほど影響を受けやすくなります。簡単な目安として、バックテストには想定よりやや高めの保守的なコストを設定しましょう。

レイテンシー

条件が満たされてから注文が取引所に届くまでには時間がかかります。足が確定し、アラートが送信され、webhookが受信・処理され、注文がブローカーへ送られます。通常は数秒以内ですが、速い相場ではそれさえ影響します。足の確定ちょうどでのエントリーを前提にした戦略は、実際には常に少し違う価格になります。

データの品質とバイアス

  • 先読みバイアス:判断の時点では得られなかった情報をコードが使ってしまうことです。典型例は、ある足の終値で判断しているのに、その同じ足の始値でエントリーしているケースです。上位足のデータの扱いが雑な場合にも起こります。
  • リペイント:過去の値を後から書き換えるインジケーターです。チャート上ではシグナルが完璧に見えても、リアルタイムでは現れたり消えたりしていました。
  • 生存者バイアス:主に株式の話で、現在まで生き残った銘柄だけで検証してしまうことです。先物で似た問題になるのは、異なる限月をつなぎ合わせたつなぎ足(NQ1!など)で、ロールオーバー日に人工的な窓が生じることがあります。
  • 欠損や誤りのあるデータ:足の欠損、誤ったセッション時間、間違ったタイムゾーンなど。

相場環境の変化

技術的に完璧なバックテストでも、描いているのは過去です。相場にはボラティリティの高い時期と低い時期、トレンドとレンジがあります。特定の性格を持つ1年間を中心に検証した戦略は、次の期間にはまったく違う動きをするかもしれません。検証期間が長く多様であるほど信頼性は上がりますが、保証にはなりません。密接に関連する問題が過剰最適化で、トレード戦略の過剰最適化で取り上げています。

フォワードテストとシミュレーション

ギャップを埋める最善の方法は、中間段階を挟むことです。実運用と同じ執行経路を使い、シミュレーション口座でリアルタイムに戦略を動かします。これをフォワードテスト、またはペーパートレードと呼びます。

この段階で確認すべきこと:

  1. アラートは時間どおり、正しい形式で届いているか?
  2. シグナル価格と約定価格の平均的な差はどれくらいか?
  3. 取引回数はバックテストの想定と近いか?
  4. 重複や欠落したトレード、「取り残された」ポジションはないか?
  5. 寄り付き、引け、指標発表の前後での挙動は妥当か?

すべてのトレードを記録し、同じ期間のバックテストと比較しましょう。測ったギャップは貴重な情報で、現実的なスリッページの前提としてバックテストに反映できます。

妥当な期待値

  • 実運用の成績はバックテストより弱くなると想定し、それに合わせて計画を立てる。
  • 手数料とスリッページを抜きにしてしか利益が出ない戦略には、本当のエッジはありません。
  • 短いシミュレーション期間はどちらの結論も証明しません。主に仕組みの動作確認です。
  • 実運用開始時のポジションサイズは小さくし、執行が想定どおりに動くと確認できてから増やす。

まとめ

  • バックテストは前提を持つモデルであり、その前提のほとんどが結果を上振れさせます。
  • スリッページ、指値の約定、手数料がギャップの最大の原因です。
  • 先読みバイアスとリペイントは、リアルタイムでは決して達成できなかった結果を生み出します。
  • 同じ執行経路を使ったシミュレーションでのフォワードテストは必須のステップです。
  • 実際のギャップを測り、それを検証に反映させましょう。

TradingViewのアラートを使っているなら、WeCoreでそれを自分の口座に接続し、まずシミュレーションモードで動かせます。ライブ口座に移る前に、約定、タイミング、リスクルールを確認できます。基本的な概念についてはアルゴリズム取引とはをご覧ください。

出典・参考資料