//+------------------------------------------------------------------+ //| e-MondayF_LS.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 31.01.2006 Ñîâåòíèê ïî ñòðàòåãèè Ïîíåäåëüíèê ïðîòèâ ïÿòíèöû | //| ñ ðàçäåëüíîé ñèñòåìîé âûõîäîâ äëÿ ïîçèöèé LONG è SHORT. | //|21/02/2006 Äîáàâèë ôóíöèþ âûáîðà ðàáî÷åãî ëîòà. | //|Andrei Karasev (av1976) | //+------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20060131 //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern string _P_Long = "---------- Ïàðàìåòðû äëÿ ïîêóïîê"; extern int lRangeFriday = 0; // Äèàïàçîí ïÿòíèöû (Open-Close) extern int lHourOpenPos = 5; // Âðåìÿ îòêðûòèÿ ïîçèöèè extern int lDayForClose = 4; // Äåíü äëÿ çàêðûòèÿ ïîçèöèè extern int lHourClosePos = 11; // Âðåìÿ çàêðûòèÿ ïîçèöèè extern int lStopLoss = 55; // Ðàçìåð ñòîïà extern int lTakeProfit = 150; // Ðàçìåð òýéêà extern bool lUseTrailing = False; // Èñïîëüçîâàòü òðàë extern int lTrailingStop = 0; // Ðàçìåð òðàëà extern string _P_Short = "---------- Ïàðàìåòðû äëÿ ïðîäàæ"; extern int sRangeFriday = 20; // Äèàïàçîí ïÿòíèöû (Open-Close) extern int sHourOpenPos = 11; // Âðåìÿ îòêðûòèÿ ïîçèöèè extern int sDayForClose = 5; // Äåíü äëÿ çàêðûòèÿ ïîçèöèè extern int sHourClosePos = 13; // Âðåìÿ çàêðûòèÿ ïîçèöèè extern int sStopLoss = 55; // Ðàçìåð ñòîïà extern int sTakeProfit = 340; // Ðàçìåð òýéêà extern bool sUseTrailing = True; // Èñïîëüçîâàòü òðàë extern int sTrailingStop = 65; // Ðàçìåð òðàëà //---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ------------------------------- bool bLastBuy; int Slippage = 3; int NumberOfTry = 9; bool UseSound = True; string NameFileSound = "expert.wav"; extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèè color clOpenBuy = LightBlue; color clOpenSell = LightCoral; color clModifyBuy = Aqua; color clModifySell = Tomato; color clCloseBuy = Blue; color clCloseSell = Red; int TrailingStop, TrailingStep=5; //------- Ïîêëþ÷åíèå âíåøíèõ ìîäóëåé --------------------------------- #include <b-Lots.mqh> #include <stdlib.mqh> //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { if (!IsTesting()) Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { int bs=0; if (DayOfWeek()==1 && Minute()<5) { bs=GetSignal(); if (Hour()==lHourOpenPos && bs>0) OpenPosition(); if (Hour()==sHourOpenPos && bs<0) OpenPosition(); } if (bLastBuy) { if (DayOfWeek()==lDayForClose && Hour()>=lHourClosePos) CloseAllPositions(); TrailingStop=lTrailingStop; if (lUseTrailing) TrailingPositions(); } else { if (DayOfWeek()==sDayForClose && Hour()>=sHourClosePos) CloseAllPositions(); TrailingStop=sTrailingStop; if (sUseTrailing) TrailingPositions(); } if (!IsTesting() && ShowComment) { Lots=GetSizeLot(); Comment(" Lots="+DoubleToStr(Lots, 1)); } } //+------------------------------------------------------------------+ //| Îòêðûòèå ïîçèöèè | //+------------------------------------------------------------------+ void OpenPosition() { double ldStop=0, ldTake=0; int bs=GetSignal(); if (!ExistPosition()) { if (bs>0) { if (lStopLoss!=0) ldStop=Ask-lStopLoss*Point; if (lTakeProfit!=0) ldTake=Ask+lTakeProfit*Point; SetOrder(OP_BUY, Ask, ldStop, ldTake); bLastBuy=True; } if (bs<0) { if (sStopLoss!=0) ldStop=Bid+sStopLoss*Point; if (sTakeProfit!=0) ldTake=Bid-sTakeProfit*Point; SetOrder(OP_SELL, Bid, ldStop, ldTake); bLastBuy=False; } } } //+------------------------------------------------------------------+ //| Âîçâðàùàåò òîðãîâûé ñèãíàë | //+------------------------------------------------------------------+ int GetSignal() { double op1=iOpen (NULL, PERIOD_D1, 1); double cl1=iClose(NULL, PERIOD_D1, 1); int bs=0; if (op1-cl1>lRangeFriday*Point) bs=1; if (cl1-op1>sRangeFriday*Point) bs=-1; return(bs); } //+------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè ïî íîìåðó | //+------------------------------------------------------------------+ 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; if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell; Lots=GetSizeLot(); OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,"",MAGIC,0,clOpen); } //+------------------------------------------------------------------+ //| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå | //+------------------------------------------------------------------+ void CloseAllPositions() { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); } } } } } //+------------------------------------------------------------------+ //| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì | //+------------------------------------------------------------------+ 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 (Bid-OrderOpenPrice()>TrailingStop*Point) { if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) { ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); } } } if (OrderType()==OP_SELL) { if (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) { double ldOpen=OrderOpenPrice(); double ldTake=OrderTakeProfit(); OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify); } //+------------------------------------------------------------------+
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: