//+----------------------------------------------------------------------------------------+ //| Trall_Rabbit_SL_MM+Tp.mq4 | //| Martingeil© 2011, | //| fx.09@mail.ru | //+----------------------------------------------------------------------------------------+ #property copyright "Martingeil© 2011," #property link "fx.09@mail.ru" //Трал основан по мотивам "Rabbit" автора "JonKatana" с сайте МКЛ http://codebase.mql4.com/ru/6231 //отсчет берется от хая если тралим селл ордера, и от лоу если тралим бай ордера //Трал также закрывает по рынку открытые ордера символа по времени, //в пятницу закрывает на час раньше //Добавлен ММ расчета лота от процента депозита зависимый от плеча, и стоплоса //Нужно установить плечо Брокера вашего, моего оно равно Pleho = 200; - для чего это нужно //когда брокер автоматом понизит плечо то ваши риски сразу будут уменьшаться пропорцианально //плечу процент останется таким же и потери при стопе будут одинаковыми как при начальном плече //Далее процент от депозита Percent = 5; с которым вы можете себе позволить растаться в случае стопа //StopLoss по умолчанию равен нулю, стоп берется от шага Rabbit если шаг меньше 35 пунктов(4-х знак) //то шаг будет равен 35 пунктам. Также можно просто установить свой стоп тогда расчет будет //по вашему стопу, если поставите StopLoss = 0; то расчет по шагу Rabbit //Стоп Лосс устанавливается автоматически после установки вами ордера. //Тейкпрофит устаналивается тоже автоматически = шаг Rabbit*5, или можно установить свой тейкпрофит //если TakeProfit = 0; то тейк устанавливается автоматически шаг Rabbit*5 //------------------------------------------------------------------------------------------ extern int Pleho = 200; //начальное плечо, !!! УСТАНОВИТЬ ПЛЕЧО НАЧАЛЬНОЕ !!! extern int Percent = 5; //процент от свободных средств extern int StopLoss = 0; //адаптирован под 5-и знак, выставлять значение стопа как для 4-х знака extern int TakeProfit = 0; //адаптирован под 5-и знак, выставлять значение тейка как для 4-х знака extern int CloseHour = 22; //время (часы)после которого закроем все открытые ордера символа extern int CloseMinute = 0; //время закрытия, минуты extern bool clTime = false; //если true - использовать закрытие всех ордеров по времени extern bool comment = true; //если true - вкл. если false - выкл. коментарии на графике extern bool profit = false; //если true - тралит только при профите, если false - то сразу тралит //------------------------------------------------------------------------------------------ double high,low,Hi,Lo,range,Step,Tick; double SeLLsL,BuysL; int i_,cn=0,Day_=0; int slip = 3,q = 1; int st = 35; bool init = false;//при смене счёта, включении/выключении, функция init() не вызывается повторно... //----------------------------------------------------------------------------------------- int init(){ TakeProfit = TakeProfit * q; StopLoss = StopLoss * q; if(init) return(0); if(Digits==3 || Digits==5) q=10; slip = slip * q; st = st * q; Tick = MarketInfo(Symbol(), MODE_TICKSIZE); init = true; return(0);} //----------------------------------------------------------------------------------------- int start() { if(clTime){ if (DayOfWeek()==5 && Hour()==CloseHour-1 && Minute()>=CloseMinute) {CloseAllPos(); Print("Закрыт по времени раньше, сегодня Пятница!!!");} if (Hour()==CloseHour && Minute()>=CloseMinute){CloseAllPos(); Print("Закрыт по времени");} } high = iHigh(Symbol(),PERIOD_D1,1); low = iLow(Symbol(),PERIOD_D1,1); range = high - low; Step = range*0.236; Day_ = DayOfYear(); for (cn=0; Day_==TimeDayOfYear(Time[cn]); cn++){} i_ = iHighest(Symbol(),0,MODE_HIGH,cn,0); Hi = iHigh(Symbol(),0,i_); i_ = iLowest(Symbol(),0,MODE_LOW,cn,0); Lo = iLow(Symbol(),0,i_); for(int cnt=1; cnt<50; cnt++){ if(Lo+Step*cnt+Step > Bid && Lo+Step*cnt <= Bid){BuysL = (Lo+Step*cnt)-Step; break;}} for(cnt=1; cnt<50; cnt++){ if(Hi-Step*cnt-Step < Ask && Hi-Step*cnt >= Ask){SeLLsL = (Hi-Step*cnt)+Step; break;}} if(TakeProfit==0)TakeProfit = (Step/Tick)*5; if(StopLoss==0 && Step/Tick >= st)StopLoss = Step/Tick; if(StopLoss==0 && Step/Tick <= st)StopLoss = st; if(comment){ Comment("\n"," Today = " + TimeToStr(TimeCurrent()),"ч."," Step = ",Step/Tick ,"\n"," BuysL = ",DoubleToStr(BuysL,Digits)," SeLLsL = ",DoubleToStr(SeLLsL,Digits) ,"\n"," Плечо = ",Pleho,"\n"," Плечо Брокера = ",AccountLeverage() ,"\n"," Percent = ",Percent,"\n"," PercentLot = ",DoubleToStr(PercStopLots(StopLoss),2) ,"\n"," StopLoss = ",StopLoss ,"\n"," TakeProfit = ",TakeProfit);} for(int i=0;iUp)) { OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,Violet);}} if(OrderType()==OP_SELL){ if ((!profit || OrderOpenPrice()>Dn)&&(OrderStopLoss()>Dn && A_+Sl max_lot) lot = max_lot; }else lot=Lots; return(lot);} //----------------------------------------------------------------------------------------