OnTransReply status

Страницы: 1
RSS
OnTransReply status, Какие статусы нетерминальные?
 
Документация:
Цитата
Статус транзакции. Возможные значения:
«0» – транзакция отправлена серверу;
«1» – транзакция получена на сервер QUIK от клиента;
«2» – ошибка при передаче транзакции в торговую систему. Так как отсутствует подключение шлюза Московской Биржи, повторно транзакция не отправляется;
«3» – транзакция выполнена;
«4» – транзакция не выполнена торговой системой. Более подробное описание ошибки отражается в поле «Сообщение»;
«5» – транзакция не прошла проверку сервера QUIK по каким-либо критериям. Например, проверку на наличие прав у пользователя на отправку транзакции данного типа;
«6» – транзакция не прошла проверку лимитов сервера QUIK;
«10» – транзакция не поддерживается торговой системой;
«11» – транзакция не прошла проверку правильности электронной цифровой подписи;
«12» – не удалось дождаться ответа на транзакцию, т.к. истек таймаут ожидания. Может возникнуть при подаче транзакций из QPILE;
«13» – транзакция отвергнута, так как ее выполнение могло привести к кросс-сделке (т.е. сделке с тем же самым клиентским счетом);
«14» – транзакция не прошла контроль дополнительных ограничений;
«15» – транзакция принята после нарушения дополнительных ограничений;
«16» – транзакция отменена пользователем в ходе проверки дополнительных ограничений

Я правильно понимаю, что «0», «1» и «15» являются нетерминальными статусами, то есть после их получения будет еще вызов OnTransReply() с другим статусом - так?  Остальные все терминальные; все, кроме «3» - ошибка (плюс «12» в QLua не бывает).  Все верно?

Если не трудно, плиз опишите, когда возникают «0», «1» и «15» (в моей версии Quik «0» и «1» не замечал, ограничения для «15» видимо не задавал).
 
И еще в догонку вопрос: если sendTransaction() возвратил непустую строку, то ошибка, и вызова OnTransReply() не будет.  Так?
 
> если sendTransaction() возвратил непустую строку, то ошибка, и вызова OnTransReply() не будет.

Вызова OnTransReply() не будет.

> «0», «1» и «15» являются нетерминальными статусами, то есть после их получения будет еще вызов OnTransReply() с другим статусом - так?

Коллбэк OnTransReply() вызывается только один раз. Очень редко, при ошибках сети/сервера/терминала, OnTransReply() может не придти.

https://forum.quik.ru/messages/forum10/message11805/topic940/#message11805
 
_sk_,тогда как вы рекомендуете реагировать на «0», «1» и «15»?  Так же, как и на «3», то есть ожидать OnOrder?  По описанию статусов мне казалось, что эти три не являются ни ошибкой, ни подтверждением, что все хорошо.

За ссылку спасибо, задал там вопрос...
 
Я делаю так: если в результате sendTransaction получается результат "", считаем, что транзакция отправлена, будем ждать для неё OnTransReply и OnOrder, иначе рапортуем об ошибке и думаем, что делать дальше (для лимитной заявки слать/не слать новую, для kill-заявки пытаться/не пытаться ещё раз послать kill-заявку).

Когда приходит OnTransReply() / OnOrder(), то разбираемся, что произошло и модифицируем состояние системы. Там логика сложная и в ссылке как-то описана.

Мне сильно помог такой подход: предполагать, что подавляющее большинство транзакций отправлены и обработаны без проблем, а там, где возникли какие-то ошибки, работают "заплатки", разбирающиеся с частными патологиями. Тут всё (OnOrder(), OnTrade() и OnTransReply()) надо использовать.

Реально в коде используется проверка статусов 3, 4, 5 и 13.
Страницы: 1
Читают тему
Наверх