//+------------------------------------------------------------------+ //| e-Friday.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 08.10.2005 Ýôôåêò ïÿòíèöû | //+------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20051008 //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern string _Parameters_Trade = "----- Ïàðàìåòðû òîðãîâëè"; extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà extern int lStopLoss = 67; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int sStopLoss = 47; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int TakeProfit = 0; // Ðàçìåð ôèêñèðîâàííîãî òýéêà extern int lHourOpenPos = 1; // Âðåìÿ îòêðûòèÿ ïîçèöèè extern int sHourOpenPos = 7; // Âðåìÿ îòêðûòèÿ ïîçèöèè extern bool UseClosePos = True; // Èñïîëüçîâàòü çàêðûòèå ïîçèöèè extern int lHourClosePos = 23; // Âðåìÿ çàêðûòèÿ ïîçèöèè extern int sHourClosePos = 19; // Âðåìÿ çàêðûòèÿ ïîçèöèè extern bool UseTrailing = True; // Èñïîëüçîâàòü òðàë extern bool ProfitTrailing = True; // Òðàëèòü òîëüêî ïðîôèò extern int TrailingStop = 60; // Ôèêñèðîâàííûé ðàçìåð òðàëà extern int TrailingStep = 5; // Øàã òðàëà extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû extern string _Parameters_Expert = "----- Ïàðàìåòðû ñîâåòíèêà"; extern bool UseOneAccount = False; // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå extern int NumberAccount = 11111; // Íîìåð òîðãîâîãî ñ÷¸òà extern string Name_Expert = "e-Friday.mq4"; extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà extern color clOpenBuy = LightBlue; // Öâåò îòêðûòèÿ ïîêóïêè extern color clOpenSell = LightCoral; // Öâåò îòêðûòèÿ ïðîäàæè extern color clModifyBuy = Aqua; // Öâåò ìîäèôèêàöèè ïîêóïêè extern color clModifySell = Tomato; // Öâåò ìîäèôèêàöèè ïðîäàæè extern color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè extern color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè //---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ------------------------------- int prevDay; //------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -------------------------------- //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { double Op1=iOpen (NULL, PERIOD_D1, 1); double Cl1=iClose(NULL, PERIOD_D1, 1); if (!IsTesting()) { if (UseOneAccount && AccountNumber()!=NumberAccount) { Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!"); return; } else Comment(""); } if (DayOfWeek()==5) { if (Op1>Cl1 && Hour()==lHourOpenPos) OpenPosition(1); if (Op1<Cl1 && Hour()==sHourOpenPos) OpenPosition(0); } if (UseClosePos) { if (Op1>Cl1 && (Hour()>=lHourClosePos || prevDay!=Day())) CloseAllPositions(); if (Op1<Cl1 && (Hour()>=sHourClosePos || prevDay!=Day())) CloseAllPositions(); } if (UseTrailing) TrailingPositions(); prevDay=Day(); } //+------------------------------------------------------------------+ //| Îòêðûòèå ïîçèöèè | //+------------------------------------------------------------------+ void OpenPosition(int op) { double ldStop=0, ldTake=0; if (!ExistPosition()) { if (op==1) { if (lStopLoss!=0) ldStop=Ask-lStopLoss*Point; if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point; SetOrder(OP_BUY, Ask, ldStop, ldTake); } if (op==0) { if (sStopLoss!=0) ldStop=Bid+sStopLoss*Point; if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point; SetOrder(OP_SELL, Bid, ldStop, ldTake); } } } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè | //+------------------------------------------------------------------+ bool ExistPosition() { bool Exist=False; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { Exist=True; break; } } } } return(Exist); } //+------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðà | //| Ïàðàìåòðû: | //| op - îïåðàöèÿ | //| pp - öåíà | //| ldStop - óðîâåíü ñòîï | //| ldTake - óðîâåíü òåéê | //+------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake) { color clOpen; string lsComm=GetCommentForOrder(); if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; // Lots=MathCeil(AccountFreeMargin()/10000*10)/10; OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpen); if (UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+ //| Ãåíåðèðóåò è âîçâðàùàåò ñòðîêó êîìåíòàðèÿ äëÿ îðäåðà èëè ïîçèöèè | //+------------------------------------------------------------------+ string GetCommentForOrder() { return(Name_Expert); } //+------------------------------------------------------------------+ //| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå | //+------------------------------------------------------------------+ void CloseAllPositions() { bool fc; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { fc=False; if (OrderType()==OP_BUY) { fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); } if (fc && UseSound) PlaySound(NameFileSound); } } } } //+------------------------------------------------------------------+ //| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì | //+------------------------------------------------------------------+ void TrailingPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) { if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) { ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); } } } if (OrderType()==OP_SELL) { if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) { if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) { ModifyStopLoss(Ask+TrailingStop*Point, clModifySell); } } } } } } } //+------------------------------------------------------------------+ //| Ïåðåíîñ óðîâíÿ StopLoss | //| Ïàðàìåòðû: | //| ldStopLoss - óðîâåíü StopLoss | //| clModify - öâåò ìîäèôèêàöèè | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStop, color clModify) { bool fm; double ldOpen=OrderOpenPrice(); double ldTake=OrderTakeProfit(); fm=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify); if (fm && UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for 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
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts