////////////////////////////////////////////////////////////////////// // VR---TRI-BOYCA.mq4 // // Voldemar227 // // http://www.tesvop.narod.ru // ////////////////////////////////////////////////////////////////////// // ПОГЛОЩЕНИЕ // ////////////////////////////////////////////////////////////////////// #property copyright "http://www.tesvop.narod.ru" extern string Настройки = "Главные настройки"; // extern double LotsPercent = 10 ; // extern int Loss = 2000 ; // расстояние до СтопЛосса в пунктах (0 - отключить СЛ) extern int Profit = 1000 ; // расстояние до ТейкПрофита в пунктах (0 - отключить) extern string s0 = "Настройки треилинг стоп-лосса"; //оглавление extern bool UseTrail = true ; //включение/выключение треилинг-стопа extern bool TrailWhileMinus = false ; //параметр отвечает за непрерывное/скачкообразное перемещение стоп-лосса в б/у extern int Trail = 300 ; extern int MAPeriod1 = 21 ; //Период // extern int Slip =5; //Проскальзывание extern int MagicNumber = 227 ; // int tiket; int start() { double MA1 =iMA(NULL,0,MAPeriod1,0,1,PRICE_MEDIAN,0); double go=(Open[3]-Close[1])*10000; if (Close[1]>Open[3]) go=go*(-1); Print("go",go); //---------------------------------------------------------------------------------------------------------------// //Проверяем наличие открытых ордеров // //---------------------------------------------------------------------------------------------------------------// double Lots; Lots=NormalizeDouble(AccountBalance()*0.00001*LotsPercent,1); double slb,tpb,sls,tps; //if (go>Delta) if(OrdersTotal()==0) if((Open[3]Close[3]))//&&(upS1Close[3])&&(Open[2]>Close[2])&&(Open[1]>Close[1])&&(Close[1]StohMax)) { Alert("SELL"); // // sls=NormalizeDouble(Ask + (Loss*Point),Digits); //расчёт стопа для селл позиций// tps=NormalizeDouble(Bid - (Profit*Point),Digits); //расчёт профита для селл позиций// tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,MA1,tps,NULL,MagicNumber,0,CLR_NONE);//Вход сел // if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку// } //--------------------------------------------------------------------------------------------------------------------------- //Трал //--------------------------------------------------------------------------------------------------------------------------- TrailingStop(tiket); //---- return(0); } //--------------------------------------- TrailingStop --------------------------------- void TrailingStop(int tiket) //функция принимает тикет обрабатываемеого ордера { bool res; //переменная для обработки возвращаемых значений функций res = OrderSelect(tiket, SELECT_BY_TICKET); //выбираем ордер if(res) { if(OrderType() == OP_BUY) //обработка ордера на покупку if(TrailWhileMinus == true || Bid-OrderOpenPrice()>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа if(Bid - OrderStopLoss() > Trail*Point) //основное условие необходимости перемещения стоп-лосса { res = OrderModify(OrderTicket(), 0, Bid - Trail*Point, OrderTakeProfit(), 0); if(res<0) Alert("TrailingStop OrderModify Error: ", GetLastError()); //оповещение об ошибке } if(OrderType() == OP_SELL) //обработка ордера на продажу if(TrailWhileMinus == true || OrderOpenPrice()-Ask>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа if(OrderStopLoss() - Ask > Trail*Point) //основное условие необходимости перемещения стоп-лосса { res = OrderModify(OrderTicket(), 0, Ask + Trail*Point, OrderTakeProfit(), 0); if(res<0) Alert("TrailingStop OrderModify Error: ", GetLastError()); //оповещение об ошибке } } } return(0);