テクニカルEA化
ニュースフィルターをEAに入れる考え方
公開 2026.06.17 最終確認 2026.06.17 Technical
バックテストで好成績だったEAが、リアル口座でなぜか負け続ける。その原因の一つに、経済指標発表時のスプレッド拡大や約定拒否がある。
テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。
filter / EA logic
バックテストで好成績だったEAが、リアル口座でなぜか負け続ける。その原因の一つに、経済指標発表時のスプレッド拡大や約定拒否がある。
MT5にはMqlCalendar系の関数で経済指標カレンダーを取得する機能があるが、これをEAに組み込めば、重要指標の前後にエントリーを自動で停止できる。しかし、バックテストでは機能しないという落とし穴がある。
結論:ニュースフィルターの基本設計とバックテストの限界
EAにニュースフィルターを実装する際の基本設計は以下の通りだ。
- MT5のMqlCalendar関数で今日の経済指標を取得する。
- 重要度が「高」の指標を抽出する。
- 指標発表のN分前〜M分後をエントリー禁止時間に設定する。
- 禁止時間中は新規エントリーを停止する(既存ポジションの管理は継続)。
ただし、重要な注意点がある。MqlCalendar関数はバックテストでは機能しない(リアルタイムデータのみ)。そのため、ニュースフィルターの効果をバックテストで検証するには、過去の指標データを外部ファイルから読み込むなどの工夫が必須となる。この点を理解せずに実装すると、リアル運用で想定外の挙動に悩まされることになるだろう。
なぜEA運用でニュースフィルターが重要なのか?
EA運用でニュースフィルターが不可欠なのは、経済指標発表時の市場の特殊な挙動が、バックテストでは正確に再現されないからだ。
特にスキャルピングやデイトレードのような短期売買EAは、指標発表直後に発生するスプレッドの異常な拡大や約定の不安定さに非常に弱い。バックテストではスプレッドが固定されているか、平均値で計算されるため、リアルで起こる一瞬の10pips以上の拡大は考慮されないことが多い。これにより、本来なら利益になるはずのトレードが一瞬で損切りされたり、意図しない価格で約定したりするリスクがある。
ニュースフィルターは、この「バックテストでは見えない、リアル運用特有のリスク」を回避するための実用的な手段だ。指標発表という予測可能なリスクを自動で避けることで、EAの安定稼働と資金の保護に繋がる。 スプレッド固定バックテストがリアルで崩れる理由も合わせて確認しておくと良いだろう。
MQL5での実装例とフィルターの設計パラメータ
MQL5での実装例
MqlCalendar関数を使った、今日の重要指標発表前後にエントリーを停止する基本的なコード例を示す。これはあくまで概念的なものであり、実際のEAに組み込む際はエラーハンドリングや詳細な設定が必要になる。
// 今日の経済指標を取得
MqlCalendarValue values[];
datetime today_start = StringToTime(TimeToString(TimeCurrent(), TIME_DATE));
datetime today_end = today_start + 86400; // 24時間後
int count = CalendarValueHistory(values, today_start, today_end);
for(int i = 0; i < count; i++)
{
MqlCalendarEvent event;
CalendarEventById(values[i].event_id, event);
// 重要度が高い指標のみを対象とする
if(event.importance == CALENDAR_IMPORTANCE_HIGH)
{
datetime event_time = values[i].time;
datetime filter_start = event_time - 30 * 60; // 30分前
datetime filter_end = event_time + 15 * 60; // 15分後
// 現在時刻がフィルター期間内であればエントリー禁止
if(TimeCurrent() >= filter_start && TimeCurrent() <= filter_end)
{
// エントリー禁止のフラグを立てるか、直接returnする
return;
}
}
}
フィルターの設計パラメータ
ニュースフィルターを設計する上で、以下のパラメータはEAの成績に大きく影響するため、自分のEAの特性に合わせて慎重に調整する必要がある。
バックテストやリアル運用でニュースフィルターが壊れるポイント
ニュースフィルターは万能ではない。以下のような落とし穴があるため、実装後も注意深く監視する必要がある。
- バックテストでMqlCalendar関数が動かない:これは最大の課題だ。フィルターの効果を過去データで検証できないため、リアル運用で初めてその真価が問われることになる。
- 停止時間を長くしすぎる:安全性を追求するあまり停止時間を過度に長くすると、月間の取引回数が大幅に減少し、EAの収益性が低下する可能性がある。
- 全ての指標で停止する:トレンドフォロー型EAの場合、指標後の大きなトレンドに乗る機会を逃してしまうことがある。EAのロジックとフィルターのバランスが重要だ。
- 外部の指標カレンダーAPIに依存:MQL5のMqlCalendarではなく外部APIを利用する場合、API障害時にフィルターが機能しなくなるリスクがある。
- 指標の重要度判定がブローカーによって異なる:MqlCalendarのデータはブローカーが提供するため、重要度の判定基準が異なる場合がある。
どう確認し、どう運用すべきか?
ニュースフィルターは、実装したら終わりではない。効果的に運用するためには、以下の確認と検証が不可欠だ。
- MqlCalendar関数の動作確認:まずはデモ口座で、MqlCalendar関数が意図通りに経済指標データを取得できるか確認する。ブローカーやMT5のバージョンによって挙動が異なる場合がある。
- スプレッドの挙動観察:ニュースフィルターの停止時間中に、実際にスプレッドがどのように拡大し、どの程度の時間で平常値に戻るかを記録する。これにより、適切なフィルター再開時間を見極める。
- フォワードテストでの比較検証:フィルターあり/なしのEAをそれぞれフォワードテストで稼働させ、成績を比較する。これにより、フィルターによるリスク回避効果と機会損失のバランスを評価できる。 指標時にEAを止めるべきかという根本的な問いへの答えを見つけるヒントになるだろう。
- 取引回数の許容範囲確認:フィルター導入によって取引回数がどの程度減少するかを確認し、それがEAの収益モデルとして許容範囲内か判断する。
自分の検証スタンス
私自身がニュースフィルターをEAに組み込む際は、「重要度・高」の指標のみを対象にしている。具体的には、NFP(非農業部門雇用者数)、FOMC(連邦公開市場委員会)、CPI(消費者物価指数)、雇用統計といった、市場への影響が大きい指標に絞ることで、停止時間を最小限にしつつリスク回避効果を維持する方針だ。
バックテストでは効果を検証できないため、フォワードテストでの確認は必須と考えている。特に、フィルターを導入したEAと導入していないEAを同時にデモ口座で稼働させ、数ヶ月間の成績を比較することで、その有効性を判断している。
関連して読む
指標時にEAを止めるべきか
経済指標発表時のEA稼働リスクと、停止判断の基準を解説。
時間帯フィルターをEAに入れるときの落とし穴
EAに時間帯フィルターを実装する際の注意点と、機会損失を避ける方法。
スプレッド固定バックテストがリアルで崩れる理由
バックテストとリアル運用のスプレッドの違いがEAに与える影響を深掘り。
ATRを損切り幅と利確幅に使う考え方
ATRを活用した損切り・利確設定で、ボラティリティに応じたリスク管理を。
本記事は個人の検証メモであり、投資助言ではありません。MqlCalendar関数の動作はMT5のバージョンやブローカーの設定に依存するため、必ずご自身の環境で確認してください。
テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。
参照した公式情報
- MQL5 documentation (2026.06.17 確認)
免責
本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。