status == 15 в OnTransReply

Страницы: 1
RSS
status == 15 в OnTransReply
 
Как правильно проверять успешность обработки транзакции?

Сейчас делаю так:
1. ответы со статусом «0» и «1» об успешной отправке и получении транзакции сервером — игнорирую
2. ответ со статусом «3» о выполнении транзакции — считаю успешной обработкой транзакции
3. ответы со статусами «>=2, но кроме 3» о разных ошибках и прочем — считаю ошибкой при обработке транзакции

Меня смущает код «15», по документации он описан как «транзакция принята после нарушения дополнительных ограничений».
В каких случаях и для каких типов транзакций он приходит? Для NEW_ORDER, для KILL_ORDER или для обоих?

Соответственно, нужно ли проверять успешность обработки транзакции двойным условием на оба кода «3» и «15»?
Код
if status == 3 or status == 15 then
    --транзакция успешно обработана
elseif status >= 2 then
    --ошибка при обработке транзакции
else
    --ответы со статусом «0» и «1» игнорируем
end
 
Когда-то сам пытался спросить вот здесь, в итоге сделал вывод, что 15 никто никогда не видел.  Мой робот его тоже пока не встречал...
 
Цитата
kroki написал:
Когда-то сам пытался спросить  вот здесь , в итоге сделал вывод, что 15 никто никогда не видел.  Мой робот его тоже пока не встречал...
Пока что я выяснил следующее...

Появились эти новые статусы «14», «15» и «16» начиная с версии Quik 7.6.0. Описаны в «Руководстве пользователя Quik» (info.chm), «Раздел 3. Просмотр информации», подразделы «Таблица транзакций» и «Таблица транзакций \ Настройка таблицы».

Перечитал описание несколько раз, но ясности это не прибавило. Например, у меня в Quik'е если создать эту таблицу транзакций, то там из действий есть только пункт ««Оповещение по статусу транзакции»», а должны быть ещё два пункта «Новая заявка» и «Контроль дополнительных ограничений». Вот как раз через этот пункт «Контроль дополнительных ограничений» и должен открываться некий диалог, где можно нажимая кнопки «Да» и «Нет» разрешить или отменить транзакцию. И это должно привести к получению OnTransReply со статусами «15» и «16» соответственно. Возможно я пытался в нерабочее время, попробую снова когда будет торговая сессия.

Самое интересное, что в описании «Таблица транзакций \ Настройка таблицы» фильтра «Статус» сказано, что «Успешные» это транзакции со статусами «3», «15» и  «16», а все остальные статусы соответственно «Отвергнутые». То-есть, логика видимо такая, что отвергнутая пользователем транзакция тоже успешная, так как была кем-то обработана... но для целей скрипта такая трактовка не годится, так как успешная транзакция это та, которая оставляет после себя заявку, с которой дальше можно работать, а если транзакция отвергнута пользователем со статусом «16», то в рамках Lua скрипта это всё равно ошибочная транзакция.

Мне стало любопытно, и я просканировал все диалоги из lang_res.dll (ресурсная библиотека Quik), но кроме диалога настройки таблицы транзакций не нашёл больше никакого, где спрашивали бы о «Контроле дополнительных ограничений». Но эти «дополнительные ограничения» упоминаются во множестве строковых ресурсов, видимо Quik должен выбрасывать общее окно, как при подтверждении ввода заявки, и там можно отвечая «Да» и «Нет» сгенерировать эти самые статусы «15» и «16»... вообщем, пока непонятно, ни где эти дополнительные ограничения ставить, ни как отвечать на транзакции попавшие под эти ограничения.

То-есть, на текущий момент остаюсь при том же мнении, что успешность необходимо проверять двойным условием на статусы «3» и «15»...
 
Вопрос к Тех. поддержке:
 
Вопрос к Тех. поддержке:
Как сделать так, чтобы в контекстном меню «Таблицы транзакций» появился пункт «Контроль дополнительных ограничений»?
 
Suntor,добрый день.
Если со стороны брокера, на Вашего пользователя были бы установлены дополнительные ограничения, которые можно нарушать, то Вы бы получали значения 14,15,16.
 
Цитата
Zoya Skvorcova написал:
Suntor  ,добрый день.
Если со стороны брокера, на Вашего пользователя были бы установлены дополнительные ограничения, которые можно нарушать, то Вы бы получали значения 14,15,16.
О чём вообще идёт речь?... это ограничения на что? на максимальную сумму в одной заявке в %-тах от общей суммы счёта? или это какие-то запреты на торговлю конкретными инструментами? или это что-то совсем другое?... хотелось бы увидеть внешний вид этого диалога для пользователя, и о чём там вообще идёт речь, чтобы понять насколько это актуально в будущем, для кого брокер может установить такие ограничения и по какой причине?

Не хотелось бы однажды утром увидеть странное окно с двумя кнопками, и получить после их нажатия обвал работы всех скриптов...
 
Ограничения можно установить на цены заявок, на запрет торговли определёнными бумагами и.т.д

Цитата
Suntor написал:
Цитата
для кого брокер может установить такие ограничения и по какой причине?
Этот функционал больше рассчитан на сотрудников брокера, чем для клиентов.

Нажатие кнопки “Закрыть” будет означать намерение пользователя вернуться  к обработке транзакции позже, после нажатия кнопки диалог будет закрыт и  дальнейшую обработку транзакции можно будет продолжить из таблицы  транзакций.   Нажатие кнопки “Нет” будет означать намерение пользователя  прекратить обработку транзакции. Нажатие кнопки “Да” будет означать  намерение пользователя проигнорировать нарушенные ограничения и  продолжить выставление заявки.
 
Цитата
Zoya Skvorcova написал:
Ограничения можно установить на цены заявок, на запрет торговли определёнными бумагами и.т.д
Этот функционал больше рассчитан на сотрудников брокера, чем для клиентов.

Нажатие кнопки “Закрыть” будет означать намерение пользователя вернуться  к обработке транзакции позже, после нажатия кнопки диалог будет закрыт и  дальнейшую обработку транзакции можно будет продолжить из таблицы  транзакций.   Нажатие кнопки “Нет” будет означать намерение пользователя  прекратить обработку транзакции. Нажатие кнопки “Да” будет означать  намерение пользователя проигнорировать нарушенные ограничения и  продолжить выставление заявки.
Теперь более менее становится понятно к чему эти статусы... Спасибо за ответ.

Ещё пара уточняющих вопросов.
• При нажатии кнопок «Да» и «Нет» идут статусы «15» и «16» соответственно, это понятно. А при каком условии приходит статус «14»?
• Эти статусы «14», «15» и «16» возможны только для NEW_ORDER, а для KILL_ORDER они никогда не придут. Правильно?
 
Suntor, Статус 14 появляется в таблице транзакций сразу , как появляется окно с сообщением.
Да, только для NEW_ORDER
 
Цитата
Zoya Skvorcova написал:
Suntor  , Статус 14 появляется в таблице транзакций сразу , как появляется окно с сообщением.
Да, только для NEW_ORDER
Ага... всё, теперь кажется стало понятно.

Статус «14» промежуточный, сначала в OnTransReply приходит он, а после того как пользователь в диалоге ответит «Да» или «Нет», повторно придёт уже статус «15» или «16» соответственно.

Неплохо бы всё это добавить в документацию, прямо в абзац «Доступные функции»  внизу страницы «Раздел 3. Просмотр информации \ Таблица транзакций».
А ещё лучше, вынести это в отдельную страницу как подраздел «Раздел 3. Просмотр информации \ Таблица транзакций \ Доступные функции», потому что этот абзац в самом низу ещё найти нужно.
И в эту отдельную страницу «Доступные функции» добавить описание с картинкой диалогового окна «Заявка не соответствует заданным ограничениям» с кнопками «Да» и «Нет». И всех статусов «14», «15» и «16».

Зарегистрируйте пожалуйста это пожелание...
 
Suntor,добрый день.
предлагаем добавить только картинку с сообщением. Так как подробное описание и номера статусов описаны под Контролем доступных ограничений
 
Цитата
Zoya Skvorcova написал:
Suntor  ,добрый день.
предлагаем добавить только картинку с сообщением. Так как подробное описание и номера статусов описаны под Контролем доступных ограничений
Там всё очень поверхностно описано... непонятно кто и где устанавливает ограничения, как вызвать этот пункт меню, на какие типы транзакций влияет и пр., о чём были вопросы в этой ветке.

И главное полностью отсутствует описание статуса «14»... насколько я понял, этот статус аналогичен статусам «0» и «1», то-есть он не окончательный. Если он пришёл в OnTransReply, то это не ошибка (по status >=2, но кроме 3), и нужно дальше ждать ответы «15» и «16»... всё это нужно описать в документации.

Пока, по итогам обсуждения, для NEW_ORDER складывается следующий шаблон обработки статуса:
Код
if status == 3 or status == 15 then
    --транзакция успешно обработана
elseif status >= 2 and status ~= 14 then
    --ошибка при обработке транзакции
else
    --ответы со статусом «0», «1» и «14» игнорируем
end
Здесь ошибка означает, была ли выставлена заявка в торговую систему или нет.

А для KILL_ORDER такой:
Код
if status == 3 then
    --транзакция успешно обработана
elseif status >= 2 then
    --ошибка при обработке транзакции
else
    --ответы со статусом «0» и «1» игнорируем
end
Здесь ошибка означает, была ли снята заявка из торговой системы или нет.
 
Suntor,добрый день.
Мы рассмотрим вариант подробного описания и добавление скриншота. При появлении результата Вас проинформируем.
 
Suntor, Добрый день,
         Документация будет дополнена в одной из очередных версия       программы.
     
      Приносим извинения за причиненные неудобства.
 
Suntor, Добрый день,
     
      Описанная в данном инциденте ошибка исправлена в версии 7.18.1       терминала QUIK.
      Рекомендуем вам обновить версию программы.
     
      Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх