//+------------------------------------------------------------------+ //| Nevalyashka.mq4 | //| Copyright © 2013 Сергей Собакин | //| zavanet@mail.ru | //| | //-------------------------------------------------------------------- #property copyright "Copyright © 2013 Сергей Собакин" #property link "zavanet@mail.ru" //-------------------------------------------------------------------- extern string _1.0="Общие настройки"; extern double StartLot=0.1; //лот (N) extern double K_lot=1.4; //лот, на который увеличиться при получении минуса (M) либо это множитель коэф extern int takeprofit = 1900, //Профит moveprofit = 100, //Шаг трала stoploss = 700; // Стоп лосс int tip;//Тип ордера (Селл, Бай) double eq=0; //Сохраненное значение эквити double OpenPrice=0;//Цена открытия ордера double min=0; double max=0; double Lot; //лот (N) double ma; string n; int TP; int op; //-------------------------------------------------------------------- int init() { eq=AccountEquity(); //Запоминаем эквити Lot=StartLot; //Лот ордеров равен начальному if (OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,1),Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits), NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue)!=-1) //В начале открываем селл.tip=1 { tip=1; OpenPrice=Bid; } } //-------------------------------------------------------------------- int start() { bool result; if (OrdersTotal()==0) //Закрылся ордер { if (AccountEquity()>eq) //Текущее эквити больше сохраненного,т.е. закрылись в плюс { eq=AccountEquity();//Запоминаем текущее эквити Lot=StartLot;//Объем лота сбрасывает до начального if (tip==0) // Закрылся бай { if (OrderSend(Symbol(),OP_BUY ,NormalizeDouble(Lot,1),Ask,3,NormalizeDouble(Bid-stoploss*Point,Digits), NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue)!=-1) OpenPrice=Ask;// Открываем ордер в том направлении и запоминаем цену открытия } if (tip==1) // Закрылся селл { if (OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,1),Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits), NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue)!=-1) OpenPrice=Bid; } }else //Текущее эквити меньше сохраненного,т.е. закрылись в минус { Lot=Lot*K_lot; //увеличили лот if (tip==0) //Закрылся бай { if (OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,1),Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits), NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue)!=-1) //Открыли селл { OpenPrice=Bid;//сохранили цену открытия tip=1;//пометили селл return; } } if (tip==1) { if (OrderSend(Symbol(),OP_BUY ,NormalizeDouble(Lot,1),Ask,3,NormalizeDouble(Bid-stoploss*Point,Digits), NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue)!=-1) { OpenPrice=Ask; tip=0; } } } }else //Ордер открыт, отслеживаем трал { if (tip==0)//Бай { if (Ask-OpenPrice>moveprofit*Point)// Цена ушла выше цены открытия ордера на шаг трала { if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { result=OrderModify(OrderTicket(),0,Bid-stoploss*Point,OpenPrice + takeprofit*Point,0,CLR_NONE);//Переносим стоп выше if (Lot>StartLot && (Bid-stoploss*Point>OrderOpenPrice())) Lot=Lot/K_lot; //Если текущий стоп выше цены открытия, то уменьшаем лот следующего ордера OpenPrice=Ask; //Сохраняем текущую цену. Теперь от нее считаем трал } } }else { if (OpenPrice-Bid>moveprofit*Point) { if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { result=OrderModify(OrderTicket(),0,Ask+stoploss*Point,OpenPrice - takeprofit*Point,0,CLR_NONE); if (Lot>StartLot && (Ask+stoploss*Point