1 (2021-09-18 16:53:32 отредактировано dark184)

Тема: OnTransReply возвращает order_num = nil

Здравствуйте. Только начал знакомится со скриптами Lua в Quik. Возникла проблема. Если вкратце, отправляю заявку sendTransaction с необходимыми параметрами. В терминале вижу, что заявка принята и отображается как активная, OnTransReply возвращает status = 3, trans_id ровно тот что и присваивал при отправке заявки. Все прекрасно ровно до тех пор, пока мне не понадобится, например, снять заявку. Начинаются чудеса какие-то. Параметр order_num = nil, но в терминале то в таблице заявок я прекрасно вижу эти номера. Почитав документацию, там некоторые параметры, помеченные звездочкой,

* – параметр может иметь значение nil

. НО! Интересует, при каких же условиях они будут возвращаться как nil? Ни слова об этом в документации.
Опять же таки, как поступить если нужен order_num?
1. Обрабатывать OnTransReply только на status?
2. Обрабатывать коллбэк OnOrder? Опять же таки я ни нашел в документации ни слова о том при каком условии он вызывается? Только при условии что trans_reply.status = 3 или вообще при любой попытке отправить заявку, даже неудачной? В первом случае получив и обработав OnOrder можно не запариваться с OnTransReply и его статусом по идее, разве что для информации. Во втором случае в коллбэке OnOrder обязательно нужно проверить trans_reply.status. И опять же появляется другой вопрос, в какой последовательности оба этих коллбэка идут??? Если OnOrder может прийти раньше OnTransReply, то получается полнейшая ерунда, order_num в OnTransReply я получить не могу, а OnOrder не могу обработать, т.к. понятия не имею о статусе заявки...

2 (2021-09-18 21:13:43 отредактировано toxa)

Re: OnTransReply возвращает order_num = nil

Нужно обрабатывать OnOrder, в него прилетает заявка - то, что вы видите в окне "заявки" квика. OnTransReply - это ответ сервера квика о том, что заявка принята, обычно, в этот момент номер заявки, который присваивает биржа, еще не известен. Так же, нужно подписаться на OnTrade, чтобы получать сделки - то, что вы видите в окне "сделки" квика.

Последовательность колбэков не определена, в теории, они могут приходить в любом порядке. Но, чаще всего, сначала OnTransReply, потом OnOrder потом, если были сделки, OnTrade.

Статус заявки есть среди полей OnOrder. Кстати, этот колбэк может вызываться для каждой заявки несколько раз - каждый раз, когда меняется статус или баланс.

Из OnTransReply вы узнаете, нет ли отлупа заявки по нехватке средств и тому подобное. Все остальное вы получаете из OnOrder и OnTrade.

3

Re: OnTransReply возвращает order_num = nil

toxa пишет:

OnTransReply - это ответ сервера квика о том, что заявка принята, обычно, в этот момент номер заявки, который присваивает биржа, еще не известен.

Вообще-то известен.

4

Re: OnTransReply возвращает order_num = nil

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

5

Re: OnTransReply возвращает order_num = nil

toxa пишет:

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

Тогда status в OnTransReply будет не 3, а другой.