Ведите подсчёт открытых сделок и обнуляйте этот подсчёт на новой свече
int buycount=0, sellcount=0; int start() { if(TimeBar!=Time[0]) { TimeBar=Time[0]; buycount=0; sellcount=0; } //--- if(buycount<2) { res=OrderSend(Symbol(),OP_BUY.... if(res!=-1) buycount++; } if(sellcount<2) { res=OrderSend(Symbol(),OP_SELL.... if(res!=-1) sellcount++; } return(0); }
Как ограничить открытие ордеров на "0" баре даже если предыдущие 2 сделки закрылись по TP или SL.
Условия для открытия сделок
if(MA_slow>MA_fast&&MA_slow<MA_fast11)
{
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit*Point,Digits),NULL,Magic,0,clrRed);
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit2*Point,Digits),NULL,Magic,0,clrRed);
}
if(MA_slow<MA_fast2&&MA_slow>MA_fast22)
{
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit*Point,Digits),NULL,Magic,0,clrGreen);
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit2*Point,Digits),NULL,Magic,0,clrGreen);
}
Необходимо открывать сделки на каждом появившемся сигнале (пересечения MA). Но если поставить TP или SL слишком маленькие, то ордера закрываются на той же свече что и открылись и советник снова открывает пару сделок на той же свече на которой был сигнал. Вот и вопрос как сделать так чтобы советник не открывал больше двух сделок по 1 сигналу (т.е. на сигнально свече)?
Как-то так:
int buycount=0, sellcount=0; double MA_slow, MA_fast, MA_fast11, MA_fast2, MA_fast22; int res1, res2; datetime TimeBar=0; bool finded=false; int start() { if(TimeBar!=Time[0]) { TimeBar=Time[0]; buycount=0; sellcount=0; } MA_slow=iMA (Symbol(),0,Period_MA_slow,Shift_MA_slow,Metod_MA_slow,Price_MA_slow,0); MA_fast=iMA (Symbol(),0,Period_MA_fast,Shift_MA_fast,Metod_MA_fast,Price_MA_fast,0); MA_fast11=iMA (Symbol(),0,Period_MA_fast,Shift_MA_fast,Metod_MA_fast,Price_MA_fast,1); MA_fast2=iMA (Symbol(),0,Period_MA_fast2,Shift_MA_fast2,Metod_MA_fast2,Price_MA_fast2,0); MA_fast22=iMA (Symbol(),0,Period_MA_fast2,Shift_MA_fast2,Metod_MA_fast2,Price_MA_fast2,1); if(MA_slow>MA_fast && MA_slow<MA_fast11 && sellcount<2) { finded=false; for(int pos=0; pos<OrdersTotal(); pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { finded=true; break; } } if(!finded) { res1=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit*Point,Digits),NULL,Magic,0,clrRed); res2=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit2*Point,Digits),NULL,Magic,0,clrRed); if(res1!=-1 || res2!=-1) sellcount++; } } if(MA_slow<MA_fast2 && MA_slow>MA_fast22 && buycount<2) { finded=false; for(int pos=0; pos<OrdersTotal(); pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { finded=true; break; } } if(!finded) { res1=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit*Point,Digits),NULL,Magic,0,clrGreen); res2=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit2*Point,Digits),NULL,Magic,0,clrGreen); if(res1!=-1 || res2!=-1) buycount++; } } return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите код на ограничение открытия советником ордеров на "0" баре, в этом случае не более двух ордеров sell и bay
int start()
{
// if (TimeBar==Time[0]) return(0);
double MA_slow=iMA (Symbol(),0,Period_MA_slow,Shift_MA_slow,Metod_MA_slow,Price_MA_slow,0);
double MA_fast=iMA (Symbol(),0,Period_MA_fast,Shift_MA_fast,Metod_MA_fast,Price_MA_fast,0);
double MA_fast11=iMA (Symbol(),0,Period_MA_fast,Shift_MA_fast,Metod_MA_fast,Price_MA_fast,1);
double MA_fast2=iMA (Symbol(),0,Period_MA_fast2,Shift_MA_fast2,Metod_MA_fast2,Price_MA_fast2,0);
double MA_fast22=iMA (Symbol(),0,Period_MA_fast2,Shift_MA_fast2,Metod_MA_fast2,Price_MA_fast2,1);
int res;
int kolpos = 0;
for(int pos=0; pos<OrdersTotal(); pos++)
{
res=OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
kolpos++;
}
if (kolpos==0)
{
if(MA_slow>MA_fast&&MA_slow<MA_fast11)
{
// TimeBar=Time[0];
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit*Point,Digits),NULL,Magic,0,clrRed);
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,NormalizeDouble(Bid+Stoploss*Point,Digits),NormalizeDouble(Bid-Takeprofit2*Point,Digits),NULL,Magic,0,clrRed);
}
if(MA_slow<MA_fast2&&MA_slow>MA_fast22)
{
// TimeBar=Time[0];
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit*Point,Digits),NULL,Magic,0,clrGreen);
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,NormalizeDouble(Ask-Stoploss*Point,Digits),NormalizeDouble(Ask+Takeprofit2*Point,Digits),NULL,Magic,0,clrGreen);
}
}
return(0);
}