Дубликаты уведомлений onOrder v9.2.2.11

Страницы: 1
RSS
Дубликаты уведомлений onOrder v9.2.2.11
 
Простенький скрипт, который отправляет заявку на 1 лот в Quik_Junior по сберу так, чтобы она заведомо исполнилась.
В нём определены два колбэка, OnTransReply и OnOrder

В результате вижу, что OnOrder вызывается по-моей заявке два раза (она имеет 1 лот и исполняется сразу).
Причём, очевидно, так бывает не всегда. Но заметил что такое получается чаще, если делать перед этим реконнект с сервером.
Код:
Код
function OnTransReply(trans)
 -- Если поступила информация по текущей транзакции 
 message("TransReply:\n" .. --trans.date_time .. '\n' .. 
   tostring(trans.trans_id) .. '\n' .. 
   trans.sec_code .. '\n' .. tostring(trans.status) .. '\n' .. 
   tostring(tobin(trans.flags)) .. '\n' .. 
    tostring(trans.order_num) .. '\n' .. 
   tostring(trans.quantity) .. '\n' .. 
   tostring(trans.price) .. '\n' .. 
   trans.result_msg);
end;

function OnOrder(order) 
 -- Если поступила информация по сделке
 message("OnOrder {\n" .. --trade.datetime .. '\n' .. 
   " trans_id: " .. tostring(order.trans_id) .. '\n' .. 
    " order_num: " .. tostring(order.order_num) .. '\n' .. 
   " flags: " .. tostring(tobin(order.flags)) .. '\n' ..
        " brokerref: " .. tostring(order.brokerref)  .. '\n' ..
   " balance: " .. tostring(order.balance) .."\n" .. 
   " qty: " .. tostring(order.qty) .. '\n' ..
   " value: " .. tostring(order.value) .. '\n' ..
   " account: " .. tostring(order.account) .. '\n' ..
   " activation_time: " .. tostring(order.activation_time) .. '\n' ..
   " ext_order_status: " .. tostring(order.ext_order_status) .. '\n' ..
   " trading_session: " .. tostring(order.trading_session) .. "\n}");
end;


Результат работы (копирую из сообщений)
Код
TransReply:
236
SBER
3
1001000000000000000001
6307340506
1.0
369.5
(161) Заявка N 6307340506 зарегистрирована. Удовлетворено 1

OnOrder {
 trans_id: 236
 order_num: 6307340506
 flags: 11000
 brokerref: 10112//
 balance: 0.0
 qty: 1.0
 value: 3695.0
 account: NL0011100043
 activation_time: 0
 ext_order_status: 0
 trading_session: 0
}

OnOrder {
 trans_id: 236
 order_num: 6307340506
 flags: 11000
 brokerref: 10112//
 balance: 0.0
 qty: 1.0
 value: 3695.0
 account: NL0011100043
 activation_time: 0
 ext_order_status: 0
 trading_session: 0
}


Вопрос, это разве нормально? Чем обусловлено? Кто сталкивался? Как боретесь?
Номер транзакции - не статический, для теста генерится рандомом от 1 до 1000
 
Может и три раза, и больше.

Если вы выведите в лог все значения из входящего аргумента order, то будет видно, что при каждом вызове изменяется одно или несколько значений.

Для примера, первый вызов - появилась запись в таблице orders. Второй - присвоился номе транзакции. Третий - ордер сменил флаг состояния на "исполненный".
 
Цитата
Павел Bosco написал:
Простенький скрипт, который отправляет заявку на 1 лот в Quik_Junior по сберу так, чтобы она заведомо исполнилась.
В нём определены два колбэка, OnTransReply и OnOrder

В результате вижу, что OnOrder вызывается по-моей заявке два раза (она имеет 1 лот и исполняется сразу).
Причём, очевидно, так бывает не всегда. Но заметил что такое получается чаще, если делать перед этим реконнект с сервером.
Код:
Код
   function   OnTransReply (trans)
  -- Если поступила информация по текущей транзакции  
  message ( "TransReply:\n"   ..   --trans.date_time .. '\n' ..  
   tostring(trans.trans_id)  ..   '\n'   ..  
   trans.sec_code  ..   '\n'   ..  tostring(trans.status)  ..   '\n'   ..  
   tostring(tobin(trans.flags))  ..   '\n'   ..  
    tostring(trans.order_num)  ..   '\n'   ..  
   tostring(trans.quantity)  ..   '\n'   ..  
   tostring(trans.price)  ..   '\n'   ..  
   trans.result_msg);
 end ;

 function   OnOrder (order) 
  -- Если поступила информация по сделке 
  message ( "OnOrder {\n"   ..   --trade.datetime .. '\n' ..  
   " trans_id:  " .. tostring(order.trans_id) .. '\n' .. 
    "  order_num:  " .. tostring(order.order_num) .. '\n' .. 
   "  flags:  " .. tostring(tobin(order.flags)) .. '\n' ..
        "  brokerref:  " .. tostring(order.brokerref)  .. '\n' ..
   "  balance:  " .. tostring(order.balance) .." \n"  ..  
   " qty:  " .. tostring(order.qty) .. '\n' ..
   "  value:  " .. tostring(order.value) .. '\n' ..
   "  account:  " .. tostring(order.account) .. '\n' ..
   "  activation_time:  " .. tostring(order.activation_time) .. '\n' ..
   "  ext_order_status:  " .. tostring(order.ext_order_status) .. '\n' ..
   "  trading_session:  " .. tostring(order.trading_session) .. " \n}");
 end ;
  


Результат работы (копирую из сообщений)
Код
  TransReply:
 236 
SBER
 3 
 1001000000000000000001 
 6307340506 
 1.0 
 369.5 
( 161 ) Заявка N  6307340506  зарегистрирована. Удовлетворено  1 

OnOrder {
 trans_id:  236 
 order_num:  6307340506 
 flags:  11000 
 brokerref:  10112 //
 balance:  0.0 
 qty:  1.0 
 value:  3695.0 
 account: NL0011100043
 activation_time:  0 
 ext_order_status:  0 
 trading_session:  0 
}

OnOrder {
 trans_id:  236 
 order_num:  6307340506 
 flags:  11000 
 brokerref:  10112 //
 balance:  0.0 
 qty:  1.0 
 value:  3695.0 
 account: NL0011100043
 activation_time:  0 
 ext_order_status:  0 
 trading_session:  0 
}  


Вопрос, это разве нормально? Чем обусловлено? Кто сталкивался? Как боретесь?
Номер транзакции - не статический, для теста генерится рандомом от 1 до 1000
вопросу в обед -100 лет.
и столько же ответу.
-------------------
Где Вы прочитали, что не может быть несколько ответов с сервера?
-----------------------------------
Ответ - "мне кажется" или "я думал" не учитывается.
 
Цитата
Nikolay написал:
Может и три раза, и больше.

Если вы выведите в лог все значения из входящего аргумента order, то будет видно, что при каждом вызове изменяется одно или несколько значений.

Для примера, первый вызов - появилась запись в таблице orders. Второй - присвоился номе транзакции. Третий - ордер сменил флаг состояния на "исполненный".
я понимаю что статус может меняться. например тот же "balance". по изменяющемуся объекту Order вопросов нет,
но у меня совершенно конкретный пример, где ничего не менялось.
повторюсь - заявка исполнялась сразу же, что видно и по TransactionReply. флаги тоже приведены.
нет смысла ничего придумывать "для примера"
 
Это не пример, а факт, наблюдаемый каждый день.
Первый вызов - появление записи, второй - присвоение номера транзакции, третий - флаг.
 
Есть другие факты:

https://forum.quik.ru/messages/forum10/message12868/topic1082/#message12868
Цитата
Sergey Gorokhov написал:
По данному обращению мы определили, что причиной множественных     отправок сделок (более двух) на клиентские места является неоптимальность в     серверном ПО QUIK. После ее устранения сделки могут быть отправлены на клиентское место максимум 2 раза - по     получению сделки из торговой системы и по факту ее обновления.

https://forum.quik.ru/messages/forum10/message13524/topic1082/#message13524
Цитата
Stanislav Tvorogov написал:
По данному обращению мы диагностируем что заявки, отправляются     пользователям столько раз, сколько раз они менялись на сервере (под     изменением понимается, как изменение статуса, остатка, так и     установка UID, trans_id). При этом по факту заявки могут быть     отправлены сразу в последнем, актуальном, состоянии. Поэтому клиенты     видят многократный апдэйт одной и той же заявки без ее видимых     изменений. В одной из следующих версий серверного ПО QUIK мы     постараемся исправить эту ситуацию, чтобы не дублировать отправку     заявки в одном и том же состоянии несколько раз.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Nikolay написал:
Это не пример, а факт, наблюдаемый каждый день.
Первый вызов - появление записи, второй - присвоение номера транзакции, третий - флаг.
факты - это флаги в сообщениях которые я привёл. они одинаковы.
 
Цитата
Старатель написал:
Есть другие факты:

https://forum.quik.ru/messages/forum10/message12868/topic1082/#message12868
Цитата
Sergey Gorokhov написал:
По данному обращению мы определили, что причиной множественных     отправок сделок (более двух) на клиентские места является неоптимальность в     серверном ПО QUIK. После ее устранения сделки могут быть отправлены на клиентское место максимум 2 раза - по     получению сделки из торговой системы и по факту ее обновления.
https://forum.quik.ru/messages/forum10/message13524/topic1082/#message13524
Цитата
Stanislav Tvorogov написал:
По данному обращению мы диагностируем что заявки, отправляются     пользователям столько раз, сколько раз они менялись на сервере (под     изменением понимается, как изменение статуса, остатка, так и     установка UID, trans_id). При этом по факту заявки могут быть     отправлены сразу в последнем, актуальном, состоянии. Поэтому клиенты     видят многократный апдэйт одной и той же заявки без ее видимых     изменений. В одной из следующих версий серверного ПО QUIK мы     постараемся исправить эту ситуацию, чтобы не дублировать отправку     заявки в одном и том же состоянии несколько раз.
ясно, спасибо! проблема известна значит. ок.
как обойти у себя в коде понятно.
а можно вопрос, точнее два? какие-то ещё способы общения по программной отправке в квик заявок кроме trans2quik и lua::sendTransaction  имеются?
решил перетащить свою реализацию с trans2quik на lua::sendTransaction, и всё вроде ничего, но вдруг есть чего-нибудь лучше, и чтобы сообщения в терминал не выводились (знаю, что можно отключить)
 
Цитата
Павел Bosco написал:
какие-то ещё способы общения
Файлы tri/tro еще.
Страницы: 1
Читают тему
Наверх