Снятие заявки

Страницы: 1
RSS
Снятие заявки, server check failed
 
Добрый день.
Пытаюсь снять заявку из QLUA.
Периодически приходит отказ от выполнения транзакции по снятию заявки без вызова OnTransReply callback.
В таблицу ордеров приходит сообщение :
Код
Transaction ID   Status   Status ex                                    Message                           Date           Time           Time (microsec)   Order number   Class code   Instrument code   Side   Price   Error code   Error source   Transaction
1,008      5   QUIK server check failed for transaction    Impossible to withdraw an order   8/12/2020   9:34:24 PM   974124                      TQBR           SBER           Buy   0.00   8,635,230   QUIK server   Withdraw order by number

Вопросы:

1. по какой причине происходит отказ в снятии ордера?  Error code - 8,635,230  что это такое?
2. почему не срабатывает  OnTransReply callback если данные в таблицу транзакций приходят?
3. почему не срабатывает OnTransReply callback при направлении транзакции на снятие через sendTransaction?
4. как получить данные из таблицы транзакций средствами QLUA?
Q
 
Цитата
QApplication написал:
В таблицу ордеров приходит сообщение :
 
Q
 
Здравствуйте, QApplication.

Цитата
QApplication написал:
1. по какой причине происходит отказ в снятии ордера?  Error code - 8,635,230  что это такое?
Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
Цитата
QApplication написал:
2. почему не срабатывает  OnTransReply callback если данные в таблицу транзакций приходят?
Наиболее вероятно, речь идёт о транзакциях, отправляемых при помощи trans2QUIK API, QPILE или из *.tri-файла. В этом случае ответ на транзакции не вызывает OnTransReply
Цитата
QApplication написал:
3. почему не срабатывает OnTransReply callback при направлении транзакции на снятие через sendTransaction?
А сама транзакция в таблице транзакций отображается? Если нет - значит с таблице транзакции есть ошибка, из-за которой sendTransaction её не отправила, соответственно ответа на транзакцию нет, и callback не вызывается. В остальном, проверили работу OnTransReplay попытавшись снять активную и уже снятую заявки, в обоих случаях callback сработал. Соответственно, надо либо проверить корректность полей транзакции на снятие заявки и убедиться, что она отправляется в систему и фиксируется в таблице транзакций и что OnTransReply отрабатывает; либо более подробно описать ситуацию, при которой OnTransReaply не срабатывает привести минимальный достаточный для воспроизведения фрагмент используемого скрипта, чтобы был возможен дальнейший анализ ситуации с нашей стороны.
Цитата
QApplication написал:
4. как получить данные из таблицы транзакций средствами QLUA?
Сейчас не предусмотрено возможности получить доступ к таблице транзакций из LUA-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, QApplication.

Цитата
QApplication написал:
1. по какой причине происходит отказ в снятии ордера?  Error code - 8,635,230  что это такое?
Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
Цитата
QApplication написал:
2. почему не срабатывает  OnTransReply callback если данные в таблицу транзакций приходят?
Наиболее вероятно, речь идёт о транзакциях, отправляемых при помощи trans2QUIK API, QPILE или из *.tri-файла. В этом случае ответ на транзакции не вызывает OnTransReply
Цитата
QApplication написал:
3. почему не срабатывает OnTransReply callback при направлении транзакции на снятие через sendTransaction?
А сама транзакция в таблице транзакций отображается? Если нет - значит с таблице транзакции есть ошибка, из-за которой sendTransaction её не отправила, соответственно ответа на транзакцию нет, и callback не вызывается. В остальном, проверили работу OnTransReplay попытавшись снять активную и уже снятую заявки, в обоих случаях callback сработал. Соответственно, надо либо проверить корректность полей транзакции на снятие заявки и убедиться, что она отправляется в систему и фиксируется в таблице транзакций и что OnTransReply отрабатывает; либо более подробно описать ситуацию, при которой OnTransReaply не срабатывает привести минимальный достаточный для воспроизведения фрагмент используемого скрипта, чтобы был возможен дальнейший анализ ситуации с нашей стороны.
Цитата
QApplication написал:
4. как получить данные из таблицы транзакций средствами QLUA?
Сейчас не предусмотрено возможности получить доступ к таблице транзакций из LUA-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
Конечно регистрировать! Это может быть весьма полезно, если был разрыв соединения, или ошибка скрипта. В таком случае коллбэк может пройти мимо, и узнать статус транзакции будет затруднительно.
 
Здравствуйте, Сергей.

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Andrey Bezrukov написал:
Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
Andrey Bezrukov,раскажу подробнее
1. написан скрипт, который выставляет заявки на покупку и продажу по 1 лоту в книгу заявок согласно рисунку. Если позиция текущего ордера выходит за зеленый квадрат, то асинхронно (т.е. не дожидаясь ответа о снятии теущей заявки через определенный автором интервал {50ms, или 200ms или 500ms} направляется новый ордер) направляется тарнзакия на снятие текущей заявки и выставляется новая заявка в позицию кравсного квадрата.

Так вот, проблем с выставление новой заявки нет, она работет всегда стабильно и по ней всегда приходит OnTransReply callback, не придерешся. А по транзакции на снятие старой заявки много вопросов:
1. алгоритм снятия не меняется, занчит тезиз который поцитировал не верен, т.к. ордер по этой заявке я вижу в таблице заявок и он активный
2. снятие заявки работает но не всегда. При это согласно задуманному алгориту всегда должно быть по одной заявке в каждую сторону, однако это не так, например,
 
3. из скрина видно, что транзакции на снятие активных заявок приходят в таблицу транзакци, а OnTransReply callback по ним не приходит
4. OnTransReply callback приходит только по высталению новых ордеров
5. пробовал различную реализацию транзакции на снятие ордера (по примеру из info.chm и из кормана транзакций) - результат одинаковый
6. пример скрипта: есть две активные заявки и снимем их, при этом OnTransReply callback не приходит

Код
is_run = true

m = 0;

n = 0;
T = {};


T.f = {
      ACTION    = "KILL_ORDER",
      CLASSCODE = "TQBR",
      SECCODE   = "SBER",
      TRANS_ID  = "1328",
      ORDER_KEY = "20963390679"
      };

T.s = {
      ACTION    = "KILL_ORDER",
      CLASSCODE = "TQBR",
      SECCODE   = "SBER",
      TRANS_ID  = "1329",
      ORDER_KEY = "20963390885"
      };
      
T[0] = t1
T[1] = t2

function main()

   while is_run do
   
   if (m > 0) then
   
      if (n == 0) then
         r = sendTransaction(T.f);
      end
      
      if (n == 1) then
         r = sendTransaction(T.s);
      end

      n = n + 1;
   end
   
   sleep(5000);
   m = m + 1;
   end
end



function OnStop(stop_flag)
   is_run=false
   stop_flag=1
end

и вто какую поседовательность выдают все участвующие колбеки

1. выставляем ордера в стакан

2. снимаем их по скрипту (см. выше)
   2.1 OnTransReply callback по транзакции на снятие заявок не приходит от слова совсем, без разницы успешна заявка снята или пришло сообщение с ошибкой
   2.2 транзакции отображаются в таблице транзакций

   2.3 работа OnOrder callback's
 
Q
 
Цитата
Andrey Bezrukov написал:
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Andrey Bezrukov, реализуйте его через getItem как доступ к другим таблицам
Q
 
Цитата
Andrey Bezrukov написал:
Сейчас не предусмотрено возможности получить доступ к таблице транзакций из LUA-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
идея хорошая и требует рализации,
но лучше что работал стабильно OnTransReply callback на все транзакции, отправляемые через sendTransaction
Q
 
Цитата
Andrey Bezrukov написал:
Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
по факту
1. заявка моя
2. номер заявки берется 100% точно, здесь ошибки быть не может, проверено
3. заявка активна и висит в таблице заявок (в дальнейшем снимается только в ручную из QUIK)
4. транзакция на ее снятие приходит  с ошибкой
Q
 
Раз уж топик про снятие заявок, внесу и свои 5 копеек. Проблем с коллбэками onTransReply не наблюдал, но зато стабильно приходят два коллбэка onOrder, причем флаг снятия ордера поднят только во втором. Получается сначала приходит коллбэк о том, что мы якобы выставили ордер (хотя он уже есть и активен), и только потом, что он снимается. Зачем такая история? Терминал 8.3.2.4, если что.
 
Цитата
Сергей написал:
Раз уж топик про снятие заявок, внесу и свои 5 копеек. Проблем с коллбэками onTransReply не наблюдал, но зато стабильно приходят два коллбэка onOrder, причем флаг снятия ордера поднят только во втором. Получается сначала приходит коллбэк о том, что мы якобы выставили ордер (хотя он уже есть и активен), и только потом, что он снимается. Зачем такая история? Терминал 8.3.2.4, если что.
Сначала в заявке изменяются некоторые поля, к которым у вас доступа нет и вы не видите изменений в первом пришедшем колбеке, потом заявка снимается и снова вам приходит колбек, в котором изменения вам уже видны.

таково его, терминала, природное свойство.
 
Довольно мутное свойство. Почему бы не сделать тогда флаг "находится в процессе снятия", или признак "служебного" ордера?
 
QApplication,

Благодарим за развёрнутый комментарий по проблемам.
Касательно не отрабатывающего OnTransReply - есть полагаем, что имеет место какая-либо специфическая недоработка в используемой Вами версии рабочего места. Просьба уточнить версию рабочего места, на котором данная проблема наблюдается.

Касательно того, что сервер не позволяет снять Вашу активную заявку - необходимы данные от сервера брокера. Вы можете самостоятельно связаться с Вашим брокером и инициировать его обращение к нам, или можете написать нам по почте quiksupport@arqatech.com, сообщить кто Ваш брокер, Ваш логин, а так же номер какой-либо проблемной заявки, которую пытались снять и сервер не позволил этого сделать в результате предполагаемой ошибки.

Касательно доступа lua-скрипта к таблице транзакций - Ваше пожелание зарегистрировано; мы постараемся рассмотреть его и сообщить Вам результаты анализа; впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.

Сергей,
Дело в том, что на сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK. Серверу, чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз.
Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений.
Можем зарегистрировать Ваше пожелание на добавление для заявок флага "находится в процессе снятия", который бы приходил в первом пакете обновлений по заявке вместе с первым OnOrder при подаче транзакции на снятие заявки.
Регистрируем?
 
Цитата

Сергей,
Дело в том, что на сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK. Серверу, чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз.
Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений.
Можем зарегистрировать Ваше пожелание на добавление для заявок флага "находится в процессе снятия", который бы приходил в первом пакете обновлений по заявке вместе с первым OnOrder при подаче транзакции на снятие заявки.
Регистрируем?
Регистрируем
 
Сергей,

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Страницы: 1
Читают тему (гостей: 1)
Наверх