//+------------------------------------------------------------------+ //| Dematus.mq4 | //| Zuzabush-Сахалин | //| www.Zuzabush@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Zuzabush" #property link "www.Zuzabush@yandex.ru" extern double TEquty = 5; // Шаг трала средств extern double VSEquty = 99999;// Виртуальный стоп extern double StartTEquty = 20; // Старт трала средств extern int Distance = 50; // Минимальная дистанция открытия extern int SL = 99999;// CтЛосс но это секрет extern double Lot = 0.1; // Размер пениса ха-ха extern bool ProfitTrailing = True; // Тралить только профит extern int TrailingStop = 50; // Фиксированный размер трала extern int TrailingStep = 2; // Шаг трала int mn = 270309; double VSL; static datetime prevtime = 0; int order; int KL; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { trailequiti(); Comment(" Средства = ",AccountEquity(),"\n"," Баланс = ",AccountBalance(),"\n"," Стоп = ",VSL); //--------------------------------------------------------------------------------------------+ if(prevtime == Time[0]) return(0); KL =OrdersTotal()+1; if ((OrdersTotal()<1)&&(iDeMarker(NULL,0,14,2)<0.3)&&(iDeMarker(NULL,0,14,0)>0.3)) order=OrderSend(Symbol(),OP_BUY,Lot,Ask,5,Ask-SL*Point,0,"",5,0); if ((OrdersTotal()<1)&&(iDeMarker(NULL,0,14,2)>0.7)&&(iDeMarker(NULL,0,14,0)<0.7)) order=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,Bid+SL*Point,0,"",5,0); OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES); if ((Bid-OrderOpenPrice()>Distance*Point)&&(iDeMarker(NULL,0,14,2)>0.7)&&(iDeMarker(NULL,0,14,0)<0.7)) order=OrderSend(Symbol(),OP_SELL,KL*Lot,Bid,5,Bid+SL*Point,0,"",5,0); if ((OrderOpenPrice()-Ask>Distance*Point)&&(iDeMarker(NULL,0,14,2)<0.3)&&(iDeMarker(NULL,0,14,0)>0.3)) order=OrderSend(Symbol(),OP_BUY,KL*Lot,Ask,5,Ask-SL*Point,0,"",5,0); prevtime = Time[0]; TrailingPositions(); } //+------------------------------------------------------------------+ // Трал средств | //+------------------------------------------------------------------+ void trailequiti() { if(OrdersTotal()==0) VSL=AccountBalance()-VSEquty; if(AccountEquity()-TEquty-StartTEquty > AccountBalance()) { if(AccountEquity()-TEquty > VSL) VSL=AccountEquity()-TEquty; } if(AccountEquity()0) { for(i=OrdersTotal()-1;i>=0;i--){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderType()<2){ if(OrderType()==OP_BUY) { RefreshRates(); ticket=OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); if(!ticket) Print(" Ошибка! ",GetLastError()); Sleep(1000); } if(OrderType()==OP_SELL) { RefreshRates(); ticket=OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); if(!ticket) Print(" Ошибка! ",GetLastError()); Sleep(1000); } } } } } //+------------------------------------------------------------------+ //| Сопровождение позиции простым тралом | //+------------------------------------------------------------------+ void TrailingPositions() { double pBid, pAsk, pp; pp = MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { pBid = MarketInfo(OrderSymbol(), MODE_BID); if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) { if (OrderStopLoss()TrailingStop*pp) { if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) { ModifyStopLoss(pAsk+TrailingStop*pp); return; } } } } //+------------------------------------------------------------------+ //| Перенос уровня StopLoss | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStopLoss) { bool fm; fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); } //+------------------------------------------------------------------+