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

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 13, среднее: 3,77 из 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): 506 комментариев

  1. Здравствуйте!

    Такая задача:
    Есть таблица текущих торгов, в которой отображаются только некоторые бумаги (допустим 20), другие просто не нужны.
    (Бумаги добавлены в табло мануально через окошко редактирования таблицы)

    Требуется вывести данные из этой таблицы в файл.

    1. Здравствуйте!
      делаете список инструментов и список нужных параметров
      в main в цикле или по событию в OnParam получаете нужные параметры и сохраняете в файл.

  2. В таблицах значения записаны через запятую, а при использовании функции

    1
    
     getItem("futures_client_limits",i).cbplplanned

    возвращается значение через точку, почему так?

  3. Здравствуйте.Подскажите пожалуйста, я чего то не догоняю.
    Планирую пользоваться функциями getItem(), getNumberOf() и получать данные из таблицы обезличенных сделок. В настройках: Система-Настройки-Основные настройки-Получения данных ставлю - С учетом настроек выбранных через пункт меню...
    При таких настройках если я позову getItem("all_trades", getNumberOf()), то она вернет nill, так как данные не заказаны?
    Я вызову функцию ParamRequest("SPBFUT", "RIM0", "LAST") и после нее посыпется поток в таблице обезличенных сделок по указанному фьючу, правильно?
    Еще раз вызову ParamRequest("TQBR", "SBER", "LAST") и теперь в таблице всех сделок смесь сбера с фьчерсом на ртс?

    Я правильно ParamRequest() понял?

    1. Попробуйте прочитать файл справки QLUA.chm.
      getNumberOf() - возвращает кол-во записей, которые начинаются с нуля, строки с таким индексом нет.
      getItem("all_trades", getNumberOf() - 1) - вернет последнюю запись.
      ParamRequest - не добавляет инструмент в таблицу обезличенных сделок, добавлять инструмент нужно руками.