MT4にて、毎日日本時間の午前9時に「米ドル/円」を買い、同15時に決済するEAを作成しています。
標準時間の時期では、「MT4時間 2時」が日本時間の9時で、「MT4時間 8時」が日本時間の15時になります。
3月の第2日曜日から11月の第1日曜日までは、米国のサマータイム制度により、夏時間の時期では、「MT4時間 3時」が日本時間の9時、「MT4時間 9時」が日本時間の15時になりますので、下記のようなコードを作成しました。
3月の最も遅い第2日曜日は、「3月14日」ですよね。
まず、3月14日が何曜日かを「TimeDayOfWeek(SummerStart)」で返します。
3月14日が月曜日であれば「13日が日曜日」、火曜日であれば「12日が日曜日」となりますので、14日から「TimeDayOfWeek」の数値(月は1、火は2、水は3・・・を返す)を引いた日が第2日曜日になりますよね。
11月の「第1日曜日」も、同じ要領でコードを書いています。
「我ながら、良い方法を思い付いた」と思っていたのですが、何度かバックテストを実施してみたのですが、上手くいきませんでした。
すべて、「標準時間」(MT4時間 2時と8時)の方で取引されてしまっています。
下記のコードについて、どこか不備・不具合な箇所がありますでしょうか?
また、決まった時間でのトレードを繰り返す場合、どのようなコードが最も適切なのでしょうか?
時間トレードのEAを作成された経験のある方やMQL4に詳しい方がおられましたら、アドバイスを宜しくお願い致します。
datetime SummerStart;
datetime SummerEnd;
datetime tc=TimeCurrent();
int SummerTime; //外部宣言
SummerStart=StringToTime(IntegerToString(Year())+".03.14");
SummerStart=SummerStart-TimeDayOfWeek(SummerStart)2460*60;
SummerEnd=StringToTime(IntegerToString(Year())+".11.07");
SummerEnd=SummerEnd-TimeDayOfWeek(SummerEnd)2460*60;
if(tc>SummerStart&&tc<SummerEnd)
{SummerTime=1;}
if(tc<SummerStart||tc>SummerEnd)
{SummerTime=0;}
//夏時間のエントリー及び決済
if(SummerTime==1&&DayOfWeek()!=0&&DayOfWeek()!=6&&Hour()==3&&TicketSB<1)
{TicketSB=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,0,0,0,clrRed);}
if(TicketSB>=1&&Hour()==9)
{TicketCloseSB=OrderClose(TicketSB,Lots,Bid,Slippage,clrRed);}
//標準時間のエントリー及び決済
if(SummerTime==0&&DayOfWeek()!=0&&DayOfWeek()!=6&&Hour()==2&&TicketHB<1)
{TicketHB=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,0,0,0,clrRed);}
if(TicketHB>=1&&Hour()==8)
{TicketCloseHB=OrderClose(TicketHB,Lots,Bid,Slippage,clrRed);}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/10 14:12
退会済みユーザー
2022/08/10 15:42