//+------------------------------------------------------------------+ //| MA_BrkOut_D.mq4 | //| I_D | //| http://www.mymmk.com/ | //+------------------------------------------------------------------+ #property copyright "I_D" #property link "http://www.mymmk.com/" #define magic 3904900 extern double ma_per = 21; extern double ma_shift = 3; extern double lot_n = 0.1; extern double our_stop = 30; extern double our_take = 150; extern int tr_bars = 3; extern int barsinloss = 3; static datetime prevtime = 0; /* Советник на скользящем среднем. Покупаем при пересечении телом белой свечи МА снизу вверх или МА нижней тенью свечи, продаем при пересечении телом черной свечи МА сверху вниз или верхней тенью МА; тейка нет, стоплосс - на противоп. тень свечи, которая пересекла среднюю; закрытие - по стоплоссу, тейкпрофиту, противоположному сигналу или трейлинг-стопу, который "тянем" за открытой позицией по лоу (для покупки) или хай (продажи) последних tr_bars. Когда какая-нибудь позиция открыта, новые сигналы игнорируем. */ //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int OpenOrdersCount(int orders_n) { int i; for(i=0;iour_ma) || (MathMin(Open[1],Close[1])>our_ma && Low[1]High[1]+(5+MarketInfo(Symbol(),MODE_SPREAD))*Point) OrderModify(OrderTicket(),High[1]+(5+MarketInfo(Symbol(),MODE_SPREAD))*Point,Low[1]-5*Point,0,0,Red); //return(0); } //return(0); } if (buys==0) OrderSend(Symbol(),OP_BUYSTOP,lot_n,High[1]+(5+MarketInfo(Symbol(),MODE_SPREAD))*Point,3,Low[1]-5*Point,0,NULL,magic,0,Red); return(0); } if ((Open[1]>our_ma && Close[1]our_ma)) { // we have sell situation sells = 0; for(i=0;iOpen[1] && Low[1]>our_ma && Low[1]>new_extremum) { Print("We can try to buy once again"); // выставляем ордер на покупку на хай пред. свечи if (OrdersTotal()==0) OrderSend(Symbol(),OP_BUYSTOP,lot_n,High[1]+(5+MarketInfo(Symbol(),MODE_SPREAD))*Point,3,Low[1]-5*Point,0,NULL,magic,0,Red); return(0); } // самый низкий из максимумов 3 посл. свечей for(n=2;n<=4;n++) { if (n==1) new_extremum = High[n]; else if (new_extremum>High[n]) new_extremum = High[n]; } if (Close[1]Low[n]) new_stop = Low[n]; } Print("Trailing by shadows..."); new_stop = new_stop - 5*Point; if (new_stop>OrderStopLoss()) { OrderModify(OrderTicket(),OrderOpenPrice(),new_stop,0,0,Red); } // перенос в безубыток if (OrderStopLoss()30*Point) { Print("Stop to breakeven."); OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(5+MarketInfo(Symbol(),MODE_SPREAD))*Point,0,0,Red); return(0); } else { Print("Save position."); if (iBarShift(Symbol(),0,OrderOpenTime(),false)>=barsinloss) { if (Bid>OrderOpenPrice()) { if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+5*Point,0,0,Red)) OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); return(0); } else { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+5*Point,0,Red)) OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); return(0); } return(0); } return(0); } } } if (OrderType()==OP_SELL) { for(n=1;n<=tr_bars;n++) { if (n==1) new_stop = High[n]; else if (new_stopOrderOpenPrice()) { if (OrderOpenPrice()-Open[0]>30*Point) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-5*Point,0,0,Blue); return(0); } else { if (iBarShift(Symbol(),0,OrderOpenTime(),false)>=barsinloss) { if (Ask+MarketInfo(Symbol(),MODE_SPREAD)*Point