月曜日と金曜日の夜にオーダーをストップさせるEA
よくトレーダーで経済指標を気にする方がいます。
重要な経済指標というのはやはり米国のものが多いです。
今回は、
- 月曜日と金曜日
- 21時以降
という条件で米国時間の指標の前にオーダーストップするEAを作成したいと思います。
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「Week-Time-EA」で作成します。
パラメーターを記述する
パラメーターを記述しましょう。
サーバー時間で計算されています。
サーバー時間はMT4の業者によって異なります。XMであれば、
- 夏:日本時間から7時間前
- 冬:日本時間から6時間前
今回は21時以降は停止させたいので、夏であれば「14」で冬であれば「15」となります。
/*パラメーター*/ input int TakeProfit = 5;//利確 input double Lots = 0.01;//ロット数 input int MagicNumber = 12345;//マジックナンバー input bool Weekend_Stop = true;//trueならStopする input int Stop_Day_Of_Week1 = 1;//(0:日曜日 1:月曜日 2:火曜日 3:水曜日 4:木曜日 5:金曜日 6:土曜日) input int Stop_Day_Of_Week2 = 5;//(0:日曜日 1:月曜日 2:火曜日 3:水曜日 4:木曜日 5:金曜日 6:土曜日) input int Stop_Hours = 14;//何時からストップさせるか。指定時間はサーバー時刻
Copy
OnTick()関数を記述する
今回は過去に作成したゴールデンクロス・デッドクロスのロジックを活用しましょう。
【MQL】ゴールデンクロスとデッドクロスでエントリーするEA【初級編】
ゴールデンクロスとデッドクロスでエントリーするEA ゴールデンクロスとデッドクロスでエントリーするEAを作成します。 メタエディタ(MetaEditor)を立ち上げる メタエディタ(MetaEditor)を立ち上げましょう。今回は名前...
double kakoMA50,kakoMA100;//過去MA50,過去MA100 double genMA50,genMA100;//現在MA50,現在MA100 kakoMA50 = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,1);//1つ前の50日線 kakoMA100 = iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,1);//1つ前の100MA genMA50 = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);//現在の50MA genMA100= iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,0);//現在の100MA int NowTime = TimeHour(TimeCurrent());//現在の時刻 bool OderStop = False; if(Weekend_Stop==true && NowTime>=Stop_Hours)//Weekend_StopがONで21時以降である場合 { if(DayOfWeek()== Stop_Day_Of_Week1 || DayOfWeek()== Stop_Day_Of_Week2)//月曜日か金曜日 { OderStop = true;//オーダーストップ } } if(kakoMA50 <= kakoMA100 && genMA50 > genMA100 && OderStop == False)//ゴールデンクロス時にOderStopがFalseの場合 { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー } if(kakoMA50 >= kakoMA100 && genMA50 < genMA100 && OderStop == False)//デッドクロス時にOderStopがFalseの場合 { OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue);//ショートエントリー }
Copy
コンパイルする
コンパイルしましょう。動きを確認できたら完了です。
ソースコード全体
//+------------------------------------------------------------------+ //| Week-Time-Stop-EA.mq4 | //| Copyright 2020, FX-EA System Project Creator | //| https://creator.fx-ea-system-project.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, FX-EA System Project Creator" #property link "https://creator.fx-ea-system-project.com/" #property version "1.00" #property strict /*パラメーター*/ input int TakeProfit = 5;//利確 input double Lots = 0.01;//ロット数 input int MagicNumber = 12345;//マジックナンバー input bool Weekend_Stop = true;//trueならStopする input int Stop_Day_Of_Week1 = 1;//(0:日曜日 1:月曜日 2:火曜日 3:水曜日 4:木曜日 5:金曜日 6:土曜日) input int Stop_Day_Of_Week2 = 5;//(0:日曜日 1:月曜日 2:火曜日 3:水曜日 4:木曜日 5:金曜日 6:土曜日) input int Stop_Hours = 14;//何時からストップさせるか。指定時間はサーバー時刻 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double kakoMA50,kakoMA100;//過去MA50,過去MA100 double genMA50,genMA100;//現在MA50,現在MA100 kakoMA50 = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,1);//1つ前の50日線 kakoMA100 = iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,1);//1つ前の100MA genMA50 = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);//現在の50MA genMA100= iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,0);//現在の100MA int NowTime = TimeHour(TimeCurrent());//現在の時刻 bool OderStop = False; if(Weekend_Stop==true && NowTime>=Stop_Hours)//Weekend_StopがONで21時以降である場合 { if(DayOfWeek()== Stop_Day_Of_Week1 || DayOfWeek()== Stop_Day_Of_Week2)//月曜日か金曜日 { OderStop = true;//オーダーストップ } } if(kakoMA50 <= kakoMA100 && genMA50 > genMA100 && OderStop == False)//ゴールデンクロス時にOderStopがFalseの場合 { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー } if(kakoMA50 >= kakoMA100 && genMA50 < genMA100 && OderStop == False)//デッドクロス時にOderStopがFalseの場合 { OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue);//ショートエントリー } } //+------------------------------------------------------------------+
Copy
まとめ
このソースコードを改良すれば、どのようなロジックにでも指標の時間帯はエントリーしないようになります。
とても応用が効くソースコードなのでぜひ改良して活用してみてください。
コメント