Функции обратного вызова, встроенные в QLua

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 9, среднее: 5,00 из 5)
Загрузка...

Qlua-основы
Во время работы терминала QUIK в нем происходят различные события, такие, как приход новой обезличенной сделки, выставление заявки, сработал стоп-ордер и т.п. Для того, чтобы своевременно и определенным образом реагировать на эти события, в скрипте QLua можно использовать функции обратного вызова, которые будут выполнять блок кода, расположенного внутри них, в тот момент, когда это событие произойдет.

Для каждого определенного события есть своя предопределенная разработчиками QLua функция!

Функции OnInit(), main() и OnStop() рассматриваются в статье "База скрипта в QLua(Lua)".

Для использования функций в терминале QUIK должны быть открыты соответствующие им таблицы!

OnAccountBalance()
Функция вызывается терминалом QUIK при получении изменений текущей позиции по счету (ТОЛЬКО ДЛЯ БРОКЕРА).
OnAccountPosition()
Функция вызывается терминалом QUIK при изменении денежной позиции по счету (ТОЛЬКО ДЛЯ БРОКЕРА).
OnAllTrade()
Функция вызывается терминалом QUIK при получении обезличенной сделки (Таблица всех сделок).
OnCleanUp()
Функция вызывается терминалом QUIK при смене сессии и при выгрузке файла qlua.dll

OnClose()
Функция вызывается перед закрытием терминала QUIK.
OnConnected()
Функция вызывается терминалом QUIK при установлении связи с сервером QUIK.
OnDepoLimit()
Функция вызывается терминалом QUIK при получении изменений лимита по бумагам.
OnDepoLimitDelete()
Функция вызывается терминалом QUIK при удалении клиентского лимита по бумагам.
OnDisconnected()
Функция вызывается терминалом QUIK при отключении от сервера QUIK.
OnFirm()
Функция вызывается терминалом QUIK при получении описания новой фирмы от сервера.
OnFuturesClientHolding()
Функция вызывается терминалом QUIK при изменении позиции по срочному рынку (Позиции по клиентским счетам (фьючерсы)).
OnFuturesLimitChange()
Функция вызывается терминалом QUIK при получении изменений ограничений по срочному рынку (Ограничения по клиентским счетам).
OnFuturesLimitDelete()
Функция вызывается терминалом QUIK при удалении лимита по срочному рынку.
OnMoneyLimit()
Функция вызывается терминалом QUIK при получении изменений по денежному лимиту клиента (Таблица лимитов по денежным средствам).
OnMoneyLimitDelete()
Функция вызывается терминалом QUIK при удалении денежного лимита.
OnNegDeal()
Функция вызывается терминалом QUIK при получении внебиржевой заявки (Таблица заявок на внебиржевые сделки).
OnNegTrade()
Функция вызывается терминалом QUIK при получении внебиржевой сделки для исполнения (Таблица сделок для исполнения).
OnOrder()
Функция вызывается терминалом QUIK при получении новой заявки или при изменении параметров существующей заявки (Таблица заявок).
OnParam()
Функция вызывается терминалом QUIK при изменении текущих параметров (Текущая таблица параметров).
OnQuote()
Функция вызывается терминалом QUIK при получении изменения стакана котировок.
С примером использования данной функции можно ознакомиться в этой статье.

OnStopOrder()
Функция вызывается терминалом QUIK при получении новой стоп-заявки или при изменении параметров существующей стоп-заявки (Таблица стоп-заявок).
OnTrade()
Функция вызывается терминалом QUIK при получении сделки (Таблица сделок).
OnTransReply()
Функция вызывается терминалом QUIK при получении ответа на транзакцию пользователя (Таблица транзакций).

Ниже приведен скрипт, в котором есть все функции обратного вызова. При помощи него можно отследить в какой последовательности и с какими задержками срабатывают функции при выполнении Вами каких-либо операций. При вызове каждой функции выводится сообщение, в котором указано название функции, ее краткое описание и время с точностью до миллисекунд, прошедшее с момента запуска терминала QUIK.

В функциях OnAllTrade(), OnParam() и OnQuote() вывод сообщений намеренно закомментирован, т.к. они вызываются очень часто и независимо от Ваших действий, если Вам будет нужно отследить их вызовы, раскомментируйте строки вывода сообщений в данных функциях.

Можете запустить данный скрипт и посовершать разные торговые операции на демо-счете, чтобы лучше понять как работают данные функции.

Скрипт отслеживания работы функций обратного вызова
Для более удобного просмотра информации, выводимой при помощи функции message(), используйте таблицу сообщений (меню: "Сообщения"->"Системные сообщения"->"Таблица сообщений..."). А также, снимите флажок "Показывать окно сообщений" в меню: "Настройки"->"Основные..."->"Сообщения".

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Функции обратного вызова, встроенные в QLua: 114 комментариев

  1. Привет, если бот постоянно глядит в "Таблицу сделок" и параметры сделки из нее берет, то функция - OnTrade(trade) в принципе не нужна? Или я что то не так понимаю?

      1. Но все равно она же есть - значит есть в этом смысл какой-то. Я так понимаю сначала инфа по сделке прилетает в OnTrade(), и только потом инфа появляется в таблице сделок, так? Если так то сколько задержка по времени? Если не значительная то блин OnTrade() мне не нужна будет. Просто делаю функцию по "потеряшкам" (потерянные сделки) - так смотрю понятно в таблицу сделок и фильтровал по номерам - косяк выявил - у меня сделки по облигам прошли, а там с 2 млрд. номера идут (ну я чисто стратегически накосячил вот переделываю щас)

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

          1. "мне в цикле больше нравится." - в цикле main() перебираешь? я то щас примерно так и хочу сделать - ну получится 100% не потеряю сделку - ну я как то по своему это все вижу - ну ты понял. Просто потеряшки есть и бывают - или я туплю или что как то - но все равно если есть лимитка и связь потерялась и она прошла в этот момент то все бот ее по любому у меня щас ее не видит - ладно разберусь. PS показал твой сайт человеку (вчера) - хочет с нуля на Lua зайти, сам писать коды - ну вот говорю самый лучший сайт для старта

  2. Доброго времени суток.
    Подскажите, пожалуйста, как из таблиц Заявок и Стоп заявок можно получить Тип операции (купля/продажа), использую функции OnOrder, OnStopOrder.

    1. trans_id в OnTrade появился только с появлением 7-й версии терминала квик, еще совсем недавно его не было. Посмотреть можно в файле справки QLUA.chm раздел "Функции обратного вызова", файл находится в папке терминала квик. Нужно добавить, кстати, уже trans_id в статью.

  3. подскажите, почему OnTrade срабатывает 3 раза, думал есть отличия во флагах но нет, чем они отличаются и в каких случаях?
    и после какого OnTrade можно считать что сделка прошла и лимиты поменялись?
    спасибо что отвечаете.

    1. Я не знаю после какого раза меняются лимиты, но вызывается она по нескольку раз как раз потому, что меняется информация по сделке, если не ошибаюсь, то при первом вызове в сделке отсутствует номер заявки, потом он появляется, что еще меняется в процессе, даже не знаю, не было необходимости узнавать.

    2. Здравствуйте, если появилась соответствующая запись в таблице сделок, то лимиты точно поменялись. Можно ориентироваться и по таблице заявок - есть запись, лимиты поменялись, запись увидите раньше, чем в таблице сделок.