Хелп! Советник начал закрывать другие ордера

 

Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...

В коде стоит проверка по Symbol() и OrderMagicNumber()

Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине

В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()

if (Ask >= Target && CountBuy() >0) 
    
    {
       for (i=OrdersTotal()-1; i>=0; i--)
       {
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
          {
             if(OrderMagicNumber()==Magic && OrderType()== OP_BUY) 
            {
             OrderClose (OrderTicket(), OrderLots(), Bid, 10, Red);
             err=GetLastError();
     Print("error: ",err, " цена: ", Bid);

             
          }
       }
    } 
    
 
int CountBuy()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>= 0; trade--)
   {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
      {
         if(OrderType() == OP_BUY)
         count++;
      }
   }
   return(count);
}
 
в вашем первом примере нет проверки на символ
 
Mikhail Vorobyov:

Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...

В коде стоит проверка по Symbol() и OrderMagicNumber()

Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине

В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()

А можете в коде выделить строку с проверкой по символу??? Только не правьте свой код и не пытайтесь оправдаться тем, что это вырезано, а в советнике всё есть...

 
Mikhail Vorobyov:

Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...

В коде стоит проверка по Symbol() и OrderMagicNumber()

Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине

В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()

В вашем коде нет проверки на Symbol() по которому открыта позиция. 

надо сделать так:

if (Ask >= Target && CountBuy() >0) 
    
    {
       for (i=OrdersTotal()-1; i>=0; i--)
       {
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
          {
             if(OrderMagicNumber()==Magic && OrderSymbol() == Symbol() && OrderType()== OP_BUY) 
            {
             OrderClose (OrderTicket(), OrderLots(), Bid, 10, Red);
             err=GetLastError();
     Print("error: ",err, " цена: ", Bid);

             
          }
       }
    } 
 
в первом примере нарушено соответствие фигурных скобок
 
Vitalii Ananev:

В вашем коде нет проверки на Symbol() по которому открыта позиция. 

надо сделать так:

int CountBuy()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>= 0; trade--)
   {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
      {
         if(OrderType() == OP_BUY)
         count++;
      }
   }
   return(count);
}

вот функция в условиях if (Ask >= Target && CountBuy() >0

 
Alexander Bereznyak:
в первом примере нарушено соответствие фигурных скобок

Смысл не в скобках, возможно когда он кусок кода вставлял последнюю скобку забыл. 

 
это функция счетчик, она не закрывает ордера, у вас в первом примере ошибки
 
Mikhail Vorobyov:

вот функция в условиях if (Ask >= Target && CountBuy() >0

Проверка на соответствие символа должна быть непосредственно перед закрытием ордера. Там-же где проверка на соответствие магика.

 
Alexander Bereznyak:
в первом примере нарушено соответствие фигурных скобок

да да. это я скопировал криво. убрал комментарии свои а так вот этот код


 if (Bid <= Target && CountSell() > 0) 
  
    {
       for (int i=OrdersTotal()-1; i>=0; i--)
       {
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
          {
             if(OrderMagicNumber()==Magic && OrderType()== OP_SELL)  //важно
             {
             OrderClose (OrderTicket(), OrderLots(), Ask, 500, Red);
             int err=GetLastError();
     Print("error: ",err, " цена: ", Ask);

             //  Print ("Сработала проверка больше таргета, ", " ордер тикет: ", OrderTicket(), " ордер лотс: ", OrderLots(), " цена: ",  Bid);
              }
          }
       }
    }