Добрый день. Пытаюсь снять заявку из 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?
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-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
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 транзакции отображаются в таблице транзакций
Andrey Bezrukov написал: Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Andrey Bezrukov, реализуйте его через getItem как доступ к другим таблицам
Andrey Bezrukov написал: Сейчас не предусмотрено возможности получить доступ к таблице транзакций из LUA-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
идея хорошая и требует рализации, но лучше что работал стабильно OnTransReply callback на все транзакции, отправляемые через sendTransaction
Andrey Bezrukov написал: Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
по факту 1. заявка моя 2. номер заявки берется 100% точно, здесь ошибки быть не может, проверено 3. заявка активна и висит в таблице заявок (в дальнейшем снимается только в ручную из QUIK) 4. транзакция на ее снятие приходит с ошибкой
Раз уж топик про снятие заявок, внесу и свои 5 копеек. Проблем с коллбэками onTransReply не наблюдал, но зато стабильно приходят два коллбэка onOrder, причем флаг снятия ордера поднят только во втором. Получается сначала приходит коллбэк о том, что мы якобы выставили ордер (хотя он уже есть и активен), и только потом, что он снимается. Зачем такая история? Терминал 8.3.2.4, если что.
Сергей написал: Раз уж топик про снятие заявок, внесу и свои 5 копеек. Проблем с коллбэками onTransReply не наблюдал, но зато стабильно приходят два коллбэка onOrder, причем флаг снятия ордера поднят только во втором. Получается сначала приходит коллбэк о том, что мы якобы выставили ордер (хотя он уже есть и активен), и только потом, что он снимается. Зачем такая история? Терминал 8.3.2.4, если что.
Сначала в заявке изменяются некоторые поля, к которым у вас доступа нет и вы не видите изменений в первом пришедшем колбеке, потом заявка снимается и снова вам приходит колбек, в котором изменения вам уже видны.
Благодарим за развёрнутый комментарий по проблемам. Касательно не отрабатывающего OnTransReply - есть полагаем, что имеет место какая-либо специфическая недоработка в используемой Вами версии рабочего места. Просьба уточнить версию рабочего места, на котором данная проблема наблюдается.
Касательно того, что сервер не позволяет снять Вашу активную заявку - необходимы данные от сервера брокера. Вы можете самостоятельно связаться с Вашим брокером и инициировать его обращение к нам, или можете написать нам по почте quiksupport@arqatech.com, сообщить кто Ваш брокер, Ваш логин, а так же номер какой-либо проблемной заявки, которую пытались снять и сервер не позволил этого сделать в результате предполагаемой ошибки.
Касательно доступа lua-скрипта к таблице транзакций - Ваше пожелание зарегистрировано; мы постараемся рассмотреть его и сообщить Вам результаты анализа; впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Сергей, Дело в том, что на сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK. Серверу, чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз. Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений. Можем зарегистрировать Ваше пожелание на добавление для заявок флага "находится в процессе снятия", который бы приходил в первом пакете обновлений по заявке вместе с первым OnOrder при подаче транзакции на снятие заявки. Регистрируем?
Сергей, Дело в том, что на сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK. Серверу, чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз. Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений. Можем зарегистрировать Ваше пожелание на добавление для заявок флага "находится в процессе снятия", который бы приходил в первом пакете обновлений по заявке вместе с первым OnOrder при подаче транзакции на снятие заявки. Регистрируем?
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте. Какова судьба реализации программного доступа к таблице транзакций из LUA?
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте. Какова судьба реализации программного доступа к таблице транзакций из LUA?
Добрый день.
Данное пожелание находится пока на стадии рассмотрения.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте. Какова судьба реализации программного доступа к таблице транзакций из LUA?
Здравствуйте, я новичок в программировании и в написании торгового робота, мне нужна помощь.
Мне нужно чтобы робот выставил лимитированную заявку на покупку и по исполнению ее выставил привязанный к ней стоп лосс и тейк профит. У меня успешно получается выставить заявку и непривязанный к ней стоп и тейк ( ["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"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
nikolz написал: колбек OnTransReply это реакция на транзакцию, а не на состояние заявки. Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
nikolz написал: колбек OnTransReply это реакция на транзакцию, а не на состояние заявки. Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
всё, я нашла источник проблемы - округлила число, переданное в BASE_ORDER_KEY до целого значения и изменила срок действия заявки и стоп выставился. Спасибо за помощь!
nikolz написал: колбек OnTransReply это реакция на транзакцию, а не на состояние заявки. Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
всё, я нашла источник проблемы - округлила число, переданное в BASE_ORDER_KEY до целого значения и изменила срок действия заявки и стоп выставился. Спасибо за помощь!
бред какой-то... Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?
Надежда Аверьянова написал: Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?
Когда лимитка исполнится - будет позиция. Вот на нее и будет выставлен стоп. Пока лимитка не исполнилась - стоп не активен. Очевидно же.
Надежда Аверьянова написал: Он выставил лимитированную заявку, она болтается в стакане НЕисполненная и вместе с ней выставил стоп. В чем смысл, если назвнание заявки "по исполнению заявки"? Зачем стоп если нет позиции?
Когда лимитка исполнится - будет позиция. Вот на нее и будет выставлен стоп. Пока лимитка не исполнилась - стоп не активен. Очевидно же.
Да, спасибо за пояснение. Очевидно это стало когда понаблюдала за исполнением заявок.