Проблема с закрытием ордеров

 

Здраствуйте.
Пишу советник, чтобы исключить психологические факторы.
Сам в MQL (как и в Си) новичок. Освоил прочитав справочный материал сайта и пару советников. Но у меня проблема с

закрытием ордеров (какой то тик-порядковый номер ордера0. Сообщение выдается следующее:
OrderClose error 4108
unknown ticket 13 for OrderClose function.
В принципе понятно. Но дело в том, что иногда все таки ордера закрывает, но в основном по S/L или T/P, всвязи с чем

сливает лаве.
Ордер открываю так:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Bid+TakeProfit*Point, "MyOrder",12345,Green,0);
Для чего "MyOrder" вроде понял (комментарий), а вот 12345 вставил сам особо не знаю для чего - какой-то MagicNumber.
Закрываю ордер так: OrderClose(ticket,0.1,Ask,10,Red).
Так вот проблема в том, что он их не закрывает, ссылаясь на ошибки, которые выше. Закрывает только по T/P и S/L.
Пожалуйста помогите мне разобраться. Если не сложно, объясните мне (желательно на примере), как правильно открывать

ордера и закрывать их, чтобы не возникало проблем с порядковыми номерами, чтобы они нормально закрывались.
Может понадобится: по сценарию моего советника максимум может быть открыт только один ордер.------->
int Ordera=OrdersTotal();
if (Ordera>=1) return;
else ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Bid+TakeProfit*Point, "MyOrder",12345,Green,0);
Заранее большое спасибо всем откликнувшимся на мой зов о помощи.

 
Arnold:

...Пожалуйста помогите мне разобраться. Если не сложно, объясните мне (желательно на примере), как правильно открывать

ордера и закрывать их, чтобы не возникало проблем с порядковыми номерами, чтобы они нормально закрывались.

...



https://book.mql4.com/ru . Здесь все написано, Ваш случай в разделе "Торговые операции"
 
Arnold:

...
Пожалуйста помогите мне разобраться. Если не сложно, объясните
мне (желательно на примере), как правильно открывать

ордера и закрывать их, чтобы не возникало проблем с порядковыми
номерами, чтобы они нормально закрывались
...
Если советник всегда открывает только один ордер, то можно сделать так
   if(ticket>0) //открыта позиция
   {
      OrderSelect(ticket,SELECT_BY_TICKET); //выбираем ордер по тикету
      if(OrderCloseTime()>0) ticket = 0; //проверяем не закрыта ли позиция, н-р, по S/L
      else
      {
         if(OrderType()==OP_BUY) //открыт ордер на BUY
         {
            if(lSumRule<Zona_Buy) //проверяем условие закрытия позиции (здесь должно быть ваше условие)
            {
               OrderClose(ticket,lots,Bid,3,CLR_NONE); //закрываем ордер
               ticket = 0; //обнуляем тикет
            }
         }
         if(OrderType()==OP_SELL) //открыт ордер на SELL
         {
            if(lSumRule>Zona_Sell) 
            {
               OrderClose(ticket,lots,Ask,3,CLR_NONE);
               ticket = 0;
            }
         }
      }
   }
Для работы с несколькими ордерами этот код не подойдет. Тогда необходимо организовывать работу с ордерами
через функции OrdersTotal(), OrderSelect(...) и т.д.
Причина обращения: