//+----------------------------------------------------------------------------+ //| e-20PipsLimit-T.mq4 | //| Èäåÿ Tartan, ðåàëèçàöèÿ Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 15.10.2006 Óñòàíîâêà äâóõ ïðîòèâîïîëîæíûõ ëèìèòíûõ îðäåðîâ â 00:00 ÷àñîâ | //| íà ðàññòîÿíèè 15-20 ïóíêòîâ îò óðîâíÿ îòêðûòèÿ íóëåâîãî áàðà. | //| SL=10, TP=20. | //+----------------------------------------------------------------------------+ #property copyright "Tartan & KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20061015 //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà ------------------------------------------ extern string _P_Entrys = "---------- Ïàðàìåòðû âõîäîâ"; extern string TimeSet = "00:00"; // Âðåìÿ óñòàíîâêè îðäåðîâ extern string TimeDel = "10:00"; // Âðåìÿ óäàëåíèÿ îðäåðîâ extern int Distance = 15; // Ðàññòîÿíèå óñòàíîâêè îðäåðîâ extern int StopLoss = 10; // Ðàçìåð ñòîïà extern int TakeProfit = 20; // Ðàçìåð òåéêà extern double Lots = 0.1; // Ðàçìåð ëîòà extern string _P_Expert = "---------- Ïàðàìåòðû ñîâåòíèêà"; extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà extern bool UseSound = False; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé extern string _P_Trade = "---------- Ïàðàìåòðû òîðãîâëè"; extern int Slippage = 2; // Ïðîñêàëüçûâàíèå öåíû extern int NumberOfTry = 5; // Êîëè÷åñòâî ïîïûòîê extern int PauseAfterError = 45; // Ïàóçà ïîñëå îøèáêè â ñåêóíäàõ //------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------- color clOpenBuy = LightBlue; // Öâåò îòêðûòèÿ ïîêóïêè color clOpenSell = LightCoral; // Öâåò îòêðûòèÿ ïðîäàæè color clModifyBuy = Aqua; // Öâåò ìîäèôèêàöèè ïîêóïêè color clModifySell = Tomato; // Öâåò ìîäèôèêàöèè ïðîäàæè color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè string Name_Expert = "e-20PipsLimit-T"; datetime dtTimeDel, dtTimeSet; //------- Ïîêëþ÷åíèå âíåøíèõ ìîäóëåé ------------------------------------------- #include <stdlib.mqh> //+----------------------------------------------------------------------------+ //| expert initialization function | //+----------------------------------------------------------------------------+ void init() {} //+----------------------------------------------------------------------------+ //| expert deinitialization function | //+----------------------------------------------------------------------------+ void deinit() { if (!IsTesting()) Comment(""); } //+----------------------------------------------------------------------------+ //| expert start function | //+----------------------------------------------------------------------------+ void start() { if (!IsTesting()) { if (NumberAccount>0 && NumberAccount!=AccountNumber()) { Message("ÇÀÏÐÅÙÅÍÀ òîðãîâëÿ íà ñ÷¸òå "+AccountNumber()); return; } else Comment(""); if (ShowComment) Comment(CreateComment()); } if (Period()!=PERIOD_M15) { Message("Ñîâåòíèêó "+Name_Expert+" íóæåí òàéìôðåéì M15"); return; } dtTimeSet=StrToTime(TimeToStr(Time[0], TIME_DATE)+" "+TimeSet); dtTimeDel=StrToTime(TimeToStr(Time[0], TIME_DATE)+" "+TimeDel); if (CurTime()>=dtTimeSet) SetOrders(); if (CurTime()>=dtTimeDel) DeleteAllOrders(); } //+----------------------------------------------------------------------------+ //| Ôîðìèðóåò è âîçâðàùàåò áëîê êîììåíòàðèåâ | //+----------------------------------------------------------------------------+ string CreateComment() { string tc= "TimeSet="+TimeSet+ " Distance="+DoubleToStr(Distance, 0)+ " StopLoss="+DoubleToStr(StopLoss, 0)+ " TakeProfit="+DoubleToStr(TakeProfit, 0)+ " Lots="+DoubleToStr(Lots, 1); return(tc); } //+----------------------------------------------------------------------------+ //| Óäàëåíèå âñåõ îðäåðîâ | //+----------------------------------------------------------------------------+ void DeleteAllOrders() { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==MAGIC || OrderMagicNumber()==MAGIC+1) { if (OrderSymbol()==Symbol() && OrderType()>1) OrderDelete(OrderTicket()); } } } } //+----------------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè èëè îðäåðà ïî MagicNumber | //| Ïàðàìåòðû: | //| mn - MagicNumber | //+----------------------------------------------------------------------------+ bool ExistOrderByMN(int mn) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==mn && OrderSymbol()==Symbol()) return(True); } } return(False); } //+----------------------------------------------------------------------------+ //| Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà | //+----------------------------------------------------------------------------+ string GetNameTF(int TimeFrame) { switch (TimeFrame) { case PERIOD_M1: return("M1"); case PERIOD_M5: return("M5"); case PERIOD_M15: return("M15"); case PERIOD_M30: return("M30"); case PERIOD_H1: return("H1"); case PERIOD_H4: return("H4"); case PERIOD_D1: return("Daily"); case PERIOD_W1: return("Weekly"); case PERIOD_MN1: return("Monthly"); default: return("UnknownPeriod"); } } //+----------------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã òîðãîâ ñåãîäíÿ. | //+----------------------------------------------------------------------------+ bool isTradeToDay() { datetime oot; int i, k=HistoryTotal(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderMagicNumber()==MAGIC || OrderMagicNumber()==MAGIC+1) { if (OrderSymbol()==Symbol()) { oot=OrderOpenTime(); if (Day()==TimeDay(oot) && Month()==TimeMonth(oot) && Year()==TimeYear(oot)) return(True); } } } } return(False); } //+----------------------------------------------------------------------------+ //| Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë | //+----------------------------------------------------------------------------+ void Message(string m) { Comment(m); if (StringLen(m)>0) Print(m); } //+----------------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðà | //| Ïàðàìåòðû: | //| op - îïåðàöèÿ | //| pp - öåíà | //| ldStop - óðîâåíü ñòîï | //| ldTake - óðîâåíü òåéê | //| mn - äîáàâêà ê ìàãèêó | //+----------------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake, int mn) { color clOpen; int err, it, ticket; string lsComm=Name_Expert+" "+GetNameTF(Period()); if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; // Lots=GetSizeLot(); for (it=1; it<=NumberOfTry; it++) { while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); ticket=OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC+mn,0,clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if (err==128 || err==142 || err==143 || err==144) { Sleep(1000*PauseAfterError); if (ExistOrderByMN(MAGIC+mn)) { if (UseSound) PlaySound(NameFileSound); break; } Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it); continue; } if (err==146) while (IsTradeContextBusy()) Sleep(1000*PauseAfterError); Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it); if (err==2 || err==64 || err==65 || err==4110 || err==4111) break; Sleep(1000*PauseAfterError); } } } //+----------------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðîâ | //+----------------------------------------------------------------------------+ void SetOrders() { double ldStop=0, ldTake=0, pp; if (!isTradeToDay()) { if (!ExistOrderByMN(MAGIC)) { pp=Ask-Distance*Point; if (StopLoss!=0) ldStop=pp-StopLoss*Point; if (TakeProfit!=0) ldTake=pp+TakeProfit*Point; SetOrder(OP_BUYLIMIT, pp, ldStop, ldTake, 0); } if (!ExistOrderByMN(MAGIC+1)) { pp=Bid+Distance*Point; if (StopLoss!=0) ldStop=pp+StopLoss*Point; if (TakeProfit!=0) ldTake=pp-TakeProfit*Point; SetOrder(OP_SELLLIMIT, pp, ldStop, ldTake, 1); } } } //+----------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
Other Features:
It plays sound alerts