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

Страницы: 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, если что.
Сначала в заявке изменяются некоторые поля, к которым у вас доступа нет и вы не видите изменений в первом пришедшем колбеке, потом заявка снимается и снова вам приходит колбек, в котором изменения вам уже видны.

таково его, терминала, природное свойство.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Довольно мутное свойство. Почему бы не сделать тогда флаг "находится в процессе снятия", или признак "служебного" ордера?
 
QApplication,

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

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

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

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

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

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Сергей.

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте. Какова судьба реализации программного доступа к таблице транзакций из LUA?
 
Цитата
Анатолий написал:
Цитата
Andrey Bezrukov написал:
Здравствуйте,  Сергей .

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

Данное пожелание находится пока на стадии рассмотрения.
 
Цитата
Анатолий написал:
Цитата
Andrey Bezrukov написал:
Здравствуйте,  Сергей .

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте. Какова судьба реализации программного доступа к таблице транзакций из LUA?
Вас может заинтересовать следующий раздел:
https://forum.quik.ru/forum10/topic3348/

Там есть реализация снятия заявок через обращение к таблице "orders".  
 
Здравствуйте, я новичок в программировании и в написании торгового робота, мне нужна помощь.

Мне нужно чтобы робот выставил лимитированную заявку на покупку и по исполнению ее выставил привязанный к ней стоп лосс и тейк профит.
У меня успешно получается выставить заявку и непривязанный к ней стоп и тейк ( ["ACTION"]="NEW_STOP_ORDER", ["STOP_ORDER_KIND"]="TAKE_PROFIT_AND_STOP_LIMIT_ORDER", ), а вот с заявкой ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER возникла проблема - QUIK выдает сообщение "Неправильно указан номер базовой заявки "nil".

Мой скрипт получает номер заявки через OnTransReply, я записываю этот номер в свою переменную и уже эту переменную я вписываю в ключ ["BASE_ORDER_KEY"]. Что я делаю неправильно?
 
OnTransReply не всегда содержит поле с номером заявки order_num (параметр указан со звездочкой в руководстве). Номер заявки обычно поступает в одном из последних вызовов OnTransReply. Лучше всего номер заявки получать из таблицы заявок по trans_id транзакции.
 
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
 
Цитата
nikolz написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
 
Цитата
Надежда Аверьянова написал:
Цитата
nikolz написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
 
getOrderByNumber

Функция возвращает таблицу Lua, содержащую описание параметров Таблицы заявок и индекс заявки в хранилище терминала.  

TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER  order_id)

Если заявка с указанным номером не существует, то возвращаемые параметры -  «nil».

 
Цитата
nikolz написал:
Цитата
Надежда Аверьянова написал:
 
Цитата
nikolz  написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
 Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
 
Цитата
Надежда Аверьянова написал:
Цитата
nikolz написал:
 
Цитата
Надежда Аверьянова  написал:
 
Цитата
 nikolz   написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
  Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
 покажите скрипт
всё, я нашла источник проблемы -  округлила число, переданное в BASE_ORDER_KEY до целого значения и изменила срок действия заявки  и стоп выставился. Спасибо за помощь!
 
Цитата
Надежда Аверьянова написал:
Цитата
Надежда Аверьянова написал:
 
Цитата
nikolz  написал:
 
Цитата
 Надежда Аверьянова   написал:
   
Цитата
  nikolz    написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
   Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
  покажите скрипт
 
всё, я нашла источник проблемы -  округлила число, переданное в BASE_ORDER_KEY до целого значения и изменила срок действия заявки  и стоп выставился. Спасибо за помощь!
бред какой-то... Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?  
 
Цитата
Надежда Аверьянова написал:
Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?  
Когда лимитка исполнится - будет позиция. Вот на нее и будет выставлен стоп. Пока лимитка не исполнилась - стоп не активен.
Очевидно же.
 
Цитата
Kalmar написал:
Цитата
Надежда Аверьянова написал:
Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?  
Когда лимитка исполнится - будет позиция. Вот на нее и будет выставлен стоп. Пока лимитка не исполнилась - стоп не активен.
Очевидно же.
Да, спасибо за пояснение. Очевидно это стало когда понаблюдала за исполнением заявок.
 
Некоторые люди говорят, что если почитать документацию, то там это написано. Я сам не пробовал, просто ребята читали а я рядом стоял.
Страницы: 1
Читают тему
Наверх