Ошибки, баги, вопросы - страница 3331

 
fxsaber #:

Пример 1% случаев, когда не в конце окажется и buy/sell.

  1. Асинхронно отправляется Buy-приказ.
  2. Асинхронно отправляется BuyLimit-приказ.
  3. Как только появился BuyLimit-тикет, делается его удаление.

В этом случае часто будет происходить ситуация, когда Buy-приказ будет не в конце таблицы ордеров.


Давайте разберем, что это обозначает. Пусть в таблице истории ордеров 1000 записей - ордера с индексами (HistoryOrderGetTicket) от 0 до 999.

Вот произошло событие п.3 выше - BuyLimit удалился и попал в таблицу истории ордеров. Он имеет индекс 1000 - его тикет отдается вызовом HistoryOrderGetTicket(1000).


Теперь произошло срабатывание Buy-приказа из п.1 - Buy-приказ попал в таблицу истории ордеров. Вы думаете, что его индекс 1001?

-Нет, его индекс 1000! Т.е. HistoryOrderGetTicket(1000) возвращал одно значение (BuyLimit-ticket), а через некоторое время - другое (Buy-ticket).


Интересна реакция не MQ, а форумчан. Либо это "красноречивое молчание", либо пофигизм.

Жесть
 
fxsaber #:

Пример 1% случаев, когда не в конце окажется и buy/sell.

  1. Асинхронно отправляется Buy-приказ.
  2. Асинхронно отправляется BuyLimit-приказ.
  3. Как только появился BuyLimit-тикет, делается его удаление.

В этом случае часто будет происходить ситуация, когда Buy-приказ будет не в конце таблицы ордеров.


Давайте разберем, что это обозначает. Пусть в таблице истории ордеров 1000 записей - ордера с индексами (HistoryOrderGetTicket) от 0 до 999.

Вот произошло событие п.3 выше - BuyLimit удалился и попал в таблицу истории ордеров. Он имеет индекс 1000 - его тикет отдается вызовом HistoryOrderGetTicket(1000).


Теперь произошло срабатывание Buy-приказа из п.1 - Buy-приказ попал в таблицу истории ордеров. Вы думаете, что его индекс 1001?

-Нет, его индекс 1000! Т.е. HistoryOrderGetTicket(1000) возвращал одно значение (BuyLimit-ticket), а через некоторое время - другое (Buy-ticket).


Интересна реакция не MQ, а форумчан. Либо это "красноречивое молчание", либо пофигизм.

А BuyLimit при этом совсем пропал?

 
Alexey Viktorov #:

А BuyLimit при этом совсем пропал?

Он станет 1001-м - HistoryOrderGetTicket(1001). Хоть и попал в таблицу раньше Buy-приказа.

Но чаще всего не в конец попадают отложенные ордера. Например, в 980-е место, смещая 20 записей вперед.

 
JRandomTrader #:

В другом коде использую

Убедился, что смотреть на две минуты в прошлое от получения ответа 10012  TRADE_RETCODE_TIMEOUT мало, теперь смотрю на час.

А зачем Вы еще 100 сек накидываете к TimeCurrent? На всякий случай или есть какая-то практика?
 
Dmitriy Skub #:
А зачем Вы еще 100 сек накидываете к TimeCurrent? На всякий случай или есть какая-то практика?

При таком подходе сделки на выходных (например, ввод/вывод) в HistorySelect не попадут.

 
Dmitriy Skub #:
А зачем Вы еще 100 сек накидываете к TimeCurrent? На всякий случай или есть какая-то практика?

Это на всякий случай.

 

fxsaber #:

Интересна реакция не MQ, а форумчан. Либо это "красноречивое молчание", либо пофигизм.

Меня ордера в истории интересуют только фактом своего попадания туда и оставшимся объёмом. Какой там у него индекс - неважно, мне он нужен один раз.

А активные ордера держу в отсортированном массиве.

 
JRandomTrader #:

Меня ордера в истории интересуют только фактом своего попадания туда и оставшимся объёмом. Какой там у него индекс - неважно, мне он нужен один раз.

А активные ордера держу в отсортированном массиве.

Когда 1 рыночный и пара отложек на одном инструменте это не проблема. А для динамической сетки из 100 ордеров задержки учета в реале критичны. Удалили лимитку, а в истории ее нашли через пару секунд так себе ситуация.
 
fxsaber #:

Пример 1% случаев, когда не в конце окажется и buy/sell.

  1. Асинхронно отправляется Buy-приказ.
  2. Асинхронно отправляется BuyLimit-приказ.
  3. Как только появился BuyLimit-тикет, делается его удаление.

В этом случае часто будет происходить ситуация, когда Buy-приказ будет не в конце таблицы ордеров.


Давайте разберем, что это обозначает. Пусть в таблице истории ордеров 1000 записей - ордера с индексами (HistoryOrderGetTicket) от 0 до 999.

Вот произошло событие п.3 выше - BuyLimit удалился и попал в таблицу истории ордеров. Он имеет индекс 1000 - его тикет отдается вызовом HistoryOrderGetTicket(1000).


Теперь произошло срабатывание Buy-приказа из п.1 - Buy-приказ попал в таблицу истории ордеров. Вы думаете, что его индекс 1001?

-Нет, его индекс 1000! Т.е. HistoryOrderGetTicket(1000) возвращал одно значение (BuyLimit-ticket), а через некоторое время - другое (Buy-ticket).


Интересна реакция не MQ, а форумчан. Либо это "красноречивое молчание", либо пофигизм.


А почему реакция квот не интересна? Или проблемы индейцев шерифа не интересуют?

Лично я на пятёрке не пишу, на четвёрке тоже не пишу, форум только почитываю. Но описанная ситуация - БАГ!

Интересно, а при переборе истории в цикле она также может измениться во время цикла? 
 
Valeriy Yastremskiy #:
Когда 1 рыночный и пара отложек на одном инструменте это не проблема. А для динамической сетки из 100 ордеров задержки учета в реале критичны. Удалили лимитку, а в истории ее нашли через пару секунд так себе ситуация.

Отправка приказа на удаление отмечается статусом ORD_DEL_SENT ордера в массиве активных ордеров. А появление ордера в истории - удаление из массива.

Или имеется в виду удаление по внешним причинам?