
勝てて見えたのはデータの汚れだったという苦い話
これまで「金」の通貨ペアで好成績を出していたEAの検証結果に、重大なほころびが見つかりました。結論から言うと、これまで見ていた良好なバックテスト数値の多くは、データそのものの不具合によって生み出されていた可能性が高いです。
これまで「金」の通貨ペアで好成績を出していたEAの検証結果に、重大なほころびが見つかりました。結論から言うと、これまで見ていた良好なバックテスト数値の多くは、データそのものの不具合によって生み出されていた可能性が高いです。 事の発端は、2026年の金データに異常な数値が混じっていることに気づいたことでした。日中のレンジが5%を超える日が4ヶ月間で12日も発生しており、価格自体もわずか14ヶ月でほぼ2倍にまで急騰しています。比較対象として、あのコロナショック時の2020年ですら年間で10日程度でしたから、2025年から2026年にかけてのデータは現実離れしており、破損していると考えるのが妥当です。 この異常データを除いた2015年から2024年までの「クリーンな期間」で、以前採用していたドンチャン・チャネル(直近の高値や安値をブレイクした方向に仕掛ける手法)を再検証してみました。
| 期間 | 年利 | PF | 勝率(n=20) |
|---|---|---|---|
| 2015-2024(クリーン) | 0.3〜1% | 約1.0 | マイナス |
| 全期間(2026含む) | 30〜46% | 2.0〜3.0 | プラス |
| ご覧の通り、クリーンなデータで検証すると、以前の好成績は影も形もありません。PF(プロフィットファクター=総利益÷総損失。1を超えると黒字)は1.0前後と、手数料を考えればトントンかマイナスという結果です。つまり、これまで見ていた「年利30%超え」などの華やかな数字は、2026年の異常な価格急騰にたまたま乗っかっていただけの「見せかけの優位性(エッジ)」でした。 | |||
| これまでのバックテストがすべてこの汚染されたデータの影響を受けていると考えると、背筋が凍る思いです。過学習(特定のデータに当てはまりすぎて、未知の相場に対応できない状態)への対策ばかり気にしていましたが、そもそも「データが正しい」という前提そのものが崩れていたわけです。登山でいえば、地図自体が間違った方向に書き換えられていたようなものです。 | |||
| 今後の検証においては、データそのものの健全性を確保することを絶対条件とします。具体的には、異常バー(日中の価格変動が異常に大きい、あるいは価格が飛んでいる、出来高が0のままなど)を自動で検出・除去する「データクリーニング層」を検証環境に組み込みました。 | |||
| すでに異常値の検出スクリプトを導入し、検証の土台を修正済みです。ちなみに、全体の0.1%ほどは2020年のコロナショックのような正当な異常値でしたが、今回の金データのように「滑らかに倍増する」ような異常は単純な検出では捉えきれません。今後はこうしたデータの質にも目を光らせながら、検証を進めていく必要があります。検証の信頼性は、データの健全性という土台があってこそ成り立つものだと痛感しました。 |
関連コード(再現用)
この検証は以下のスクリプトで再現できます(リポジトリ参照)。
btengine/dataquality.pyscripts/scan_quality.py