//+------------------------------------------------------------------+ //| e-almet.mq4 | //| almet & KimIV | //| http://www.kimiv.ru | //| | //| 14.11.2005 | //| 1. Âû÷èñëÿåòñÿ, ñêîëüêî ñîñòàâëÿåò 10 ï. îò â÷åðàøíåé | //| ñâå÷è 10/(H-L) | //| 2.  13.00 ïî GMT (ïîë÷àñà ïîñëå íîâîñòåé) óìíîæàåì ï.1 íà 2 | //| (åñëè â÷åðàøíÿÿ ñâå÷à 0-200 ï., åñëè áîëüøå, òî íà 3 è ò.ä.) | //| è íà ñðåäíþþ ïî ýòîìó äíþ (fxmagazine ¹64, ñòð.50) è ýòî | //| ÷èñëî ðàññòàâëÿåì â äâå ñòîðîíû îò open ÷àñà, ñî ñòîïîì 25 | //| è ïðîôèòîì 10. Åñëè îðäåð ñðàáîòàë â ìèíóñå, æäåì, ïîêà | //| ñðàáîòàåò âòîðîé. | //+------------------------------------------------------------------+ #property copyright "almet & KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20051114 //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern string _Parameters_Trade = "----- Ïàðàìåòðû òîðãîâëè"; extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà extern int StopLoss = 25; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int TakeProfit = 10; // Ðàçìåð ôèêñèðîâàííîãî òýéêà extern int HourSetOrders = 14; // Âðåìÿ óñòàíîâêè îðäåðîâ extern int HourDelOrders = 22; // Âðåìÿ óäàëåíèÿ îðäåðîâ extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû extern string _Parameters_Expert = "----- Ïàðàìåòðû ñîâåòíèêà"; extern color clOpenBuy = LightBlue; // Öâåò îòêðûòèÿ ïîêóïêè extern color clOpenSell = LightCoral; // Öâåò îòêðûòèÿ ïðîäàæè extern color clModifyBuy = Aqua; // Öâåò ìîäèôèêàöèè ïîêóïêè extern color clModifySell = Tomato; // Öâåò ìîäèôèêàöèè ïðîäàæè extern color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè extern color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè //---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ------------------------------- void deinit() {Comment("");} //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { if (Hour()==HourSetOrders && Minute()<1) SetOrders(); if (Hour()==HourDelOrders) DeleteAllOrders(); } //+------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðîâ | //+------------------------------------------------------------------+ void SetOrders() { double ldStop=0, ldTake=0; double Hi1=iHigh(NULL,PERIOD_D1,1); double Lo1=iLow (NULL,PERIOD_D1,1); double wch=(Hi1-Lo1); int f; if (wch>0.02) f=3; else f=2; double dt=0.001/wch*f*GetAveDayRange(Symbol())*Point; Hi1=NormalizeDouble(Ask+dt, Digits); Lo1=NormalizeDouble(Bid-dt, Digits); // Âåðõíèé îðäåð íà ïîêóïêó if (!ExistOrder(1)) { if (StopLoss!=0) ldStop=Hi1-StopLoss*Point; if (TakeProfit!=0) ldTake=Hi1+TakeProfit*Point; SetOrder(OP_BUYSTOP, Hi1, ldStop, ldTake, 1); } // Íèæíèé îðäåð íà ïðîäàæó if (!ExistOrder(2)) { if (StopLoss!=0) ldStop=Lo1+StopLoss*Point; if (TakeProfit!=0) ldTake=Lo1-TakeProfit*Point; SetOrder(OP_SELLSTOP, Lo1, ldStop, ldTake, 2); } } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ñðåäíèé äíåâíîé äèàïàçîí èíñòðóìåíòà | //+------------------------------------------------------------------+ int GetAveDayRange(string sym) { int adr=0; if (sym=="EURUSD") { if (DayOfWeek()==1) adr=92; if (DayOfWeek()==2) adr=102; if (DayOfWeek()==3) adr=101; if (DayOfWeek()==4) adr=83; if (DayOfWeek()==5) adr=80; } if (sym=="GBPUSD") { if (DayOfWeek()==1) adr=110; if (DayOfWeek()==2) adr=128; if (DayOfWeek()==3) adr=123; if (DayOfWeek()==4) adr=98; if (DayOfWeek()==5) adr=96; } if (sym=="USDCHF") { if (DayOfWeek()==1) adr=141; if (DayOfWeek()==2) adr=162; if (DayOfWeek()==3) adr=158; if (DayOfWeek()==4) adr=121; if (DayOfWeek()==5) adr=117; } if (sym=="USDJPY") { if (DayOfWeek()==1) adr=95; if (DayOfWeek()==2) adr=104; if (DayOfWeek()==3) adr=106; if (DayOfWeek()==4) adr=77; if (DayOfWeek()==5) adr=72; } return(adr); } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðà èëè ïîçèöèè ïî íîìåðó | //+------------------------------------------------------------------+ bool ExistOrder(int mn) { bool Exist=False; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC+mn) { Exist=True; break; } } } return(Exist); } //+------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðà | //| Ïàðàìåòðû: | //| op - îïåðàöèÿ | //| pp - öåíà | //| ldStop - óðîâåíü ñòîï | //| ldTake - óðîâåíü òåéê | //| mn - äîáàâèòü ê MAGIC | //+------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake, int mn) { color clOpen; if (op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,"",MAGIC+mn,0,clOpen); } //+------------------------------------------------------------------+ //| Óäàëåíèå âñåõ îðäåðîâ | //+------------------------------------------------------------------+ void DeleteAllOrders() { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) { OrderDelete(OrderTicket()); } } } } } } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices 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: