код для контроля количества открытия ордеров

 

Пишу код для того чтобы в моем советнике не открывалось ордеров больше 5шт допустим, никак не могу записать это в коде.

Вот что смог написать только. Если кто может поделитесь что не так делаю.

{
// Блок определения кол-ва ордеров разного типа
   for(int i=OrdersTotal(); i<=5; i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==Magik)
              {
               if(OrderType()==OP_BUY);
               if(OrderType()==OP_SELL);
              }

   }
 
Kirill Andreev:

Пишу код для того чтобы в моем советнике не открывалось ордеров больше 5шт допустим, никак не могу записать это в коде.

Вот что смог написать только. Если кто может поделитесь что не так делаю. 

Вот для ордеров, а это для позиций. Можно использовать функцией, а можно просто выдернуть нужный код.

После этого проверять количество, и если больше пяти - ничего не делаем

if(NumberOfOrders(_Symbol, -1, Magic)<=5) {
  что-то делаем
}
 
int CounterOrderTrade(int order_type)
  {
   int cnt=0;
//----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderMagicNumber()==Magic)
            if(OrderSymbol()==_Symbol)
               if(OrderType()==order_type
                  || order_type==-1)
                  cnt++;
//----
   return(cnt);
  }
 
Vitaly Muzichenko:

Вот для ордеров, а это для позиций. Можно использовать функцией, а можно просто выдернуть нужный код.

После этого проверять количество, и если больше пяти - ничего не делаем

if(NumberOfOrders(_Symbol, -1, Magic)<=5) {
  что-то делаем
}

спасибо, буду пробовать.

А как написть условие ничего чтобы если условие соблюдается не делал советник?

 
Kirill Andreev:

спасибо, буду пробовать.

А как написть условие ничего чтобы если условие соблюдается не делал советник?

Ну каким нибудь return или else

Например так, но вариантов много:

if(NumberOfOrders(_Symbol, -1, Magic) > 5) return; // если больше пяти - выход


 

 
Artem Ashikhmin:

extern int    MaxOrders = 3;
void start() {  

   // учет ордеров _______________
   double  buy_orders  = 0;
   double  sell_orders  = 0; 

   for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
      if(OrderType()==OP_BUY)  {buy_orders++;}
      if(OrderType()==OP_SELL) {sell_orders++; }
      }      
//------------------|
       if (buy_orders<MaxOrders)                  // в рынке максимум 3 ордера бай может быть
 SendOrder(OP_BUY, -, -, -, -, -, -, Blue);
       if (sell_orders<MaxOrders)                  // И в рынке максимум 3 ордера селл
 может быть
 SendOrder(OP_SELL, -, -, -, -, -, -, Red); 

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<< ИЛИ <<<<<<<<<<<<<<<<<<<<<<<<<<< 

extern int    MaxOrders = 3;
void start() {  

   // учет ордеров _______________
   double  Orders  = 0;

   for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
      Orders++;
      }      
//---------- в рынке только 3 ордера максимум
 может быть------------//

       if (Orders<MaxOrders)  
 SendOrder(OP_BUY, -, -, -, -, -, -, Blue);
       if (Orders<MaxOrders) 
 SendOrder(OP_SELL, -, -, -, -, -, -, Red);  

спасибо, все получилось, все работает!!!!!!