米雇用統計、FOMC、CPI、ISM、政策金利などの重要指標では、発表前後にスプレッド拡大や急変動が発生し、EA(自動売買)が通常時とは違う動きをすることがあります。
裁量トレードなら「今日は重要指標があるから見送ろう」と判断できますが、EAは条件を満たせば自動でエントリーします。
そのため、実運用では重要経済指標の前後だけEAを止める仕組みを用意しておくと安心です。
この記事では、MT4でCSVファイルに登録した重要経済指標を読み込み、指標前後にEAを停止する方法を解説します。
まずは、EA本体を修正せずに使えるMT4用無料インジケーターを紹介し、後半ではEAへ直接組み込むMQL4関数の例も掲載します。
また、CSVを手動で作成する方法だけでなく、MT5の経済指標カレンダーからCSVを書き出せる無料インジケーターについても紹介します。
- MT4で重要経済指標前後にEAを停止する考え方
- CSVで雇用統計・FOMC・CPIなどの停止対象を管理する方法
- MT5無料インジケーターで経済指標CSVを作成する方法
- MT4無料インジケーターでCSVを読み込み、自動売買をOFF/ONする方法
- EAへ直接組み込むMQL4関数のサンプル
MT4には、MT5のような標準の経済指標カレンダー取得機能がありません。
そのため本記事では、MT4で現実的に扱いやすい「CSV管理方式」を使い、重要指標前後にEAを止める方法を紹介します。
主な方法として、まずはMT4用無料インジケーターを使う方法を解説し、後半で自作EAなどに組み込めるMQL4関数例も補足します。
経済指標回避フィルターとは?
経済指標回避フィルターとは、米雇用統計やFOMC、CPI、ISMなどの重要指標前後に、EAの取引を一時的に止めるための制御です。
発表前後は、スプレッド拡大、スリッページ、約定拒否、急な上下動が発生しやすく、EAのロジックが想定どおりに機能しないことがあります。
- 雇用統計の前後だけ新規エントリーしない
- FOMCや政策金利の時間帯はEAを止める
- CPI、ISM、EIA在庫など、相場が荒れやすい指標をCSVで管理する
- EA本体を再コンパイルせずに停止対象を更新する
このような運用をしたい場合に、CSVファイルで指標日時を管理する方式が使いやすいです。
雇用統計だけを判定したい場合は、以下の記事のように日付計算関数で対応する方法もあります。
👉 【MQL4】雇用統計日にEAを自動停止する関数|経済指標回避フィルターの作り方
CSV形式のファイルとは?
CSVとは、カンマ区切りでデータを保存するシンプルなテキストファイルです。Excelでもメモ帳でも編集できるため、経済指標日のような一覧データを管理するのに向いています。
MT4側では、このCSVファイルを読み込み、経済指標日や停止時間帯を判定します。CSVの用意方法は、大きく分けて手動で作成する方法と、MT5の経済指標カレンダーから書き出す方法があります。
方法1:手動でCSVを作成する
自分で雇用統計・FOMC・CPIなどの日程を調べて、CSVに入力する方法です。少数のイベントだけを管理したい場合や、特定の指標だけを止めたい場合は、この方法でも十分です。
本記事では、以下のような形式でCSVを作る前提にします。
Date,Time,Event
2022.10.07,15:30:00,雇用統計
2022.11.02,21:00:00,FOMC
2022.11.04,15:30:00,雇用統計
2022.12.02,15:30:00,雇用統計
日付、時間、イベント名の3列だけにしておくと、MQL4側でも扱いやすくなります。要は「トレードしたくない指標の日時とイベント名称」を1行ごとに書いていくファイルです。
配布CSVは、CSV形式やEA側の読み込み動作を確認するためのサンプルです。
実運用で使う場合は、最新の雇用統計・FOMC・CPIなどの日程に更新してからご利用ください。
方法2:MT5無料インジでCSVを作成する(おすすめ)
MT4には標準の経済指標カレンダー取得機能がありませんが、MT5には経済指標カレンダーが標準搭載されています。
そのため、MT5側で対象国・対象通貨・重要度を指定して経済指標データを取得し、MT4側でも読み込みやすいCSV形式で書き出す方法もあります。定期的にCSVを更新するのが面倒な場合は、この方法が便利です。
MT5指標停止フィルターFreeを使うと、たとえば以下のようなCSVを書き出せます。
日程,時間,イベント名称
2026.07.01,21:15:00,ADP非農業部門雇用者数
2026.07.01,22:45:00,マークイット製造業PMI
2026.07.01,23:00:00,ISM製造業PMI
2026.07.01,23:00:00,ISM仕入価格
2026.07.01,23:30:00,EIA週間原油在庫
2026.07.02,21:30:00,時間当たり賃金前月比
2026.07.02,21:30:00,新規失業保険申請件数
2026.07.02,21:30:00,非農業部門雇用者数
2026.07.02,21:30:00,失業率
2026.07.06,22:45:00,マークイットサービス業業PMI
2026.07.06,23:00:00,ISM非製造業価格
2026.07.06,23:00:00,ISM非製造業PMI上記は重要度3を対象にしたCSV例です。重要度3だけに絞っても、雇用統計週やISM、EIA在庫、政策金利関連イベントがある週は、同じ日に複数の指標が並ぶことがあります。
MT4側でCSVを使う場合は、1日1件だけを前提にするのではなく、同日に複数行あるCSVを読み込めるようにしておくと安心です。
MT5の経済指標カレンダーから重要指標を取得し、MT4側でも読み込みやすいCSV形式で書き出せる無料インジケーターです。
使い方や設定項目は以下の記事で解説しています。
👉 MT5指標停止フィルターFreeの使い方はこちら
CSVをMT4で使うときの注意点
CSVファイルをダウンロード、またはMT5側で作成したら、MT4側の読み込み先に配置します。
- リアルタイム運用:MT4の
MQL4/Filesフォルダ - バックテスト:テスター用の
tester/filesフォルダ
MT5指標停止フィルターFreeで書き出したCSVは、MT5側の
MQL5/Files フォルダに作成されます。MT4で読み込む場合は、MT4側の MQL4/Files フォルダへコピーしてください。また、CSVに日本語のイベント名を入れる場合、MT4環境によって文字化けすることがあります。文字化けする場合は、CSVの保存形式と読み込み側の文字コード設定を合わせてください。迷う場合は、
NFP、FOMC、CPI、ISM など半角英数字のイベント名で管理すると扱いやすいです。簡単なまとめ

MT4でCSVを読み込み、重要指標前後にEAを停止する
CSVを作成したら、次はMT4側でそのCSVを読み込み、重要指標前後の停止時間帯を判定します。
本記事では、まずMT4用無料インジケーターでCSVを読み込み、重要指標前後にMT4の自動売買をOFF/ONする方法を紹介します。
EA本体のソースコードを修正しなくても使えるため、複数のEAをまとめて停止したい場合や、市販EAを運用している場合にも使いやすい方法です。
MT4 Important Event CSV Stopper Free
MT4 Important Event CSV Stopper Freeは、MQL4/Files フォルダに置いたCSVを読み込み、重要指標の前後時間帯にMT4の自動売買ボタンをOFF/ONする無料インジケーターです。
- CSVの
日程,時間,イベント名称またはDate,Time,Eventを読み込み - 同じ日に複数指標がある場合も一覧表示
- 指標時刻にチャート上へ縦線を表示
- 指定した分数前から停止、指定した分数後に再開
- このインジがOFFにした場合のみ、停止終了後にONへ戻す設計

チャート左上には、本日の重要指標件数と各指標の時刻・イベント名が表示されます。上記の例では、23:00と23:30に重要指標があるため、同日の複数指標が一覧表示されています。
また、チャート右側のオレンジ色の縦線はCSVに記載された指標時刻です。縦線を表示しておくと、重要指標がチャート上のどのタイミングにあるのかを視覚的に確認しやすくなります。
縦線が不要な場合は、パラメータの「指標時刻に縦線を表示」を false に変更することで非表示にできます。
主なパラメータ設定
インジケーターをチャートへ設置すると、以下のようなパラメータを設定できます。基本的には、CSVファイル名、停止前後の時間、CSV時刻のGMTオフセットを確認すれば利用できます。

| 項目 | 内容 | 初期値 |
|---|---|---|
| 表示位置X / 表示位置Y | チャート左上に表示する文字の位置を調整します。 | 20 / 60 |
| メール通知機能 | 停止時間帯に入ったときにメール通知するかを指定します。 | false |
| EA停止機能 | 重要指標前後にMT4の自動売買ボタンをOFF/ONするかを指定します。 | true |
| MQL4/Filesに置くCSVファイル名 | 読み込むCSVファイル名を指定します。MT4の MQL4/Files フォルダに配置したファイル名と一致させてください。 | ks_usdjpy.csv |
| CSV文字コード | CSVの文字コードを指定します。日本語イベント名が文字化けする場合は変更してください。 | 0 |
| 指標何分前から停止するか | 指標発表の何分前から自動売買をOFFにするかを指定します。 | 60 |
| 指標何分後まで停止するか | 指標発表後、何分後まで自動売買をOFFにしておくかを指定します。 | 30 |
| CSVの時刻。日本時間なら9 | CSVに記載されている時刻のGMTオフセットです。日本時間のCSVなら 9 を指定します。 | 9 |
| 指標時刻に縦線を表示 | CSVに記載された指標時刻へ、チャート上の縦線を表示するかを指定します。 | true |
| CSVを再読み込みする間隔 | CSVファイルを何分ごとに再読み込みするかを指定します。 | 5 |
| チャートに表示する最大指標件数 | 同日に複数指標がある場合、チャート上に最大何件まで表示するかを指定します。 | 5 |
まずは、
CSVファイル名、指標何分前から停止するか、指標何分後まで停止するか、CSVの時刻 を確認してください。日本時間で作成したCSVを使う場合は、
CSVの時刻。日本時間なら9 を 9 にしておくのが基本です。このインジケーターは、停止時間帯にMT4全体の自動売買ボタンをOFF/ONするツールです。特定のEAだけを個別に停止するものではありません。
自動売買ボタンを操作するため、Windows版MT4でDLLの使用許可が必要です。
CSVが読み込めない場合は、安全のため新規に自動売買のON/OFF操作を行いません。
MT4側で重要指標前後の自動売買を止めたい場合は、以下の無料インジケーターをご利用ください。
このように、MT4用無料インジを使えば、EA本体を直接修正せずにCSVベースの重要指標停止を運用できます。
一方で、自作EAやソースコードを編集できるEAの場合は、EA内部にCSV判定関数を組み込むことで、特定EAだけを細かく制御することもできます。次の章では、そのMQL4関数例を紹介します。
EAに直接組み込む場合のMQL4関数例
ここからは、EA本体のソースコードを編集できる方向けの内容です。
MT4用無料インジケーターを使う場合は、EA本体を修正する必要はありません。特定のEAだけを細かく制御したい場合や、自作EAに指標回避ロジックを組み込みたい場合は、以下のようにCSV判定関数をEA内部に追加します。
ここで紹介するコードは、MT4 EAに組み込むための基本例です。
すべてのEAにそのまま貼り付けて完成するものではなく、既存EAのエントリー処理の前に「重要指標前後なら新規売買を止める」判定を追加するための考え方としてご利用ください。
グローバル変数・パラメータの追加
EAのソースコード上部に、以下のパラメータと配列を追加します。
input string csvFileName = "ks_usdjpy.csv"; // CSVファイル名
input int CsvGMTOffset = 9; // CSV時刻のGMTオフセット。日本時間なら9
input int StopMinutesBefore = 60; // 指標何分前から停止するか
input int StopMinutesAfter = 30; // 指標何分後まで停止するか
datetime EventTimeArray[]; // 指標時刻(MT4サーバー時間に変換後)
string EventNameArray[]; // イベント名称
datetime lastCsvLoadTime = 0;
csvFileName には、MT4側の MQL4/Files フォルダに置いたCSVファイル名を指定します。MT5無料インジで作成したCSVを使う場合も、MT4側にコピーしたファイル名と一致させてください。
CSV時刻をMT4サーバー時間へ変換する関数
CSVを日本時間で作成している場合、そのままMT4の TimeCurrent() と比較すると、サーバー時間とのズレが発生します。
そのため、CSVの日時をMT4サーバー時間に変換してから判定します。
//+------------------------------------------------------------------+
//|【関数】MT4サーバーのGMTオフセット秒を取得
//+------------------------------------------------------------------+
int ServerGmtOffsetSeconds()
{
return((int)(TimeCurrent() - TimeGMT()));
}
//+------------------------------------------------------------------+
//|【関数】CSV側のローカル時刻をMT4サーバー時間へ変換
//|
//| 例:CSVが日本時間なら CsvGMTOffset = 9
//+------------------------------------------------------------------+
datetime CsvLocalToServerTime(datetime csvLocalTime)
{
return(csvLocalTime - CsvGMTOffset * 3600 + ServerGmtOffsetSeconds());
}
MT4の
TimeCurrent() は日本時間ではなく、利用しているFX会社のサーバー時間です。CSVを日本時間で作る場合は、
CsvGMTOffset=9 を基準にし、実際のチャート上の指標時刻とズレがないか確認してください。CSVから日付・時刻・イベント名を読み込む関数
次に、CSVファイル内の日付・時間・イベント名を配列に取り込みます。Date,Time,Event 形式だけでなく、MT5無料インジで書き出す 日程,時間,イベント名称 形式も想定します。
//+------------------------------------------------------------------+
//|【関数】CSVの日付・時刻文字列をdatetimeへ変換
//|
//| Date: 2026.07.02
//| Time: 21:30 または 21:30:00
//+------------------------------------------------------------------+
datetime MakeCsvDateTime(string dateText, string timeText)
{
string t = timeText;
// HH:MM の場合は秒を補完
if(StringLen(t) == 5)
{
t = t + ":00";
}
return(StringToTime(dateText + " " + t));
}
//+------------------------------------------------------------------+
//|【関数】CSVファイルから経済指標データを読み込む
//|
//|【戻値】true:成功 false:失敗
//+------------------------------------------------------------------+
bool funcSihyouDataSet()
{
int fileHandle = FileOpen(csvFileName, FILE_READ | FILE_TXT | FILE_ANSI);
if(fileHandle == INVALID_HANDLE)
{
Print("ファイルを開けませんでした: ", csvFileName);
return false;
}
ArrayResize(EventTimeArray, 0);
ArrayResize(EventNameArray, 0);
bool firstLine = true;
while(!FileIsEnding(fileHandle))
{
string line = FileReadString(fileHandle);
if(line == "")
{
continue;
}
string dataBuff[];
int count = StringSplit(line, ',', dataBuff);
if(count < 3)
{
continue;
}
string dateText = dataBuff[0];
string timeText = dataBuff[1];
string eventName = dataBuff[2];
// ヘッダー行をスキップ
if(firstLine)
{
firstLine = false;
if(dateText == "Date" || dateText == "日程")
{
continue;
}
}
datetime csvTime = MakeCsvDateTime(dateText, timeText);
if(csvTime <= 0)
{
continue;
}
datetime serverTime = CsvLocalToServerTime(csvTime);
int size = ArraySize(EventTimeArray);
ArrayResize(EventTimeArray, size + 1);
ArrayResize(EventNameArray, size + 1);
EventTimeArray[size] = serverTime;
EventNameArray[size] = eventName;
}
FileClose(fileHandle);
Print("経済指標CSVを読み込みました: ", csvFileName, " / 件数: ", ArraySize(EventTimeArray));
return true;
}
上記は、CSVの日時をMT4サーバー時間へ変換して配列に保存する基本例です。
同日に複数指標がある場合も、CSVの行数分だけ配列に格納されます。
重要指標前後の停止時間帯かどうかを判定する関数
CSVを読み込んだら、現在時刻が各指標の前後時間帯に入っているかを判定します。
//+------------------------------------------------------------------+
//|【関数】現在が重要指標前後の停止時間帯かどうかを判定
//|
//|【引数】 eventName : 停止対象になったイベント名を受け取る
//|
//|【戻値】true:停止時間帯 false:通常時間帯
//+------------------------------------------------------------------+
bool IsStopByEconomicEvent(string &eventName)
{
datetime now = TimeCurrent();
for(int i = 0; i < ArraySize(EventTimeArray); i++)
{
datetime stopStart = EventTimeArray[i] - StopMinutesBefore * 60;
datetime stopEnd = EventTimeArray[i] + StopMinutesAfter * 60;
if(stopStart <= now && now <= stopEnd)
{
eventName = EventNameArray[i];
return true;
}
}
eventName = "";
return false;
}
この関数は、1件でも停止時間帯に入っている指標があれば true を返します。
OnInit()でCSVを読み込む
CSV読み込み関数は、EA起動時の OnInit() で実行します。
int OnInit()
{
if(funcSihyouDataSet() == false)
{
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
これで、CSVに登録した経済指標日時が EventTimeArray[] などの配列に格納されます。
OnTick()で停止時間帯を判定する
OnTick() の新規エントリー処理より前で、停止時間帯かどうかを確認します。
void OnTick()
{
string stopEventName = "";
if(IsStopByEconomicEvent(stopEventName))
{
Print("現在は重要指標前後の停止時間帯です: ", stopEventName);
return;
}
// 通常のEAロジック
// 新規エントリー処理など
}
上記は、新規エントリー処理の前に return; して、EAの売買処理をスキップする例です。
既存ポジションの決済管理、トレーリングストップ、建値移動などまで止めると、意図しないリスクになる場合があります。
まずは「新規エントリーだけを止める」位置に組み込むのが無難です。
EAへ組み込む場合の考え方
EAへCSV判定関数を組み込む場合は、既存EAのどこで売買処理を行っているかを確認し、その手前に停止判定を追加します。
基本的な流れは以下のとおりです。
- EA上部にCSVファイル名・停止前後分・配列などを追加する
- EA下部に
funcSihyouDataSet()、CsvLocalToServerTime()、IsStopByEconomicEvent()などを追加する OnInit()でCSVファイルを読み込むOnTick()の新規エントリー処理より前で停止時間帯かどうかを判定する- 停止時間帯なら、新規エントリー処理に進まないようにする
実際のEAでは、新規エントリー処理、ナンピン処理、追加ポジション処理、決済管理などが分かれていることがあります。
指標前後に止めたいのが「新規エントリー」なのか、「追加エントリー」なのか、「EA全体」なのかを整理してから組み込んでください。
既存ポジションの決済管理まで止めると、意図しないリスクになる場合があるため、まずは新規エントリーだけを止める形が無難です。
実際に組み込む場合は、いきなり本番口座で使わず、デモ口座やバックテストでCSVの読み込み、停止時間帯の判定、通常時間帯のエントリー再開を確認してください。
MT4のCSV方式のメリット・デメリット
メリット
- EAを再コンパイルせず、CSV更新だけで回避対象を変更できる
- 雇用統計、FOMC、CPI、ISMなど複数のイベントをまとめて管理できる
- 外部サイトへのアクセスやWebRequestを使わずに済む
- バックテストでも同じCSVを使って再現しやすい
- MT5無料インジでCSVを作れば、手動更新の負担を減らせる
- MT4用インジなら、EA本体を修正せずに導入できる
- EA本体に組み込めば、特定EAだけを停止する制御もできる
デメリット
- CSVの更新を忘れると、最新の指標に対応できない
- 発表延期や突発的なスケジュール変更には手動対応が必要
- ファイルの置き場所を間違えるとEAやインジケーターから読み込めない
- 時間指定はMT4サーバー時間に合わせて調整する必要がある
- MT5でCSVを作成する場合も、MT4側へコピーする作業は必要
- MT4用インジで止める場合は、MT4全体の自動売買ボタンをOFF/ONする点に注意が必要
MT4で経済指標を回避する場合、CSV方式はかなり現実的です。
ただし、最新スケジュールの更新やファイル配置、サーバー時間とのズレには注意が必要です。
どの方法を選べばよいか?
経済指標前後のEA停止には、主に以下の3つの方法があります。
| 方法 | 向いているケース | 注意点 |
|---|---|---|
| MT4用CSV停止インジを使う | EA本体を修正せず、MT4全体を止めたい場合 | MT4全体の自動売買をOFF/ONする |
| EA内部に関数を組み込む | 特定EAだけを止めたい場合 | EAのソース修正が必要 |
| MT5無料インジでCSVを作る | CSV更新の手間を減らしたい場合 | MT5からMT4側へCSVコピーが必要 |
EA本体を修正したくない場合は、MT4用CSV停止インジを使う方法が手軽です。
EAのソースコードを編集できる場合は、本記事の関数を組み込む方法も選択肢になります。
また、CSV作成は手動でもできますが、MT5の経済指標カレンダーを使える環境がある場合は、MT5指標停止フィルターFreeでCSVを書き出すと更新作業を減らしやすくなります。
関連記事
経済指標対策をさらに詳しく確認したい方は、以下の記事も参考にしてください。
- 📥 MT5指標停止フィルターFree|重要経済指標を取得してCSVを書き出す無料インジケーター
┗ MT5の経済指標カレンダーからCSVを作成し、MT4側でも活用したい方向け - 📅 米雇用統計の過去発表日一覧と実際の値動き
┗ 雇用統計の過去日程とUSD/JPYの値動きを確認したい方向け - 🧠 【MQL4】雇用統計日にEAを自動停止する関数
┗ 雇用統計だけをMQL4関数で判定したい方向け - ⚙️ MT4で雇用統計日にEAを自動停止する無料インジケータ
┗ EA本体を修正せずにMT4側で自動売買をOFF/ONしたい方向け
まとめ
MT4で経済指標前後のEA運用リスクを抑えるには、CSVで重要指標の日時を管理し、MT4側で停止時間帯かどうかを判定する方法が使えます。
- CSVなら、EAを再コンパイルせずに回避対象を更新できる
- 雇用統計・FOMC・CPI・ISMなど複数イベントをまとめて管理できる
- 同じ日に複数指標がある場合も、CSVの複数行として扱える
- MT4用無料インジを使えば、EA本体を修正せずに自動売買をOFF/ONできる
- EAへ直接組み込めば、特定EAだけを停止する制御もできる
- CSVは手動でも作成できるが、MT5無料インジを使えば作成しやすい
- リアル運用とバックテストでCSVの置き場所に注意する
- 停止時間はMT4サーバー時間に合わせて調整する
MT5で経済指標CSVを作成し、MT4側でそのCSVを読み込んで停止制御する形にすると、MT4環境でも重要指標前後のEA停止を運用しやすくなります。





コメント