FX経済指標カレンダーの活用法とEA自動停止設定|2026年完全ガイド
Photo by Maxim Hopman on Unsplash
最終更新: 2026年06月
FX経済指標カレンダーの活用とEA自動停止の設定は、自動売買を安定運用するための基本的なリスク管理手法だ。FX自動売買(EA)を運用していると、経済指標の発表直後に意図しない挙動が起きることがある。スプレッドが瞬間的に拡大し、スリッページが数十pipsに達する。その状態でエントリーシグナルが発生すれば、EAは粛々とポジションを取りにいく。これが損失の温床になる。
問題の本質は「EAが悪い」のではない。「EAが経済指標という非日常的なボラティリティ環境を織り込んでいない」ことが根本原因だ。本稿では金融工学の観点からこの問題を3つの経路に分解し、MQL5による自動停止の実装まで踏み込む。バックテストでの除外手法も含めて順を追って解説していく。
経済指標発表時にEAが暴走する理由
Photo by Anne Nygård on Unsplash
スプレッド拡大・スリッページ・誤エントリーという3つの独立した経路でリスクが顕在化するため、経済指標発表時のEA停止は損失リスク低減の基本対策となる。
直感的には「大きく動くから危ない」で終わる話だが、数理的に分解すると3つの経路が独立して存在することがわかる。この構造を理解しておくと、停止ウィンドウの設計に説得力が出る。
第一の経路:スプレッド拡大によるコスト爆発
経済指標発表時、流動性供給者(LP)は一斉にクォートを引き上げる。市場参加者が方向感のない状態で相互に注文を出し合うため、気配値の幅が広がる。ブローカー各社の報告によれば、主要指標の発表時にはスプレッドが通常の数倍から10倍以上に拡大することがある。具体的な数値はブローカー・口座種別・時期によって大きく異なるため、ご利用のブローカーの実績データで確認してほしい。
スキャルピング系EAで1エントリーの期待利益が3〜5pipsに設定されているなら、スプレッドだけで損益分岐点を超えることがある。実際に運用ログを見ると、指標発表前後の約定コストが平時の数倍になっているケースは珍しくない。
この問題が特に深刻なのは、スプレッド拡大がエントリーとエグジットの両方に影響する点だ。新規エントリー時に広いスプレッドを支払うだけでなく、既存ポジションを保有している状態でスプレッドが拡大すると、含み損が瞬間的に膨らみストップロスを誤作動させるケースがある。スキャルピング系EAでタイトなストップを設定している場合、この「スプレッド起因の強制決済」が連続して発生するリスクを考慮する必要がある。
第二の経路:スリッページ
発注から約定までの価格差がスリッページだ。市場注文(成行)を使うEAは発表直後の板薄状態に特に弱い。NFP(雇用統計)やFOMCのような高重要度指標の発表直後には、スリッページが数十pipsに達するケースも報告されている。ブローカーによって約定品質は異なるが、板が薄い状態での成行注文は常にリスクを伴う。
スリッページには方向性がある。上方向(希望より不利な価格での約定)と下方向(希望より有利な価格での約定)の両方が起こりうるが、指標発表直後の急騰・急落局面では不利な方向のスリッページが集中する傾向がある。指値注文を使うEAでも「スリッページゼロだが約定しない」という別のリスクが生じる。指標発表時の流動性枯渇により、指値がヒットしないまま価格が素通りするシナリオだ。
第三の経路:誤エントリー
発表直後の数秒間、価格はスパイク状に動くことがある。この一時的な価格変動をブレイクアウトと誤認し、EAがエントリーするケースだ。NFP発表後やFOMC後には大きな値動きが発生することが多く、逆方向に動いた場合の損失は甚大になる。いずれの損失も自己責任での管理が必要となる。
誤エントリーのリスクは、EAが使うシグナルの種類によって変わる。移動平均クロス系やモメンタム系は特に脆弱で、指標発表直後のスパイクで一時的にシグナルが発生し、その後価格が元に戻ると即座に含み損を抱えることになる。逆張り系EAでは「スパイク後の反転」を狙って正しく機能するケースもあるが、反転せずにそのまま走り続けるシナリオに対するリスク管理が必要だ。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
主要経済指標カレンダーの読み方と重要度判断
Photo by Markus Spiske on Unsplash
Forex FactoryとInvesting.comの重要度表示(赤/星マーク)を基準にトレード対象通貨に関連する指標を事前に把握し、EAの停止スケジュールに反映させることが効果的だ。
筆者が実際に使っているのはForex FactoryとInvesting.comの2サイトだ。どちらも日本語対応していて、重要度を星マーク(★)でランク付けしている。
Forex Factory(forexfactory.com)
色分けによる重要度表示が直感的でわかりやすい。赤(High Impact)・橙(Medium)・黄(Low)の3段階。フィルター設定でUSD・JPY・EURのみ表示するよう絞り込むと見やすくなる。GMT/EST/ローカル時刻の切り替えも可能で、後述のタイムゾーン問題に対処しやすい。
Investing.comの経済カレンダー
先行指数・予想値・前回値・結果が一覧で確認できる。偏差(Actual vs Forecast)の大きさがボラティリティに直結するので、予想値との差分を見る習慣をつけると相場の反応がある程度読めるようになってくる。
主要指標の日本時間発表時刻(参考)
| 指標名 | 通常の日本時間 | 通貨 | |--------|-------------|------| | NFP(米雇用統計) | 毎月第1金曜 22:30(冬時間23:30) | USD | | FOMC政策金利 | 年8回 04:00前後 | USD | | CPI(米消費者物価指数) | 毎月第2週水曜 21:30(冬時間22:30) | USD | | ECB政策金利 | 年8回 21:15 | EUR | | 日銀政策金利 | 不定(昼頃) | JPY |
夏時間・冬時間の切り替わりは毎回引っかかるポイントだ。特にNFPは毎年3月・11月に発表時刻が1時間ずれる。これを見落として停止ウィンドウがずれたまま運用し続けるのがよくある失敗パターンだ。
JPY関連指標の扱いについて
日銀政策金利(BOJ Rate Decision)は発表時刻が事前に確定しない点で他国の指標と異なる。「昼頃」と告知されるが、前後2〜3時間の幅がある。USD/JPYやEUR/JPYを取引するEAで日銀決定会合をフィルターするには、発表日の午前9:00〜午後3:00を丸ごと停止ウィンドウに設定するのが現実的な対応だ。
また、日本の主要指標(東京消費者物価指数・鉱工業生産等)は発表時刻が金曜日の早朝(8:30頃)に集中する傾向がある。週次・月次でのカレンダーチェックを行う際は、金曜早朝の日本指標を見落とさないよう注意したい。
重要度別EA停止ルール
Photo by Jakub Żerdzicki on Unsplash
指標の重要度(★1〜3)によって停止判断と停止ウィンドウを分けることが、EAの不要な停止を最小化しながらリスクを低減する合理的な手法だ。
重要度を3段階に分けた判断マトリクスを筆者は採用している。
| 重要度 | 対象指標例 | 停止判断 | 停止前後の目安 | |--------|-----------|---------|--------------| | ★★★(High) | NFP・FOMC・CPI・GDP速報値 | 必須停止 | 発表30分前〜発表後60分 | | ★★(Medium) | ISM製造業・小売売上高・住宅指標 | 状況判断 | 発表15分前〜発表後30分 | | ★(Low) | 中古住宅販売件数・耐久財受注 | スキップ可 | 停止不要 |
「状況判断」の基準は、直前の値動きのボラティリティと戦略のエッジによる。スキャルピング系EAなら★★も止めておいたほうが無難だ。スイング系で損切り幅が50pips以上あるなら許容できる場合もある。ただし損失リスクは常に存在する点は変わらない。
ポジション保有中の扱い
新規エントリーの停止とポジション管理の停止は別の問題として扱う必要がある。多くのEA設計では「IsNewsTime()がtrueなら新規エントリーをスキップ」する実装になっているが、既存ポジションのクローズ処理については別途判断が必要だ。
一般的な対応方針は以下の3パターンに分類される。
- パターンA(保守的): 発表前に既存ポジションを全決済してからEAを停止する。資金効率は落ちるが最もリスクが低い。
- パターンB(中間): 既存ポジションはそのまま保有。新規エントリーと追加建てのみ停止する。ストップロスが正しく設定されている前提での選択。
- パターンC(積極的): 一定の利益が乗っているポジションのみ保有継続し、含み損のポジションは事前にクローズする。閾値の設定が難しく、過去データでの検証が必要。
どのパターンが最適かはEAの戦略によって異なる。バックテストで各パターンの損益比較を行い、自分の運用スタイルに合った方針を選択してほしい。
MT4/MT5でのEA自動停止実装(MQL5コード付き)
MT4はCSVファイル読み込み型が標準的で、MT5はネイティブのカレンダーAPIが使用できるため実装コストが大きく異なる。どちらの環境でも、OnTick()の冒頭でフィルターを呼び出すだけで機能する。
MT4向け:CSVファイル読み込み型
MT4にはネイティブのカレンダーAPIが存在しない。そのため、事前に経済指標のスケジュールをCSVファイルに書き出し、EAがそれを参照する方式が一般的だ。
// MT4向け: CSVニュースフィルター
// ファイル形式: "YYYY.MM.DD,HH:MM,星の数(1-3),指標名"
input string NewsFile = "news_schedule.csv"; // データフォルダに配置
input int StopBefore = 30; // 発表前X分停止
input int StopAfter = 60; // 発表後X分停止
input int MinStars = 3; // この重要度以上で停止(3=★★★のみ)
// ブローカーサーバー時刻のオフセット(GMT+2を想定)
// GMT+3の場合は -60 に変更すること(タイムゾーン問題への対処)
input int BrokerGMTOffset = 120; // 分単位
bool IsNewsTime()
{
int fileHandle = FileOpen(NewsFile, FILE_READ | FILE_CSV | FILE_ANSI, ',');
if(fileHandle == INVALID_HANDLE) return false;
datetime serverNow = TimeCurrent();
while(!FileIsEnding(fileHandle))
{
string dateStr = FileReadString(fileHandle);
string timeStr = FileReadString(fileHandle);
string starsStr = FileReadString(fileHandle);
string name = FileReadString(fileHandle);
if(StringLen(dateStr) < 10) continue;
int stars = (int)StringToInteger(starsStr);
if(stars < MinStars) continue;
// CSV時刻はGMT基準で記録されていると仮定
string dtStr = dateStr + " " + timeStr;
datetime newsGMT = StringToTime(dtStr);
// ブローカーサーバー時刻に変換
datetime newsServer = newsGMT + BrokerGMTOffset * 60;
datetime windowStart = newsServer - StopBefore * 60;
datetime windowEnd = newsServer + StopAfter * 60;
if(serverNow >= windowStart && serverNow <= windowEnd)
{
FileClose(fileHandle);
return true; // 停止ウィンドウ内
}
}
FileClose(fileHandle);
return false;
}
// OnTick()内での使用例
void OnTick()
{
if(IsNewsTime()) return; // 経済指標発表前後はスキップ
// 通常のエントリーロジック
}
タイムゾーン問題への注意: ブローカーによってサーバー時刻はGMT、GMT+2、GMT+3が混在する。BrokerGMTOffsetパラメータを実際のブローカーの設定に合わせること。設定を誤ると停止ウィンドウが1〜2時間ずれ、実質的にフィルターが機能しなくなる。
MT5向け:ネイティブCalendar関数型
MT5(Build 2485以降)にはMQL5カレンダーAPIが標準搭載されている。CSVファイル管理が不要になり、よりロバストな実装が可能だ。
// MT5向け: ネイティブカレンダーAPIを使ったニュースフィルター
input int StopBefore = 30;
input int StopAfter = 60;
bool IsNewsTimeMT5()
{
datetime serverNow = TimeCurrent();
datetime rangeStart = serverNow - StopAfter * 60;
datetime rangeEnd = serverNow + StopBefore * 60;
MqlCalendarValue values[];
// 全通貨・全国対象で指標を取得(フィルターなし)
if(CalendarValueHistory(values, rangeStart, rangeEnd) <= 0)
return false;
for(int i = 0; i < ArraySize(values); i++)
{
MqlCalendarEvent event;
if(!CalendarEventById(values[i].event_id, event)) continue;
// 重要度チェック: CALENDAR_IMPORTANCE_HIGH のみ停止
if((ENUM_CALENDAR_EVENT_IMPORTANCE)event.importance != CALENDAR_IMPORTANCE_HIGH)
continue;
datetime evTime = values[i].time;
datetime windowStart = evTime - StopBefore * 60;
datetime windowEnd = evTime + StopAfter * 60;
if(serverNow >= windowStart && serverNow <= windowEnd)
return true;
}
return false;
}
void OnTick()
{
if(IsNewsTimeMT5()) return;
// 通常のエントリーロジック
}
MT5のCalendarValueHistory関数はMetaQuotes社がメンテナンスする経済指標データベースを参照する。全通貨・全国対象で取得した後、ループ内で CALENDAR_IMPORTANCE_HIGH のみを処理することで、関係のない低重要度指標を除外できる。
バックテストでの経済指標期間除外
MQL_TESTERフラグで実行環境を判定し、CSV方式にフォールバックさせることで、フォワードテストとバックテストを同一ロジックで扱える。
フォワードテストでニュースフィルターを使うなら、バックテストも同じ条件で走らせないと結果が乖離する。ここを省略するのはよくある設計ミスだ。バックテスト時はCalendar APIが利用できないため、CSVファイルを参照する分岐ロジックで対応する。
// バックテスト・リアルタイムの分岐
bool IsNewsFilter()
{
if(MQLInfoInteger(MQL_TESTER))
{
return IsNewsTime(); // バックテスト時はCSVファイル方式
}
else
{
#ifdef __MQL5__
return IsNewsTimeMT5();
#else
return IsNewsTime();
#endif
}
}
バックテスト用CSVは過去の経済指標実績データを使う。Forex FactoryやMT5のカレンダーデータをエクスポートし、フォーマットを統一しておく。筆者が検証したところ、経済指標除外あり・なしでバックテスト結果が5〜15%程度乖離するケースがあった。この差分は戦略の真のエッジを評価する上で無視できない。
バックテスト結果の正しい評価方法
経済指標期間除外を実装したバックテストを評価する際、見落としがちな点が2つある。
1つ目は「除外による機会損失の定量化」だ。フィルターをかけると勝率が上がることが多いが、同時に取引回数が減少する。例えば月に30回エントリーするEAで指標周辺の5回を除外した場合、年間の累積利益への影響を定量的に確認する必要がある。除外しない場合と比べてリスク調整後リターン(シャープレシオ・プロフィットファクター)がどう変化するかを見ることが重要だ。
2つ目は「除外データのサンプルバイアス」だ。指標発表時を除外したバックテストで良好な結果が出ても、それはある意味で「最も不利な局面を除いた結果」だ。実運用では100%の除外が保証されないケース(VPS障害・ネット断線・タイムゾーン設定ミス等)を考慮し、フィルターなしのシナリオでも許容できる損失規模に収まるかどうかを確認しておくことを推奨する。
VPS運用時の経済指標フィルター追加考慮点
24時間稼働のEAはVPS(仮想専用サーバー)上で運用するケースが多い。VPS環境特有の考慮点として、以下の3点を押さえておきたい。
タイムゾーン設定のダブルチェック
VPSのOS時刻とMT4/MT5のサーバー時刻が一致しているとは限らない。VPSのタイムゾーン設定(UTCが多い)と、ブローカーサーバーのタイムゾーン(GMT+2またはGMT+3が多い)の差を正確に把握し、MQLコードのBrokerGMTOffsetに反映させる必要がある。初期セットアップ時に必ず確認し、ブローカーのサーバー夏時間切り替えに合わせて年2回更新する運用を習慣化したい。
CSVファイルの定期更新自動化
MT4でCSV方式のフィルターを使っている場合、CSVファイルの月次更新を自動化しないと古い指標データでEAが動き続けるリスクがある。VPS上でcronジョブ(LinuxのVPSの場合)またはタスクスケジューラ(WindowsのVPSの場合)を設定し、月初1日の早朝に自動更新するスクリプトを配置することが推奨される。Pythonで実装する場合はForex FactoryのカレンダーをスクレイピングするかAPIを利用し、指定フォーマットのCSVを生成してMT4のデータフォルダに配置するシンプルな処理で対応できる。
緊急停止プロセスの整備
自動フィルターが機能しないシナリオ(緊急FOMC・地政学的イベント・サーキットブレーカー発動等)に備えて、手動での緊急停止プロセスを整備しておくことが重要だ。VPSへのリモートデスクトップ接続を即座に行える環境と、EA停止の手順をマニュアル化しておくことを推奨する。自動フィルターに過信せず、日次での運用ログ確認も欠かさない姿勢が安定運用の土台になる。
Hedgrow FX EAの経済指標フィルター機能
Photo by Marga Santoso on Unsplash
Hedgrow FX(ヘッジロウFX)は、AIとの対話でインジケータやEAを設計できるFXシステムトレード支援ツールだ。EAには経済指標フィルターが最初から組み込まれていて、上述のような実装を個別に行う必要はない。パラメータを設定するだけで動く。
主な設定項目は以下のとおりだ(パラメータ名は製品バージョンにより異なる場合がある)。
- NewsFilter_Enable: フィルター有効/無効の切り替え
- NewsFilter_Importance: 停止する重要度の閾値(High/Medium/Lowから選択)
- NewsFilter_StopBefore: 発表前の停止時間(分)
- NewsFilter_StopAfter: 発表後の再開までの待機時間(分)
- NewsFilter_Currencies: フィルター対象通貨(取引ペアに応じて設定)
内部ではMT5のCalendar APIを使用しており、MetaQuotesの指標データベースと自動同期する。タイムゾーン設定もブローカーサーバー時刻を自動取得するため、手動でのオフセット設定は原則不要だ。
ただし、Hedgrow FX EAを含め、いかなる自動売買システムも経済指標時の損失リスクを完全に排除することはできない。フィルターはあくまでリスクを「低減」する手段であり、利益を「保証」するものではない。
よくある質問(FAQ)
Q: 経済指標の停止ウィンドウはどのくらいが適切ですか? A: 指標の重要度と戦略のタイムフレームによるが、★★★(High)の場合は発表30分前・発表後60分を基準にする。スキャルピング系EAは特に発表後のボラティリティ残存時間が長いため、60〜90分の停止が安全側に働く傾向がある(検証条件によって異なる)。
Q: MT4のCSVファイルはどのように更新すればよいですか? A: Forex FactoryやInvesting.comのカレンダーを月次でエクスポートし、所定のフォーマットに変換するPythonスクリプトを用意しておくと自動化しやすい。VPS運用の場合はcronジョブで月初に自動更新する構成が実用的だ。ただし、サプライズ指標(緊急声明・臨時FOMC等)は対応できないことを念頭に置いておく必要がある。
Q: 重要度が★★(Medium)の指標でもEAを止めるべきですか? A: スキャルピング系EAであれば★★も停止を推奨する。スプレッドの拡大は重要度に比例するわけではなく、市場の注目度や予想との乖離幅によっても変わる。筆者の経験では、ISM製造業景況指数が予想を大幅に下回ったタイミングで、★★★のNFPに匹敵する値動きが発生したケースがあった。バックテストで指標別の損益分布を確認し、どの指標が戦略のパフォーマンスを毀損しているかを個別に検証することが最終的な判断基準になる。
Q: タイムゾーンの設定ミスはどうやって検出できますか?
A: MT4/MT5のチャートに経済指標の時刻をプロットするインジケーター(Forex FactoryのCalendarImporter等)を重ね、EAのフィルターログと照合するのが確実だ。停止ウィンドウが実際の指標発表時刻と1〜2時間ずれていれば、BrokerGMTOffsetの設定を見直す必要がある。
Q: AIツールを使ってニュースフィルターのMQLコードを設計することはできますか? A: 可能だ。本稿で示したようなニュースフィルターの設計をAIとの対話で行いたい場合、Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
Q: ニュースフィルターを実装してもEAの損失が止まらない場合、何を確認すればよいですか? A: まずフィルターログを確認し、実際に停止ウィンドウ内でエントリーがスキップされているかを確認する。ログに停止記録がない場合はタイムゾーン設定のミスが疑われる。ログに停止記録があっても損失が続く場合は、フィルター対象外の★★以下の指標がパフォーマンスを毀損している可能性がある。この場合はバックテストで全重要度フィルターをオンにした場合との比較を行い、問題のある指標を特定することが有効だ。なお、損失の原因がニュースフィルター以外にある(過剰レバレッジ・ストップロス未設定・戦略自体のエッジ不足等)可能性も常に念頭に置いてほしい。
Q: 経済指標の「予想値と結果の乖離」が大きいときだけEAを止める方法はありますか?
A: 技術的には可能だが、実用上の課題がある。予想値と結果の乖離は「指標が発表された後」にしかわからないため、事前停止ではなく「発表後の動きが閾値を超えたら即時クローズ」という事後フィルターになる。MT5のCalendar APIではMqlCalendarValue.actual_valueとMqlCalendarValue.forecast_valueを比較する実装が可能だが、発表直後のデータ反映に若干のラグが生じるため、スキャルピング系EAではラグが致命的になる場合がある。スイング系EAで特定の通貨ペアの指標に限定して適用するなら現実的な選択肢となりうる。
本記事で掲載したスプレッド・スリッページに関する記述はブローカー各社の報告に基づく一般的な傾向であり、実際の数値はブローカー・口座種別・市場状況によって大きく異なる場合がある。自動売買の運用にあたっては、損失リスクを十分に理解した上で自己責任のもと行っていただきたい。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
著者情報
- 著者名: [著者名を入力]
- 肩書き/専門: [例: FXシステムトレーダー・金融工学修士]
- 運用歴: [例: EA運用歴○年]
- SNS/お問い合わせ: [Twitter/XのURLまたはメールアドレス]
