Здравствуйте. Разрабатываю торгового робота, в основе стратегии которого лежит подача заявок сразу на несколько инструментов. Но дело в том, что QUIK не позволяет подавать заявки на некоторые инструменты. Необходима возможность снятия ранее поданной заявки, т.к. в случае, если заяка на какой-то инструмент не выставилась, то стратегия не имеет смысла, но для этого необходимо знать id этой поданной заявки. Подскажите, пожалуйста, есть ли какой-то способ? Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
05.06.2019 12:29:28
Цитата
Андрей написал: Здравствуйте. Разрабатываю торгового робота, в основе стратегии которого лежит подача заявок сразу на несколько инструментов. Но дело в том, что QUIK не позволяет подавать заявки на некоторые инструменты. Необходима возможность снятия ранее поданной заявки, т.к. в случае, если заяка на какой-то инструмент не выставилась, то стратегия не имеет смысла, но для этого необходимо знать id этой поданной заявки. Подскажите, пожалуйста, есть ли какой-то способ? Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
Добрый день. Заявку можно снимать либо по номеру (у каждой заявки есть номер), либо смотреть на состояние заявки и снимать по условию. Например:
function fn(order_num, flags,client_code,class_code,sec_code) if (client_code=="LB") --в кавычках указать нужный код клиента and (bit.band(flags, 0x1) ~= 0) then --проверяем что заявка активна transaction = {TRANS_ID="1", ACTION="KILL_ORDER", CLASSCODE="TQBR", SECCODE="AFLT", ORDER_KEY="1"} res = sendTransaction(transaction) --снимаем заявку return true else return false end end
Наверное, я не совсем четко сформулировал вопрос. Мне нужно программно узнать номер заявки. Вариант зайти и посмотреть в таблице заявок не подходит, робот должен работать в непрерывном режиме. Я подаю заявку с помощью Lua при помощи sendTransaction, затем мне нужно снять поданную ранее заявку. Можно ли как-то сделать это через Lua?
Пользователь
Сообщений: Регистрация: 06.02.2017
05.06.2019 19:07:15
Номер заявки можно узнать при ее подачи через ф-цию обратного вызова
Код
function OnOrder(order)
if (order.trans_id == trans_id) then
order_num = order.order_num; --номер заявки
flag_OnOder = true; --именно наша заявка
return;
end;
end;
или обратиться к таблице заявок через getItem().
Пользователь
Сообщений: Регистрация: 20.10.2018
05.06.2019 20:21:18
Игорь, спасибо! Помогло, узнал номер последней заявки при помощи getNumberOf('orders') и все получилось. Продублирую второй вопрос: "Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?". Может, кто-то знает? И появился еще один. Я выставляю заявку, но в поле состояние вижу строку "Снята". Почему она уже снята? Где можно об этом почитать? О состояниях заявок, какие бывают, что они означают.
Пользователь
Сообщений: Регистрация: 06.02.2017
05.06.2019 22:11:36
Цитата
"Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?".
Для меня вопрос не понятен. Мало данных. Какой уровень рынка? По какой цене заявка? ...??
Цитата
Я выставляю заявку, но в поле состояние вижу строку "Снята". Почему она уже снята?
- условие сделки «Немедленно или отклонить» - условия сделки не соответствуют каким-либо требованиям
Цитата
Где можно об этом почитать? О состояниях заявок, какие бывают, что они означают.
Руководство пользователя QLua - Структуры данных - Транзакции
"Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?".
Для меня вопрос не понятен. Мало данных. Какой уровень рынка? По какой цене заявка? ...??
Не знаю, что такое уровень рынка. А на что влияет цена заявки?
Пользователь
Сообщений: Регистрация: 20.03.2015
06.06.2019 09:44:33
если заявка не выставилась, то снимать её не нужно, это же очевидно. она не выставилась, конец фильма. когда заявку подаете, надо вам указывать собственный ваш внутренний номер. он приходит в ответе ontransactionreply как dwtransid
Пользователь
Сообщений: Регистрация: 20.03.2015
06.06.2019 09:45:55
вообще читайте мануал по функциям которые вызываете, узнаете много интересного.
Пользователь
Сообщений: Регистрация: 06.02.2017
06.06.2019 10:20:26
Цитата
Не знаю, что такое уровень рынка. А на что влияет цена заявки?
Уровень рынка - цена совершения сделок по данному инструменту в данный момент.
Цитата
Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
Прибыль/Убыток образуется при открытии и последующем закрытии позиции. Если цена заявки на покупку ниже рынка, вы выставили и сразу сняли - сделок нет, соответственно нет прибыли\убытка. Если цена заявки на покупку по рынку или выше, вы открыли позицию на объем встречного предложения. Сразу снять сможете только неудовлетворенный остаток (если он будет). Т.е. Вы в позиции. Говорить о прибыли/убытке можно после того как Вы закроете позицию, а не после попытки снять выставленную заявку.
Цитата
Но дело в том, что QUIK не позволяет подавать заявки на некоторые инструменты.
Я так понимаю речь идет о 2,3,... эшелонах. Возможно, их нет в листинге биржи. Возможно, стратегия основана на спреде между бумагами и одно плече на бирже не торгуется. Но это не важно. Мне кажется легче выяснить заранее, торгуется ли бумага и не использовать данную стратегию. И не придется совершать телодвижения с подачей и снятием заявок.
Пользователь
Сообщений: Регистрация: 26.02.2015
06.06.2019 11:19:44
Цитата
Андрей написал: Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
Скорость снятия никаких "санкций" не может повлечь. Однако, если алгоритм предполагает, что вы будете дрючить биржу валом заявок, то можете попасть за штраф за т.н. "неэффективные транзакции". Это когда число заявок огромно (насколько помню, начинается от 2000 в сутки), а число сделок минимально. Я не помню, сама биржа или брокер противодействуют таким образом необоснованной нагрузке на систему, но если тысячами пустых заявок будете заваливать брокера, влетите на этот штраф.
Там используется формула какая-то. Штраф зависит от объема заявок и только в том случае, если мало сделок. Т.е. если у вас не 2000 заявок в сутки, а 200 тыс., но при этом каждая пятая-десятая приводит к сделке, то никакой штраф вам не светит, все ОК.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
12.06.2019 21:12:20
Цитата
Цитата
написал: Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
Этот вопрос следует задать вашему брокеру. Обязательно уточнив про какой рынок идёт речь (каким типом инструментов в торгуете). Общего ответа нет, зависит от брокера и рынка (биржи)