Открывается несколько ордеров подряд

 

Всем добрый день.

Написал код, но никак не могу решить одну проблему. Советник должен открывать не более 1 ордера на один бар, а он может их налепить пока депозита хватает. Что я только не делал, как только не ставил критерии - ничего не получается. Вот последняя версия программы. Проблема сохраняется. Помогите, пожалуйста, разобраться.

Спасибо.

double Lot = 0.1;








//--------------------------------------------------------------------------------------------------


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+



  
int start()
{

double Alligator=iAlligator(NULL,0,13,32,8,5,5,3,2,4,MODE_GATORTEETH,1);


      if (Alligator>Bid)
      {
        for(int b=0; b<=OrdersTotal(); b++)
        {
                        if (OrderSelect(b,SELECT_BY_POS)==false)
                {

                                if(Low[1]>Low[2] && Bid==Low[2]-1*Point)
                                Sell();
                }
                if (OrderSelect(b,SELECT_BY_POS)==true)
                {
                        if(OrderOpenTime()<Time[0])
                        {

                                if(Low[1]>Low[2] && Bid==Low[2]-1*Point)
                                Sell();
                        }
                }

        }
      }

      
      if (Alligator<Ask)
      {
        for(int b=0; b<=OrdersTotal(); b++)
        {
                        if (OrderSelect(b,SELECT_BY_POS)==false)
                {

                        if(High[1]<High[2] && Ask==High[2]+1*Point)
                                Buy();
                }
                if (OrderSelect(b,SELECT_BY_POS)==true)
                {
                        if(OrderOpenTime()<Time[0])
                        {

                        if(High[1]<High[2] && Ask==High[2]+1*Point)
                                Buy();
                        }
                }

        }
      }

  





   return;
}



double Buy ()
{               
RefreshRates();
for(int m=0; m<=OrdersTotal(); m++)
{
        if (OrderSelect(m,SELECT_BY_POS,MODE_TRADES)==false)
        {
        OrderSend (Symbol (), OP_BUY, Lot, Ask, 0, Low[1],Ask+50*Point, NULL,0, 0,Green); // Открываемся вверх
        Print(GetLastError());
        }
}
        if (OrderSelect(m,SELECT_BY_POS,MODE_TRADES)==true)
        {
                if (OrderOpenTime()<Time[0])
                OrderSend (Symbol (), OP_BUY, Lot, Ask, 0, Low[1],Ask+50*Point, NULL,0, 0,Green); // Открываемся вверх
                Print(GetLastError());

        }

return;

}


double Sell ()
{
RefreshRates();
for(m=0; m<=OrdersTotal(); m++)
{
        if (OrderSelect(m,SELECT_BY_POS,MODE_TRADES)==false)
        {

OrderSend (Symbol (), OP_SELL, Lot, Bid, 0, High[1],Bid-50*Point,NULL ,0, 0,Red); //Открываемся вниз
Print(GetLastError());
        }
        if (OrderSelect(m,SELECT_BY_POS,MODE_TRADES)==true)
        {
                if (OrderOpenTime()<Time[0])
                {
                        OrderSend (Symbol (), OP_SELL, Lot, Bid, 0, High[1],Bid-50*Point,NULL ,0, 0,Red); //Открываемся вниз
                        Print(GetLastError());

                }

return;
}
 

Так нуно:

if(OrdersTotal()==0)//если ордеров открытых нет, то..
{
//... будем окучивать рынок
}
 
Maks:

Всем добрый день.

Написал код, но никак не могу решить одну проблему. Советник должен открывать не более 1 ордера на один бар, а он может их налепить пока депозита хватает. Что я только не делал, как только не ставил критерии - ничего не получается. Вот последняя версия программы. Проблема сохраняется. Помогите, пожалуйста, разобраться.

Спасибо.

Вот аналогичный код такого советника

extern int Magic = 04356;
extern double lot =0.1;
extern int tp =2000;
extern int sl =1100;
//+------------------------------------------------------------------+
int orders(){int j=0;for (int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if((OrderMagicNumber()==Magic)&&(OrderSymbol()==Symbol()))j++;}return(j);}
//+------------------------------------------------------------------+
void Send_buy(){if(orders()==0)OrderSend(Symbol(),OP_BUY,lot,Ask,5,Bid-sl*Point,Ask+tp*Point,"buy",Magic,0,Blue);}
//+------------------------------------------------------------------+
void Send_sell(){if(orders()==0)OrderSend(Symbol(),OP_SELL,lot,Bid,5,Ask+sl*Point,Bid-tp*Point,"sell",Magic,0,Red);}
//+------------------------------------------------------------------+
int start()
{
static int time;if(Time[0]==time)return(0);time=Time[0];
double Alligator=iAlligator(NULL,0,13,32,8,5,5,3,2,4,MODE_GATORTEETH,1);
if(Alligator>Bid)Send_buy();
if(Alligator<Ask)Send_sell();
}

 

Всем спасибо.

Буду разбираться.

Причина обращения: