🧭 はじめに|雇用統計と自動売買の相性は悪い?
アメリカの雇用統計(NFP)は、FX市場に大きな影響を与える重要な経済指標です。特にUSD/JPYなど米ドル関連通貨は、発表直後に大きく値が動くことも少なくありません。
裁量トレードなら意識的にポジションを取らない判断ができますが、自動売買(EA)はシグナルが出れば淡々と取引を行います。
その結果、雇用統計日に想定外の損失を出してしまうケースも…。
そこで今回は、MT4のEAで雇用統計日を自動的に判定し、その日はトレードを止める方法を解説します。
📌 雇用統計(NFP)とは?なぜ避けるべきか
雇用統計(NFP:Non-Farm Payrolls)は、アメリカの雇用者数を示す指標で、毎月第一金曜日(※例外あり)に発表されます。発表後は為替レートが急変動することが多く、EAでのエントリーが乱れやすくなります。
そのため、雇用統計を避けて稼働を停止させるEA設定が推奨されます。
💻 雇用統計日を自動で判定する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月の独立記念日を考慮したりしています。
🛠 使用例:EAに組み込む方法
以下のように、OnTick()
の最初にこの関数を入れておけば、雇用統計日にはトレードを実行しないよう制御できます。
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//米雇用統計回避
if(IsKoyouToukeiHantei()==true && Hour() >= 10 && Hour() <= 16){
//雇用統計日の上記時間帯(開始3時間半前~発表後30分)は処理せず終わる
return;
}
//以降は普段の処理
}
💡 日本時間でのNFP発表は夏時間/冬時間ともに15:30前後です。上記の時間帯は調整可能です。
📈 判定ロジックの解説(独立記念日や例外年にも対応)
基本的にNFPは月初の第1金曜日ですが、下記のようなイレギュラーがあります:
年 | 月 | 発表日 |
---|---|---|
2021年 | 7月 | 7月2日(金) |
2022年 | 7月 | 7月8日(金) |
2025年 | 7月 | 7月3日(木)←例外的に木曜! |
このような年のズレ・独立記念日などの影響にも対応しています。2013年の10月と11月も(アメリカの予算承認の問題で)例外対応も含め、実戦レベルでの運用が可能です。
※バックテストにも対応
🤖 ChatGPTで生成した雇用統計関数との違い
筆者もChatGPTに「雇用統計日を教えて」と聞いてみましたが、単純な「第一金曜日」のみでロジックが完結しており、独立記念日やズレ対応は含まれていませんでした。
このように、AI生成コードではまだ実務に耐えないケースもあるため、自分でチューニングしたロジックを持っておくと安心です。
✅ まとめ|雇用統計対策はEA運用の基本!
以上、『雇用統計日を自動判別!EAでNFPを回避する関数を解説』でした。
- 雇用統計日は市場が大きく動くため、EAでの自動回避が必須
- 本記事の関数を使えば、NFP発表日にEAを止めることが可能
- 独立記念日や例外年(2013年など)にも対応
- ChatGPT生成コードよりも精度・信頼性が高い
- MT4で簡単に組み込めるので、ぜひ活用を!
📎 次におすすめの記事:
▶ 【実用コード多数】FX自動売買EAサンプルソースまとめ
▶ 【指標発表対応】EAで経済指標日に取引を回避する方法とは?
コメント