Вопрос о функции OnTradeTransaction - страница 19

 
JRandomTrader #:

Ещё несколько задвоилось.

Короче, проблема с задвоением действительно присутствует, подтверждаю. Могу предположить "гонки" где-то внутри MT, сервера или между ними.

Моих роботов это, в принципе, не касается, но знать об этом надо.

Странные люди. Так и не сделали подробный вывод всех структур, как просили.

 
Stanislav Korotky #:

Странные люди. Так и не сделали подробный вывод всех структур, как просили.

Я привёл минимальный код, подтверждающий само наличие проблемы.

Если кто-то из MQ проявит хоть какую-то заинтересованность в её исправлении, готов предоставить дополнительную информацию.

Мне, ещё раз повторю, указанная проблема не мешает, не я её обнаружил, я только подтвердил её наличие.

 
JRandomTrader #:

Я привёл минимальный код, подтверждающий само наличие проблемы.

Если кто-то из MQ проявит хоть какую-то заинтересованность в её исправлении, готов предоставить дополнительную информацию.

Мне, ещё раз повторю, указанная проблема не мешает, не я её обнаружил, я только подтвердил её наличие.

Речь о том, чтобы выяснить, проблема ли это. Если в ваших условиях проблема воспроизводится, то не понятно в чем сложность, выводить в лог и приводить полную информацию (все структуры, а не отрывки).

 
JRandomTrader #:

Я привёл минимальный код, подтверждающий само наличие проблемы.

Если кто-то из MQ проявит хоть какую-то заинтересованность в её исправлении, готов предоставить дополнительную информацию.

Мне, ещё раз повторю, указанная проблема не мешает, не я её обнаружил, я только подтвердил её наличие.

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

При необходимости получения другой информации, дописать его не составит труда. Главное что ошибка моделируется, и здесь описано как.

А ситуаций, когда она на что то может повлиять, действительно крайне мало.

 
Stanislav Korotky #:

Речь о том, чтобы выяснить, проблема ли это. Если в ваших условиях проблема воспроизводится, то не понятно в чем сложность, выводить в лог и приводить полную информацию (все структуры, а не отрывки).

Запустите у себя мой код и понаблюдайте несколько дней - у вас проявляется?

 
Andrey Kaunov #:

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

При необходимости получения другой информации, дописать его не составит труда. Главное что ошибка моделируется, и здесь описано как.

А ситуаций, когда она на что то может повлиять, действительно крайне мало.

Добрый день!

Очень часто, при проектировании советника, программист уделяет внимание сделкам, - это не правильно.

Ордер - вот первоисточник всего!

Следите за ордером, все, что с ним происходит, и Вы решите все Ваши проблемы.

Я работаю асинхронными ордерами через OnTradeTransaction с 2015 года и ни разу не было никаких проблем.

 

prostotrader #:

Следите за ордером, все, что с ним происходит, и Вы решите все Ваши проблемы.

Спасибо за совет. Попробую с ордерами поковырять на досуге. Может и там повторные вызовы будут ;)

 
Andrey Kaunov #:

Спасибо за совет. Попробую с ордерами поковырять на досуге. Может и там повторные вызовы будут ;)

Для начала создайте перечисление состояния ордера

enum ENUM_ORD_STATE
{
  ORD_NO_STATE   = 0, //ордер не установлен
  ORD_DO_SET     = 1, //отдана команда на установку
  ORD_DO_MODIFY  = 2, //отдана команда на модификацию
  ORD_WORK       = 3, //отложенный ордер "стоит" в стакане
  ORD_DO_CANCEL  = 4  //отдана команда на удаление
};

В  OnTradeTransaction меняете состояние ордера, проверяя что с ордером произошло (исполнился частично, полностью, реджект, снят)

Вот здесь, хорошая функция проверки состояния ордера

https://www.mql5.com/ru/forum/67298/page2#comment_2089220

ФОРТС: В помощь начинающим - Если мы хотим модифицировать или удалить ордер, то нам нужно знать, что он существует.
ФОРТС: В помощь начинающим - Если мы хотим модифицировать или удалить ордер, то нам нужно знать, что он существует.
  • 2015.11.25
  • www.mql5.com
Поэтому нужна дополнительная проверка состояния ордера ровно как и для других действий над ордером volume. Часто используемые и полезные функции стала называться OrderRealSelect получать данные по ордеру
 
prostotrader #:

Для начала создайте перечисление состояния ордера

Аналогичные мысли:

enum MT_ORD_STATE
  {
   ORD_NA,  // Not available
   ORD_SENT,
   ORD_ACTIVE,
   ORD_CHANGE_SENT,
   ORD_DEL_SENT
  };

И элемент массива ордеров:

struct MTOrder
  {
   ulong id;
   ulong Ticket;
   datetime Time;
   datetime TimeNotFound;
   double   Price;
   double   Vol;
   double   VolInit;
   uint     request_id;
   ENUM_ORDER_TYPE   Type;
   MT_ORD_STATE MTState;
   int      Reserved;
   bool     Idf; // Identified
  };
 
JRandomTrader #:

Аналогичные мысли:

И элемент массива ордеров:

У меня не мысли :)

8 год работает....