Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай принцип работы Торговых Сигналов для MetaTrader
Kirill Andreev
826
Kirill Andreev 2016.11.05 17:33 

Пишу код для того чтобы в моем советнике не открывалось ордеров больше 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);
              }

   }
Vitaly Muzichenko
3494
Vitaly Muzichenko 2016.11.05 18:32  
Kirill Andreev:

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

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

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

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

if(NumberOfOrders(_Symbol, -1, Magic)<=5) {
  что-то делаем
}
Alexander Bereznyak
21475
Alexander Bereznyak 2016.11.05 19:40  
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);
  }
Kirill Andreev
826
Kirill Andreev 2016.11.05 21:00  
Vitaly Muzichenko:

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

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

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

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

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

Vitaly Muzichenko
3494
Vitaly Muzichenko 2016.11.05 21:29  
Kirill Andreev:

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

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

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

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

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


 

Artem Ashikhmin
1478
Artem Ashikhmin 2016.11.05 21:32  

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);  

Artem Ashikhmin
1478
Artem Ashikhmin 2016.11.05 21:42  
Kirill Andreev:

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

Можно так:

bool Stop=true; 
//---------------+
void start() { 
if (моё условие совпало && Stop)  {Stop=false;} else Stop=true;

Kirill Andreev
826
Kirill Andreev 2016.11.05 21:48  
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);  

спасибо, все получилось, все работает!!!!!!
Artem Ashikhmin
1478
Artem Ashikhmin 2016.11.05 21:58  
Kirill Andreev:
спасибо, все получилось, все работает!!!!!!
Отлично, рад помочь))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий