//+------------------------------------------------------------------+ //| FX-EVENTS.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window bool Show_Alert=true;//îòêðûâàòü îêíî ñîîáùåíèé bool Play_Sound=false;//èãðàòü çâóê (ñîâìåñòíî ñ àëåðòîì ìîæåò ïëîõî èãðàòü) string SoundFile="news.wav";//çâóêîâîé ôàéë (äîëæåí áûòü â êàòàëîãå sounds) bool Send_Mail=false;//îòïðàâëÿòü åìàéë (íóæíî íàñòðîèòü â òåðìèíàëå) string s0="=============================="; bool MarketOpen=false;//îòêðûòèå ðûíî÷íîãî îðäåðà (íå ñðàáàòûâàíèå îòëîæåííîãî!) bool MarketClose=false;//çàêðûòèå ðûíî÷íîãî îðäåðà, íî íå ïî ñòîïëîññ èëè òéåêïðîôèò bool MarketStopLoss=true;//çàêðûòèå ðûíî÷íîãî ïî ñë bool MarketTakeProfit=true;//çàêðûòèå ðûíî÷íîãî ïî òï bool PendingSet=false;//óñòàíîâêà îòëîæåííîãî bool PendingDelete=false;//óäàëåíèå îòëîæåííîãî bool PendingOpen=true;//ñðàáàòûâàíèå îòëîæåííîãî bool MarketModify=false;//ìîäèôèêàöèÿ ñòîïëîññ èëè òåéêïðîôèò bool PendingModify=false;//ìîäèôèêàöèÿ îòëîæåíííîãî //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { static bool ft; //---- static int LastTicketList[]; static string LastSymbolList[]; static int LastOrderType[]; static double LastOrderOpenPrice[]; static double LastOrderStopLoss[]; static double LastOrderTakeProfit[]; static double LastOrderLots[]; int CurrTicketList[]; string CurrSymbolList[]; int CurrOrderType[]; double CurrOrderOpenPrice[]; double CurrOrderStopLoss[]; double CurrOrderTakeProfit[]; double CurrOrderLots[]; ArrayResize(CurrTicketList,0); ArrayResize(CurrSymbolList,0); ArrayResize(CurrOrderType,0); ArrayResize(CurrOrderOpenPrice,0); ArrayResize(CurrOrderStopLoss,0); ArrayResize(CurrOrderTakeProfit,0); ArrayResize(CurrOrderLots,0); for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ ArrayResize(CurrTicketList,ArraySize(CurrTicketList)+1); ArrayResize(CurrSymbolList,ArraySize(CurrSymbolList)+1); ArrayResize(CurrOrderType,ArraySize(CurrOrderType)+1); ArrayResize(CurrOrderOpenPrice,ArraySize(CurrOrderOpenPrice)+1); ArrayResize(CurrOrderStopLoss,ArraySize(CurrOrderStopLoss)+1); ArrayResize(CurrOrderTakeProfit,ArraySize(CurrOrderTakeProfit)+1); ArrayResize(CurrOrderLots,ArraySize(CurrOrderLots)+1); CurrTicketList[ArraySize(CurrTicketList)-1]=OrderTicket(); CurrSymbolList[ArraySize(CurrSymbolList)-1]=OrderSymbol(); CurrOrderType[ArraySize(CurrOrderType)-1]=OrderType(); CurrOrderOpenPrice[ArraySize(CurrOrderOpenPrice)-1]=OrderOpenPrice(); CurrOrderStopLoss[ArraySize(CurrOrderStopLoss)-1]=OrderStopLoss(); CurrOrderTakeProfit[ArraySize(CurrOrderTakeProfit)-1]=OrderTakeProfit(); CurrOrderLots[ArraySize(CurrOrderLots)-1]=OrderLots(); } else{ return(0); } } //================================================================================= if(ft){ for(i=0;i<ArraySize(CurrTicketList);i++){ bool NewOrder=true; for(int j=0;j<ArraySize(LastTicketList);j++){ if(CurrTicketList[i]==LastTicketList[j]){ NewOrder=false; //èçìåíåíèå òèïà if(CurrOrderType[i]!=LastOrderType[j]){ if(CurrOrderType[i]==OP_BUY){ if(LastOrderType[j]==OP_BUYLIMIT){ if(PendingOpen){ //========== Open BUYLIMIT ========== 1 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[j]+" -> BUY "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[j]+" -> BUY "); } } if(LastOrderType[j]==OP_BUYSTOP){ if(PendingOpen){ //========== Open BUYSTOP ========== 2 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYSTOP "+LastTicketList[j]+" -> BUY "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYSTOP "+LastTicketList[j]+" -> BUY "); } } } if(CurrOrderType[i]==OP_SELL){ if(LastOrderType[j]==OP_SELLLIMIT){ if(PendingOpen){ //========== Open SELLLIMIT ========== 3 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[j]+" -> SELL "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[j]+" -> SELL "); } } if(LastOrderType[j]==OP_SELLSTOP){ if(PendingOpen){ //========== Open SELLSTOP ========== 4 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLSTOP "+LastTicketList[j]+" -> SELL "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLSTOP "+LastTicketList[j]+" -> SELL "); } } } } //ìîäèôèêàöèÿ if(CurrOrderOpenPrice[i]!=LastOrderOpenPrice[i] || CurrOrderStopLoss[i]!=LastOrderStopLoss[i] || CurrOrderTakeProfit[i]!=LastOrderTakeProfit[i]){ if(CurrOrderType[i]==OP_BUY){ if(MarketModify){ //========== Modify BUY ========== 5 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUY "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUY "+LastTicketList[j]+" modified "); } } if(CurrOrderType[i]==OP_SELL){ if(MarketModify){ //========== Modify SELL ========== 6 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELL "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELL "+LastTicketList[j]+" modified "); } } if(CurrOrderType[i]==OP_BUYSTOP){ if(PendingModify){ //========== Modify BUYSTOP ========== 7 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYSTOP "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYSTOP "+LastTicketList[j]+" modified "); } } if(CurrOrderType[i]==OP_SELLSTOP){ if(PendingModify){ //========== Modify SELLSTOP ========== 8 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLSTOP "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLSTOP "+LastTicketList[j]+" modified "); } } if(CurrOrderType[i]==OP_BUYLIMIT){ if(PendingModify){ //========== Modify BUYLIMIT ========== 9 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[j]+" modified "); } } if(CurrOrderType[i]==OP_SELLLIMIT){ if(PendingModify){ //========== Modify SELLLIMIT ========== 10 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[j]+" modified "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[j]+" modified "); } } } } } //ïîÿâëåíèå íîâîãî îðäåðà if(NewOrder){ if(CurrOrderType[i]==OP_BUY){ if(MarketOpen){ //========== Market BUY Open ========== 11 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUY "+CurrTicketList[i]+" opened "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUY "+CurrTicketList[i]+" opened "); } } if(CurrOrderType[i]==OP_SELL){ if(MarketOpen){ //========== Market SELL Open ========== 12 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELL "+CurrTicketList[i]+" opened "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELL "+CurrTicketList[i]+" opened "); } } if(CurrOrderType[i]==OP_BUYSTOP){ if(PendingSet){ //========== BUYSTOP Set ========== 13 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYSTOP "+CurrTicketList[i]+" placed "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYSTOP "+CurrTicketList[i]+" placed "); } } if(CurrOrderType[i]==OP_SELLSTOP){ if(PendingSet){ //========== SELLSTOP Set ========== 14 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLSTOP "+CurrTicketList[i]+" placed "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLSTOP "+CurrTicketList[i]+" placed "); } } if(CurrOrderType[i]==OP_BUYLIMIT){ if(PendingSet){ //========== BUYLIMIT Set ========== 15 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"BUYLIMIT "+CurrTicketList[i]+" placed "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"BUYLIMIT "+CurrTicketList[i]+" placed "); } } if(CurrOrderType[i]==OP_SELLLIMIT){ if(PendingSet){ //========== SELLLIMIT Set ========== 16 if(Show_Alert)Alert(CurrSymbolList[i]+" "+"SELLLIMIT "+CurrTicketList[i]+" placed "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",CurrSymbolList[i]+" "+"SELLLIMIT "+CurrTicketList[i]+" placed "); } } } } //---- èñ÷åçåíîâåíèå îðäåðà: çàêðûòèå, óäàëåíèå, ñë, òï for(i=0;i<ArraySize(LastTicketList);i++){ bool OrderExist=false; for(j=0;j<ArraySize(CurrTicketList);j++){ if(LastTicketList[i]==CurrTicketList[j]){ OrderExist=true; } } if(!OrderExist){ if(LastOrderType[i]==OP_BUY){ if(OrderSelect(LastTicketList[i],SELECT_BY_TICKET)){ if(ND(OrderClosePrice())>=ND(OrderTakeProfit()) && ND(OrderTakeProfit())!=0){ if(MarketTakeProfit){ //========== BUY TP ========== 17 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed by TakeProfit "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed by TakeProfit "); } } else{ if(ND(OrderClosePrice())<=ND(OrderStopLoss()) && ND(OrderStopLoss())!=0){ if(MarketStopLoss){ //========== BUY SL ========== 18 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed by StopLoss "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed by StopLoss "); } } else{ if(MarketClose){ //========== BUY Close ========== 19 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed at "+DS(OrderClosePrice())+" "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed at "+DS(OrderClosePrice())+" ($"+DS2(OrderProfit())+")"); } } } } else{ if(MarketTakeProfit || MarketStopLoss || MarketClose){ //========== BUY Undefined Close ========== 20 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed (undefined method)"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed (undefined method)"); } } } if(LastOrderType[i]==OP_SELL){ if(OrderSelect(LastTicketList[i],SELECT_BY_TICKET)){ if(ND(OrderClosePrice())<=ND(OrderTakeProfit()) && ND(OrderTakeProfit())!=0.0){ if(MarketTakeProfit){ //========== SELL TP ========== 21 if(Show_Alert)Alert(LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed by TakeProfit "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed by TakeProfit "); } } else{ if(ND(OrderClosePrice())>=ND(OrderStopLoss()) && ND(OrderStopLoss())!=0.0){ if(MarketStopLoss){ //========== SELL SL ========== 22 if(Show_Alert)Alert(LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed by StopLoss "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed by StopLoss "); } } else{ if(MarketClose){ //========== SELL Close ========== 23 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed at "+DS(OrderClosePrice())+" "); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUY "+LastTicketList[i]+" closed at "+DS(OrderClosePrice())+" "); } } } } else{ if(MarketTakeProfit || MarketStopLoss || MarketClose){ //========== SELL Undefined Close ========== 24 if(Show_Alert)Alert(LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed (undefined method)"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"SELL "+LastTicketList[i]+" closed (undefined method)"); } } } if(LastOrderType[i]==OP_BUYSTOP){ if(PendingDelete){ //========== BUYSTOP Delete ========== 25 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUYSTOP "+LastTicketList[i]+" deleted"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUYSTOP "+LastTicketList[i]+" deleted"); } } if(LastOrderType[i]==OP_SELLSTOP){ if(PendingDelete){ //========== SELLSTOP Delete ========== 26 if(Show_Alert)Alert(LastSymbolList[i]+" "+"SELLSTOP "+LastTicketList[i]+" deleted"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"SELLSTOP "+LastTicketList[i]+" deleted"); } } if(LastOrderType[i]==OP_BUYLIMIT){ if(PendingDelete){ //========== BUYLIMIT Delete ========== 27 if(Show_Alert)Alert(LastSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[i]+" deleted"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"BUYLIMIT "+LastTicketList[i]+" deleted"); } } if(LastOrderType[i]==OP_SELLLIMIT){ if(PendingDelete){ //========== SELLLIMIT Delete ========== 28 if(Show_Alert)Alert(LastSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[i]+" deleted"); if(Play_Sound)PlaySound(SoundFile); if(Send_Mail)SendMail("Order Event",LastSymbolList[i]+" "+"SELLLIMIT "+LastTicketList[i]+" deleted"); } } } } } //================================================================================= ArrayResize(LastTicketList,ArraySize(CurrTicketList)); ArrayResize(LastSymbolList,ArraySize(CurrSymbolList)); ArrayResize(LastOrderType,ArraySize(CurrOrderType)); ArrayResize(LastOrderOpenPrice,ArraySize(CurrOrderOpenPrice)); ArrayResize(LastOrderStopLoss,ArraySize(CurrOrderStopLoss)); ArrayResize(LastOrderTakeProfit,ArraySize(CurrOrderTakeProfit)); ArrayResize(LastOrderLots,ArraySize(CurrOrderLots)); if(ArraySize(CurrTicketList)>0){ ArrayCopy(LastTicketList,CurrTicketList,0,0,ArraySize(CurrTicketList)); ArrayCopy(LastSymbolList,CurrSymbolList,0,0,ArraySize(CurrSymbolList)); ArrayCopy(LastOrderType,CurrOrderType,0,0,ArraySize(CurrOrderType)); ArrayCopy(LastOrderOpenPrice,CurrOrderOpenPrice,0,0,ArraySize(CurrOrderOpenPrice)); ArrayCopy(LastOrderStopLoss,CurrOrderStopLoss,0,0,ArraySize(CurrOrderStopLoss)); ArrayCopy(LastOrderTakeProfit,CurrOrderTakeProfit,0,0,ArraySize(CurrOrderTakeProfit)); ArrayCopy(LastOrderLots,CurrOrderLots,0,0,ArraySize(CurrOrderLots)); } ft=true; //---- return(0); } //+------------------------------------------------------------------+ string DS2(double v){ return(DoubleToStr(v,2)); } string DS(double v){ return(DoubleToStr(v,Digits)); } double ND(double v){ return(NormalizeDouble(v,Digits)); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
Other Features:
It issuies visual alerts to the screen
It plays sound alerts
It sends emails