フォワードテストの結果とバックテストの結果を比較検証する

EAを使ったバックテストてある程度の予測はできるがリアル口座で同じ結果になるとは限らない。スリッページやスプレッドなどの違いでバックテストよりリアル口座での実際の取引の方が結果が悪くなることが多い。今回フォワードテストの結果とバックテストの結果を突き合わせて検証してみた。予想通りフォワードテストの結果の方が悪くなった。EAの特性などもありスプレッドの開きをどこまで考慮するかによっても結果はかわりそう。チャートデータも証券会社ごとに異なるのでその辺も気になる。詳しく検証した情報があまりネット上で見つからなかったので筆者の検証内容を参考までに公開することにした。

注意事項

本記事はFXの自動売買について紹介していますが内容を保証するものではありません。金銭にかかわる内容であるためご注意ください。参考にする場合は自己責任でお願いします。

注意事項

テスト結果はチャートデータやEAの内容によって大きく異なることがありますのでご注意ください。

留意事項

本記事ではMT4を使用する。

テスト環境について

MT4を使ってEAを10種類のEAを稼働。証券会社はOANDAと外為ファイネスト。EAは簡単なライントレードである。

検証データ ロット 期間 最大スプレッド 可動EA 証券会社
OANDA:8161 1万通貨 2021.6.17-2021.8.27 0.3 1種類 OANDA
OANDA:8098 1万通貨 2021.6.17-2021.8.27 0.3 1種類 OANDA
外為ファイネスト 1,000通貨 2021.8.25-2021.8.27 0.4 10種類 外為ファイネスト

検証データ

集計があまりにも大変だったので3パターンまでしか集計できなかった。

ロット

証券会社の最低通貨で設定している。OANDAは最低1万通貨なので気軽にテストできない。

期間

OANDAの方は少し期間を長くとっている。

最大スプレッド

EA内部でスプレッドが広がり過ぎた時にスルーするための機能があり、最大スプレッド未満になるまでエントリーや決済を遅延させている。

可動EA

可動しているEAは10パターンありOANDAでも10パターン可動させていたが集計上の問題で2パターンしか出していない。

証券会社

外為の方が約定しやすいがOANDAのスプレッドの方が狭い感じがする。

検証方法

同じEAを使ってフォワードテストと同じ期間をバックテストする。その結果と突き合わせることでバックテストの精度を検証するのが目的である。

検証結果

もう少し長い期間でないと何とも言えないかも。

1. エントリー件数の比較

なぜかOANDAと外為で結果が異なった。理由は最大スプレッドの設定や約定タイミングなどが影響していると思われる。外為は検証期間が短いのでもう少し検証した方がいいのかもしれない。

項目 OANDA:8161 OANDA:8098 外為ファイネスト
フォワードテスト 44 79 48
バックテスト 60 88 32
一致したエントリー 39 75 30
エントリー差異 -16 -9 16
エントリー数が異なる原因
  • エントリー時の最大スプレッド
  • スリッページ
  • 約定タイミング
  • スプレッドの広がり

同じ期間平行運用したら色々違いがでてきそう。

2. 損益結果の比較

ロットが違うのでpipsで見てもらった方がよさそう。外為の差異が大きくフォワードテストの結果が圧倒的に悪い。乖離が大きすぎてこの結果を見るとバックテストが無意味に思えてくる。OANDAの方はそこまで差異は出ていない。

項目 OANDA:8161 OANDA:8098 外為ファイネスト
フォワードテスト -4,500 -3,420 -4,203
バックテスト -2,740 -860 -3,205
差異 1,760 2,560 998
差異(pips) 17.6 25.6 99.8

3. 損益結果の比較(類似エントリーのみ)

同じタイミングのエントリーだけをまとめて集計した。外為も平均的な差異に落ち着いた。外為のエントリーがちょっと緩いみたいなので引き続き原因を調査する必要がありそう。EAのセッティングで最大スプレッドを変えてどうなるか検証すると手がかりがつかめそう。

項目 OANDA:8161 OANDA:8098 外為ファイネスト
フォワードテスト 80 -4,190 -3,461
バックテスト 420 -2,350 -3,281
差異 340 1,840 180
PIPS換算 3.4 18.4 18.0

4. エントリーと決済の差異を比較

エントリー価格と決済価格のズレを比較してみた。フォワードテストではバックテストよりもエントリーがズレやすい。ライントレードなのでエントリー時にスプレッドが開きやすいのが原因かもしれない。最大スプレッドの調整で結果がどう変わるかはフォワードテストを二重で仕掛けないと検証できない。

項目 OANDA:8161 OANDA:8098 外為ファイネスト
エントリー(pips) -8.7 -19.2 -11.3
決済(pips) 5.3 0.8 -6.7

5. 1エントリー当たりの差異

1エントリーあたりのフォーワードテストとバックテストの差異は-0.09pips~0.6pipsとかなり幅広い結果となってしまった。まぁ、確実に言えるのはバックテストよりもフォワードテストの方が結果が悪くなる可能性が高いということ。そもそもバックテストでのスプレッドをもう少し高くすればいいのかも。

項目 OANDA:8161 OANDA:8098 外為ファイネスト
エントリー数 39 75 30
差異 3 18 18
1Entあたり 0.09 0.25 0.60

まとめ

フォワードテストの結果が悪すぎて放置していたがようやく検証することができた。やはりライントレードなのでエントリー時のスプレッドが大きくエントリーが悪くなる傾向にあるようだ。あと、外為とOANDAの乖離が思ったより大きいので次回のテストでは平行して運用してどこまで違いがでるのか検証したい。

ポイント
  • フォワードテストとバックテストでエントリー数が異なる
  • バックテストよりフォワードテストの方が結果が悪くなる傾向がある
  • スプレッドの設定で結果が大きくことなる

バックテストのスプレッドを少し大きくしておいた方がいいかもしれませんね。