Как задать срок действия лимит заявки в функции sendTransaction (tab)?
Пользователь
Сообщений: Регистрация: 26.02.2015
22.04.2018 23:55:40
Добрый день! Как задать срок действия лимит заявки в функции sendTransaction (tab)? Для стоп-лимит заявки есть параметр - EXPIRY_DATE, а для лимит - не нашел... вченашняя снимается автоматически системой... спасибо.
Пользователь
Сообщений: Регистрация: 10.04.2015
23.04.2018 02:25:48
Цитата
Igor Golovin написал: Добрый день! Как задать срок действия лимит заявки в функции sendTransaction (tab)? Для стоп-лимит заявки есть параметр - EXPIRY_DATE, а для лимит - не нашел... вченашняя снимается автоматически системой... спасибо.
Это называется «перенос заявки», и для его использования нужен «универсальный формат» в терминах Quik, там другие названия полей таблицы для sendTransaction.
Со страницы: Скачайте: «Документация по языку LUA в QUIK и примерыzip, 5.6 МБ» () Там в файле «Использование Lua в Рабочем месте QUIK.pdf», в разделе «4. Отправка транзакций из Lua скрипта» на страницах 31 и 32 есть пример использования этого формата.
Проблема только в том, что в общем случае это не работает, так как для фондового рынка МосБиржа не поддерживает перенос заявок, они всегда снимаются. А вот для срочного рынка FORTS работает, и можно использовать. Поэтому рекомендуют делать так: Создаёте таблицу «Карман транзакций» в Quik, в ней создаёте для нужного класса нужную вам транзакцию, например «Ввод заявки» со сроком действия, и затем сохраняете этот карман транзакций в .tri файл. Из которого и берёте названия полей для заполнения таблицы в «универсальном формате» для sendTransaction.
Далее после переноса заявки у неё меняется номер order_num, то-есть в начале новой торговой сессии выставляется фактически новая заявка с параметрами из старой заявки. У новой заявки через поле linkedorder передаётся номер старой заявки, которая была снята в конце прошлой торговой сессии и по которой была выставлена эта новая заявка. Также у новой заявки trans_id равен нулю. Поэтому связывать новую заявку заявку со старой нужно именно по полю linkedorder. Нужно ещё учитывать ряд вещей, например, что поле linkedorder хранит номер заявки предыдущей торговой сессии, а не номер самой первой исходной заявки. То-есть, номера в order_num и linkedorder будут постоянно сдвигаться, каждый день. Также в сделках отсутствует поле linkedorder, поэтому если вызов OnOrder с номером новой заявки потерялся во время вечернего клиринга, то вызовы OnTrade по новой заявке будут содержать trans_id равный нулю, и order_num который неизвестно к чему относится. Я их назвал «сделки из ниоткуда»... обсуждалось в теме «order_num == nil и status == 3 в ответ на NEW_ORDER» ()...
Я пока для себя эту тему отложил в сторону, а потом планирую делать это в общем виде без жёсткой привязки к этому функционалу. То-есть скрипт сам будет отслеживать конец и начало торговой сессии, и сам перевыставлять заявки. В любом случае это придётся делать, чтобы работало на тех разделах, где функция переноса заявки отсутствует в принципе...