MQL5で米国祝日であるかいなかを返す関数を作った。
環境
- OANDA MetaTrader 5: 5.00 build 4040
- MetaEditor: 5.00 build 4040
米国祝日であるかいなかを返す関数
//+------------------------------------------------------------------+ //| 米国祝日であるかいなか(2023/11/22動作確認) | //+------------------------------------------------------------------+ bool isUSAHoliday(int day=0 // 日(1単位24時間の意味) ) { MqlDateTime mdt; TimeToStruct(TimeCurrent()+day*24*60*60,mdt); //--- 元日 bool holiday1=mdt.mon==1 && mdt.day==1 && mdt.day_of_week>=1 && mdt.day_of_week<=5; // 元日 holiday1|=mdt.mon==1 && mdt.day==2 && DayOfWeek()==1; //--- キング牧師記念日 bool holiday2=mdt.mon==1 && mdt.day>=15 && mdt.day<=21 && mdt.day_of_week==1; // キング牧師記念日 //--- 大統領の日 bool holiday3=mdt.mon==2 && mdt.day>=15 && mdt.day<=21 && mdt.day_of_week==1; // 大統領の日 //--- 戦没者記念日 bool holiday4=mdt.mon==5 && mdt.day>=25 && mdt.day<=31 && mdt.day_of_week==1; // 戦没者記念日 //--- 奴隷解放日 bool holiday5=mdt.mon==6 && mdt.day==19 && mdt.day_of_week>=1 && mdt.day_of_week<=5; // 奴隷解放日 holiday5|=mdt.mon==6 && mdt.day==18 && mdt.day_of_week==5; holiday5|=mdt.mon==6 && mdt.day==20 && mdt.day_of_week==1; holiday5&=mdt.year>=2021; // 2021年から始まったのでそれ以前は存在しない //--- 独立記念日 bool holiday6=mdt.mon==7 && mdt.day==4 && mdt.day_of_week>=1 && mdt.day_of_week<=5; // 独立記念日 holiday6|=mdt.mon==7 && mdt.day==3 && mdt.day_of_week==5; holiday6|=mdt.mon==7 && mdt.day==5 && mdt.day_of_week==1; //--- 労働者の日 bool holiday7=mdt.mon==9 && mdt.day>=1 && mdt.day<=7 && mdt.day_of_week==1; // 労働者の日 //--- コロンブス記念日 bool holiday8=mdt.mon==10 && mdt.day>=8 && mdt.day<=14 && mdt.day_of_week==1; // コロンブス記念日 //--- 退役軍人の日 bool holiday9=mdt.mon==11 && mdt.day==11 && mdt.day_of_week>=1 && mdt.day_of_week<=5; // 退役軍人の日 holiday9|=mdt.mon==11 && mdt.day==10 && mdt.day_of_week==5; holiday9|=mdt.mon==11 && mdt.day==12 && mdt.day_of_week==1; //--- 感謝祭 bool holiday10=mdt.mon==11 && mdt.day>=22 && mdt.day<=28 && mdt.day_of_week==4; // 感謝祭 //--- クリスマス bool holiday11=mdt.mon==12 && mdt.day==25 && mdt.day_of_week>=1 && mdt.day_of_week<=5; // クリスマス holiday11|=mdt.mon==12 && mdt.day==24 && mdt.day_of_week==5; holiday11|=mdt.mon==12 && mdt.day==26 && mdt.day_of_week==1; //--- bool res=holiday1 || holiday2 || holiday3 || holiday4 || holiday5 || holiday6 || holiday7 || holiday8 || holiday9 || holiday10 || holiday11; // 戻り値 return(res); }
使用例
米国祝日の当日、および米国祝日の前日に新規注文を出すときは以下のようにする。
//--- 米国祝日の当日に新規注文を出す場合 if(isUSAHoliday() && 他のエントリー条件) 新規注文; //--- 米国祝日の前日に新規注文を出す場合 if(isUSAHoliday(1) && 他のエントリー条件) 新規注文;