ФОРТС. Вопросы по исполнению - страница 131

 

Круто, спасибо за обзор!

1. Что за железо? Сервер требовательный, а тут похоже, что на обычном ПК запускалось все. Или ошибаюсь?

2. Настройки исполнения / плагины / маршрутизацию точно проверили? Очень похоже на искуственную задержку (чтобы не спалить б-бук).

Интересно бы разобраться.


ps: продублировал здесь, т.к. увижу ответ (а в блоге нужно заходить проверять)

 
Andrey Khatimlianskii:

ps: продублировал здесь, т.к. увижу ответ (а в блоге нужно заходить проверять)

Ответил там.

 
Andrey Khatimlianskii:

Интересно бы разобраться.



6 год прошу разработчиков и брокера разобраться.... 

Добавлено

Что бы разбираться было легче, лучше использовать асинхронные ордера (логов больше).

 

Ничего не меняется.... Печально (Открывашка, реал, ФОРТС, Билд 2280).

--------------------------- Установка ордера -----------------------------
Терминал
2020.02.11 10:00:02.170 Trades  'xxxxx': buy limit 2.00 SBRF-6.20 at 22147                                                          (приказ на установку ордера)


Советник
2020.02.11 10:00:03.233 FCS_Trader (SBRF-3.20,M1)       CheckOrders: Не получен билет Buy ордера. Ожидание продолжается...          (ожидание получения тикета) 

Терминал
2020.02.11 10:00:04.147 Trades  'ххххх': accepted buy limit 2.00 SBRF-6.20 at 22147                                                 (ордер проверен, присвоен тикет)  


Советник
2020.02.11 10:00:04.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:05.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:06.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

Терминал
2020.02.11 10:00:07.247 Trades  'ххххх': buy limit 2.00 SBRF-6.20 at 22147 placed for execution in 5078.289 ms                         (приказ отправлен на биржу)
                                                                                                                                       (ответ биржи терминалом не логируется)  
----------------------------------- Удаление ордера ---------------------------------------------------
2020.02.11 10:00:07.444 Trades  'ххххх': cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147                                     (приказ на удаление ордера) 


Советник
2020.02.11 10:00:08.747 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117122773                (ожидание проверки ордера сервером МТ5)

Терминал
2020.02.11 10:00:09.469 Trades  'ххххх': accepted cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147                             (ордер проверен) 
2020.02.11 10:00:09.759 Trades  'ххххх': cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147 placed for execution in 2315.130 ms (приказ отправлен на биржу)
                                                                                                                                        (ответ биржи терминалом не логируется) 

Советник
2020.02.11 10:00:10.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:11.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:12.748 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:13.751 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:15.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:16.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:17.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:18.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:20.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:21.729 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:22.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:23.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:25.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:26.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:28.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:29.733 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:31.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:32.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:33.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:35.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:36.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:37.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:38.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:40.237 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:41.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:43.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:44.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:45.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:47.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:48.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:49.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:51.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:52.729 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:53.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:55.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:56.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:58.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:59.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:01.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:02.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:03.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:04.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:06.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:07.736 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:09.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:10.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:11.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:12.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:14.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:15.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:16.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:17.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:19.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:20.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:21.734 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:22.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:23.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:25.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:26.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:27.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:29.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:30.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:32.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:33.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:35.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:36.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:38.236 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:39.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:41.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:42.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:44.238 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:45.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:46.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:48.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:49.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

Лога терминала нет, т.к разработчики не сочли нужным логировать ответ биржи.

1 минуту 42 секунды удалялся ордер!

 
Спасибо за инфу, очень полезное исследование терминала в вакууме, где нельзя сослаться на плохое интернет соединение и на плохую биржу, которая задерживает исполнение.
 

Открывашка, реал, ФОРТС, Билд 2280

Сегодня вообще "переглючило", совсем не было синхронизации:

Привожу начало и конец лога (переустановил эксперта руками)

2020.02.13 10:01:45.988 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
......
2020.02.13 15:18:50.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549

На остальных чартах (2 терминала 83 эксперта) эксперты работали нормально 
 

Добавлено

Мне кажется, что "клюкануло" из-за того, что терминал каким-то образом раньше синхронизировал

данные после "accepted modify order #117284549", а должен был получить подтверждение и синхронизировать

данные после "modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day placed for execution in 1299.618 ms"

2020.02.13 10:00:09.529 Trades  'xxxxx': modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day
2020.02.13 10:00:10.079 Trades  'xxxxx': accepted modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day
2020.02.13 10:00:10.080 Trades  'xxxxx': cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557
2020.02.13 10:00:10.105 Trades  'xxxxx': accepted cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557
2020.02.13 10:00:10.828 Trades  'xxxxx': modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day placed for execution in 1299.618 ms
2020.02.13 10:00:10.930 Trades  'xxxxx': cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557 placed for execution in 850.015 ms
 
prostotrader:

Сегодня вообще "переглючило", совсем не было синхронизации:

Привожу начало и конец лога (переустановил эксперта руками)

Больше похоже на ошибку в логике советника.

То ли положились на последовательность событий (а она была другой), то ли просто чего-то не учли.

 
Andrey Khatimlianskii:

Больше похоже на ошибку в логике советника.

То ли положились на последовательность событий (а она была другой), то ли просто чего-то не учли.

Андрей!

Был бы согласен с Вами, если бы этот советник (не правленый 5 лет) всегда работал исправно!

При любом действии над ордером в советнике, ничего не происходит до выяснения что случилось с ордером.

А записи, что ордер модифицирован (Print(__FUNCTION__, ": Buy ордер модифицирован. ", "Новая цена = ", order_data.price_open, " Билет = ", a_ticket);) нет!

Нет и записи else Print(__FUNCTION__, ": Buy ордер в процессе модификации. Билет = ", a_ticket);

case SELECT_TRUE:
      switch(order_data.real_state)
      {
        case ORDER_EXIST:
          switch(o_status)
          {
            case BUY_ORDER:
              BuyOrder.mem_time = GetMicrosecondCount();
              switch(BuyOrder.state)
              {
                case ORD_DO_SET:  //Операции запрещены
                  BuyOrder.state = ORD_WORK;   //Операции разрешены
                  Print(__FUNCTION__, ": Buy ордер установлен. Билет = ", a_ticket);
                break;
                case ORD_DO_MODIFY:  //Операции запрещены
                  if(NormalizeDouble(BuyOrder.modify_price, Digits()) == NormalizeDouble(order_data.price_open, Digits()))
                  {
                    BuyOrder.state = ORD_WORK; //Изменено состояние ордера, над ним можно совершать операции
                    Print(__FUNCTION__, ": Buy ордер модифицирован. ", "Новая цена = ", order_data.price_open, " Билет = ", a_ticket);
                  }
                  else Print(__FUNCTION__, ": Buy ордер в процессе модификации. Билет = ", a_ticket);
                break;
                case ORD_DO_CANCEL: //Операции запрещены
                  Print(__FUNCTION__, ": OE Buy ордер в процессе удаления. Билет = ", a_ticket);
                break;
              }
            break


 

2020.02.13 10:00:08.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:11.491 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:12.992 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:14.485 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:15.491 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:16.982 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:18.491 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:19.989 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:20.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02.13 10:00:22.489 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02.13 10:00:23.489 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02.13 10:00:24.491 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02.13 10:00:25.983 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02.13 10:00:26.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549

А запись 

2020.02.13 10:00:08.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549

может появиться только если произошла ошибка или состояние ордера не определено (case SELECT_BUSY:)

  ENUM_ORD_SELECT order_select = OrderRealSelect(a_ticket, order_data, true);
  switch(order_select)
  {
    case SELECT_ERROR:
    case SELECT_BUSY:
      if(order_data.error_code == ERR_ZERO_TICKET)
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Buy ордера = 0");
          break;
          case SELL_ORDER:
            SellOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Sell ордера = 0");
          break;
        }
      }
      else
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Состояние Buy ордера не определено. Билет = ", a_ticket);
          break;
          case SELL_ORDER:
            SellOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Состояние Sell ордера не определено. Билет = ", a_ticket);
          break;
        }
      }
    break;

Добавлено

Функция OrderRealSelect(), до сегодняшнего дня всегда работала исправно (думаю, что и сейчас работает...)

#define ERR_ZERO_TICKET -1111

enum ENUM_ORD_SELECT
{
  SELECT_ERROR = 0,
  SELECT_FALSE = 1,
  SELECT_TRUE  = 2,
  SELECT_BUSY  = 3
};
enum ENUM_ORD_HYSTORY
{
  HYST_NOT_SPECIFIED = 0,
  HYST_TRUE          = 1,
  HYST_FALSE         = 2
};
//---
struct ORDER_DATA
{
  int                     error_code;
  ulong                   ticket;
  datetime                time_setup;
  ENUM_ORDER_TYPE         type;
  ENUM_ORDER_STATE        state;
  ENUM_ORD_REAL_STATE     real_state;
  datetime                expiration;
  datetime                time_done;
  long                    t_set_msc;
  long                    t_done_msc;
  ENUM_ORDER_TYPE_FILLING type_filling;
  ENUM_ORDER_TYPE_TIME    type_time;
  long                    magic;
  ENUM_ORDER_REASON       reason;
  long                    pos_id;
  long                    pos_by_id;
  double                  vol_init;
  double                  vol_cur;
  double                  price_open;
  double                  sl;
  double                  tp;
  double                  price_cur;
  double                  price_stlim;
  string                  symbol;
  string                  comment;
  string                  ext_id; 
  ENUM_ORD_HYSTORY        is_hystory;       
};
enum ENUM_ORD_REAL_STATE
{
  ORDER_NOT_SPECIFIED         = 0, //Состояние ордера не определено
  ORDER_NONE_CANCELED         = 1, //Ордера нет, отменён пользователем
  ORDER_NONE_PARTIAL_CANCELED = 2, //Ордера нет, исполнился частично (не был залит вторым объёмом)
  ORDER_NONE_PARTIAL          = 3, //Ордера нет, исполнился частично
  ORDER_NONE_EXPIRED          = 4, //Ордера нет, удалён по сроку
  ORDER_NONE_FILLED           = 5, //Ордера нет, исполнился полностью
  ORDER_NONE_REJECTED         = 6, //Ордера нет, отклонён брокером(биржей)
  ORDER_BUSY                  = 7, //Ордер находится в переходном состоянии
  ORDER_EXIST                 = 8, //Ордер выставлен на биржу, возможны действия над ним
  ORDER_EXIST_PARTIAL         = 9  //Ордер выставлен на биржу, частично исполнился, возможны действия над ним
};

//+------------------------------------------------------------------+
// Expert Order Real Select function                                 |
//+------------------------------------------------------------------+
ENUM_ORD_SELECT OrderRealSelect(const ulong ticket, ORDER_DATA &ord_data, const bool get_data)
{
  double init_vol = 0;
  double cur_vol = 0;
  ZeroMemory(ord_data);
  ord_data.real_state = ORDER_NOT_SPECIFIED;
  ord_data.error_code = ERR_SUCCESS;
  ResetLastError();
  ord_data.is_hystory = HYST_NOT_SPECIFIED;
  if(ticket > 0)
  {
    if(HistoryOrderSelect(ticket))
    {
      ord_data.is_hystory = HYST_TRUE;
      if(get_data == true)
      {
//--- long      
        ord_data.ticket = ulong(HistoryOrderGetInteger(ticket, ORDER_TICKET));
        ord_data.time_setup = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP));
        ord_data.type = ENUM_ORDER_TYPE( HistoryOrderGetInteger(ticket, ORDER_TYPE));
        ord_data.state = ENUM_ORDER_STATE( HistoryOrderGetInteger(ticket, ORDER_STATE));
        ord_data.expiration = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_EXPIRATION));
        ord_data.time_done = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE));
        ord_data.t_set_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP_MSC));
        ord_data.t_done_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE_MSC));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(HistoryOrderGetInteger(ticket, ORDER_TYPE_FILLING));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME(HistoryOrderGetInteger(ticket, ORDER_TYPE_TIME));
        ord_data.magic = HistoryOrderGetInteger(ticket, ORDER_MAGIC);
        ord_data.reason = ENUM_ORDER_REASON(HistoryOrderGetInteger(ticket, ORDER_REASON));
        ord_data.pos_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID);
        ord_data.pos_by_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_BY_ID);
//--- double        
        ord_data.vol_init = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL);
        ord_data.vol_cur = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT);
        ord_data.price_open = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN);
        ord_data.sl = HistoryOrderGetDouble(ticket, ORDER_SL);
        ord_data.tp = HistoryOrderGetDouble(ticket, ORDER_TP);
        ord_data.price_cur = HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT);
        ord_data.price_stlim = HistoryOrderGetDouble(ticket, ORDER_PRICE_STOPLIMIT);
//--- string        
        ord_data.symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL);
        ord_data.comment = HistoryOrderGetString(ticket, ORDER_COMMENT);
        ord_data.ext_id = HistoryOrderGetString(ticket, ORDER_EXTERNAL_ID);
      }
      else
      {
        ord_data.state = ENUM_ORDER_STATE(HistoryOrderGetInteger(ticket, ORDER_STATE));
        cur_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT);
        init_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL);
      }   
//---
      switch(ord_data.state)
      { 
        case ORDER_STATE_CANCELED:
          if(get_data)
          {
            if(ord_data.vol_init == ord_data.vol_cur)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
            else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }
          else
          {
            if(init_vol == cur_vol)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
            else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }    
        break;
         
        case ORDER_STATE_PARTIAL:
          ord_data.real_state = ORDER_NONE_PARTIAL;
        break;
                                         
        case ORDER_STATE_EXPIRED:
          ord_data.real_state = ORDER_NONE_EXPIRED;
        break;
                                                                              
        case ORDER_STATE_FILLED:
          ord_data.real_state = ORDER_NONE_FILLED;
        break;
                                         
        case ORDER_STATE_REJECTED:
          ord_data.real_state = ORDER_NONE_REJECTED;
        break;  
      }
    }
    else
    if(OrderSelect(ticket))
    {
      ord_data.is_hystory = HYST_FALSE;
      if(get_data == true)
      {
//--- long      
        ord_data.ticket = ulong(OrderGetInteger(ORDER_TICKET));
        ord_data.time_setup = datetime(OrderGetInteger(ORDER_TIME_SETUP));
        ord_data.type = ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE));
        ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE));
        ord_data.expiration = datetime(OrderGetInteger(ORDER_TIME_EXPIRATION));
        ord_data.time_done = datetime(OrderGetInteger(ORDER_TIME_DONE));
        ord_data.t_set_msc = datetime(OrderGetInteger(ORDER_TIME_SETUP_MSC));
        ord_data.t_done_msc = datetime(OrderGetInteger(ORDER_TIME_DONE_MSC));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(OrderGetInteger(ORDER_TYPE_FILLING));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME(OrderGetInteger(ORDER_TYPE_TIME));
        ord_data.magic = OrderGetInteger(ORDER_MAGIC);
        ord_data.reason = ENUM_ORDER_REASON(OrderGetInteger(ORDER_REASON));
        ord_data.pos_id = OrderGetInteger(ORDER_POSITION_ID);
        ord_data.pos_by_id = OrderGetInteger(ORDER_POSITION_BY_ID);
//--- double        
        ord_data.vol_init = OrderGetDouble(ORDER_VOLUME_INITIAL);
        ord_data.vol_cur = OrderGetDouble(ORDER_VOLUME_CURRENT);
        ord_data.price_open = OrderGetDouble(ORDER_PRICE_OPEN);
        ord_data.sl = OrderGetDouble(ORDER_SL);
        ord_data.tp = OrderGetDouble(ORDER_TP);
        ord_data.price_cur = OrderGetDouble(ORDER_PRICE_CURRENT);
        ord_data.price_stlim = OrderGetDouble(ORDER_PRICE_STOPLIMIT);
//--- string        
        ord_data.symbol = OrderGetString(ORDER_SYMBOL);
        ord_data.comment = OrderGetString(ORDER_COMMENT);
        ord_data.ext_id = OrderGetString(ORDER_EXTERNAL_ID);      
      }
      else ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE));
      switch(ord_data.state)
      { 
        case ORDER_STATE_STARTED:
        case ORDER_STATE_REQUEST_ADD:
        case ORDER_STATE_REQUEST_MODIFY:
        case ORDER_STATE_REQUEST_CANCEL:
          ord_data.real_state = ORDER_BUSY;
        break; 
        case ORDER_STATE_PARTIAL:
          ord_data.real_state = ORDER_EXIST_PARTIAL;
        break;
        case ORDER_STATE_PLACED:
          ord_data.real_state = ORDER_EXIST;
        break;
      }
    }
    else ord_data.error_code = GetLastError();
    if((ord_data.error_code != ERR_SUCCESS) ||
       (ord_data.real_state == ORDER_NOT_SPECIFIED))
    {
      return(SELECT_ERROR);
    }
    else
    {
      switch(ord_data.real_state)
      {
        case ORDER_BUSY:
          return(SELECT_BUSY);
        break;
        case ORDER_EXIST:   
        case ORDER_EXIST_PARTIAL:
          return(SELECT_TRUE);
        break;
        default:   
          return(SELECT_FALSE);
        break;                                             
      }
    }
  } 
  else
  {
    ord_data.error_code = ERR_ZERO_TICKET; 
    return(SELECT_ERROR);
  }
}
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 

К сожалению, большинство ошибок (во всяком случае для ФОРТС) - плавающие!

Т.е воспроизвести ошибку всегда очень трудно.

Недаром эта тема тянется почти 6 лет....

Если бы была ошибка в логике советника, то она "вылезала" бы часто, а не раз-два в торговую неделю!

Тем более, что этот советник работает на 84 инструментах вот уже 5 с лишним лет!

Добавлено

Да и из глюка (пост выше)

2020.02.11 10:01:49.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

Все же был получен ответ биржи в OnTradeTransaction() или данные все же  синхронизировались в терминале (эта последняя запись)!

Через 1 минуту 42 секунды все же определилось что произошло с ордером!

Добавено

Да и не я расставляю в логе эти колоссальные задержки!

2020.02.13 10:00:04.427 Trades  'xxxxx': sell limit 1.00 SILV-12.20 at 18.91 placed for execution in 3400.385 ms
2020.02.13 10:00:05.049 Trades  'xxxxx': cancel order #117284388 buy limit 2.00 GAZR-9.20 at 21086
2020.02.13 10:00:05.049 Trades  'xxxxx': cancel order #117284389 sell limit 1.00 GAZR-9.20 at 25858
2020.02.13 10:00:05.106 Trades  'xxxxx': cancel order #117284392 buy limit 2.00 RTS-6.20 at 145350
2020.02.13 10:00:05.106 Trades  'xxxxx': cancel order #117284394 sell limit 1.00 RTS-6.20 at 162370
2020.02.13 10:00:05.815 Trades  'xxxxx': buy limit 1.00 SBRF-6.20 at 21997 placed for execution in 4582.068 ms
2020.02.13 10:00:05.816 Trades  'xxxxx': sell limit 2.00 SBRF-6.20 at 26879 placed for execution in 4583.598 ms
2020.02.13 10:00:06.809 Trades  'xxxxx': cancel order #117284397 sell limit 2.00 Si-12.20 at 66549
2020.02.13 10:00:08.356 Trades  'xxxxx': buy limit 2.00 ROSN-6.20 at 42128 placed for execution in 7119.210 ms
2020.02.13 10:00:08.367 Trades  'xxxxx': sell limit 1.00 ROSN-6.20 at 51112 placed for execution in 7129.944 ms
2020.02.13 10:00:08.370 Trades  'xxxxx': accepted buy limit 1.00 MOEX-6.20 at 10231
2020.02.13 10:00:08.374 Trades  'xxxxx': accepted sell limit 2.00 MOEX-6.20 at 12403
2020.02.13 10:00:08.375 Trades  'xxxxx': buy limit 1.00 GBPU-6.20 at 1.2631 placed for execution in 7093.203 ms
2020.02.13 10:00:08.382 Trades  'xxxxx': buy limit 2.00 LKOH-6.20 at 62201 placed for execution in 7100.184 ms
2020.02.13 10:00:08.384 Trades  'xxxxx': sell limit 1.00 GBPU-6.20 at 1.3405 placed for execution in 7101.788 ms
2020.02.13 10:00:08.384 Trades  'xxxxx': sell limit 2.00 LKOH-6.20 at 66799 placed for execution in 7102.416 ms
2020.02.13 10:00:08.570 Trades  'xxxxx': accepted buy limit 7.00 Eu-9.20 at 71131
2020.02.13 10:00:08.572 Trades  'xxxxx': buy limit 1.00 PLT-6.20 at 921.3 placed for execution in 7170.723 ms
2020.02.13 10:00:08.573 Trades  'xxxxx': accepted buy limit 1.00 MTSI-6.20 at 30664
2020.02.13 10:00:08.574 Trades  'xxxxx': accepted sell limit 2.00 MTSI-6.20 at 37202
2020.02.13 10:00:08.589 Trades  'xxxxx': buy limit 1.00 MIX-6.20 at 293475 placed for execution in 7153.171 ms
2020.02.13 10:00:08.590 Trades  'xxxxx': buy limit 2.00 MXI-6.20 at 2914.25 placed for execution in 7155.083 ms
2020.02.13 10:00:08.605 Trades  'xxxxx': buy limit 1.00 HYDR-6.20 at 6716 placed for execution in 7169.712 ms
2020.02.13 10:00:08.607 Trades  'xxxxx': sell limit 2.00 MXI-6.20 at 3295.65 placed for execution in 7171.361 ms
2020.02.13 10:00:08.609 Trades  'xxxxx': sell limit 1.00 MIX-6.20 at 331775 placed for execution in 7173.465 ms
2020.02.13 10:00:08.610 Trades  'xxxxx': sell limit 2.00 HYDR-6.20 at 8128 placed for execution in 7174.417 ms
2020.02.13 10:00:08.611 Trades  'xxxxx': buy limit 2.00 VTBR-6.20 at 4397 placed for execution in 7166.885 ms
2020.02.13 10:00:08.612 Trades  'xxxxx': sell limit 2.00 VTBR-6.20 at 5321 placed for execution in 7167.615 ms
2020.02.13 10:00:08.633 Trades  'xxxxx': buy limit 1.00 AUDU-6.20 at 0.6592 placed for execution in 7115.432 ms
2020.02.13 10:00:08.636 Trades  'xxxxx': accepted buy limit 1.00 RTKM-6.20 at 8144
2020.02.13 10:00:08.640 Trades  'xxxxx': accepted sell limit 2.00 RTKM-6.20 at 10450
2020.02.13 10:00:08.655 Trades  'xxxxx': buy limit 10.00 BR-7.20 at 51.87 placed for execution in 7133.431 ms
2020.02.13 10:00:08.658 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 61.51 placed for execution in 7136.161 ms
2020.02.13 10:00:08.667 Trades  'xxxxx': buy limit 2.00 LKOH-12.20 at 59401 placed for execution in 7072.427 ms
2020.02.13 10:00:08.677 Trades  'xxxxx': sell limit 1.00 LKOH-12.20 at 72363 placed for execution in 7081.993 ms
2020.02.13 10:00:08.677 Trades  'xxxxx': buy limit 1.00 BR-9.20 at 54.06 placed for execution in 7078.509 ms
2020.02.13 10:00:08.690 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91501 placed for execution in 6985.443 ms
2020.02.13 10:00:08.704 Trades  'xxxxx': cancel order #117284430 buy limit 1.00 SBRF-6.20 at 21997
2020.02.13 10:00:08.704 Trades  'xxxxx': cancel order #117284431 sell limit 2.00 SBRF-6.20 at 26879
2020.02.13 10:00:08.734 Trades  'xxxxx': buy limit 2.00 SBPR-6.20 at 20354 placed for execution in 6811.282 ms
2020.02.13 10:00:08.734 Trades  'xxxxx': buy limit 2.00 MGNT-6.20 at 3404 placed for execution in 6811.918 ms
2020.02.13 10:00:08.735 Trades  'xxxxx': sell limit 2.00 MGNT-6.20 at 4128 placed for execution in 6812.492 ms
2020.02.13 10:00:08.736 Trades  'xxxxx': sell limit 2.00 SBPR-6.20 at 25106 placed for execution in 6813.437 ms
2020.02.13 10:00:08.807 Trades  'xxxxx': buy limit 1.00 MOEX-6.20 at 10231 placed for execution in 6542.366 ms
2020.02.13 10:00:08.809 Trades  'xxxxx': sell limit 2.00 MOEX-6.20 at 12403 placed for execution in 6544.267 ms
2020.02.13 10:00:08.811 Trades  'xxxxx': buy limit 1.00 MTSI-6.20 at 30664 placed for execution in 6426.971 ms
2020.02.13 10:00:08.829 Trades  'xxxxx': buy limit 7.00 Eu-9.20 at 71131 placed for execution in 6491.851 ms
2020.02.13 10:00:08.830 Trades  'xxxxx': sell limit 2.00 MTSI-6.20 at 37202 placed for execution in 6445.075 ms
2020.02.13 10:00:08.833 Trades  'xxxxx': buy limit 1.00 RTKM-6.20 at 8144 placed for execution in 6401.223 ms
2020.02.13 10:00:08.834 Trades  'xxxxx': sell limit 2.00 RTKM-6.20 at 10450 placed for execution in 6402.302 ms

Это без учета ответа биржи!

Добавлено

Детализировал ошибки

  ORDER_DATA order_data;
  ENUM_ORD_SELECT order_select = OrderRealSelect(a_ticket, order_data, true);
  switch(order_select)
  {
    case SELECT_ERROR:
      if(order_data.error_code == ERR_ZERO_TICKET)
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Buy ордера = 0");
          break;
          case SELL_ORDER:
            SellOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Sell ордера = 0");
          break;
        }
      }
      else
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Ошибка определения состояния Buy ордера! Билет = ", a_ticket, " Код ошибки: ", order_data.error_code);
          break;
          case SELL_ORDER:
            SellOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Ошибка определения состояния Sell ордера! Билет = ", a_ticket, " Код ошибки: ", order_data.error_code);
          break;
        }
      }
    break;
    case SELECT_BUSY:
      switch(o_status)
      {
        case BUY_ORDER:
          BuyOrder.mem_time = GetMicrosecondCount();
          Print(__FUNCTION__, ": Buy Ордер в переходном состоянии. Билет = ", a_ticket, " Состояние: ", order_data.state);
        break;
        case SELL_ORDER:
          SellOrder.mem_time = GetMicrosecondCount();
          Print(__FUNCTION__, ": Sell Ордер в переходном состоянии. Билет = ", a_ticket, " Состояние: ", order_data.state);
        break;
      }
    break;

Посмотрим завтра, если будет глюк

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 

Если поднять историю этой темы, то в самом начале возмущали задержки в десятки миллисекунд,

затем секунды, а теперь и минуты нам "по плечу"!

Потихонечку начинаю переписывать роботов под КВИК!

При потенциале МТ5 в 6-7 миллисекунд с моей сетью (из дома, без учета ответа биржи)

2020.02.13 19:30:01.442 Trades  'xxxxx': sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.447 Trades  'xxxxx': accepted sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.448 Trades  'xxxxx': sell limit 1.00 Si-6.21 at 67370 placed for execution in 6.555 ms
2020.02.13 19:30:01.508 Trades  'xxxxx': cancel order #117348182 sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.514 Trades  'xxxxx': accepted cancel order #117348182 sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.515 Trades  'xxxxx': cancel order #117348182 sell limit 1.00 Si-6.21 at 67370 placed for execution in 7.421 ms
2020.02.13 19:30:52.139 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:30:52.144 Trades  'xxxxx': accepted buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:30:52.146 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91001 placed for execution in 6.647 ms
2020.02.13 19:31:28.521 Trades  'xxxxx': cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:31:28.527 Trades  'xxxxx': accepted cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:31:28.528 Trades  'xxxxx': cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001 placed for execution in 7.740 ms
2020.02.13 19:33:35.368 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.373 Trades  'xxxxx': accepted sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.375 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 57.52 placed for execution in 7.326 ms
2020.02.13 19:33:35.424 Trades  'xxxxx': cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.429 Trades  'xxxxx': accepted cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.431 Trades  'xxxxx': cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52 placed for execution in 6.922 ms
С такими задержками, как сейчас, по моему мнению, у терминала нет будущего.