【MQL4】雇用統計日を自動判別!EAでNFPを回避する関数を解説【ソース付き】

雇用統計
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

🧭 はじめに|雇用統計(NFP)を“自動で避ける”という発想

アメリカの雇用統計(NFP)は、FX市場で最も注目される経済指標のひとつです。
発表直後はUSD/JPYなど米ドル関連通貨でスプレッドが急拡大し、EAが想定外の取引を行うリスクがあります。

裁量トレードなら「今日はやめておこう」と判断できますが、EAはロジック通りに動きます。
そこで有効なのが――
EAが自動で「雇用統計日を判定して停止」する仕組みです。

本記事では、MT4上で動作する**雇用統計判別関数(MQL4)**をソース付きで解説します。


📌 雇用統計(NFP)とは?なぜEAで避けるべきか

NFP(Non-Farm Payrolls)は、アメリカの非農業部門の雇用者数を示す統計で、
**原則として毎月第1金曜日(※例外あり)**に発表されます。

発表直後は価格が乱高下し、EAのエントリー/決済が予期せぬ損失につながることがあります。
そのため、雇用統計発表日にEAを自動停止またはスキップさせる設定が推奨されます。

🧩 関連:
👉 【無料配布】米雇用統計の日にEAを自動停止!取引ミスを防ぐMT4用インジケータ
┗ MT4上で自動停止を実現するインジケータを無料で配布中。


💻 雇用統計日を自動で判定するMQL4関数

以下は、筆者が実運用で使っている「雇用統計日判別関数」です。
戻り値は true(雇用統計日) / false(それ以外)とシンプルで、初心者でも使いやすく設計しています。

//|【関数】雇用統計判定用関数
//|
//|【引数】 なし
//|
//|【戻値】True:雇用統計日 False:雇用統計日ではない

bool IsKoyouToukeiHantei(){
#define DAYTIME (3600 * 24)
// 曜日
#define SUNDAY 0
#define MONDAY 1
#define TUESDAY 2
#define WEDNESDAY 3
#define THURSDAY 4
#define FRIDAY 5
#define SATURDAY 6

MqlDateTime current;
current.year = Year();
current.mon = Month();
current.day = Day();
current.hour = 12;
current.min = 0 ;
current.sec = 0;

TimeToStruct(StructToTime(current), current);

   //2013年10月と11月は例外
   if(current.year == 2013 && (current.mon == 10 || current.mon == 11)){
      // 2013年10月は22日に発表
      if( current.mon == 10 && current.day == 22 )
      {
         return true;
      }
      // 2013年11月は8日に発表
      if( current.mon == 11 && current.day == 8 )
      {
         return true;
      }      
   }

   else if( current.mon == 1 )
   {
      // 1月は4~10日の金曜日が雇用統計日
      if( 4 <= current.day && current.day <= 10 && current.day_of_week == FRIDAY )
      {
         return true;
      }
   }
   else if( current.mon == 7 && (current.day == 2 || current.day == 3) && current.day_of_week == THURSDAY)
   {
      return true;
   }
   // 7/4は独立記念日で、日が重なれば木曜日にずれる(7/3が金曜日の場合も振替休日のためずれる)
   else if( current.mon == 7 && (current.day == 3 || current.day == 4) && current.day_of_week == FRIDAY)
   {
      return false;
   }
   else if(  1 <= current.day && current.day <= 10 && (current.day_of_week == THURSDAY || current.day_of_week == FRIDAY ))
   {
      //前の月の12日を含む週から3番目
      MqlDateTime beforeMonth;
      beforeMonth.year = current.year;
      beforeMonth.mon = current.mon - 1;
      beforeMonth.day = 12;
      beforeMonth.hour = 12;
      beforeMonth.min = 0;
      beforeMonth.sec = 0;

      datetime beforeMonthTime = StructToTime(beforeMonth);
      TimeToStruct( beforeMonthTime, beforeMonth);

      datetime emplymentDay = beforeMonthTime + (5 - TimeDayOfWeek(beforeMonthTime) + 21) * DAYTIME;

      if( current.day == TimeDay(emplymentDay) )
      {
         return true;
      }
   }
   return false;
}
スポンサーリンク

この関数を使う事により、雇用統計日を判別できます。基本は、月初め1週目の金曜日が雇用統計ですが厳密には前の月の12日を含む週から3番目なのでこの通りに計算をしています。その中でさらに7月の独立記念日を考慮したりしています。

🔍 関数のポイント

  • 単純な「第1金曜」判定ではない
  • 7月の独立記念日ズレ(木曜・金曜)に対応
  • 2013年など過去の例外年も網羅
  • バックテスト時にも動作

🛠 使用例:EAに組み込む方法

以下のようにOnTick()関数の冒頭に組み込むことで、雇用統計日にEAを一時停止させることが可能です。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

   // 雇用統計日の判定(日本時間10〜16時はスキップ)
   if(IsKoyouToukeiHantei()==true && Hour() >= 10 && Hour() <= 16){
      return; // トレードを実行しない
   }

   // 通常ロジック
   // ...
}

💡 日本時間でのNFP発表は夏時間/冬時間ともに15:30です。上記の時間帯は調整可能です。


📈 判定ロジックの解説(独立記念日や例外年にも対応)

基本的にNFPは月初の第1金曜日ですが、下記のようなイレギュラーがあります:

発表日
2021年7月7月2日(金)
2022年7月7月8日(金)
2025年7月7月3日(木)←例外的に木曜!

このような年のズレ・独立記念日などの影響にも対応しています。2013年の10月と11月も(アメリカの予算承認の問題で)例外対応も含め、実戦レベルでの運用が可能です
※バックテストにも対応


🤖 ChatGPT生成コードとの違い

ChatGPTに「雇用統計日を判定する関数を作って」と指示すると、
多くは「毎月第1金曜日」だけを判定する単純ロジックが出力されます。

しかし、実際の雇用統計には

  • 7月の独立記念日前倒し
  • 2013年のような例外年
    などが存在するため、単純ロジックでは誤検出してしまう場合があります。

自作コードを理解し、自分でメンテナンスできることがEA開発者としての強みになります。


✅ まとめ|雇用統計対策はEA運用の基本!

以上、『雇用統計日を自動判別!EAでNFPを回避する関数を解説』でした。

  • 雇用統計発表時は相場変動が激しく、EA運用のリスクが高い
  • 自動判別関数を使えば「NFP日だけ稼働を止める」ことが可能
  • 独立記念日や例外発表にも対応済み
  • 自作EAの安定性・信頼性が大きく向上

関数化したことにより、簡単に組み込むことが可能になりましたので是非ご活用ください。

🧩 次に学ぶべきステップ

ステップ内容関連記事
STEP1雇用統計日にEAを停止するインジケータ【無料配布】米雇用統計の日にEAを自動停止!
STEP2EA内で雇用統計日を自動判定する関数本記事
STEP3経済指標全般を自動回避する関数を作るEAで経済指標日に取引しない関数とサンプルソース
STEP4実際の発表日リストでバックテスト(米)雇用統計 過去発表日一覧

🧠 さらにステップアップしたい方へ

ChatGPTを活用すれば、こうした関数をベースに
「自動停止+再開」「経済指標フィルター」「連続トレード制御」など、
より高度なEAロジック開発にも発展できます。

👉 ChatGPTでEAを改良・最適化する方法はこちら

コメント

タイトルとURLをコピーしました