Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 548

[Удален]

Перед закрытием такая.

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
edutak:
Так?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

Примерно так.

Лучше оформить это в виде функции.

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
edutak:

Перед закрытием такая.

У вас перед закрытием отсутсвует проверка на магик и символ. Может закрыть сделки другого советника или открытые в ручную.
[Удален]
Vitalii Ananev:
Примерно так.

Нет, проблема не решилась. она не в этом блоке.

Поясните пожалуйста, в чем разница между моим и вашим вариантами?  

edutak:

Нет, проблема не решилась. она не в этом блоке.

Поясните пожалуйста, в чем разница между моим и вашим вариантами?  

Значит что то делаете не так, разбирайтесь с вашим кодом.

 

Мой лучше :)

...

Так вы не пропустите не одного ордера. В вашем варианте если в этот момент будет закрыта какая то позиция или удален ордер, то можно пропустить какой то из оставшихся.

[Удален]
Vitalii Ananev:

Значит что то делаете не так, разбирайтесь с вашим кодом.

 

Мой лучше :)

...

Так вы не пропустите не одного ордера. В вашем варианте если в этот момент будет закрыта какая то позиция или удален ордер, то можно пропустить какой то из оставшихся.

Объявил как глобальную переменную, но выдает ошибку.

int CountOrder;
edutak:

Объявил как глобальную переменную, но выдает ошибку.

То что я вам написал это функция.

Вот пример использования.

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
[Удален]
Vitalii Ananev:

То что я вам написал это функция.

Вот пример использования.

Запутался
edutak:
Запутался

В чем?

void OnTick()
{
 .....
 int Count = CountOrder(Symbol(),Magik);
 if (Count==0)
 {
  //
  ....
 }
 ......
}


int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
} 

Так понятнее?

[Удален]
Vitalii Ananev:

В чем?

Так понятнее?

Да, Спасибо. В общем понятно, это надо для корректной работы на реальном счете. Правильно?

Но у меня ошибка, где-то в логике закрытия ордеров.