バックテスト基礎

マルチタイムフレーム分析(MTF)をEAに実装した時にバックテストが重くなる問題

「1時間足で大きなトレンドを確認し、5分足でタイミングを計ってエントリーする」といったマルチタイムフレーム(MTF)分析をEAに組み込むと、優位性(勝率)は劇的に向上する傾向がありますが、MQL5でのプログラミング(データ取得)の書き方によっては、バックテストの処理速度が絶望的に重く(遅く)なります。 これを回避するためには、毎ティック上位足のインジケーター

Read this for この数字を、運用できるかの判断材料にする。

PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。

Category バックテスト基礎

backtest

マルチタイムフレーム分析(MTF)をEAに実装した時にバックテストが重くなる問題

結論

「1時間足で大きなトレンドを確認し、5分足でタイミングを計ってエントリーする」といったマルチタイムフレーム(MTF)分析をEAに組み込むと、優位性(勝率)は劇的に向上する傾向がありますが、MQL5でのプログラミング(データ取得)の書き方によっては、バックテストの処理速度が絶望的に重く(遅く)なります。 これを回避するためには、毎ティック上位足のインジケーターを計算・再取得する「無駄なループ処理」を避け、「上位足のローソク足が確定したタイミングでのみデータを取得する」効率的なコーディングが不可欠です。

なぜEA運用で重要か

システムトレードにおいて、上位足の環境認識(MTF分析)は「ダマシ」を回避するためののフィルターです。 しかし、EA開発の過程で「テストが重すぎる」という壁にぶつかり、最適化(パラメータ探索)に数週間かかるようになると、開発サイクルが回らずに挫折してしまいます。実用的なEAを作るには、ロジックの優秀さだけでなく、「計算コスト(処理の軽さ)」の最適化というプログラマー的な視点が求められます。

仕組み・条件

なぜMTFのEAは重くなるのか: MT5の「すべてのティック」モードでバックテストを行うと、1本のローソク足の中で数十回〜数百回、EAの OnTick() 関数が呼び出されます。 もしその OnTick() の中に、「現在の1時間足の移動平均線の値を取得する(iMA等)」という処理が書かれていると、EAは毎ティック、何の意味もなく1時間足のデータを再計算し、メモリとCPUを無駄に消費します。1時間足の値など、1時間に1回しか確定しないにもかかわらずです。

バックテストやリアル運用で壊れるポイント

どう確認するか

MTFを採用したEAのバックテストを回す際、タスクマネージャーを開いてCPU・メモリの使用状況を確認してください。また、MT5の「ジャーナル」タブにエラーが大量に吐き出されていないかチェックします。 もし速度が遅すぎると感じたら、コード内のデータ取得関数(CopyBuffer等)が「毎ティック」実行されていないか、条件分岐(if(isNewBar)等)で適切に制限されているかを見直す必要があります。

自分の検証スタンス

私はMTFのEAを開発・検証する際、計算負荷を極限まで下げるため、上位足のインジケーター値を直接取得するのではなく、「下位足のデータだけで疑似的に上位足を計算する手法」を使うことがあります。(例:5分足のチャート上で、1時間足(12倍の期間)の移動平均線を、5分足のSMA期間を12倍にして疑似的に描画させるなど)。 プログラミングのアプローチを変えるだけで、同じロジックでもテスト時間が1/10に短縮されることはよくあります。

関連して読む

Backtest reading この数字を、運用できるかの判断材料にする。

PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。

参照した公式情報

免責

本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。