Получение данных из таблиц QUIK в QLua(Lua)

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

QUIK-Qlua-poluchenie-dannyh Для получения данных из таблиц терминала QUIK удобно пользоваться 3-мя функциями: getItem(), getNumberOf() и getParamEx().

Пример:

-- Перебирает строки таблицы "Позиции по клиентским счетам (фьючерсы)", ищет Текущие чистые позиции по инструменту "RIH5"
for i = 0,getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do
   -- ЕСЛИ строка по нужному инструменту И чистая позиция не равна нулю ТО
   if getItem("FUTURES_CLIENT_HOLDING",i).sec_code == "RIH5" and getItem("FUTURES_CLIENT_HOLDING",i).totalnet ~= 0 then
      -- ЕСЛИ текущая чистая позиция > 0, ТО открыта длинная позиция (BUY)
      if getItem("FUTURES_CLIENT_HOLDING",i).totalnet > 0 then 
         IsBuy = true;
         BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet;	-- Количество лотов в позиции BUY				
      else   -- ИНАЧЕ открыта короткая позиция (SELL)
         IsSell = true;
         SellVol = math.abs(getItem("FUTURES_CLIENT_HOLDING",i).totalnet); -- Количество лотов в позиции SELL
      end;
   end;
end;

Далее перечислены таблицы, их идентификаторы и поля, к которым можно обращаться:

Фирмы:
Классы:
Инструменты:
Торговые счета:
Коды клиентов:
Обезличенные сделки (Таблица всех сделок):
Денежные позиции:
Заявки:
Позиции по клиентским счетам (фьючерсы):
Лимиты по фьючерсам:
Лимиты по денежным средствам:
Лимиты по бумагам:
Сделки:
Стоп-заявки:
Заявки на внебиржевые сделки:
Сделки для исполнения:
Отчеты по сделкам для исполнения:
Текущие позиции по бумагам:
Текущие позиции по клиентским счетам:
Обязательства и требования по деньгам:
Обязательства и требования по активам:
Для получения значений всех параметров биржевой информации из таблицы "Текущие торги" существует специальная функция
getParamEx (STRING class_code, STRING sec_code, STRING param_name),
которая принимает 3 параметра:
   - Код класса
   - Код инструмента
   - Имя параметра из таблицы "Текущие торги".

Функция возвращает таблицу Lua со следующими полями:
   param_type    STRING Тип данных параметра, используемый в таблице "Текущие торги". Возможные значения: 
      «1» - DOUBLE ,
      «2» - LONG, 
      «3» - CHAR, 
      «4» - перечислимый тип, 
      «5» - время, 
      «6» - дата 
 
   param_value   STRING Значение параметра. Для param_type = 3 значение параметра равно «0», в остальных случаях – числовое представление. Для перечислимых типов значение равно порядковому значению перечисления  

   param_image   STRING Строковое значение параметра, аналогичное его представлению в таблице. В строковом представлении учитываются разделители разрядов, разделители целой и дробной части. Для перечислимых типов выводятся соответствующие им строковые значения

Пример использования:

Status =  tonumber(getParamEx("SPBFUT",  "RIM5", "STATUS").param_value);
-- Выводит сообщение о текущем состоянии
if Status == 1 then message("RIM5 торгуется"); else message("RIM5 не торгуется"); end;
Список возможных идентификаторов параметров, передаваемых в функцию getParamEx()

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

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

Получение данных из таблиц QUIK в QLua(Lua): 412 комментариев

  1. Здравствуйте.
    Есть интересный вопрос, а может даже странным показаться.
    Как можно узнать какой параметр принимает функция?
    Объясню как раз на примере функции getParamEx.
    Есть функция getParamEx в справочнике QLUA описано что принимает 3 параметра и третий параметр param_name в справочнике не описан, по крайней мере я не нашел. Известно что функция получает данные из таблицы текущих торгов, идем в эту таблицу и пробуем передать название столбца, но это не подходит. Других вариантов как узнать название параметра не знаю.
    Конечно на этом сайте описан список всех параметров, но предположим такой вариант что на сайте нет этого списка и в Интернете тоже нет нигде этого списка параметров, как в таком случае узнать что передать в функцию? Или вопрос такой. как Вы получили этот список что описан на этой странице выше?
    У меня есть один вариант, запустить перебор. Для ускорения взять только заглавные буквы латинского алфавита и смотреть что функция вернет.
    Но может есть какой то другой способ это узнать?

    1. Здравствуйте, QLua это потомок Qpile, языка, который до этого был основным в квике, данная функция и ряд других перекочевали оттуда, по этому их описание можете посмотреть в файле справки info.chm (находится в папке терминала), там я их и нашел.

      1. Все оказалось так просто.
        Совершенно не разбирался с QPILE, когда начал использовать Квик в нем уже был LUA, так что за него и взялся, а info.chm смотрел ранее, но очень бегло, а сейчас даже не подумал туда заглянуть.
        Спасибо большое за подсказку.

      1. Этот Параметр находится в Доске Опционов. Некоторые параметры из Доски опционов есть в getParamEx(), а Временную стоимость я не нашел - Это самый основной параметр, на основание которого, рассчитываются цены опционов.

        1. Доска опционов, на сколько я понимаю (я с опционами не работаю), рассчитывается в квике, т.е. Вам нужно найти формулу по которой рассчитывается нужный параметр и рассчитать его самостоятельно, он, в любом случае, рассчитывается из доступных параметров, которые Вы сможете получить.

  2. Это скриншот таблицы сделок в квике, а бот, который такие сделки делает на с++ fix/fast в ко-локации. Там 13 сделок за 1 секунду, эта самая меньшая по времени нахождения в позиции