Блог им. Sergey_gt

Робот под Quik

Робот под Quik

Задача, которая была поставлена показалась мне на первый взгляд достаточно тривиальной. Нужно было выставить заявки и по их исполнению пересчитать параметры и выставить новые. Все вроде просто. Но есть один нюанс, как в старом анекдоте. А как выяснилось позже нюансов очень много.Начну с того, что в процедуре getOrderByNumber  order_id нифига не order_id, а order_num   С нее, то все и началось :-)И так если задача стоит выставить одну заявку, то какие могут быть проблемы, допустим для пересекающихся средних или типа того, но если у нас массив заявок и исполнение каждой влечет за собой пересчет всего алгоритма. Если сравнивать Qpile и Lua то, помимо всего прочего здесь есть функции обратного вызова, которые сулят много всяких вкусностей: таких как событийное исполнение наших процедур. Но в тот же момент могут создать своеобразную многопоточность.А здесь по подробней.Есть OnOrder,OnTransReply, OnTrade именно в таком порядке их срабатывание мне кажется логичным(в документации не указана их последовательность). Честно говоря, на это я убил целую неделю. Эти функции выполняются в другом порядке. Они мне были нужны для того, что бы ухватиться за отправленную заявку. У каждой заявки отправленной через Lua или Qpile есть id. Но нам интересен order_num. Это тот уникальный номер, который в системе присваивается каждой транзакции. По нему очень удобно следить за тем, что с ней происходит. Моя задача была найти в потоке транзакций мою и отследить ее состояние. В идеале мне хотелось получить ее номер на первой стадии, а в момент исполнения произвести ряд манипуляций, но есть нюанс :-) Во первых функции исполняются в последовательности OnTransReply, OnTrade, OnOrder.Функция OnTransReply(ответ терминала на транзакцию пользователя) может вернуть nil, а может вернуть нашу заветную цифру, как карта ляжет так в документации и написано :-). То есть рассчитывать не можем.OnTrade (получение сделки) вроде все сделка совершилась, а нихрена. Эта функция не отдает order_id. Получается, что только когда все произошло на функции OnOrder(получение новой заявки) у нас есть доступ к order_num и order_id для отслеживания транзакции.Еще конечно очень жаль, что при тестировании стратегий в Quik на демо счете вполне нормальным является отправка транзакции в течении 3мин-3часов. И вываливание различных ошибок:Communication gate is downНевозможно выполнение транзакций по классу «Фьючерсы FORTS». Шлюз с торговой системой недоступен.Error del.Trans:  Указанная транзакция по указанному классу не найдена: «SPBFUT».Net error: [10053] Software caused connection abortИ т.д. и т.п.В конечном итоге робот был передан заказчику и я рассчитываю что все ок.
Хотелось написать больше про написания робота, но сейчас уже ломы.
460 | ★6
5 комментариев
Я тоже буду у Вас заказывать роботов..!!!!++++++++++++++
avatar
MasterDm, спасибо. Пишу также индикаторы. Обращайтесь.
avatar
Жалко заказчика… :)
avatar
Hedgehog, почему? Кстати, заметил что вы торгуете фигуры как и я. Я потерял свой торговый привод после поломки SSD и буду его в ближайшее время восстанавливать. И выставлю на продажу. Думаю он вам понравится.
avatar

Читайте на SMART-LAB:
Фото
USD/JPY: пара возобновила рост на фоне японской неопределенности
Японская йена с началом нового года продолжила свое снижение после долгого периода консолидации, достигнув новых локальных экстремумов. Одним из...
Фото
Война чипов. К чему ведет технологическое противостояние США, Европы и Китая?
Главное Западные страны усиливают ограничения на поставки передовых чипов и технологического оборудования в Китай. Китай активно...
Фото
ПАО «АПРИ» планирует размещение облигаций серии БО-002Р-13
ПАО «АПРИ» планирует размещение облигаций серии БО-002Р-13 💼 Предварительные параметры выпуска: 🔵 Предварительная дата сбора...
Фото
Хэдхантер. Ситуация на рынке труда в декабре идет ко дну - хуже не было никогда
Вышла статистика рынка труда за декабрь 2025 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика...

теги блога Сергей o-s-a.net

....все тэги



UPDONW
Новый дизайн