<code>//--- Inputs extern double Lots = 0.1; // лот extern double KLot = 1; // умножение лота extern double MaxLot = 5; // максимальный лот extern int StopLoss = 0; // стоп лосс extern int TakeProfit = 0; // тейк профит extern double Profit = 100; // общая прибыль extern double Loss = 100; // общий убыток extern int BULevel = 0; // уровень БУ extern int BUPoint = 0; // пункты БУ extern int TrailingStop = 0; // трал extern bool Usredn = 1; // 1-использовать усреднение 0-не использовать extern int Step = 50; // шаг усреднения extern int Count = 5; // число ордеров extern bool Buy = 1; //1-выстовить бай 0-не выставлять extern bool Buystop = 1; //1-выстовить байстоп 0-не выставлять extern bool Buylimit = 1; //1-выстовить байлимит 0-не выставлять extern int Count_bs = 5; // число ордеров extern bool Sell = 1; //1-выстовить селл 0-не выставлять extern bool Sellstop = 1; //1-выстовить селлстоп 0-не выставлять extern bool Selllimit = 1; //1-выстовить селлимит 0-не выставлять extern int Count_ss = 5; // число ордеров extern int Expiration = 5; // истечение extern int Step_stop = 50; // дистанция для стопордера extern int StartHour = 0; // час начала торговли extern int StartMin = 30; // минута начала торговли extern int EndHour = 23; // час окончания торговли extern int EndMin = 30; // минута окончания торговли extern int CloseSig = 0; // 1-закрытие по сигналу 0-нет extern int TaimOut = 1; // тайм аут ордера extern int Slip = 30; // реквот extern int Magic = 123; // магик extern int MAPeriod = 240; // период МА extern int EPeriod = 240; extern int Method = 0; extern int Price1 = 0; extern int Shift = 0; extern double Dev = 0.3; datetime TimeBar;</code>
<code>//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift); double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1); double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1); if(BULevel>0) BU(); if(TrailingStop>0) Trailing(); if(AllProfit()>Profit && Profit>0) CloseAll(); if(AllProfit()<-Loss && Loss>0) CloseAll(); //--- стоповые в обратную сторону первой позиции if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0]) { if(Ask<EDN) { if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60; if(Buylimit)PutOrder(2,Ask-Step_stop*_Point); if(Sellstop) PutOrder(5,Bid-Step_stop*_Point); } if(Bid>EUP) { if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60; if(Selllimit)PutOrder(3,Bid+Step_stop*_Point); if(Buystop) PutOrder(4,Ask+Step_stop*_Point); } } //--- if(Usredn) { if(CountTrades()>0 && CountTrades()<Count) { if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask); if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); } } if(CloseSig>0) { if(Bid>ma) CloseAll(0); if(Ask<ma) CloseAll(1); } Comment("\n Lot: ",Lot(), "\n Trades: ",CountTrades(), "\n Profit: ",AllProfit()); } //+------------------------------------------------------------------+</code>
Сейчас советник ставит только один сразу с открытием позиции.
А дальше усреднение, если оно разрешено.
Это я раньше в коде прописывал несколько ордеров сразу, а потом подумал может просителю это и не нужно, и эту часть кода убрал оставив по одному ордеру.
ssg