Руководство пользователя QLua

Версия 7.19

Содержание

  • О программе
  • Подготовка к работе
  • Работа с программой
  • Сервисные функции
  • Функции обратного вызова
  • Функции для обращения к строкам произвольных таблиц QUIK
  • Функции для обращения к спискам доступных параметров
  • Функции взаимодействия скрипта Lua и Рабочего места QUIK
  • Функции для работы с таблицами Рабочего места QUIK
  • Функции для работы с метками
  • Функции для заказа стакана котировок
  • Структуры данных
  • Описание битовых флагов
  • Функции для работы с битовыми масками в структурах данных
  • Индикаторы технического анализа
  • Потокобезопасные функции для работы с таблицами Lua
  • Приложения

Руководство пользователя QUIK © ARQA Technologies
www.arqatech.com/ru/products/quik/


О программе

Интерпретатор языка Lua (QLua) – это библиотека, которая предоставляет пользователю возможность взаимодействия с Рабочим местом QUIK при помощи скриптов, созданных на языке Lua. Подробнее о Lua на сайте www.lua.org.

Возможности программы

QLua обеспечивает доступ к внутренним данным Рабочего места QUIK и отправку клиентских транзакций из скрипта Lua на сервер QUIK. QLua обеспечивает (в отличие от языка QPILE) асинхронную обработку данных в скрипте по мере получения, а так же возможность непрерывно опрашивать клиентский терминал для получения новых данных. Для асинхронной обработки используются специальные функции обратного вызова (далее callback), которые описываются в скрипте.

QLua обеспечивает обработку следующих событий от Рабочего места QUIK:

  • получение новых данных;
  • подключение к серверу QUIK;
  • отключение от сервера QUIK;
  • остановка выполнения скрипта;
  • закрытие Рабочего места QUIK.

Все перечисленные события могут вызывать соответствующий callback в скрипте.

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

Некорректная работа сторонних библиотек, загруженных скриптом, может приводить к ошибкам в работе терминала QUIK.

Руководство пользователя QUIK © ARQA Technologies / www.arqatech.com/ru/products/quik/


Подготовка к работе

QLua является дополнительным компонентом Рабочего места QUIK.

Работу QLua обеспечивает файл qlua.dll, который должен находиться в одной папке с файлами Рабочего места QUIK, например, C:\Program Files\QUIK.


Работа с программой

Доступ к функциям QLua осуществляется из главного меню программы. После установки компонента, в меню программы появляется дополнительный пункт Сервисы / Lua скрипты…

Назначение

Форма «Доступные скрипты» предназначена для добавления, удаления, перезагрузки и запуска скриптов.

Настройки окна

Настройки в этом окне:

  • «Добавить» – загрузить новый скрипт из файла,
  • «Удалить» – удалить загруженный скрипт,
  • «Выделить все» – выделить все доступные скрипты,
  • «Запустить» – запустить выполнение загруженных скриптов,
  • «Остановить» – остановить выполнение выбранного скрипта.

Активность кнопок «Запустить» и «Остановить» зависит от текущего состояния скрипта.

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

Ошибки, возникающие при выполнении скрипта, отображаются в соответствующей области окна.


Сервисные функции

  • isConnected - определяет состояние подключения клиентского места к серверу
  • getScriptPath - возвращает путь, по которому находится запускаемый скрипт
  • getInfoParam - позволяет получить параметры для информационного окна (Система / О программе / Информационное окно…)
  • message - отображает сообщения в терминале QUIK
  • sleep - приостанавливает выполнение кода скрипта
  • getWorkingFolder - возвращает путь, по которому находится файл info.exe, исполняющий скрипт
  • PrintDbgStr - для вывода отладочной информации
  • sysdate - возвращает системные дату и время


isConnected

Функция предназначена для определения состояния подключения клиентского места к серверу. Возвращает «1», если клиентское место подключено и «0», если не подключено.

Формат вызова:

NUMBER isConnected()


getScriptPath

Функция возвращает путь, по которому находится запускаемый скрипт, без завершающего обратного слеша («\»). Например, C:\QuikFront\Scripts

Формат вызова:

STRING getScriptPath()

Пример:

path = getScriptPath()


getInfoParam

Функция возвращает значения параметров информационного окна (пункт меню Система / О программе / Информационное окно…).

Формат вызова:

STRING getInfoParam (STRING param_name)

Параметр «param_name» может принимать значения, представленные в таблице.

Значение параметра | Описание
VERSION | Версия программы
TRADEDATE | Дата торгов
SERVERTIME | Время сервера
LASTRECORDTIME | Время последней записи
NUMRECORDS | Число записей
LASTRECORD | Последняя запись
LATERECORD | Отставшая запись
CONNECTION | Соединение
IPADDRESS | IP-адрес сервера
IPPORT | Порт сервера
IPCOMMENT | Описание соединения
SERVER | Описание сервера
SESSIONID | Идентификатор сессии
USER | Пользователь
USERID | ID пользователя
ORG | Организация
MEMORY | Занято памяти
LOCALTIME | Текущее время
CONNECTIONTIME | Время на связи
MESSAGESSENT | Передано сообщений
ALLSENT | Передано всего байт
BYTESSENT | Передано полезных байт
BYTESPERSECSENT | Передано за секунду
MESSAGESRECV | Принято сообщений
BYTESRECV | Принято полезных байт
ALLRECV | Принято всего байт
BYTESPERSECRECV | Принято за секунду
AVGSENT | Средняя скорость передачи
AVGRECV | Средняя скорость приема
LASTPINGTIME | Время последней проверки связи
LASTPINGDURATION | Задержка данных при обмене с сервером
AVGPINGDURATION | Средняя задержка данных
MAXPINGTIME | Время максимальной задержки
MAXPINGDURATION | Максимальная задержка данных

Пример:

function main(  )
    params = {"VERSION", "TRADEDATE", "SERVERTIME",
                "LASTRECORDTIME", "NUMRECORDS", "LASTRECORD","LATERECORD",
                "CONNECTION", "IPADDRESS", "IPPORT", "IPCOMMENT",
                "SERVER", "SESSIONID", "USER", "USERID", "ORG", "MEMORY",
                "LOCALTIME", "CONNECTIONTIME", "MESSAGESSENT", "ALLSENT",
                "BYTESSENT", "BYTESPERSECSENT", "MESSAGESRECV", "BYTESRECV",
                "ALLRECV", "BYTESPERSECRECV", "AVGSENT", "AVGRECV",
                "LASTPINGTIME", "LASTPINGDURATION", "AVGPINGDURATION",
                "MAXPINGTIME", "MAXPINGDURATION"}
    file = io.open("res.txt", "w+t")
    for key,v in ipairs(params) do
        file:write(v .. " = " .. getInfoParam(v) .. "\n")
    end
    file:close()
end


message

Функция отображает сообщения в терминале QUIK. Возвращает «nil» при ошибке выполнения или при обнаружении ошибки во входных параметрах. В остальных случаях возвращает «1».

Максимальная длина сообщений об ошибках выполнения скрипта и строк, передаваемых в функцию message(), составляет 900 символов.

Формат вызова:

NUMBER message(STRING message, NUMBER icon_type)

Параметры:

Параметр | Тип | Описание
message | STRING | Строка, отображаемая в окне сообщений терминала QUIK
icon_type NUMBER

Тип отображаемой иконки в сообщении. Возможные значения и вид иконки:

  • «1» (по умолчанию) – [image];
  • «2»– [image];
  • «3»– [image].

Необязательный параметр

Пример:

message("test message")
message("test message", 1)
message("test\nmessage", 2)
message("connection state is " .. tostring(isConnected()), 3)


sleep

Функция приостанавливает выполнение скрипта. Возвращает «nil» при обнаружении ошибки во входных параметрах. В случае успешного завершения возвращает время ожидания, заданное параметром «time».

Формат вызова:

NUMBER sleep(NUMBER time)

Параметры:

Параметр | Тип | Описание
time | NUMBER | Время, на которое приостанавливается выполнение, в миллисекундах

Пример:

sleep(1000) -- приостановка выполнения скрипта на одну секунду
Функцию sleep не рекомендуется использовать в функциях обратного вызова.


getWorkingFolder

Функция возвращает путь, по которому находится файл info.exe, исполняющий данный скрипт, без завершающего обратного слеша («\»). Например, C:\QuikFront.

Формат вызова:

STRING getWorkingFolder()

Пример:

path = getWorkingFolder()


PrintDbgStr

Функция для вывода отладочной информации.

Формат вызова:

PrintDbgStr(STRING s)

Пример:

function main()
    PrintDbgStr("test1")
    PrintDbgStr("test2")
    PrintDbgStr("dbg from " ..getScriptPath())
end


sysdate

Функция возвращает системные дату и время с точностью до микросекунд.

Формат вызова:

TABLE os.sysdate()

Функция возвращает таблицу Lua с параметрами.


isDarkTheme

Функция позволяет получить информацию о том, в какой теме оформления интерфейса в настоящий момент работает терминал: стандартной или тёмной.

Формат вызова:

BOOLEAN isDarkTheme()

Функция возвращает «true», если используется тёмная тема, иначе – «false».


Функции обратного вызова

ВАЖНО! Функции обратного вызова обрабатываются в основном потоке терминала QUIK. Поэтому пользователю необходимо оптимизировать время исполнения таких функций.

Торговые данные передаются в скрипт только в том случае, если параметры по данной бумаге заказаны с сервера (в рамках умного заказа или вручную через диалог Система/Заказ данных) или если открыт соответствующий стакан.

Заказ данных с сервера также можно выполнить с помощью функций QLua (заказ стакана котировок, заказ параметров Таблицы текущих торгов)

Функции вызываются при получении следующих данных или событий терминалом QUIK от сервера:

  • main - реализация основного потока исполнения в скрипте
  • OnAccountBalance - изменение позиции по счету
  • OnAccountPosition - изменение позиции по счету
  • OnAllTrade - новая обезличенная сделка
  • OnCleanUp - смена торговой сессии
  • OnClose - закрытие терминала QUIK или выгрузка файла qlua.dll
  • OnConnected - установление связи с сервером QUIK
  • OnDepoLimit - изменение бумажного лимита
  • OnDepoLimitDelete - удаление бумажного лимита
  • OnDisconnected - отключение от сервера QUIK
  • OnFirm - получение описания новой фирмы
  • OnFuturesClientHolding - изменение позиции по срочному рынку
  • OnFuturesLimitChange - изменение ограничений по срочному рынку
  • OnFuturesLimitDelete - удаление лимита по срочному рынку
  • OnInit - инициализация функции main
  • OnMoneyLimit - изменение денежного лимита
  • OnMoneyLimitDelete - удаление денежного лимита
  • OnNegDeal - новая заявка на внебиржевую сделку или изменение параметров существующей заявки на внебиржевую сделку
  • OnNegTrade - новая сделка для исполнения или изменение существующей сделки для исполнения
  • OnOrder - новая заявка или изменение параметров существующей заявки
  • OnParam - изменение текущих параметров
  • OnQuote - изменение стакана котировок
  • OnStop - остановка скрипта из диалога управления
  • OnStopOrder - новая стоп-заявка или изменение параметров существующей стоп-заявки
  • OnTrade - новая сделка или изменение параметров существующей сделки
  • OnTransReply - ответ на транзакцию


main

Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток. Скрипт считается работающим, пока работает функция main(). При завершении работы функции main() скрипт переходит в состояние «остановлен». Если скрипт находится в состоянии «остановлен», то не происходит вызовов функций обработки событий терминала QUIK, содержащихся в этом скрипте.

Формат вызова:

main()

Пример:

function main()
    while true do
        message(os.date()) --раз в секунду выводит текущие дату и время
        sleep(1000)
    end
end


OnAccountBalance

Функция вызывается терминалом QUIK при получении изменений текущей позиции по счету.

Формат вызова:

OnAccountBalance(TABLE acc_bal)

Параметры:

Параметр | Тип | Описание
acc_bal | TABLE | Таблица с текущими значениями позиции по счету


OnAccountPosition

Функция вызывается терминалом QUIK при изменении денежной позиции по счету.

Формат вызова:

OnAccountPosition(TABLE acc_pos)

Параметры:

Параметр | Тип | Описание
acc_pos | TABLE | Таблица с текущими значениями денежных позиций по счету


OnAllTrade

Функция вызывается терминалом QUIK при получении обезличенной сделки.

Формат вызова:

OnAllTrade(TABLE alltrade)

Параметры:

Параметр | Тип | Описание
alltrade | TABLE | Таблица с параметрами обезличенной сделки


OnCleanUp

Функция вызывается терминалом QUIK в следующих случаях:

  • смена сервера QUIK внутри торговой сессии;
  • смена пользователя, которым выполняется подключение к серверу QUIK, внутри торговой сессии;
  • смена сессии.

Формат вызова:

OnCleanUp()

При выполнении сразу нескольких из перечисленных условий, функция OnCleanUp() вызывается терминалом QUIK для каждого из них.

Под сменой сессии подразумевается изменение идентификатора сессии при подключении к серверу QUIK.


OnClose

Функция вызывается перед закрытием терминала QUIK и при выгрузке файла qlua.dll.

Формат вызова:

OnClose()

Под выгрузкой файла qlua.dll подразумевается отключение плагина QLua в окне «Версии компонентов и плагинов» (см. п. 1.9. Раздела 1 Руководства пользователя QUIK).


OnConnected

Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса. Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false».

Формат вызова:

OnConnected(BOOLEAN flag)


OnDepoLimit

Функция вызывается терминалом QUIK при получении изменений лимита по бумагам.

Формат вызова:

OnDepoLimit(TABLE dlimit)

Параметры:

Параметр | Тип | Описание
dlimit | TABLE | Таблица с текущими значениями лимита по бумагам


OnDepoLimitDelete

Функция вызывается терминалом QUIK при удалении клиентского лимита по бумагам.

Формат вызова:

OnDepoLimitDelete(TABLE dlimit_del)

Параметры:

Параметр | Тип | Описание
dlimit_del | TABLE | Таблица с параметрами удаляемого лимита по бумагам


OnDisconnected

Функция вызывается терминалом QUIK при отключении от сервера QUIK.

Формат вызова:

OnDisconnected()


OnFirm

Функция вызывается терминалом QUIK при получении описания новой фирмы от сервера.

Формат вызова:

OnFirm(TABLE firm)

Параметры:

Параметр | Тип | Описание
firm | TABLE | Таблица с параметрами фирмы


OnFuturesClientHolding

Функция вызывается терминалом QUIK при изменении позиции по срочному рынку.

Формат вызова:

OnFuturesClientHolding(TABLE fut_pos)

Параметры:

Параметр | Тип | Описание
fut_pos | TABLE | Таблица с описанием позиции по срочному рынку


OnFuturesLimitChange

Функция вызывается терминалом QUIK при получении изменений ограничений по срочному рынку.

Формат вызова:

OnFuturesLimitChange(TABLE fut_limit)

Параметры:

Параметр | Тип | Описание
fut_limit | TABLE | Таблица с текущими значениями лимита по срочному рынку


OnFuturesLimitDelete

Функция вызывается терминалом QUIK при удалении лимита по срочному рынку.

Формат вызова:

OnFuturesLimitDelete(TABLE lim_del)

Параметры:

Параметр | Тип | Описание
lim_del | TABLE | Таблица с параметрами удаляемого лимита по срочному рынку


OnInit

Функция вызывается терминалом QUIK перед вызовом функции main(). В качестве параметра принимает значение полного пути к запускаемому скрипту.

Формат вызова:

OnInit(STRING script_path)

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


OnMoneyLimit

Функция вызывается терминалом QUIK при получении изменений по денежному лимиту клиента.

Формат вызова:

OnMoneyLimit(TABLE mlimit)

Параметры:

Параметр | Тип | Описание
mlimit | TABLE | Таблица с текущими значениями денежного лимита


OnMoneyLimitDelete

Функция вызывается терминалом QUIK при удалении денежного лимита.

Формат вызова:

OnMoneyLimitDelete(TABLE mlimit_del)

Параметры:

Параметр | Тип | Описание
mlimit_del | TABLE | Таблица с параметрами удаляемого денежного лимита


OnNegDeal

Функция вызывается терминалом QUIK при получении внебиржевой заявки или при изменении параметров существующей внебиржевой заявки.

Формат вызова:

OnNegDeal(TABLE neg_deals)

Параметры:

Параметр | Тип | Описание
neg_deals | TABLE | Таблица с параметрами заявки на внебиржевые сделки


OnNegTrade

Функция вызывается терминалом QUIK при получении сделки для исполнения или при изменении параметров существующей сделки для исполнения.

Формат вызова:

OnNegTrade(TABLE neg_trade)

Параметры:

Параметр | Тип | Описание
neg_trade | TABLE | Таблица с параметрами сделки для исполнения


OnOrder

Функция вызывается терминалом QUIK при получении новой заявки или при изменении параметров существующей заявки.

Формат вызова:

OnOrder(TABLE order)

Параметры:

Параметр | Тип | Описание
order | TABLE | Таблица с параметрами заявки


OnParam

Функция вызывается терминалом QUIK при изменении текущих параметров.

Формат вызова:

OnParam(STRING class_code, STRING sec_code)

Параметры:

Параметр | Тип | Описание
class_code | STRING | Код класса
sec_code | STRING | Код бумаги

При вызове данной функции пользователь может вызвать функцию getParamEx() и получить значение нужного параметра.

Пример:

function OnParam( class, sec )
    if class =="SPBFUT" and sec == "RIZ2" then
        tbid = getParamEx(class,  sec, "bid")
        if tbid.param_value > =130000 then
            message("Спрос " .. tbid.param_image)
        end
    end
end


OnQuote

Функция вызывается терминалом QUIK при получении изменения стакана котировок.

Формат вызова:

OnQuote(STRING class_code, STRING sec_code)

Параметры:

Параметр | Тип | Описание
class_code | STRING | Код класса
sec_code | STRING | Код бумаги

После вызова данной функции запросить нужную таблицу котировок можно с помощью функции getQuoteLevel2() .

Пример:

function OnQuote(class, sec )
    if class =="SPBFUT" and sec == "RIZ2" then
        ql2 = getQuoteLevel2(class, sec)
    end
end


OnStop

Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK.

Формат вызова:

[NUMBER time_out] OnStop(NUMBER flag)

Функция возвращает количество миллисекунд, которое дается скрипту на завершение работы. Если функция не возвращает число, то таймаут завершения работы скрипта остается равным 5 секундам.

По истечении интервала времени, данного скрипту на завершение работы, функция main() завершается принудительно. При этом возможна потеря системных ресурсов.

При остановке или удалении работающего скрипта Lua из диалога управления «Доступные скрипты» параметр вызова flag принимает значение «1». При закрытии терминала QUIK – значение «2».

Пример:

function OnStop(flag)
    stopped = true
    return 3000 -- задается таймаут в 3 секунды
end
function OnStop(flag)
    stopped = true
    return '3000' -- возвращаемое значение - не число, таймаут остается равным 5 секундам
end


OnStopOrder

Функция вызывается терминалом QUIK при получении новой стоп-заявки или при изменении параметров существующей стоп-заявки.

Формат вызова:

OnStopOrder(TABLE stop_order)

Параметры:

Параметр | Тип | Описание
stop_order | TABLE | Таблица с параметрами стоп-заявки


OnTrade

Функция вызывается терминалом QUIK при получении сделки или при изменении параметров существующей сделки.

Формат вызова:

OnTrade(TABLE trade)

Параметры:

Параметр | Тип | Описание
trade | TABLE | Таблица с параметрами сделки


OnTransReply

Функция OnTransReply вызывается терминалом QUIK при получении ответа на транзакцию пользователя, отправленную с помощью любого плагина Рабочего места QUIK (в том числе QLua). Для транзакций, отправленных с помощью Trans2quik.dll, QPILE или динамической загрузки транзакций из файла, функция не вызывается.

Формат вызова:

OnTransReply(TABLE trans_reply)

Параметры:

Параметр | Тип | Описание
trans_reply | TABLE | Таблица с описанием транзакций


Функции для обращения к строкам произвольных таблиц QUIK

Функции из этой группы предназначены для доступа к данным, содержащимся в таблицах Рабочего места QUIK.

  • getItem
  • getOrderByNumber
  • getNumberOf
  • SearchItems
  • Таблицы, используемые в функциях «getItem» и «getNumberOf»

Пример:

function main()
    n = getNumberOf("orders")
    order={}
    message("total ".. tostring(n) .. " of all orders", 1)
    for i=0,n-1 do
        order = getItem("orders", i)
        message("order: num=" .. tostring(order["order_num"]) .. " qty=" .. tostring(order["qty"]) .. " value=" .. tostring(order["value"]), 1)
    end
end

В результате выполнения данного скрипта выводится информация обо всех заявках.


getItem

Функция возвращает таблицу Lua, содержащую информацию о данных из строки с номером «Index» из таблицы с именем «TableName».

TABLE getItem (STRING TableName, NUMBER Index)

В случае неуспешного завершения функция возвращает «nil».

Индекс элементов в таблице начинается с «0».


getOrderByNumber

Функция возвращает таблицу Lua, содержащую описание параметров Таблицы заявок и индекс заявки в хранилище терминала.

TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER order_id)

Если заявка с указанным номером не существует, то возвращаемые параметры - «nil».


getNumberOf

Функция возвращает количество записей в таблице «TableName».

NUMBER getNumberOf(STRING TableName)


SearchItems

Функция позволяет реализовать быструю выборку элементов из хранилища терминала и возвращает таблицу с индексами элементов, удовлетворяющих условию поиска.

TABLE SearchItems(STRING table_name, NUMBER start_index, NUMBER end_index, FUNCTION fn [, STRING params])

При возникновении ошибки в функции fn функция SearchItems прерывает свою работу и возвращает «nil».

Параметры:

  • table_name – строка, определяющая таблицу для поиска;
  • start_index – индекс стартового элемента для поиска;
  • end_index – индекс конечного элемента поиска;
  • fn – функция обратного вызова, возвращающая одно из следующих значений:
    • true – текущий индекс учитывается в результате;
    • false – текущий индекс не учитывается в результате;
    • nil – поиск прерывается, функция SearchItems возвращает таблицу с индексами, найденными ранее, включая текущий индекс.

    Входные параметры функции определяются наличием и значением параметра params;

  • params – определяет список полей элемента таблицы table_name для передачи в функцию fn. Поля задаются через запятую, пробелы игнорируются. Если строка params не задана, то в функцию fn элемент из хранилища терминала передается полностью. Необязательный параметр. Примеры с использованием params приведены в Приложении 4.


Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»

TableName | Таблица
firms | Фирмы
classes | Классы
securities | Инструменты
trade_accounts | Торговые счета
client_codes | * Коды клиентов
all_trades | Обезличенные сделки
account_positions | Денежные позиции
orders | Заявки
futures_client_holding | Позиции по клиентским счетам (фьючерсы)
futures_client_limits | Лимиты по фьючерсам
money_limits | Лимиты по денежным средствам
depo_limits | Лимиты по бумагам
trades | Сделки
stop_orders | Стоп-заявки
neg_deals | Заявки на внебиржевые сделки
neg_trades | Сделки для исполнения
neg_deal_reports | Отчеты по сделкам для исполнения
firm_holding | Текущие позиции по бумагам
account_balance | Текущие позиции клиентским счетам
ccp_holdings | Обязательства и требования по активам
rm_holdings | Валюта: обязательства и требования по активам

* - функция getNumberOf("client_codes") возвращает количество доступных кодов клиента в терминале, а функция getItem("client_codes", i) - строку содержащую клиентский код с индексом i, где i может принимать значения от 0 до getNumberOf("client_codes") -1


Функции для обращения к спискам доступных параметров

  • getClassesList - функция для получения списка кодов классов, полученных с сервера в ходе сеанса связи
  • getClassInfo - функция для получения информации о классе
  • getClassSecurities - функция для получения списка кодов бумаг для списка классов, заданного списком кодов


getClassesList

Функция предназначена для получения списка кодов классов, переданных с сервера в ходе сеанса связи. Коды классов в списке разделяются запятой «,». В конце полученной строки всегда дописывается символ «,».

Формат вызова:

STRING getClassesList ()

Пример:

list = getClassesList ()

В результате выполнения приведенной строки кода, переменная list содержит строку вида:

OPTEXP,USDRUB,PSOPT,PSFUT,SPBFUT,


getClassInfo

Функция предназначена для получения информации о классе.

TABLE getClassInfo (STRING)

Возвращает таблицу Lua, содержащую описание класса:

Параметр | Тип | Описание
firmid | NUMBER | Код фирмы
name | STRING | Наименование класса
code | STRING | Код класса
npars | NUMBER | Количество параметров в классе
nsecs | NUMBER | Количество бумаг в классе


getClassSecurities

Функция предназначена для получения списка кодов бумаг для списка классов, заданного списком кодов. Коды бумаг в списке разделяются запятой «,». В конце полученной строки всегда дописывается символ «,».

STRING getClassSecurities (STRING)

Пример:

 sec_list = getClassSecurities("SPBFUT")

В результате выполнения приведенной строки кода, переменная sec_list содержит строку вида:

RSH3,VBZ2,O4Z2,O2Z2,SiM3,SiH3,SiF3,RIH3,RIM3,LKH3,LKZ2,GDZ2,GMZ2,GZH3,GZZ2,EuZ2,EDZ2,SiZ2,RIZ2,


Функции взаимодействия скрипта Lua и Рабочего места QUIK

  • getDepo - функция для получения информации по бумажным лимитам
  • getDepoEx - функция для получения информации по бумажным лимитам указанного типа
  • getMoney - функция для получения информации по денежным лимитам
  • getMoneyEx - функция для получения информации по денежным лимитам указанного типа
  • getFuturesLimit - функция для получения информации по фьючерсным лимитам
  • getFuturesHolding - функция для получения информации по фьючерсным позициям
  • getParamEx - функция для получения значений Таблицы текущих торгов
  • getParamEx2 - функция для получения значений всех параметров биржевой информации из Таблицы текущих торгов с возможностью в дальнейшем отказаться от получения определенных параметров
  • getQuoteLevel2 - функция для получения стакана по указанному классу и бумаге
  • getSecurityInfo - функция для получения информации по инструменту
  • getTradeDate - функция для получения даты торговой сессии
  • sendTransaction - функция для работы с заявками
  • CalcBuySell - функция для расчета максимально возможного количества лотов в заявке
  • getPortfolioInfo - функция для получения значений параметров таблицы «Клиентский портфель»
  • getPortfolioInfoEx - функция для получения значений параметров таблицы «Клиентский портфель» с учетом вида лимита
  • getBuySellInfo - функция для получения параметров таблицы «Купить/Продать»
  • getBuySellInfoEx - функция для получения параметров (включая вид лимита) таблицы «Купить/Продать»


getMoney

Функция предназначена для получения информации по денежным лимитам.

Формат вызова:

TABLE getMoney (STRING client_code, STRING firmid, STRING tag, STRING currcode)

Функция возвращает таблицу Lua с параметрами:

Параметр | Тип | Описание
money_open_limit | NUMBER | Входящий лимит по денежным средствам
money_limit_locked_nonmarginal_value | NUMBER | Стоимость немаржинальных бумаг в заявках на покупку
money_limit_locked | NUMBER | Заблокированное в заявках на покупку количество денежных средств
money_open_balance | NUMBER | Входящий остаток по денежным средствам
money_current_limit | NUMBER | Текущий лимит по денежным средствам
money_current_balance | NUMBER | Текущий остаток по денежным средствам
money_limit_available | NUMBER | Доступное количество денежных средств


getMoneyEx

Функция предназначена для получения информации по денежным лимитам указанного типа.

Формат вызова:

TABLE getMoneyEx(STRING firmid, STRING client_code, STRING tag, STRING currcode, NUMBER limit_kind)

Функция возвращает таблицу Lua с параметрами Таблицы лимитов по денежным средствам.

В случае ошибки функция возвращает «nil».


getDepo

Функция предназначена для получения информации по бумажным лимитам.

Формат вызова:

TABLE getDepo (STRING client_code, STRING firmid, STRING sec_code, STRING trdaccid)

Функция возвращает таблицу Lua с параметрами:

Параметр | Тип | Описание
depo_limit_locked_buy_value | NUMBER | Стоимость ценных бумаг, заблокированных на покупку
depo_current_balance | NUMBER | Текущий остаток по бумагам
depo_limit_locked_buy | NUMBER | Количество лотов ценных бумаг, заблокированных на покупку
depo_limit_locked | NUMBER | Заблокированное Количество лотов ценных бумаг
depo_limit_available | NUMBER | Доступное количество ценных бумаг
depo_current_limit | NUMBER | Текущий лимит по бумагам
depo_open_balance | NUMBER | Входящий остаток по бумагам
depo_open_limit | NUMBER | Входящий лимит по бумагам


getDepoEx

Функция предназначена для получения информации по бумажным лимитам указанного типа.

Формат вызова:

TABLE getDepoEx(STRING firmid, STRING client_code, STRING sec_code, STRING trdaccid, NUMBER limit_kind)

Функция возвращает таблицу Lua с параметрами Таблицы лимитов по бумагам.

В случае ошибки функция возвращает «nil».


getFuturesLimit

Функция предназначена для получения информации по фьючерсным лимитам.

Формат вызова:

TABLE getFuturesLimit(STRING firmid, STRING trdaccid, NUMBER limit_type, STRING currcode)

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

Функция возвращает таблицу Lua с параметрами фьючерсного лимита.

В случае ошибки функция возвращает «nil».


getFuturesHolding

Функция предназначена для получения информации по фьючерсным позициям.

Формат вызова:

TABLE getFuturesHolding(STRING firmid, STRING trdaccid, STRING sec_code, NUMBER type)

Функция возвращает таблицу Lua с параметрами Таблицы позиций по фьючерсам.

В случае ошибки функция возвращает «nil».


getSecurityInfo

Функция предназначена для получения информации по бумаге.

Формат вызова:

TABLE getSecurityInfo (STRING class_code, STRING sec_code)

Функция возвращает таблицу Lua с параметрами Таблицы инструментов.


getTradeDate

Функция возвращает дату текущей торговой сессии.

Формат вызова:

TABLE getTradeDate ()

Функция возвращает таблицу Lua с параметрами:

Параметр | Тип | Описание
date | STRING | Торговая дата в виде строки «ДД.ММ.ГГГГ»
year | NUMBER | Год
month | NUMBER | Месяц
day | NUMBER | День


getQuoteLevel2

Функция предназначена для получения стакана по указанному классу и бумаге.

Формат вызова:

TABLE getQuoteLevel2 (STRING class_code, STRING sec_code)

Функция возвращает таблицу Lua с параметрами:

При отсутствии и спроса и предложения функция возвращает таблицу без параметров bid и offer.

Параметр | Тип | Описание
bid_count | STRING | Количество котировок покупки. При отсутствии спроса возвращается значение «0»
offer_count | STRING | Количество котировок продажи. При отсутствии предложения возвращается значение «0»
bid | TABLE | Котировки спроса (покупки). При отсутствии спроса возвращается пустая строка
offer | TABLE | Котировки предложений (продажи). При отсутствии предложения возвращается пустая строка

Таблицы «bid» и «offer» имеют следующую структуру:

Параметр | Тип | Описание
price | STRING | Цена покупки / продажи
quantity | STRING | Количество в лотах


Функции получения значений Таблицы текущих торгов

  • getParamEx
  • getParamEx2
  • Особенности получения значений Таблицы текущих торгов


getParamEx

Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов. С помощью этой функции можно получить любое из значений Таблицы текущих торгов для заданных кодов класса и бумаги.

Формат вызова:

TABLE getParamEx (STRING class_code, STRING sec_code, STRING param_name)

Функция возвращает таблицу Lua с параметрами:

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


getParamEx2

Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов с возможностью в дальнейшем отказаться от получения определенных параметров, заказанных с помощью функции ParamRequest. Для отказа от получения какого-либо параметра воспользуйтесь функцией CancelParamRequest.

Формат вызова:

TABLE getParamEx2 (STRING class_code, STRING sec_code, STRING param_name)

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги;
  • param_name – код параметра.

Функция возвращает таблицу Lua с параметрами, аналогичными параметрам, возвращаемым функцией getParamEx.


Особенности получения значений Таблицы текущих торгов

Получение значений параметров Таблицы текущих торгов выполняется функцией getParamEx() или getParamEx2(). Актуальные значения параметров можно получить, если выполнен заказ данных. Способы выполнения заказа данных:

  • Вручную, выбрав пункт меню Рабочего места QUIK Система / Заказ данных / Поток котировок...и указав необходимые параметры и инструменты на классе;
  • При включенной настройке Рабочего места QUIK «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных») и открытой Таблице текущих торгов с необходимыми параметрами и инструментами на классе;
  • Автоматически из скрипта Lua с помощью функций ParamRequest или CreateDataSource, при включенной настройке Рабочего места QUIK «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»).
Терминал QUIK автоматически заказывает параметры, необходимые для корректного расчета лимитов, при включенной настройке Рабочего места QUIK «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»).


sendTransaction

Функция предназначена для отправки транзакций в торговую систему.

Формат вызова:

STRING result sendTransaction(TABLE transaction)

Параметры:

  • result – строка, содержащая текст ошибки, если она случилась при обработке транзакции;
  • transaction – таблица с параметрами транзакции.

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

Результат транзакции можно получить, воспользовавшись функцией обратного вызова OnTransReply.

В качестве параметра принимает таблицу, в которой имена и значения полей соответствуют параметрам, описанным в Руководстве пользователя QUIK, в разделе «Формат .tri-файла с параметрами транзакций».

ВАЖНО! Для корректной обработки данных числовые значения (цена, количество, идентификатор транзакции и т.д.) должны передаваться в виде строковых значений.

Пример заполнения полей таблицы transaction:

transaction = {
ACCOUNT="YY0070001234",
CLIENT_CODE="XXX",
TYPE="M",
TRANS_ID="7",
CLASSCODE="TQBR",
SECCODE="HYDR",
ACTION="NEW_ORDER",
OPERATION="B",
PRICE="0",
QUANTITY="15"
}


CalcBuySell

Функция предназначена для расчета максимально возможного количества лотов в заявке.

Формат вызова:

NUMBER qty, NUMBER comission CalcBuySell(STRING class_code, STRING sec_code, STRING client_code, STRING account, NUMBER price, BOOLEAN is_buy, BOOLEAN is_market)

Параметры:

  • class_code – код класса,
  • sec_code – код бумаги,
  • client_code – код клиента,
  • account – счет депо,
  • price – цена,
  • is_buy – признак заявки на покупку («true» – на покупку, иначе – на продажу),
  • is_market – признак рыночной заявки («true» – рыночная заявка, иначе – лимитированная). Необязательный параметр, значение по умолчанию: «false»
При заданном параметре is_market=true, необходимо передать параметр price=0, иначе будет рассчитано максимально возможное количество лотов в заявке по цене price.

Пример:

function main()
   local bs = CalcBuySell
   assert(bs, "No funstion!!")
   while not stopped do
    qty, comiss = bs("BQUOTE", "AFLT", "Q3", "S01-00000F00", 10, true, false)
    message("qty = " .. qty .. ", COM = " .. comiss, 2)
    sleep(1000)
   end
end


getPortfolioInfo

Функция предназначена для получения значений параметров таблицы «Клиентский портфель», соответствующих идентификатору участника торгов «firmid» и коду клиента «client_code».

Формат вызова:

TABLE getPortfolioInfo (STRING firm_id, STRING client_code)

Функция возвращает таблицу Lua с параметрами:

№ Параметр Тип Описание Заголовок поля в таблице
1 is_leverage STRING

Признак использования схемы кредитования с контролем текущей стоимости активов. Возможные значения:

  • «МЛ» – используется схема ведения позиции «по плечу», «плечо» рассчитано по значению Входящего лимита,
  • «МП» – используется схема ведения позиции «по плечу», «плечо» указано явным образом,
  • «МОП» – используется схема ведения позиции «лимит на открытую позицию»;
  • «МД» – используется схема ведения позиции «по дисконтам»;
  • «C» – используется схема ведения позиций «срочный рынок». Для клиентов срочного рынка без единой денежной позиции;
  • <пусто> – используется схема ведения позиции «по лимитам»
Тип клиента
2 | in_assets | STRING | Оценка собственных средств клиента до начала торгов | Вход. активы
3 | leverage | STRING | Плечо. Если не задано явно, то отношение Входящего лимита к Входящим активам | Плечо
4 | open_limit | STRING | Оценка максимальной величины заемных средств до начала торгов | Вход. лимит
5 | val_short | STRING | Оценка стоимости коротких позиций. Значение всегда отрицательное | Шорты
6 | val_long | STRING | Оценка стоимости длинных позиций | Лонги
7 | val_long_margin | STRING | Оценка стоимости длинных позиций по маржинальным бумагам, принимаемым в обеспечение | Лонги МО
8 | val_long_asset | STRING | Оценка стоимости длинных позиций по немаржинальным бумагам, принимаемым в обеспечение | Лонги О
9 | assets | STRING | Оценка собственных средств клиента по текущим позициям и ценам | Тек. активы
10 | cur_leverage | STRING | Текущее плечо | Тек.плечо
11 | margin | STRING | Уровень маржи, в процентах | Ур. маржи
12 | lim_all | STRING | Текущая оценка максимальной величины заемных средств | Тек. лимит
13 | av_lim_all | STRING | Оценка величины заемных средств, доступных для дальнейшего открытия позиций | ДостТекЛимит
14 | locked_buy | STRING | Оценка стоимости активов в заявках на покупку | Блок. покупка
15 | locked_buy_margin | STRING | Оценка стоимости активов в заявках на покупку маржинальных бумаг, принимаемых в обеспечение | Блок. пок. маржин.
16 | locked_buy_asset | STRING | Оценка стоимости активов в заявках на покупку немаржинальных бумаг, принимаемых в обеспечение | Блок.пок. обесп.
17 | locked_sell | STRING | Оценка стоимости активов в заявках на продажу маржинальных бумаг | Блок. продажа
18 | locked_value_coef | STRING | Оценка стоимости активов в заявках на покупку немаржинальных бумаг | Блок. пок. немарж.
19 | in_all_assets | STRING | Оценка стоимости всех позиций клиента в ценах закрытия предыдущей торговой сессии, включая позиции по немаржинальным бумагам | ВходСредства
20 | all_assets | STRING | Текущая оценка стоимости всех позиций клиента | ТекСредства
21 | profit_loss | STRING | Абсолютная величина изменения стоимости всех позиций клиента | Прибыль/убытки
22 | rate_change | STRING | Относительная величина изменения стоимости всех позиций клиента | ПроцИзмен
23 | lim_buy | STRING | Оценка денежных средств, доступных для покупки маржинальных бумаг | На покупку
24 | lim_sell | STRING | Оценка стоимости маржинальных бумаг, доступных для продажи | На продажу
25 | lim_non_margin | STRING | Оценка денежных средств, доступных для покупки немаржинальных бумаг | НаПокупНеМаржин
26 | lim_buy_asset | STRING | Оценка денежных средств, доступных для покупки бумаг, принимаемых в обеспечение | НаПокупОбесп
27 | val_short_net | STRING | Оценка стоимости коротких позиций. При расчете не используется коэффициент дисконтирования ** | Шорты (нетто)
28 | val_long_net | STRING | Оценка стоимости длинных позиций. При расчете не используется коэффициент дисконтирования ** | Лонги (нетто)
29 | total_money_bal | STRING | Сумма остатков по денежным средствам по всем лимитам, без учета средств, заблокированных под исполнение обязательств, выраженная в выбранной валюте расчета | Сумма ден. остатков
30 | total_locked_money | STRING | Cумма заблокированных средств со всех денежных лимитов клиента, пересчитанная в валюту расчетов через кросс-курсы на сервере | Суммарно заблок.
31 | haircuts | STRING | Сумма дисконтов стоимости длинных (только по бумагам обеспечения) и коротких бумажных позиций, дисконтов корреляции между инструментами, а также дисконтов на задолженности по валютам, не покрытые бумажным обеспечением в этих же валютах | Сумма дисконтов
32 | assets_without_hc | STRING | Суммарная величина денежных остатков, стоимости длинных позиций по бумагам обеспечения и стоимости коротких позиций, без учета дисконтирующих коэффициентов, без учета неттинга стоимости бумаг в рамках объединенной бумажной позиции и без учета корреляции между инструментами | ТекАктБезДиск
33 | status_coef | STRING | Отношение суммы дисконтов к текущим активам без учета дисконтов | Статус счета
34 | *varmargin | STRING | Текущая вариационная маржа по позициям клиента, по всем инструментам | Вариац. маржа
35 | *go_for_positions | STRING | Размер денежных средств, уплаченных под все открытые позиции на срочном рынке | ГО поз.
36 | *go_for_orders | STRING | Оценка стоимости активов в заявках на срочном рынке | ГО заяв.
37 | rate_futures | STRING | Отношение ликвидационной стоимости портфеля к ГО по срочному рынку | Активы/ГО
38 | is_qual_client | STRING | Признак «квалифицированного» клиента, которому разрешено кредитование заемными средствами с плечом 1:3. Возможные значения: «ПовышУрРиска» – квалифицированный, <пусто> – нет | ПовышУрРиска
39 | is_futures | STRING | Счет клиента на FORTS, в случае наличия объединенной позиции, иначе поле остается пустым | Сроч. счет
40 | curr_tag | STRING | Актуальные текущие параметры расчета для данной строки в формате «<Валюта>-<Тег расчётов>». Пример: «SUR-EQTV» | Парам. расч.

* - параметр заполняется для клиентов с настроенной единой денежной позицией и для клиентов срочного рынка без единой денежной позиции

** - подробнее о коэффициентах дисконтирования см. п. 7 Руководства по администрированию «Настройки Библиотеки расчета лимитов»


getPortfolioInfoEx

Функция предназначена для получения значений параметров таблицы «Клиентский портфель», соответствующих идентификатору участника торгов «firmid», коду клиента «client_code» и виду лимита «limit_kind».

Формат вызова:

TABLE getPortfolioInfoEx (STRING firm_id, STRING client_code, NUMBER limit_kind)

Для получения значений параметров таблицы «Клиентский портфель» для клиентов срочного рынка без единой денежной позиции необходимо указать в качестве «client_code» – торговый счет на срочном рынке, а в качестве «limit_kind» – 0.

Функция возвращает таблицу Lua с параметрами таблицы «Клиентский портфель».

Дополнительно возвращаются следующие параметры:

№ Параметр Тип Описание
1 | init_margin | STRING | Значение начальной маржи. Заполняется для клиентов типа «МД» | Нач.маржа
2 | min_margin | STRING | Значение минимальной маржи. Заполняется для клиентов типа «МД» | Мин.маржа
3 | corrected_margin | STRING | Значение скорректированной маржи. Заполняется для клиентов типа «МД» | Скор.маржа
4 | client_type | STRING | Тип клиента | Тип клиента
5 | portfolio_value | STRING | Стоимость портфеля. Для клиентов типа «МД» возвращается значение для строк с максимальным видом лимита limit_kind | Стоимость портфеля
6 | *start_limit_open_pos | STRING | Лимит открытых позиций на начало дня | ЛимОткрПозНачДня
7 | *total_limit_open_pos | STRING | Лимит открытых позиций | ЛимОткрПоз
8 | *limit_open_pos | STRING | Планируемые чистые позиции | ПланЧистПоз
9 | *used_lim_open_pos | STRING | Текущие чистые позиции | ТекЧистПоз
10 | *acc_var_margin | STRING | Накопленная вариационная маржа | НакопВарМаржа
11 | *cl_var_margin | STRING | Вариационная маржа по итогам промклиринга | ВарМаржаПромклир.
12 | *opt_liquid_cost | STRING | Ликвидационная стоимость опционов | ЛиквСтоимОпционов
13 | *fut_asset | STRING | Сумма оценки средств клиента на срочном рынке | СумАктивовНаСрчРынке
14 | *fut_total_asset | STRING | Сумма оценки собственных средств клиента на фондовом и срочном рынках | ПолнСтоимостьПортфеля
15 | *fut_debt | STRING | Текущая задолженность на срочном рынке | ТекЗадолжНаСрчРынке
16 | *fut_rate_asset | STRING | Достаточность средств | Дост. Средств
17 | *fut_rate_asset_open | STRING | Достаточность средств (под открытые позиции) | Дост. Средств (ОткрПоз)
18 | *fut_rate_go | STRING | Коэффициент ликвидности ГО | КоэффЛикв ГО
19 | *planed_rate_go | STRING | Ожидаемый коэффициент ликвидности ГО | Ожид. КоэффЛикв ГО
20 | *cash_leverage | STRING | Cash Leverage | Cash Leverage
21 *fut_position_type STRING Тип позиции на срочном рынке. Возможные значения
  • «0» – нет позиции;
  • «1» – фьючерсы;
  • «2» – опционы;
  • «3» – фьючерсы и опционы
ТипПозНаСрчРынке
22 | *fut_accured_int | STRING | Накопленный доход с учётом премии по опционам и биржевым сборам | НакопДоход

* - параметр заполняется для клиентов с настроенной единой денежной позицией и для клиентов срочного рынка без единой денежной позиции


getBuySellInfo

Функция предназначена для получения параметров таблицы «Купить/Продать».

Формат вызова:

TABLE getBuySellInfo (STRING firm_id, STRING client_code, STRING class_code, STRING sec_code, NUMBER price)

Функция возвращает таблицу Lua с параметрами из таблицы QUIK «Купить/Продать», означающими возможность купить либо продать указанный инструмент «sec_code» класса «class_code», указанным клиентом «client_code» фирмы «firmid», по указанной цене «price». Если цена равна «0», то используются лучшие значения спроса/предложения.

Параметры:

№ Параметр Тип Описание
1 is_margin_sec STRING Признак маржинальности инструмента. Возможные значения:
  • «0» – не маржинальная;
  • «1» – маржинальная.
2 is_asset_sec STRING Принадлежность инструмента к списку бумаг, принимаемых в обеспечение. Возможные значения:
  • «0» – не принимается в обеспечение;
  • «1» – принимается в обеспечение.
3 | balance | STRING | Текущая позиция по инструменту, в лотах
4 | can_buy | STRING | Оценка количества лотов, доступных на покупку по указанной цене *
5 | can_sell | STRING | Оценка количества лотов, доступных на продажу по указанной цене *
6 | position_valuation | STRING | Денежная оценка позиции по инструменту по ценам спроса/предложения
7 | value | STRING | Оценка стоимости позиции по цене последней сделки
8 | open_value | STRING | Оценка стоимости позиции клиента, рассчитанная по цене закрытия предыдущей торговой сессии
9 | lim_long | STRING | Предельный размер позиции по данному инструменту, принимаемый в обеспечение длинных позиций
10 | long_coef | STRING | Коэффициент дисконтирования, применяемый для длинных позиций по данному инструменту
11 | lim_short | STRING | Предельный размер короткой позиции по данному инструменту
12 | short_coef | STRING | Коэффициент дисконтирования, применяемый для коротких позиций по данному инструменту
13 | value_coef | STRING | Оценка стоимости позиции по цене последней сделки, с учетом дисконтирующих коэффициентов
14 | open_value_coef | STRING | Оценка стоимости позиции клиента, рассчитанная по цене закрытия предыдущей торговой сессии с учетом дисконтирующих коэффициентов
15 | share | STRING | Процентное отношение стоимости позиции по данному инструменту к стоимости всех активов клиента, рассчитанное по текущим ценам
16 | short_wa_price | STRING | Средневзвешенная стоимость коротких позиций по инструментам
17 | long_wa_price | STRING | Средневзвешенная стоимость длинных позиций по инструментам
18 | profit_loss | STRING | Разница между средневзвешенной ценой приобретения бумаг и их рыночной оценки
19 | spread_hc | STRING | Коэффициент корреляции между инструментами
20 | can_buy_own | STRING | Максимально возможное количество бумаг в заявке на покупку этого инструмента на этом классе на собственные средства клиента, исходя из цены лучшего предложения
21 | can_sell_own | STRING | Максимально возможное количество бумаг в заявке на продажу этого инструмента на этом классе из собственных активов клиента, исходя из цены лучшего спроса

(*) В зависимости от настроек сервера QUIK, величина может выражаться в лотах или в штуках. Уточните единицы измерения у обслуживающего брокера.


getBuySellInfoEx

Функция предназначена для получения параметров таблицы «Купить/Продать».

Формат вызова:

TABLE getBuySellInfoEx(STRING firm_id, STRING client_code, STRING class_code, STRING sec_code, NUMBER price)

Функция возвращает таблицу Lua с параметрами из таблицы QUIK «Купить/Продать», означающими возможность купить либо продать указанный инструмент «sec_code» класса «class_code», указанным клиентом «client_code» фирмы «firmid», по указанной цене «price». Если цена равна «0», то используются лучшие значения спроса/предложения.

Дополнительно возвращаеются следующие параметры:

№ | Параметр | Тип | Описание
1 | limit_kind | NUMBER | Вид лимита. Возможные значения: положительные целые числа, начиная с «0», соответствующие видам лимитов из таблицы «Лимиты по бумагам»: «0» – T0, «1» – T1, «2» – T2 и т.д.
2 | d_long | STRING | Эффективный начальный дисконт для длинной позиции. Заполняется для клиентов типа «МД»
3 | d_min_long | STRING | Эффективный минимальный дисконт для длинной позиции. Заполняется для клиентов типа «МД»
4 | d_short | STRING | Эффективный начальный дисконт для короткой позиции. Заполняется для клиентов типа «МД»
5 | d_min_short | STRING | Эффективный минимальный дисконт для короткой позиции. Заполняется для клиентов типа «МД»
6 | client_type | STRING | Тип клиента
7 | is_long_allowed | STRING | Признак того, является ли бумага разрешенной для покупки на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена. Заполняется для клиентов типа «МД»
8 | is_short_allowed | STRING | Признак того, является ли бумага разрешенной для продажи на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена. Заполняется для клиентов типа «МД»


Функции для работы с графиками

  • getLinesCount
  • getNumCandles
  • getCandlesByIndex
  • CreateDataSource
  • SetUpdateCallback
  • Функции O, H, L, C, V, T
  • Size
  • Close
  • SetEmptyCallback


getLinesCount

Функция предназначена для получения количества линий в графике (индикаторе) по выбранному идентификатору.

Формат вызова:

NUMBER getLinesCount (STRING tag)

Возвращает число – количество линий на графике.


getNumCandles

Функция предназначена для получения информации о количестве свечек по выбранному идентификатору.

Формат вызова:

NUMBER getNumCandles (STRING tag)

Возвращает число – количество свечек по выбранному идентификатору.


getCandlesByIndex

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

Формат вызова:

TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count)

Параметры:

  • tag – строковый идентификатор графика или индикатора,
  • line – номер линии графика или индикатора. Первая линия имеет номер 0,
  • first_candle – индекс первой свечки. Первая (самая левая) свечка имеет индекс 0,
  • count – количество запрашиваемых свечек.

Возвращаемые значения:

  • t – таблица, содержащая запрашиваемые свечки,
  • n – количество свечек в таблице t ,
  • l – легенда (подпись) графика.


 CreateDataSource

CreateDataSource

Функция предназначена для создания таблицы Lua и позволяет работать со свечками, полученными с сервера QUIK, а также реагировать на их изменение.

Формат вызова:

TABLE data_source, STRING error_desc CreateDataSource (STRING class_code, STRING sec_code, NUMBER interval, [, STRING param])

Параметры:

  • class_code – код класса,
  • sec_code – код бумаги,
  • interval – интервал запрашиваемого графика,
  • param – необязательный параметр. Если параметр не задан, то заказываются данные на основании таблицы обезличенных сделок, если задан – данные по этому параметру.

Функция возвращает таблицу data_source в случае успешного завершения. Если указан неверный код класса или параметр, то возвращается «nil». При этом error_desc содержит описание ошибки.

Список констант для передачи в параметр interval :

Параметр | Значение интервала
INTERVAL_TICK | Тиковые данные
INTERVAL_M1 | 1 минута
INTERVAL_M2 | 2 минуты
INTERVAL_M3 | 3 минуты
INTERVAL_M4 | 4 минуты
INTERVAL_M5 | 5 минут
INTERVAL_M6 | 6 минут
INTERVAL_M10 | 10 минут
INTERVAL_M15 | 15 минут
INTERVAL_M20 | 20 минут
INTERVAL_M30 | 30 минут
INTERVAL_H1 | 1 час
INTERVAL_H2 | 2 часа
INTERVAL_H4 | 4 часа
INTERVAL_D1 | 1 день
INTERVAL_W1 | 1 неделя
INTERVAL_MN1 | 1 месяц

Функция CreateDataSource возвращает таблицу Lua с параметрами:

Параметр | Тип | Описание
SetUpdateCallback | function | Позволяет задать пользователю функцию обратного вызова для обработки изменившихся свечек
O | function | Получить значение Open для указанной свечи
H | function | Получить значение High для указанной свечи
L | function | Получить значение Low для указанной свечи
C | function | Получить значение Close для указанной свечи
V | function | Получить значение Volume для указанной свечи
T | function | Получить значение Time для указанной свечи
Size | function | Возвращает текущий размер (количество свечек в источнике данных)
Close | function | Удаляет источник данных, отписывается от получения данных
SetEmptyCallback | function | Позволяет получать данные с сервера без указания функции обратного вызова

Пример:

ds1 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "last")
ds2 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1)
ds3 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "bid")


SetUpdateCallback

Формат вызова:

BOOLEAN res SetUpdateCallback (FUNCTION callback_function)

В качестве параметра принимает функцию обратного вызова.

Формат функции обратного вызова:

function call_back(NUMBER index)

Параметры:

  • index – номер изменившейся свечки. Индексы свечек начинаются с 1.

Функция возвращает «true» в случае успешного завершения, иначе – «false».

Пример получения времени из свечки:

function cb( index )
local t = ds:T(index)
local _str = string.format("#%d of %d\t%.4f\t%.4f\t%.4f\t%.4f\t%.4f %02d.%02d.%04d %02d:%02d:%02d.%04d",
index, ds:Size(),ds:O(index), ds:H(index), ds:L(index),
ds:C(index), ds:V(index),
t.day, t.month, t.year, t.hour, t.min, t.sec, t.ms)
Log(file, _str)
end
ds: SetUpdateCallback (cb)


Функции O, H, L, C, V, T

Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями:

{year, month, day, week_day, hour, min, sec, ms, count}

Где:

  • count – количество тиковых интервалов в секунду. Может принимать значения от «1» до «10000» включительно.

Пример:

Open = ds:O(1)
High = ds:H(1)
Low = ds:L(1)
Close = ds:C(1)
Volume = ds:V(1)
week_day = ds:T(1).week_day
count = ds:T(1).count


Size

Функция возвращает текущее количество свечек в источнике данных.

Формат вызова:

NUMBER Size()

Пример:
 ds:Size()


Close

Функция закрывает источник данных, и терминал прекращает получать данные с сервера.

Формат вызова:

BOOLEAN Close()

Пример:

ds:Close()

Функция возвращает «true» в случае успешного завершения.


SetEmptyCallback

Функция позволяет получать данные с сервера.

Формат вызова:

BOOLEAN SetEmptyCallback()

Функция возвращает «true» в случае успешного завершения, иначе – «false».

Пример:

ds:SetEmptyCallback()


Функции для работы с таблицами Рабочего места QUIK

В таблицах Рабочего места QUIK, созданных с помощью скриптов на языке Lua, поддержаны следующие возможности:

  • режим «drag-and-drop»,
  • пользовательские фильтры,
  • условное форматирование,
  • размещение на «экранных закладках»,
  • поиск значения в ячейках таблицы,
  • печать таблицы с предварительным просмотром.

Ниже приведен список действий, которые не поддерживаются для таблиц, созданных на языке Lua:

  • таблицы не сохраняются в файл конфигурации,
  • отсутствует диалог редактирования таблицы,
  • отсутствует контекстное меню таблицы (кроме пункта «Переместить на закладку»),
  • не создается копия таблицы,
  • не задается по умолчанию заголовок окна таблицы,
  • отсутствует экспорт данных из таблицы,
  • недоступно управление «горячими клавишами».

Список функций:

  • AddColumn - добавляет колонки в таблицу
  • AllocTable - создает структуру, описывающую таблицу
  • Clear - удаляет содержимое таблицы
  • CreateWindow - создает окно таблицы
  • DeleteRow - удаляет строку из таблицы
  • DestroyTable - закрывает окно таблицы
  • InsertRow - добавляет строку в таблицу
  • IsWindowClosed - возвращает «true», если закрыто окно с таблицей
  • GetCell - позволяет получить данные из ячейки таблицы
  • GetTableSize - получает количество строк и столбцов
  • GetWindowCaption - получает текущий заголовок окна
  • GetWindowRect - получает координаты верхнего левого и нижнего правого угла окна, содержащего таблицу
  • Highlight - подсвечивает выбранный диапазон ячеек с плавным «затуханием» для таблицы
  • RGB - преобразовывает компоненты RGB (red, green, blue) в одно число для дальнейшего использования в функции SetColor
  • SetCell - задает значение для ячейки в таблице
  • SetColor - устанавливает цвет ячейки, столбца или строки для таблицы
  • SetTableNotificationCallback - задает функцию обратного вызова для обработки событий в таблице
  • SetWindowCaption - задает заголовок окна
  • SetWindowPos - устанавливает положение окна с таблицей
  • SetSelectedRow - выделяет определенную строку таблицы


AddColumn

Функция добавляет колонки в таблицу с идентификатором «t_id».

Формат вызова:

NUMBER AddColumn (NUMBER t_id, NUMBER iCode, STRING name, BOOLEAN is_default, NUMBER par_type, NUMBER width)

Параметры:

  • iCode – код параметра, выводимого в колонке,
  • name – название колонки,
  • is_default – параметр не используется,
  • par_type – тип данных в колонке, одна из следующих констант:
    • QTABLE_INT_TYPE – целое число,
    • QTABLE_DOUBLE_TYPE – число с плавающей точкой,
    • QTABLE_INT64_TYPE – 64-битное целое число,
    • QTABLE_CACHED_STRING_TYPE – кэшируемая строка,
    • QTABLE_TIME_TYPE – время,
    • QTABLE_DATE_TYPE – дата,
    • QTABLE_STRING_TYPE – строка.
  • width – ширина в условных единицах.

Функция возвращает «1», если колонка в таблицу добавлена, иначе – «0».


AllocTable

Функция создает структуру, описывающую таблицу.

Формат вызова:

NUMBER AllocTable()

Функция возвращает целочисленный идентификатор таблицы, предназначенный для совершения с ней дальнейших операций.


Clear

Функция удаляет содержимое таблицы с идентификатором «t_id».

Формат вызова:

BOOLEAN Clear (NUMBER t_id)

Функция возвращает «true» в случае успешного завершения, иначе – «false».


CreateWindow

Функция создает окно таблицы с идентификатором «t_id».

Формат вызова:

NUMBER CreateWindow(NUMBER t_id)

Функция возвращает «1» при успешном создании окна, иначе – «0».


DeleteRow

Функция удаления строки с ключом «key» из таблицы с идентификатором «t_id».

Формат вызова:

BOOLEAN DeleteRow(NUMBER t_id, NUMBER key)

В случае успешного выполнения возвращает «true», иначе – «false».


DestroyTable

Функция закрывает окно таблицы с идентификатором «t_id».

Формат вызова:

BOOLEAN DestroyTable(NUMBER t_id)

Все данные для отображения при закрытии окна удаляются.

В случае успешного выполнения возвращает «true», иначе – «false».


InsertRow

Функция добавляет строку с ключом «key» в таблицу с идентификатором «t_id».

Формат вызова:

NUMBER InsertRow(NUMBER t_id, NUMBER key)

При добавлении данных в новую таблицу в первую очередь выполните данную функцию с параметром «key» равным «-1». При этом строка добавится в конец таблицы.

Функция возвращает номер добавленной строки при успешном выполнении, иначе – «-1».

При вызове функции с параметром «key» большим, чем текущее количество строк, строка добавляется в конец таблицы.


IsWindowClosed

Функция возвращает «true», если окно с таблицей «t_id» закрыто.

Вызов IsWindowClosed внутри функции обратного вызова, заданной с помощью SetTableNotificationCallback(), всегда вернет «false».

Формат вызова:

BOOLEAN IsWindowClosed(NUMBER t_id)

Функция возвращает «nil» в случае неуспешного завершения.

Окно может быть открыто повторно с помощью функции CreateWindow.


GetCell

Функция возвращает таблицу, содержащую данные из ячейки в строке с ключом «key», кодом колонки «code» в таблице «t_id».

Формат вызова:

TABLE GetCell(NUMBER t_id, NUMBER key, NUMBER code)

Параметры таблицы:

  • image – строковое представление значения в ячейке,
  • value – числовое значение ячейки.

Если входные параметры были заданы ошибочно, то возвращается «nil».


GetTableSize

Функция возвращает количество строк «rows» и столбцов «col» в таблице с индексом «t_id».

Формат вызова:

NUMBER rows, NUMBER col GetTableSize (NUMBER t_id)

Пользовательские фильтры, установленные на таблице, не влияют на возвращаемое количество строк. Заголовки строк и первый фиксированный столбец не учитываются в возвращаемых значениях.

Функция возвращает «nil» в случае неуспешного завершения.


GetWindowCaption

Функция получает текущий заголовок окна.

Формат вызова:

STRING GetWindowCaption(NUMBER t_id)

Функция возвращает «nil» в случае неуспешного завершения.


GetWindowRect

Функция возвращает координаты верхнего левого и нижнего правого угла окна, содержащего таблицу «t_id».

Формат вызова:

NUMBER top, NUMBER left, NUMBER bottom, NUMBER right GetWindowRect(NUMBER t_id)

Функция возвращает «nil» в случае неуспешного завершения.


Highlight

Функция для подсветки выбранного диапазона ячеек цветом фона и цветом текста в течении указанного времени с плавным «затуханием» для таблицы с идентификатором «t_id».

Формат вызова:

BOOLEAN Highlight(NUMBER t_id, NUMBER row, NUMBER col, NUMBER b_color, NUMBER f_color, NUMBER timeout)

Параметры:

  • b_color – цвет фона;
  • f_color – цвет текста;
  • timeout – время подсветки, в миллисекундах.

Для отмены подсветки вызовите функцию с параметром timeout равным «0». При этом параметры «b_color» и «f_color» могут содержать любые значения.

Варианты подсветки ячеек в таблице аналогичны вариантам установки цвета, приведенным в описании функции SetColor .


RGB

Функция преобразовывает компоненты RGB (red, green, blue) в одно число для дальнейшего использования в функции SetColor .

Формат вызова:

NUMBER RGB(NUMBER red, NUMBER green, NUMBER blue)


SetCell

Функция задает значение для ячейки в строке с ключом «key», кодом колонки «code» в таблице «t_id».

Формат вызова:

BOOLEAN SetCell(NUMBER t_id, NUMBER key, NUMBER code, STRING text, NUMBER value)

Параметр «text» задает строковое представление значение параметра «value». Параметр «value» необязательный и по умолчанию равен «0». Для столбцов со строковыми типами данных параметр «value» не задается.

Если параметр «value» не задан для ячеек всех остальных типов, то по столбцам, содержащим такие ячейки, не будет корректно работать сортировка, фильтрация и условное форматирование (см. Приложение 2).

Функция возвращает «true» в случае успешного завершения, иначе – «false».


SetColor

Функция устанавливает цвет ячейки, столбца или строки для таблицы с идентификатором «t_id».

Формат вызова:

BOOLEAN SetColor(NUMBER t_id, NUMBER row, NUMBER col, NUMBER b_color, NUMBER f_color, NUMBER sel_b_color, NUMBER sel_f_color)

Параметры:

  • b_color – цвет фона,
  • f_color – цвет текста,
  • sel_b_color – цвет фона выделенной ячейки,
  • sel_f_color – цвет текста выделенной ячейки.

В зависимости от переданных параметров row и col можно менять цвет всей таблицы, столбца, строки и отдельной ячейки.

Если в качестве цвета задана константа QTABLE_DEFAULT_COLOR, то используется цвет, заданный в цветовой схеме операционной системе Windows.

При работе функции используется константа QTABLE_NO_INDEX, равная «-1». Ниже приведены варианты установки цвета в таблице:

row | col | Результат
Количество строк от 1 до N | Количество столбцов от 1 до M | Ячейка раскрашена заданным цветом
Количество строк от 1 до N | QTABLE_NO_INDEX | Строка раскрашена заданным цветом
QTABLE_NO_INDEX | Количество столбцов от 1 до M | Столбец раскрашен заданным цветом
QTABLE_NO_INDEX | QTABLE_NO_INDEX | Заданным цветом раскрашена полностью таблица


SetTableNotificationCallback

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

ВАЖНО! Недопустим вызов функций Clear и DestroyTable для t_id внутри функции обратного вызова f_cb, назначенной на таблицу с данным t_id.

Формат вызова:

NUMBER SetTableNotificationCallback (NUMBER t_id, FUNCTION f_cb)

Параметры:

  • t_id – идентификатор таблицы,
  • f_cb – функция обратного вызова для обработки событий в таблице.

В случае успешного завершения функция возвращает «1», иначе – «0».

Формат вызова функции обратного вызова для обработки событий в таблице:

FUNCTION (NUMBER t_id, NUMBER msg, NUMBER par1, NUMBER par2)

Параметры:

  • t_id – идентификатор таблицы, для которой обрабатывается сообщение,
  • par1 и par2 – значения параметров определяются типом сообщения msg,
  • msg – код сообщения.

Доступные коды событий:

  • QTABLE_LBUTTONDOWN – нажата левая кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_RBUTTONDOWN – нажата правая кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_LBUTTONDBLCLK – двойное нажатие левой кнопки мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_RBUTTONDBLCLK – двойное нажатие правой кнопки мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_SELCHANGED – изменение текущей (выделенной) строки, при этом par1 равен номеру новой выделенной строки,
  • QTABLE_CHAR – нажата символьная клавиша, при этом par2 содержит код клавиши, par1 – текущую выделенную строку,
  • QTABLE_VKEY – нажата клавиша, при этом par2 содержит код клавиши, par1 – текущую выделенную строку,
  • QTABLE_MBUTTONDOWN – нажата вниз средняя кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_MBUTTONDBLCLK – двойное нажатие средней кнопки мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_LBUTTONUP – отпущена левая кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_RBUTTONUP – отпущена правая кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки,
  • QTABLE_CLOSE – закрытие таблицы, при этом par1 и par2 равны нулю.


SetWindowCaption

Функция задает новый заголовок окна.

Формат вызова:

BOOLEAN SetWindowCaption(NUMBER t_id, STRING str)

В случае успешного выполнения возвращает «true», иначе – «false».


SetWindowPos

Функция устанавливает положение окна с таблицей «t_id». Левый верхний угол в координаты x,y и размеры в dx, dy.

Формат вызова:

BOOLEAN SetWindowPos(NUMBER t_id, NUMBER x, NUMBER y, NUMBER dx, NUMBER dy)

В случае успешного выполнения возвращает «true», иначе – «false».


SetSelectedRow

Функция выделяет определенную строку таблицы.

Формат вызова:

NUMBER row SetSelectedRow((NUMBER table_id, NUMBER row)

Параметры:

  • table_id – идентификатор таблицы;
  • row – номер строки.
    Если задано значение row=-1, то выделяется последняя видимая строка в таблице.

В случае успешного завершения функция возвращает номер выделенной строки, иначе – «-1».

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


Структуры данных

  • Денежные позиции
  • Инструмент
  • Заявки
  • Заявки на внебиржевые сделки
  • Класс
  • Лимиты по бумагам
  • Лимиты по деньгам
  • Лимиты по фьючерсам
  • Обезличенные сделки
  • Обязательства и требования по активам
  • Отчеты по сделкам для исполнения
  • Текущие позиции по клиентским счетам
  • Позиции по фьючерсам
  • Свечки графика
  • Сделки
  • Сделки для исполнения
  • Стоп-заявки
  • Счет депо
  • Текущие позиции по бумагам
  • Удаление бумажного лимита
  • Удаление денежного лимита
  • Удаление фьючерсного лимита
  • Транзакции
  • Фирма
  • Формат даты и времени, используемый таблицах


Денежные позиции

Описание параметров Таблицы денежных позиций:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
currcode | STRING | Код валюты
tag | STRING | Тег расчетов
description | STRING | Описание
openbal | NUMBER | Входящий остаток
currentpos | NUMBER | Текущий остаток
plannedpos | NUMBER | Плановый остаток
limit1 | NUMBER | Внешнее ограничение по деньгам
limit2 | NUMBER | Внутреннее (собственное) ограничение по деньгам
orderbuy | NUMBER | В заявках на продажу
ordersell | NUMBER | В заявках на покупку
netto | NUMBER | Нетто-позиция
plannedbal | NUMBER | Плановая позиция
debit | NUMBER | Дебет
credit | NUMBER | Кредит
bank_acc_id | STRING | Идентификатор счета
margincall | NUMBER | Маржинальное требование на начало торгов
settlebal | NUMBER | Плановая позиция после проведения расчетов


Инструменты

Описание параметров таблицы Инструменты:

Параметр | Тип | Описание
code | STRING | Код инструмента
name | STRING | Наименование инструмента
short_name | STRING | Короткое наименование инструмента
class_code | STRING | Код класса инструментов
class_name | STRING | Наименование класса инструментов
face_value | NUMBER | Номинал
face_unit | STRING | Валюта номинала
scale | NUMBER | Точность (количество значащих цифр после запятой)
mat_date | NUMBER | Дата погашения
lot_size | NUMBER | Размер лота
isin_code | STRING | ISIN
min_price_step | NUMBER | Минимальный шаг цены


Заявки

Описание параметров Таблицы заявок:

Параметр | Тип | Описание
order_num | NUMBER | Номер заявки в торговой системе
flags | NUMBER | Набор битовых флагов
brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения>
userid | STRING | Идентификатор трейдера
firmid | STRING | Идентификатор фирмы
account | STRING | Торговый счет
price | NUMBER | Цена
qty | NUMBER | Количество в лотах
balance | NUMBER | Остаток
value | NUMBER | Объем в денежных средствах
accruedint | NUMBER | Накопленный купонный доход
yield | NUMBER | Доходность
trans_id | NUMBER | Идентификатор транзакции
client_code | STRING | Код клиента
price2 | NUMBER | Цена выкупа
settlecode | STRING | Код расчетов
uid | NUMBER | Идентификатор пользователя
canceled_uid | NUMBER | Идентификатор пользователя, снявшего заявку
exchange_code | STRING | Код биржи в торговой системе
activation_time | NUMBER | Время активации
linkedorder | NUMBER | Номер заявки в торговой системе
expiry | NUMBER | Дата окончания срока действия заявки
sec_code | STRING | Код бумаги заявки
class_code | STRING | Код класса заявки
datetime | TABLE | Дата и время
withdraw_datetime | TABLE | Дата и время снятия заявки
bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации
value_entry_type NUMBER

Способ указания объема заявки. Возможные значения:

  • «0» – по количеству,
  • «1» – по объему
repoterm | NUMBER | Срок РЕПО, в календарных днях
repovalue | NUMBER | Сумма РЕПО на текущую дату. Отображается с точностью 2 знака
repo2value | NUMBER | Объём сделки выкупа РЕПО. Отображается с точностью 2 знака
repo_value_balance | NUMBER | Остаток суммы РЕПО за вычетом суммы привлеченных или предоставленных по сделке РЕПО денежных средств в неисполненной части заявки, по состоянию на текущую дату. Отображается с точностью 2 знака
start_discount | NUMBER | Начальный дисконт, в %
reject_reason | STRING | Причина отклонения заявки брокером
ext_order_flags | NUMBER | Битовое поле для получения специфических параметров с западных площадок
min_qty | NUMBER | Минимально допустимое количество, которое можно указать в заявке по данному инструменту. Если имеет значение «0», значит ограничение по количеству не задано
exec_type NUMBER Тип исполнения заявки. Возможные значения:
  • «0» – «Значение не указано»;
  • «1» – «Немедленно или отклонить»;
  • «2» – «Поставить в очередь»;
  • «3» – «Снять остаток»;
  • «4» – «До снятия»;
  • «5» – «До даты»;
  • «6» – «В течение сессии»;
  • «7» – «Открытие»;
  • «8» – «Закрытие»;
  • «9» – «Кросс»;
  • «11» – «До следующей сессии»;
  • «13» – «До отключения»;
  • «15» – «До времени»;
  • «16» –«Следующий аукцион»
side_qualifier | NUMBER | Поле для получения параметров по западным площадкам. Если имеет значение «0», значит значение не задано
acnt_type | NUMBER | Поле для получения параметров по западным площадкам. Если имеет значение «0», значит значение не задано
capacity NUMBER Роль в исполнении заявки. Возможные значения:
  • «0» – не определено;
  • «1» – Agent;
  • «2» – Principal;
  • «3» – Riskless principal;
  • «4» – CFG give up;
  • «5» – Cross as agent;
  • «6» – Matched Principal;
  • «7» – Proprietary;
  • «8» – Individual;
  • «9» – Agent for other member;
  • «10» – Mixed;
  • «11» – Market maker
passive_only_order | NUMBER | Поле для получения параметров по западным площадкам. Если имеет значение «0», значит значение не задано
visible | NUMBER | Видимое количество. Параметр айсберг-заявок, для обычных заявок выводится значение: «0»
awg_price | NUMBER | Средняя цена приобретения. Актуально, когда заявка выполнилась частями
expiry_time | NUMBER | Время окончания срока действия заявки в формате <ЧЧММСС DESIGNTIMESP=19552>. Для GTT-заявок, используется вместе со сроком истечения заявки (Expiry)
revision_number | NUMBER | Номер ревизии заявки. Используется, если заявка была заменена с сохранением номера
price_currency | STRING | Валюта цены заявки
ext_order_status NUMBER Расширенный статус заявки. Возможные значения:
  • «0» (по умолчанию) – не определено;
  • «1» – заявка активна;
  • «2» – заявка частично исполнена;
  • «3» – заявка исполнена;
  • «4» – заявка отменена;
  • «5» – заявка заменена;
  • «6» – заявка в состоянии отмены;
  • «7» – заявка отвергнута;
  • «8» – приостановлено исполнение заявки;
  • «9» – заявка в состоянии регистрации;
  • «10» – заявка снята по времени действия;
  • «11» – заявка в состоянии замены
accepted_uid | NUMBER | UID пользователя-менеджера, подтвердившего заявку при работе в режиме с подтверждениями
filled_value | NUMBER | Исполненный объем заявки в валюте цены для частично или полностью исполненных заявок
extref | STRING | Внешняя ссылка, используется для обратной связи с внешними системами
settle_currency | STRING | Валюта расчетов по заявке
on_behalf_of_uid | NUMBER | UID пользователя, от имени которого выставлена заявка
client_qualifier NUMBER Квалификатор клиента, от имени которого выставлена заявка. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Legal Entity
client_short_code | NUMBER | Краткий идентификатор клиента, от имени которого выставлена заявка
investment_decision_maker_qualifier NUMBER Квалификатор принявшего решение о выставлении заявки. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «2» – Algorithm
investment_decision_maker_short_code | NUMBER | Краткий идентификатор принявшего решение о выставлении заявки
executing_trader_qualifier NUMBER Квалификатор трейдера, исполнившего заявку. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «2» – Algorithm
executing_trader_short_code | NUMBER | Краткий идентификатор трейдера, исполнившего заявку


Заявки на внебиржевые сделки

Описание параметров Таблицы заявок на внебиржевые сделки:

Параметр | Тип | Описание
neg_deal_num | NUMBER | Номер
neg_deal_time | NUMBER | Время выставления заявки
flags | NUMBER | Набор битовых флагов
brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения>
userid | STRING | Трейдер
firmid | STRING | Идентификатор дилера
cpuserid | STRING | Трейдер партнера
cpfirmid | STRING | Код фирмы партнера
account | STRING | Счет
price | NUMBER | Цена
qty | NUMBER | Количество
matchref | STRING | Ссылка
settlecode | STRING | Код расчетов
yield | NUMBER | Доходность
accruedint | NUMBER | Купонный процент
value | NUMBER | Объем
price2 | NUMBER | Цена выкупа
reporate | NUMBER | Ставка РЕПО (%)
refundrate | NUMBER | Ставка возмещения (%)
trans_id | NUMBER | ID транзакции
client_code | STRING | Код клиента
repoentry NUMBER Тип ввода заявки РЕПО. Возможные значения:
  • «0» – «Не определен»;
  • «1» – «Цена1+Ставка»;
  • «2» – «Ставка+ Цена2»;
  • «3» – «Цена1+Цена2»;
  • «4» – «Сумма РЕПО + Количество»;
  • «5» – «Сумма РЕПО + Дисконт»;
  • «6» – «Количество + Дисконт»;
  • «7» – «Сумма РЕПО»;
  • «8» – «Количество»
repovalue | NUMBER | Сумма РЕПО
repo2value | NUMBER | Объем выкупа РЕПО
repoterm | NUMBER | Срок РЕПО
start_discount | NUMBER | Начальный дисконт (%)
lower_discount | NUMBER | Нижний дисконт (%)
upper_discount | NUMBER | Верхний дисконт (%)
block_securities | NUMBER | Блокировка обеспечения («Да»/«Нет»)
uid | NUMBER | Идентификатор пользователя
withdraw_time | NUMBER | Время снятия заявки
neg_deal_date | NUMBER | Дата выставления заявки
balance | NUMBER | Остаток
origin_repovalue | NUMBER | Сумма РЕПО первоначальная
origin_qty | NUMBER | Количество первоначальное
origin_discount | NUMBER | Процент дисконта первоначальный
neg_deal_activation_date | NUMBER | Дата активации заявки
neg_deal_activation_time | NUMBER | Время активации заявки
quoteno | NUMBER | Встречная безадресная заявка
settle_currency | STRING | Валюта расчетов
sec_code | STRING | Код бумаги
class_code | STRING | Код класса
bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации
withdraw_date | NUMBER | Дата снятия адресной заявки в формате «ГГГГММДД»
linkedorder | NUMBER | Номер предыдущей заявки. Отображается с точностью «0»
activation_date_time | TABLE | Дата и время активации заявки
withdraw_date_time | TABLE | Дата и время снятия заявки
date_time | TABLE | Дата и время заявки
lseccode | STRING | Приоритетное обеспечение
canceled_uid | NUMBER | UID снявшего заявку
system_ref | STRING | Системная ссылка
price_currency | STRING | Валюта, в которой указана цена заявки
order_exchange_code | STRING | Биржевой номер заявки
extref | STRING | Внешняя ссылка, используется для обратной связи с внешними системами
period | NUMBER | Период торговой сессии, в которую была подана заявка
client_qualifier NUMBER Квалификатор клиента, от имени которого выставлена заявка. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Legal Entity
client_short_code | NUMBER | Краткий идентификатор клиента, от имени которого выставлена заявка
investment_decision_maker_qualifier NUMBER Квалификатор принявшего решение о выставлении заявки. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Algorithm
investment_decision_maker_short_code | NUMBER | Краткий идентификатор принявшего решение о выставлении заявки
executing_trader_qualifier NUMBER Квалификатор трейдера, исполнившего заявку. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Algorithm
executing_trader_short_code | NUMBER | Краткий идентификатор трейдера, исполнившего заявку


Классы

Описание параметров Таблицы классов:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
name | STRING | Название класса
code | STRING | Код класса
npars | NUMBER | Количество параметров в классе
nsecs | NUMBER | Количество бумаг в классе

t={
 ["firmid"]="NC0038900000",
 ["name"]="Брокерские котировки",
 ["code"]="BQUOTE",
 ["npars"]=38,
 ["nsecs"]=28
}

См. также описание функций getItem, getNumberOf


Лимиты по бумагам

Описание параметров Таблицы лимитов по бумагам:

Параметр | Тип | Описание
sec_code | STRING | Код бумаги
trdaccid | STRING | Счет депо
firmid | STRING | Идентификатор фирмы
client_code | STRING | Код клиента
openbal | NUMBER | Входящий остаток по бумагам
openlimit | NUMBER | Входящий лимит по бумагам
currentbal | NUMBER | Текущий остаток по бумагам
currentlimit | NUMBER | Текущий лимит по бумагам
locked_sell | NUMBER | Заблокировано на продажу количества лотов
locked_buy | NUMBER | Заблокировано на покупку количества лотов
locked_buy_value | NUMBER | Стоимость ценных бумаг, заблокированных под покупку
locked_sell_value | NUMBER | Стоимость ценных бумаг, заблокированных под продажу
wa_position_price | NUMBER | Цена приобретения
limit_kind NUMBER Вид лимита. Возможные значения:
  • положительные целые числа, начиная с «0», соответствующие видам лимитов из таблицы «Лимиты по бумагам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)


Лимиты по денежным средствам

Описание параметров Таблицы лимитов по денежным средствам:

Параметр | Тип | Описание
currcode | STRING | Код валюты
tag | STRING | Тег расчетов
firmid | STRING | Идентификатор фирмы
client_code | STRING | Код клиента
openbal | NUMBER | Входящий остаток по деньгам
openlimit | NUMBER | Входящий лимит по деньгам
currentbal | NUMBER | Текущий остаток по деньгам
currentlimit | NUMBER | Текущий лимит по деньгам
locked | NUMBER | Заблокированное количество
locked_value_coef | NUMBER | Стоимость активов в заявках на покупку немаржинальных бумаг
locked_margin_value | NUMBER | Стоимость активов в заявках на покупку маржинальных бумаг
leverage | NUMBER | Плечо
limit_kind NUMBER Вид лимита. Возможные значения:
  • положительные целые числа, начиная с «0», соответствующие видам лимитов из таблицы «Лимиты по денежным средствам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)
wa_position_price | NUMBER | Средневзвешенная цена приобретения позиции
orders_collateral | NUMBER | Гарантийное обеспечение заявок
positions_collateral | NUMBER | Гарантийное обеспечение позиций


Лимиты по фьючерсам

Описание параметров фьючерсного лимита:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
trdaccid | STRING | Торговый счет
limit_type NUMBER Тип лимита. Возможные значения:
  • «0» – «Денежные средства»;
  • «1» – «Залоговые денежные средства»;
  • «2» – «По совокупным средствам»;
  • «3» – «Клиринговые денежные средства»;
  • «4» – «Клиринговые залоговые денежные средства»;
  • «5» – «Лимит открытых позиций на спот-рынке»;
  • «6» – «Суммарные залоговые средства в иностранной валюте (в рублях)»;
  • «7» – «Залоговые средства в иностранной валюте»
liquidity_coef | NUMBER | Коэффициент ликвидности
cbp_prev_limit | NUMBER | Предыдущий лимит открытых позиций на спот-рынке»
cbplimit | NUMBER | Лимит открытых позиций
cbplused | NUMBER | Текущие чистые позиции
cbplplanned | NUMBER | Плановые чистые позиции
varmargin | NUMBER | Вариационная маржа
accruedint | NUMBER | Накопленный доход
cbplused_for_orders | NUMBER | Текущие чистые позиции (под заявки)
cbplused_for_positions | NUMBER | Текущие чистые позиции (под открытые позиции)
options_premium | NUMBER | Премия по опционам
ts_comission | NUMBER | Биржевые сборы
kgo | NUMBER | Коэффициент клиентского гарантийного обеспечения
currcode | STRING | Валюта, в которой транслируется ограничение
real_varmargin | NUMBER | Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены


Обезличенные сделки

Описание параметров Таблицы обезличенных сделок:

Параметр | Тип | Описание
trade_num | NUMBER | Номер сделки в торговой системе
flags | NUMBER | Набор битовых флагов
price | NUMBER | Цена
qty | NUMBER | Количество бумаг в последней сделке в лотах
value | NUMBER | Объем в денежных средствах
accruedint | NUMBER | Накопленный купонный доход
yield | NUMBER | Доходность
settlecode | STRING | Код расчетов
reporate | NUMBER | Ставка РЕПО (%)
repovalue | NUMBER | Сумма РЕПО
repo2value | NUMBER | Объем выкупа РЕПО
repoterm | NUMBER | Срок РЕПО в днях
sec_code | STRING | Код бумаги заявки
class_code | STRING | Код класса
datetime | TABLE | Дата и время
period NUMBER

Период торговой сессии. Возможные значения:

  • «0» – Открытие;
  • «1» – Нормальный;
  • «2» – Закрытие
open_interest | NUMBER | Открытый интерес
exchange_code | STRING | Код биржи в торговой системе
exec_market | STRING | Площадка исполнения


Обязательства и требования по активам

Описание параметров Таблицы обязательств и требований по активам:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
depo_account | STRING | Номер счета депо в Депозитарии (НДЦ)
account | STRING | Торговый счет
bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации
settle_date | NUMBER | Дата расчетов
qty | NUMBER | Количество ценных бумаг в сделках
qty_buy | NUMBER | Количество ценных бумаг в заявках на покупку
qty_sell | NUMBER | Количество ценных бумаг в заявках на продажу
netto | NUMBER | Нетто-позиция
debit | NUMBER | Дебет
credit | NUMBER | Кредит
sec_code | STRING | Код бумаги заявки
class_code | STRING | Код класса заявки
planned_covered | NUMBER | Плановая позиция Т+
firm_use NUMBER Тип раздела. Возможные значения:
  • «0» – торговый раздел;
  • «1» – раздел обеспечения


Валюта: обязательства и требования по активам

Описание параметров Таблицы обязательств и требований по активам на валютном рынке:

Параметр | Тип | Описание
sec_code | STRING | Код бумаги
class_code | STRING | Код класса
firmId | STRING | Идентификатор фирмы
account | STRING | Торговый счет
bank_acc_id | STRING | Идентификатор расчетного счета в НКЦ
date | NUMBER | Дата расчётов
debit | NUMBER | Размер денежных обязательств
credit | NUMBER | Размер денежных требований
value_buy | NUMBER | Сумма денежных средств в заявках на покупку
value_sell | NUMBER | Сумма денежных средств в заявках на продажу
margin_call | NUMBER | Сумма возврата компенсационного перевода
planned_covered | NUMBER | Плановая позиция Т+
debit_balance | NUMBER | Размер денежных обязательств на начало дня, с точностью до 2 знаков после десятичного разделителя
credit_balance | NUMBER | Размер денежных требований на начало дня, с точностью до 2 знаков после десятичного разделителя


Отчеты по сделкам для исполнения

Описание параметров таблицы Отчеты по сделкам для исполнения:

Параметр | Тип | Описание
report_num | NUMBER | Отчет
report_date | NUMBER | Дата отчета
flags | NUMBER | Набор битовых флагов
userid | STRING | Идентификатор пользователя
firmid | STRING | Идентификатор фирмы
account | STRING | Счет депо
cpfirmid | STRING | Код фирмы партнера
cpaccount | STRING | Код торгового счета партнера
qty | NUMBER | Количество бумаг, в лотах
value | NUMBER | Объем сделки, выраженный в рублях
withdraw_time | NUMBER | Время снятия заявки
report_type | NUMBER | Тип отчета
report_kind | NUMBER | Вид отчета
commission | NUMBER | Объем комиссии по сделке, выраженный в руб
sec_code | STRING | Код бумаги
class_code | STRING | Код класса
report_time | NUMBER | Время отчета
report_date_time | TABLE | Дата и время отчета

См. также описание функций getItem, getNumberOf


Позиции по клиентским счетам (фьючерсы)

Описание параметров Таблицы позиций по клиентским счетам (фьючерсы):

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
trdaccid | STRING | Торговый счет
sec_code | STRING | Код фьючерсного контракта
type NUMBER Тип лимита. Возможные значения:
  • «0» – не определён;
  • «1» – основной счет;
  • «2» – клиентские и дополнительные счета;
  • «4» – все счета торг. членов
startbuy | NUMBER | Входящие длинные позиции
startsell | NUMBER | Входящие короткие позиции
startnet | NUMBER | Входящие чистые позиции
todaybuy | NUMBER | Текущие длинные позиции
todaysell | NUMBER | Текущие короткие позиции
totalnet | NUMBER | Текущие чистые позиции
openbuys | NUMBER | Активные на покупку
opensells | NUMBER | Активные на продажу
cbplused | NUMBER | Оценка текущих чистых позиций
cbplplanned | NUMBER | Плановые чистые позиции
varmargin | NUMBER | Вариационная маржа
avrposnprice | NUMBER | Эффективная цена позиций
positionvalue | NUMBER | Стоимость позиций
real_varmargin | NUMBER | Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом, в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены
total_varmargin | NUMBER | Суммарная вариационная маржа по итогам основного клиринга начисленная по всем позициям. Отображается с точностью до 2 двух знаков
session_status NUMBER Актуальный статус торговой сессии. Возможные значения:
  • «0» – не определено;
  • «1» – основная сессия;
  • «2» – начался промклиринг;
  • «3» – завершился промклиринг;
  • «4» – начался основной клиринг;
  • «5» – основной клиринг: новая сессия назначена;
  • «6» – завершился основной клиринг;
  • «7» – завершилась вечерняя сессия


Свечки графика

Описание параметров свечки графика:

Параметр | Тип | Описание
open | NUMBER | Цена открытия
close | NUMBER | Цена закрытия
high | NUMBER | Максимальная цена сделки
low | NUMBER | Минимальная цена сделки
volume | NUMBER | Объем последней сделки
datetime | TABLE | Формат даты и времени
doesExist NUMBER Признак расчета индикатора при наличии свечки. Возможные значения:
  • «0» – индикатор не рассчитан;
  • «1» – индикатор рассчитан


Сделки

Описание параметров Таблицы сделок:

Параметр | Тип | Описание
trade_num | NUMBER | Номер сделки в торговой системе
order_num | NUMBER | Номер заявки в торговой системе
brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения>
userid | STRING | Идентификатор трейдера
firmid | STRING | Идентификатор дилера
canceled_uid | NUMBER | Идентификатор пользователя, отказавшегося от сделки
account | STRING | Торговый счет
price | NUMBER | Цена
qty | NUMBER | Количество бумаг в лотах
value | NUMBER | Объем в денежных средствах
accruedint | NUMBER | Накопленный купонный доход
yield | NUMBER | Доходность
settlecode | STRING | Код расчетов
cpfirmid | STRING | Код фирмы партнера
flags | NUMBER | Набор битовых флагов
price2 | NUMBER | Цена выкупа
reporate | NUMBER | Ставка РЕПО (%)
client_code | STRING | Код клиента
accrued2 | NUMBER | Доход (%) на дату выкупа
repoterm | NUMBER | Срок РЕПО, в календарных днях
repovalue | NUMBER | Сумма РЕПО
repo2value | NUMBER | Объем выкупа РЕПО
start_discount | NUMBER | Начальный дисконт (%)
lower_discount | NUMBER | Нижний дисконт (%)
upper_discount | NUMBER | Верхний дисконт (%)
block_securities | NUMBER | Блокировка обеспечения («Да»/«Нет»)
clearing_comission | NUMBER | Клиринговая комиссия (ММВБ)
exchange_comission | NUMBER | Комиссия Фондовой биржи (ММВБ)
tech_center_comission | NUMBER | Комиссия Технического центра (ММВБ)
settle_date | NUMBER | Дата расчетов
settle_currency | STRING | Валюта расчетов
trade_currency | STRING | Валюта
exchange_code | STRING | Код биржи в торговой системе
station_id | STRING | Идентификатор рабочей станции
sec_code | STRING | Код бумаги заявки
class_code | STRING | Код класса
datetime | TABLE | Дата и время
bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации
broker_comission | NUMBER | Комиссия брокера. Отображается с точностью до 2 двух знаков. Поле зарезервировано для будущего использования.
linked_trade | NUMBER | Номер витринной сделки в Торговой Системе для сделок РЕПО с ЦК и SWAP
period NUMBER Период торговой сессии. Возможные значения:

  • «0» – Открытие;
  • «1» – Нормальный;
  • «2» – Закрытие
trans_id | NUMBER | Идентификатор транзакции
kind NUMBER Тип сделки. Возможные значения:

  • «1» – Обычная;
  • «2» – Адресная;
  • «3» – Первичное размещение;
  • «4» – Перевод денег/бумаг;
  • «5» – Адресная сделка первой части РЕПО;
  • «6» – Расчетная по операции своп;
  • «7» – Расчетная по внебиржевой операции своп;
  • «8» – Расчетная сделка бивалютной корзины;
  • «9» – Расчетная внебиржевая сделка бивалютной корзины;
  • «10» – Сделка по операции РЕПО с ЦК;
  • «11» – Первая часть сделки по операции РЕПО с ЦК;
  • «12» – Вторая часть сделки по операции РЕПО с ЦК;
  • «13» – Адресная сделка по операции РЕПО с ЦК;
  • «14» – Первая часть адресной сделки по операции РЕПО с ЦК;
  • «15» – Вторая часть адресной сделки по операции РЕПО с ЦК;
  • «16» – Техническая сделка по возврату активов РЕПО с ЦК;
  • «17» – Сделка по спреду между фьючерсами разных сроков на один актив;
  • «18» – Техническая сделка первой части от спреда между фьючерсами;
  • «19» – Техническая сделка второй части от спреда между фьючерсами;
  • «20» – Адресная сделка первой части РЕПО с корзиной;
  • «21» – Адресная сделка второй части РЕПО с корзиной;
  • «22» – Перенос позиций срочного рынка
clearing_bank_accid | STRING | Идентификатор счета в НКЦ (расчетный код)
canceled_datetime | TABLE | Дата и время снятия сделки
clearing_firmid | STRING | Идентификатор фирмы - участника клиринга
system_ref | STRING | Дополнительная информация по сделке, передаваемая торговой системой
uid | NUMBER | Идентификатор пользователя на сервере QUIK
lseccode | STRING | Приоритетное обеспечение
* order_revision_number | NUMBER | Номер ревизии заявки, по которой была совершена сделка
* order_qty | NUMBER | Количество в заявке на момент совершения сделки, в лотах
* order_price | NUMBER | Цена в заявке на момент совершения сделки
order_exchange_code | STRING | Биржевой номер заявки
exec_market | STRING | Площадка исполнения
liquidity_indicator NUMBER Индикатор ликвидности. Возможные значения:
  • «0» – не определено;
  • «1» – по заявке мейкера;
  • «2» – по заявке тейкера;
  • «3» – вывод ликвидности;
  • «4» – по заявке в период аукциона
extref | STRING | Внешняя ссылка, используется для обратной связи с внешними системами
ext_trade_flags | NUMBER | Расширенные флаги, полученные от шлюза напрямую, без вмешательства сервера QUIK. Поле не заполняется
on_behalf_of_uid | NUMBER | UID пользователя, от имени которого совершена сделка
client_qualifier NUMBER Квалификатор клиента, от имени которого совершена сделка. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Legal Entity
client_short_code | NUMBER | Краткий идентификатор клиента, от имени которого совершена сделка
investment_decision_maker_qualifier NUMBER Квалификатор принявшего решение о совершении сделки. Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Algorithm
investment_decision_maker_short_code | NUMBER | Краткий идентификатор принявшего решение о совершении сделки
executing_trader_qualifier NUMBER Квалификатор трейдера, исполнившего заявку, по которой совершена сделка.Возможные значения:
  • «0» – не определено;
  • «1» – Natural Person;
  • «3» – Algorithm
executing_trader_short_code | NUMBER | Краткий идентификатор трейдера, исполнившего заявку, по которой совершена сделка
waiver_flag NUMBER Признак того, что транзакция совершена по правилам пре-трейда. Возможные значения битовых флагов:
  • бит 0 (0x1) – RFPT;
  • бит 1 (0x2) – NLIQ;
  • бит 2 (0x4) – OILQ;
  • бит 3 (0x8) – PRC;
  • бит 4 (0x10)– SIZE;
  • бит 5 (0x20) – ILQD
mleg_base_sid | NUMBER | Идентификатор базового инструмента на сервере для multileg-инструментов
side_qualifier NUMBER Квалификатор операции. Возможные значения:
  • «0» – не определено;
  • «1» – Buy;
  • «2» – Sell;
  • «3» – Sell short;
  • «4» – Sell short exempt;
  • «5» – Sell undiclosed
otc_post_trade_indicator NUMBER OTC post-trade индикатор. Возможные значения битовых флагов:
  • бит 0 (0x1) – Benchmark;
  • бит 1 (0x2) – Agency cross;
  • бит 2 (0x4) – Large in scale;
  • бит 3 (0x8) – Illiquid instrument;
  • бит 4 (0x10) – Above specified size;
  • бит 5 (0x20) – Cancellations;
  • бит 6 (0x40) – Amendments;
  • бит 7 (0x80) – Special dividend;
  • бит 8 (0x100) – Price improvement;
  • бит 9 (0x200) – Duplicative;
  • бит 10 (0x400) – Not contributing to the price discovery process;
  • бит 11 (0x800) – Package;
  • бит 12 (0x1000) – Exchange for Physical
capacity NUMBER Роль в исполнении заявки. Возможные значения:
  • «0» – не определено;
  • «1» – Agent;
  • «2» – Principal;
  • «3» – Riskless principal;
  • «4» – CFG give up;
  • «5» – Cross as agent;
  • «6» – Matched principal;
  • «7» – Proprietary;
  • «8» – Individual;
  • «9» – Agent for other member;
  • «10» – Mixed;
  • «11» – Market maker
cross_rate | NUMBER | Кросс-курс валюты цены сделки к валюте расчетов по сделке

* - параметр используется только для сделок, совершенных по заявкам, к которым применена транзакция замены заявки с сохранением номера.


Сделки для исполнения

Описание параметров Таблицы сделок для исполнения:

Параметр | Тип | Описание
trade_num | NUMBER | Номер сделки
trade_date | NUMBER | Дата торгов
settle_date | NUMBER | Дата расчетов
flags | NUMBER | Набор битовых флагов
brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения>
firmid | STRING | Идентификатор дилера
account | STRING | Счет депо
cpfirmid | STRING | Код фирмы партнера
cpaccount | STRING | Счет депо партнера
price | NUMBER | Цена
qty | NUMBER | Количество
value | NUMBER | Объем
settlecode | STRING | Код расчетов
report_num | NUMBER | Отчет
cpreport_num | NUMBER | Отчет партнера
accruedint | NUMBER | Купонный процент
repotradeno | NUMBER | Номер сделки 1-ой части РЕПО
price1 | NUMBER | Цена 1-ой части РЕПО
reporate | NUMBER | Ставка РЕПО (%)
price2 | NUMBER | Цена выкупа
client_code | STRING | Код клиента
ts_comission | NUMBER | Комиссия торговой системы
balance | NUMBER | Остаток
settle_time | NUMBER | Время исполнения
amount | NUMBER | Сумма обязательства
repovalue | NUMBER | Сумма РЕПО
repoterm | NUMBER | Срок РЕПО
repo2value | NUMBER | Объем выкупа РЕПО
return_value | NUMBER | Сумма возврата РЕПО
discount | NUMBER | Дисконт (%)
lower_discount | NUMBER | Нижний дисконт (%)
upper_discount | NUMBER | Верхний дисконт (%)
block_securities | NUMBER | Блокировать обеспечение («Да»/«Нет»)
urgency_flag | NUMBER | Исполнить («Да»/«Нет»)
type NUMBER Тип. Возможные значения:
  • «0» – «Внесистемная сделка»,
  • «1» – «Первая часть сделки РЕПО»,
  • «2» – «Вторая часть сделки РЕПО»,
  • «3» – «Компенсационный взнос»,
  • «4» – «Дефолтер: отложенные обязательства и требования»,
  • «5» – «Пострадавший: отложенные обязательства и требования».
operation_type NUMBER Направленность. Возможные значения:
  • «1» – «Зачислить»,
  • «2» – «Списать».
expected_discount | NUMBER | Дисконт после взноса (%)
expected_quantity | NUMBER | Количество после взноса
expected_repovalue | NUMBER | Сумма РЕПО после взноса
expected_repo2value | NUMBER | Стоимость выкупа после взноса
expected_return_value | NUMBER | Сумма возврата после взноса
order_num | NUMBER | Номер заявки
report_trade_date | NUMBER | Дата заключения
settled NUMBER Состояние расчетов по сделке. Возможные значения:
  • «1» – «Processed»,
  • «2» – «Not processed»,
  • «3» – «Is processing».
clearing_type NUMBER Тип клиринга. Возможные значения:
  • «1» – «Not set»,
  • «2» – «Simple»,
  • «3» – «Multilateral».
report_comission | NUMBER | Комиссия за отчет
coupon_payment | NUMBER | Купонная выплата
principal_payment | NUMBER | Выплата по основному долгу
principal_payment_date | NUMBER | Дата выплаты по основному долгу
nextdaysettle | NUMBER | Дата следующего дня расчетов
settle_currency | STRING | Валюта расчетов
sec_code | STRING | Код бумаги
class_code | STRING | Код класса
compval | NUMBER | Сумма отступного в валюте сделки
parenttradeno | NUMBER | Идентификационный номер витринной сделки
bankid | STRING | Расчетная организация
bankaccid | STRING | Код позиции
precisebalance | NUMBER | Количество бумаг к исполнению (в лотах)
confirmtime | NUMBER | Время подтверждения в формате «ЧЧММСС»
ex_flags NUMBER Расширенные флаги сделки для исполнения. Возможные значения:
  • «1» – «Подтверждена контрагентом»;
  • «2» – «Подтверждена»
confirmreport | NUMBER | Номер поручения
extref | STRING | Внешняя ссылка, используется для обратной связи с внешними системами


Стоп-заявки

Описание параметров Таблицы стоп-заявок:

Параметр | Тип | Описание
order_num | NUMBER | Регистрационный номер стоп-заявки на сервере QUIK
ordertime | NUMBER | Время выставления
flags | NUMBER | Набор битовых флагов
brokerref | STRING | Комментарий, обычно: <код клиента>/<номер поручения>
firmid | STRING | Идентификатор дилера
account | STRING | Торговый счет
condition NUMBER Направленность стоп-цены. Возможные значения:
  • «4» – «<=»,
  • «5» – «>=»
condition_price | NUMBER | Стоп-цена
price | NUMBER | Цена
qty | NUMBER | Количество в лотах
linkedorder | NUMBER | Номер заявки в торговой системе, зарегистрированной по наступлению условия стоп-цены
expiry | NUMBER | Дата окончания срока действия заявки
trans_id | NUMBER | Идентификатор транзакции
client_code | STRING | Код клиента
co_order_num | NUMBER | Связанная заявка
co_order_price | NUMBER | Цена связанной заявки
stop_order_type NUMBER Вид стоп заявки. Возможные значения:
  • «1» – стоп-лимит;
  • «2» – условие по другому инструменту;
  • «3» – со связанной заявкой;
  • «6» – тейк-профит;
  • «7» – стоп-лимит по исполнению активной заявки;
  • «8» – тейк-профит по исполнению активной заявки;
  • «9» - тейк-профит и стоп-лимит
    orderdate | NUMBER | Дата выставления
    alltrade_num | NUMBER | Сделка условия
    stopflags | NUMBER | Набор битовых флагов
    offset | NUMBER | Отступ от min/max
    spread | NUMBER | Защитный спред
    balance | NUMBER | Активное количество
    uid | NUMBER | Идентификатор пользователя
    filled_qty | NUMBER | Исполненное количество
    withdraw_time | NUMBER | Время снятия заявки
    condition_price2 | NUMBER | Стоп-лимит цена (для заявок типа «Тэйк-профит и стоп-лимит»)
    active_from_time | NUMBER | Время начала периода действия заявки типа «Тэйк-профит и стоп-лимит»
    active_to_time | NUMBER | Время окончания периода действия заявки типа «Тэйк-профит и стоп-лимит»
    sec_code | STRING | Код бумаги заявки
    class_code | STRING | Код класса заявки
    condition_sec_code | STRING | Код бумаги стоп-цены
    condition_class_code | STRING | Код класса стоп-цены
    canceled_uid | NUMBER | Идентификатор пользователя, снявшего стоп-заявку
    order_date_time | TABLE | Время выставления стоп-заявки
    withdraw_datetime | TABLE | Время снятия стоп-заявки
    activation_date_time | TABLE | Дата и время активации стоп-заявки


Текущие позиции по бумагам

Описание параметров Таблицы текущих позиций по бумагам:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
sec_code | STRING | Код бумаги
openbal | NUMBER | Входящий остаток
currentpos | NUMBER | Текущий остаток
plannedposbuy | NUMBER | Объем активных заявок на покупку, в ценных бумагах
plannedpossell | NUMBER | Объем активных заявок на продажу, в ценных бумагах
usqtyb | NUMBER | Куплено
usqtys | NUMBER | Продано


Текущие позиции по клиентским счетам

Описание параметров Таблицы текущих значений позиций по счетам:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
sec_code | STRING | Код бумаги
trdaccid | STRING | Торговый счет
depaccid | STRING | Счет депо
openbal | NUMBER | Входящий остаток
currentpos | NUMBER | Текущий остаток
plannedpossell | NUMBER | Плановая продажа
plannedposbuy | NUMBER | Плановая покупка
planbal | NUMBER | Контрольный остаток простого клиринга, равен входящему остатку минус плановая позиция на продажу, включенная в простой клиринг
usqtyb | NUMBER | Куплено
usqtys | NUMBER | Продано
planned | NUMBER | Плановый остаток, равен текущему остатку минус плановая позиция на продажу
settlebal | NUMBER | Плановая позиция после проведения расчетов
bank_acc_id | STRING | Идентификатор расчетного счета/кода в клиринговой организации
firmuse NUMBER Признак счета обеспечения. Возможные значения:
  • «0» – для обычных счетов,
  • «1» – для счета обеспечения.


Удаление бумажного лимита

Описание параметров таблицы Удаление бумажного лимита:

Параметр | Тип | Описание
sec_code | STRING | Код инструмента
trdaccid | STRING | Код торгового счета
firmid | STRING | Идентификатор фирмы
client_code | STRING | Код клиента
limit_kind NUMBER Вид лимита. Возможные значения:
  • положительные целые числа, начиная с «0», соответствующие видам лимитов из таблицы «Лимиты по бумагам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)


Удаление денежного лимита

Описание параметров таблицы Удаление денежного лимита:

Параметр | Тип | Описание
currcode | STRING | Код валюты
tag | STRING | Тег расчетов
client_code | STRING | Код клиента
firmid | STRING | Идентификатор фирмы
limit_kind NUMBER Вид лимита. Возможные значения:
  • положительные целые числа, начиная с «0», соответствующие видам лимитов из таблицы «Лимиты по денежным средствам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)


Удаление фьючерсного лимита

Описание параметров таблицы Удаление фьючерсного лимита:

Параметр | Тип | Описание
trdaccid | STRING | Код торгового счета
limit_type NUMBER Тип лимита. Возможные значения:
  • «0» – «Денежные средства»,
  • «1» – «Залоговые денежные средства»,
  • «2» – «По совокупным средствам»;
  • «3» – «Клиринговые денежные средства»;
  • «4» – «Клиринговые залоговые денежные средства»;
  • «5» – «Лимит открытых позиций на спот-рынке»;
  • «6» – «Суммарные залоговые средства в иностранной валюте (в рублях)»;
  • «7» – «Залоговые средства в иностранной валюте»


Торговые счета

Описание параметров таблицы Торговые счета:

Параметр | Тип | Описание
class_codes | STRING | Список кодов классов, разделенных символом «|»
firmid | STRING | Идентификатор фирмы
trdaccid | STRING | Код торгового счета
description | STRING | Описание
fullcoveredsell NUMBER Запрет необеспеченных продаж. Возможные значения:
  • «0» – Нет;
  • «1» – Да
main_trdaccid | NUMBER | Номер основного торгового счета
bankid_t0 | STRING | Расчетная организация по «Т0»
bankid_tplus | STRING | Расчетная организация по «Т+»
trdacc_type | NUMBER | Тип торгового счета
depunitid | STRING | Раздел счета Депо
status NUMBER Статус торгового счета. Возможные значения:
  • «0» – операции разрешены;
  • «1» – операции запрещены
firmuse NUMER Тип раздела. Возможные значения:
  • «0» – раздел обеспечения;
  • иначе – для торговых разделов
depaccid | STRING | Номер счета депо в депозитарии
bank_acc_id | STRING | Код дополнительной позиции по денежным средствам


Транзакции

Описание параметров транзакций:

Параметр | Тип | Описание
trans_id | NUMBER | Пользовательский идентификатор транзакции
status NUMBER Статус транзакции. Возможные значения:
  • «0» – транзакция отправлена серверу;
  • «1» – транзакция получена на сервер QUIK от клиента;
  • «2» – ошибка при передаче транзакции в торговую систему. Так как отсутствует подключение шлюза Московской Биржи, повторно транзакция не отправляется;
  • «3» – транзакция выполнена;
  • «4» – транзакция не выполнена торговой системой. Более подробное описание ошибки отражается в поле «Сообщение»;
  • «5» – транзакция не прошла проверку сервера QUIK по каким-либо критериям. Например, проверку на наличие прав у пользователя на отправку транзакции данного типа;
  • «6» – транзакция не прошла проверку лимитов сервера QUIK;
  • «10» – транзакция не поддерживается торговой системой;
  • «11» – транзакция не прошла проверку правильности электронной цифровой подписи;
  • «12» – не удалось дождаться ответа на транзакцию, т.к. истек таймаут ожидания. Может возникнуть при подаче транзакций из QPILE;
  • «13» – транзакция отвергнута, так как ее выполнение могло привести к кросс-сделке (т.е. сделке с тем же самым клиентским счетом);
  • «14» – транзакция не прошла контроль дополнительных ограничений, установленных брокером;
  • «15» – транзакция принята после нарушения дополнительных ограничений, установленных брокером;
  • «16» – транзакция отменена пользователем в ходе проверки дополнительных ограничений, установленных брокером
result_msg | STRING | Сообщение
date_time | TABLE | Дата и время
uid | NUMBER | Идентификатор
flags | NUMBER | Флаги транзакции
server_trans_id | NUMBER | Идентификатор транзакции на сервере
*order_num | NUMBER | Номер заявки
*price | NUMBER | Цена
*quantity | NUMBER | Количество
*balance | NUMBER | Остаток
*firm_id | STRING | Идентификатор фирмы
*account | STRING | Торговый счет
*client_code | STRING | Код клиента
*brokerref | STRING | Поручение
*class_code | STRING | Код класса
*sec_code | STRING | Код бумаги
*exchange_code | STRING | Биржевой номер заявки
error_code | NUMBER | Числовой код ошибки. Значение равно «0», если транзакция выполнена успешно
error_source NUMBER Источник сообщения. Возможные значения:
  • «1» – Торговая система;
  • «2» – Сервер QUIK;
  • «3» – Библиотека расчёта лимитов;
  • «4» – Шлюз торговой системы
first_ordernum | NUMBER | Номер первой заявки, которая выставлялась при автоматической замене кода клиента. Используется, если на сервере QUIK настроена замена кода клиента для кросс-сделки
gate_reply_time | TABLE | Дата и время получения шлюзом ответа на транзакцию

* - параметр может иметь значение nil


Фирмы

Описание параметров Таблицы фирмы:

Параметр | Тип | Описание
firmid | STRING | Идентификатор фирмы
firm_name | STRING | Название класса
status | NUMBER | Статус
exchange | STRING | Торговая площадка

См. также описание функций getItem, getNumberOf


Формат даты и времени, используемый таблицах

Описание формата даты и времени, используемого в некоторых таблицах:

Параметр | Тип | Описание
mcs | NUMBER | Микросекунды
ms | NUMBER | Миллисекунды
sec | NUMBER | Секунды
min | NUMBER | Минуты
hour | NUMBER | Часы
day | NUMBER | День
week_day | NUMBER | Номер дня недели
month | NUMBER | Месяц
year | NUMBER | Год

Для корректного отображения даты и времени эти параметры должны быть заданы.


Функции для работы с метками

Предназначены для построения меток и установки их на графике.

  • AddLabel - добавляет метку с заданными параметрами
  • DelLabel - удаляет метку с заданными параметрами
  • DelAllLabels - удаляет все метки на диаграмме с указанным графиком
  • GetLabelParams - позволяет получить параметры метки
  • SetLabelParams - задает параметры для метки с указанным идентификатором


AddLabel

Добавляет метку с заданными параметрами.

Формат вызова:

NUMBER AddLabel(STRING chart_tag, TABLE label_params)

Параметры:

  • chart_tag – тег графика, к которому привязывается метка,
  • label_params – таблица с параметрами метки.

Функция возвращает числовой идентификатор метки. В случае неуспешного завершения функция возвращает «nil».

Формат таблицы с параметрами метки:

№ | Параметр | Тип | Описание
1 | TEXT | STRING | Подпись метки (если подпись не требуется, то пустая строка)
2 | IMAGE_PATH | STRING | Путь к картинке, которая будет отображаться в качестве метки (пустая строка, если картинка не требуется). Используются картинки формата *.bmp, *.jpeg
3 | ALIGNMENT | STRING | Расположение картинки относительно текста (возможно 4 варианта: LEFT, RIGHT, TOP, BOTTOM)
4 | YVALUE | DOUBLE | Значение параметра на оси Y, к которому будет привязана метка
5 | DATE | DOUBLE | Дата в формате «ГГГГММДД», к которой привязана метка
6 | TIME | DOUBLE | Время в формате «ЧЧММСС», к которому будет привязана метка
7 | R | DOUBLE | Красная компонента цвета в формате RGB. Число в интервале [0;255]
8 | G | DOUBLE | Зеленая компонента цвета в формате RGB. Число в интервале [0;255]
9 | B | DOUBLE | Синяя компонента цвета в формате RGB. Число в интервале [0;255]
10 | TRANSPARENCY | DOUBLE | Прозрачность метки в процентах. Значение должно быть в промежутке [0; 100]
11 | TRANSPARENT_BACKGROUND | DOUBLE | Прозрачность фона картинки. Возможные значения: «0» – прозрачность отключена, «1» – прозрачность включена
12 | FONT_FACE_NAME | STRING | Название шрифта (например «Arial»)
13 | FONT_HEIGHT | DOUBLE | Размер шрифта
14 | HINT | STRING | Текст всплывающей подсказки


DelLabel

Удаляет метку с заданными параметрами.

Формат вызова:

BOOLEAN DelLabel(STRING chart_tag, NUMBER label_id)

Параметры:

  • chart_tag – тег графика, к которому привязывается метка,
  • label_id – идентификатор метки.

В случае успешного завершения функция возвращает «true», иначе – «false».


DelAllLabels

Команда удаляет все метки на диаграмме с указанным графиком.

Формат вызова:

BOOLEAN DelAllLabels(STRING chart_tag)

Параметры:

  • chart_tag – тег графика, к которому привязывается метка.

В случае успешного завершения функция возвращает «true», иначе – «false».


GetLabelParams

Команда позволяет получить параметры метки.

Формат вызова:

TABLE GetLabelParams(STRING chart_tag, NUMBER label_id)

Параметры:

  • chart_tag – тег графика, к которому привязывается метка;
  • label_id – идентификатор метки.

Функция возвращает таблицу с параметрами метки. В случае неуспешного завершения функция возвращает «nil».

Наименование параметров метки в возвращаемой таблице указаны в нижнем регистре, и все значения имеют тип – STRING.


SetLabelParams

Функция задает параметры для метки с указанным идентификатором.

Формат вызова:

BOOLEAN SetLabelParams(STRING chart_tag, NUMBER label_id, TABLE params)

Параметры:

  • chart_tag – тег графика, к которому привязывается метка;
  • label_id – идентификатор метки;
  • label_params – таблица с новыми параметрами метки.

В случае успешного завершения функция возвращает «true», иначе – «false».


Функции для заказа стакана котировок

  • Subscribe_Level_II_Quotes - заказывает на сервер получение стакана по указанному классу и бумаге.
  • Unsubscribe_Level_II_Quotes - отменяет заказ на получение с сервера стакана по указанному классу и бумаге.
  • IsSubscribed_Level_II_Quotes - позволяет узнать, заказан ли с сервера стакан по указанному классу и бумаге.


Subscribe_Level_II_Quotes

Функция заказывает на сервер получение стакана по указанному классу и бумаге.

Формат вызова:

BOOLEAN Subscribe_Level_II_Quotes(STRING class_code, STRING sec_code)

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги.

В случае успешного завершения функция возвращает «true».


Unsubscribe_Level_II_Quotes

Функция отменяет заказ на получение с сервера стакана по указанному классу и бумаге.

Формат вызова:

BOOLEAN Unsubscribe_Level_II_Quotes(STRING class_code, STRING sec_code)

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги.

В случае успешного завершения функция возвращает «true».


IsSubscribed_Level_II_Quotes

Функция позволяет узнать, заказан ли с сервера стакан по указанному классу и бумаге.

Формат вызова:

BOOLEAN IsSubscribed_Level_II_Quotes (STRING class_code, STRING sec_code)

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги.

Функция возвращает «true», если стакан по классу class_code и бумаге sec_code уже заказан.


Функции для заказа параметров Таблицы текущих торгов

  • ParamRequest - заказывает получение параметров Таблицы текущих торгов.
  • CancelParamRequest - отменяет заказ на получение параметров Таблицы текущих торгов.


 ParamRequest

ParamRequest

Функция заказывает получение параметров Таблицы текущих торгов.

BOOLEAN ParamRequest(STRING class_code, STRING sec_code, STRING db_name)

Для корректной работы функции включите в настройках Рабочего места QUIK признак получения данных «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»).

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги;
  • db_name – код параметра.

В случае успешного завершения функция возвращает «true», иначе – «false».


CancelParamRequest

Функция отменяет заказ на получение параметров Таблицы текущих торгов.

BOOLEAN CancelParamRequest(STRING class_code, STRING sec_code, STRING db_name)

Для корректной работы функции включите в настройках Рабочего места QUIK признак получения данных «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»).

Параметры:

  • class_code – код класса;
  • sec_code – код бумаги;
  • db_name – код параметра.

В случае успешного завершения функция возвращает «true», иначе – «false».

При использовании функций ParamRequest() и CancelParamRequest() отказ от заказанных параметров Таблицы текущих торгов возможен, если в скрипте используется функция getParamEx2(). Если будет использоваться функция getParamEx(), то функция CancelParamRequest() не выполнит отмену получения параметров Таблицы текущих торгов.


Описание битовых флагов

Функции из этой группы предназначены для доступа к данным, содержащимся в таблицах Рабочего места QUIK.

  • Флаги для таблиц Заявки, Заявки на внебиржевые сделки, Сделки, Сделки для исполнения
  • Флаги для таблицы Обезличенные сделки
  • Флаги для таблицы Стоп-заявки
  • Дополнительные флаги для таблицы Стоп-заявки


Флаги для таблиц Заявки, Заявки на внебиржевые сделки, Сделки, Сделки для исполнения

Флаг установлен | Значение
бит 0 (0x1) | Заявка активна, иначе – не активна
бит 1 (0x2) | Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
бит 2 (0x4) | Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)
бит 3 (0x8) | Заявка лимитированная, иначе – рыночная
бит 4 (0x10) | Разрешить / запретить сделки по разным ценам
бит 5 (0x20) | Исполнить заявку немедленно или снять (FILL OR KILL)
бит 6 (0x40) | Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту
бит 7 (0x80) | Для адресных заявок – заявка получена от контрагента
бит 8 (0x100) | Снять остаток
бит 9 (0x200) | Айсберг-заявка


Флаги для таблицы Обезличенные сделки

Флаг установлен | Значение
бит 0 (0x1) | Сделка на продажу
бит 1 (0x2) | Сделка на покупку

В случае, если флаги не установлены, направление сделки не определено.


Флаги для таблицы Стоп-заявки

Флаг установлен | Значение
бит 0 (0x1) | Заявка активна, иначе не активна
бит 1 (0x2) | Заявка снята. Если не установлен и значение бита 0 равно 0, то заявка исполнена
бит 2 (0x4) | Заявка на продажу, иначе – на покупку
бит 3 (0x8) | Лимитированная заявка
бит 5 (0x20) | Стоп-заявка ожидает активации
бит 6 (0x40) | Стоп-заявка с другого сервера
бит 8 (0x100) | Устанавливается в случае стоп-заявки типа тейк-профита по заявке, в случае когда исходная заявка частично исполнена и по выставленной тейк-профит заявке на исполненную часть заявки выполнилось условие активации
бит 9 (0x200) | Стоп-заявка активирована вручную
бит 10 (0x400) | Стоп-заявка сработала, но была отвергнута торговой системой
бит 11 (0x800) | Стоп-заявка сработала, но не прошла контроль лимитов
бит 12 (0x1000) | Стоп-заявка снята, так как снята связанная заявка
бит 13 (0x2000) | Стоп-заявка снята, так как связанная заявка исполнена
бит 15 (0x8000) | Идет расчет минимума-максимума


Дополнительные флаги для таблицы Стоп-заявки

Флаг установлен | Значение
бит 0 (0x1) | Использовать остаток основной заявки
бит 1 (0x2) | При частичном исполнении заявки снять стоп-заявку
бит 2 (0x4) | Активировать стоп-заявку при частичном исполнении связанной заявки
бит 3 (0x8) | Отступ задан в процентах, иначе – в пунктах цены
бит 4 (0x10) | Защитный спред задан в процентах, иначе – в пунктах цены
бит 5 (0x20) | Срок действия стоп-заявки ограничен сегодняшним днем
бит 6 (0x40) | Установлен интервал времени действия стоп-заявки
бит 7 (0x80) | Выполнение тейк-профита по рыночной цене
бит 8 (0x100) | Выполнение стоп-заявки по рыночной цене


Функции для работы с битовыми масками в структурах данных

  • bit.band
  • bit.bnot
  • bit.bor
  • bit.bxor
  • bit.tohex


bit.band

Функция возвращает результат битовой операции AND над аргументами. Аргументов может быть несколько, при этом обязательные аргументы x1 и x2.

NUMBER bit.band(NUMBER x1, NUMBER x2, …)


bit.bnot

Функция возвращает результат битовой операции NOT над аргументом x.

NUMBER bit.bnot(NUMBER x)


bit.bor

Функция возвращает результат битовой операции OR (ИЛИ) над аргументами. Аргументов может быть несколько, при этом обязательные аргументы x1 и x2.

NUMBER bit.bor(NUMBER x1, NUMBER x2,…)


bit.bxor

Функция возвращает результат битовой операции XOR (исключающее ИЛИ) над аргументами. Аргументов может быть несколько, при этом обязательные аргументы x1 и x2.

NUMBER bit.bxor(NUMBER x1, NUMBER x2,…)


bit.tohex

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

STRING bit.tohex(NUMBERx [, NUMBER n])


bit.test

Функция проверяет состояние указанного бита в значении. Возвращает true, если бит равен «1», и false, если бит равен «0».

BOOLEAN bit.test(NUMBER х, NUMBER n)

где:

  • х – значение;
  • n – номер бита. Нумерация битов начинается с «0».


Индикаторы технического анализа

  • Общие сведения
  • Функции и глобальные переменные скрипта индикатора


Общие сведения

Индикаторы технического анализа представляют собой отдельный класс скриптов, которые удовлетворяют определенным условиям и расположены в папке LuaIndicators в каталоге терминала. Если папка отсутствует в каталоге, необходимо создать ее вручную. Список скриптов не доступен из диалога Сервисы / LUA скрипты....

При добавлении нового индикатора на график плагин qlua сканирует папку LuaIndicators, проверяет файлы с расширением lua и luac (скомпилированные скрипты lua) на соответствие следующим требованиям:

  • определена функция Init,
  • определена функция OnCalculate,
  • определена таблица Lua с именем Settings, в которой есть поле «Name».

Пример минимального корректного кода для индикатора:

Settings={}
Settings.Name = "minimal"
function Init()
    return 1
end
function OnCalculate(index)
    return 1
end

Список доступных индикаторов передается в модуль qchart и в дальнейшем доступен из стандартного диалога добавления индикатора на графике:

Список типов графиков отсортирован по алфавиту, за исключением типов графиков «Price» и «Volume», которые всегда располагаются в начале списка.


Функции и глобальные переменные скрипта индикатора

  • Init
  • OnCalculate
  • OnDestroy
  • OnChangeSettings
  • Функции для доступа к источнику данных
  • CandleExist
  • getDataSourceInfo
  • SetValue
  • GetValue
  • SetRangeValue
  • Таблица «Settings»
  • Список функций, доступных из скрипта индикатора


Init

Функция вызывается при добавлении индикатора на график (при нажатии кнопки «Добавить» в окне «Добавление графика»). Возвращает число, которое определяет количество линий в индикаторе.

Функция вызывается также при перезагрузке Рабочего места QUIK и при загрузке wnd-файла либо tab-файла, в которых сохранен график с индикатором.

Формат вызова:

NUMBER Init()

Например, для индикатора «Аллигатор» функция возвращает значение «3».


OnCalculate

Функция вызывается при поступлении новой или изменении существующей свечки в источнике данных для индикатора.

Формат вызова:

NUMBER v1 [, NUMBER vn] OnCalculate(NUMBER index)

Параметры:

  • index – индекс свечки в источнике данных. Начинается с «1».

Если значение vi не определено, то функция возвращает nil в качестве значения линии на интервале index.

Пример:

function Init()
    myDEMA = cached_DTEMA()
    return 2
end
function OnCalculate(index)
    x, y = myDEMA(index, Settings.period, Settings.calc_mode) --exponential
    return x, y
end


OnDestroy

Функция вызывается при удалении индикатора с графика, либо при закрытии окна диаграммы и не является обязательной для индикатора.

Формат вызова:

OnDestroy ()


OnChangeSettings

Функция вызывается при редактировании свойств индикатора после нажатия кнопок «Применить» или «OK».

Функция вызывается также при перезагрузке Рабочего места QUIK и при загрузке wnd-файла либо tab-файла, в которых сохранен график с индикатором.

Формат вызова:

OnChangeSettings()

Пример:

Settings={Name="test1"}
function Init()
    return 1
end
function OnChangeSettings()
    message(Settings.Name)
end


Функции для доступа к источнику данных

  • Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс свечи и возвращают соответствующее значение в формате:

    NUMBER <названиефункции>(NUMBER index)

  • Функция Size возвращает текущее количество свечек в источнике данных. Формат функции:

    NUMBER Size()

    Описание значений функций O, H, L, C, V, T , Size совпадает со значениями, приведенными в разделе Функции для работы с графиками.

Пример скрипта, реализующего индикатор «Moving Average»:

Settings={}
Settings.Name = "SimpleMA"
Settings.mode = "C"
Settings.period = 5
Settings.str_field = "STRING field"

function dValue(i,param)
    local v = param or "C"
    if v == "O" then
        return O(i)
    elseif v == "H" then
        return H(i)
    elseif v == "L" then
        return L(i)
    elseif v == "C" then
        return C(i)
    elseif v == "V" then
        return V(i)
    elseif v == "M" then
        return (H(i) + L(i))/2
    elseif v == "T" then
        return (H(i) + L(i)+C(i))/3
    elseif v == "W" then
        return (H(i) + L(i)+2*C(i))/4
    else
    return C(i)
    end
end

function Init()
    return 1
end
function OnCalculate(idx)
    local per = Settings.period
    local mode = Settings.mode
    local lValue = iValue
    if idx >= per then
        local ma_value=0
        for j = (idx-per)+1, idx do
        ma_value = ma_value+dValue(j, mode)
        end
        return ma_value/per
    else
        return nil
    end
end


CandleExist

Функция предназначена для проверки существования свечи на графике цены и объема.

Формат вызова:

BOOLEAN CandleExist(NUMBER index)

Параметры:

  • index – индекс свечи.

Функция принимает в качестве параметра индекс свечи и возвращает «true» если свечка существует, иначе – «false».

Функция определяет свечи, которые не нужно учитывать в расчете индикатора. Такие свечи появляются в случае добавления на одну диаграмму с графиком цены и объема графика по истории значений параметра из Таблицы текущих торгов или при включенной настройке графика «Показывать пустые интервалы». Для таких свечей функции O, H, L, C, V возвращают «nil», а функция T – время пустой свечи.

Пример использования функции для индикатора Moving Average по цене закрытия:

Settings= {
  Name = "Moving Average Lua",
  Period = 9,
  line =
  {
    {
      Name = "Moving Average Lua",
      Color = RGB(90, 110, 200),
      Type = TYPE_LINE,
      Width = 1
    }
  }
}

function  Init()
  QUEUE = {}
  SUM = 0
  return 1
end
function OnCalculate(index)
  return Average(index)
end

function Average(indx)
  --если выполняется перерасчет индикатора, то сбрасываем очередь и сумму
  if indx == 1 then
    QUEUE = {}
    SUM = 0
  end
  --если свечка непустая, добавляем ее в очередь и суммируем значение ее закрытия
  if CandleExist(indx) then
    table.insert(QUEUE, {C_value = C(indx)})
    SUM = SUM + QUEUE[#QUEUE].C_value
    --если очередь достигла необходимого периода, то считаем среднее значение
    if #QUEUE == Settings.Period then
      local avg = SUM/Settings.Period
      SUM = SUM - QUEUE[1].C_value
      table.remove(QUEUE, 1)
      return avg
    end
  else
    return nil
  end
end


getDataSourceInfo

Функция предназначена для получения информации об источнике данных для индикатора.

TABLE info getDataSourceInfo()

Функция возвращает таблицу Lua с параметрами:

ВАЖНО! Для корректной работы функции getDataSourceInfo, вызываемой из функции Init, необходимо перезапустить Рабочее место QUIK после добавления индикатора на график.

Параметр | Тип | Описание
interval | NUMBER | Текущий интервал (тайм-фрейм) графика
class_code | STRING | Код класса источника данных
sec_code | STRING | Код бумаги источника данных
param | STRING | Наименование параметра Таблицы текущих торгов, по которому строится график. Если поле пустое, то график строится на основании Таблицы обезличенных сделок

Возможные значения поля interval:

Параметр | Значение интервала
0 | Тиковый
1 | 1 минута
2 | 2 минуты
3 | 3 минуты
4 | 4 минуты
5 | 5 минут
6 | 6 минут
10 | 10 минут
15 | 15 минут
20 | 20 минут
30 | 30 минут
60 | 1 час
120 | 2 часа
240 | 4 часа
-1 | 1 день
-2 | 1 неделя
-3 | 1 месяц


SetValue

Функция предназначена для установки указанного значения на выбранной линии определенной свечи индикатора:

Формат вызова:

BOOLEAN SetValue(NUMBER index, NUMBER line_number, NUMBER value)

Параметры:

  • index – индекс свечи. Нумерация начинается с «1»;
  • line_number – номер линии. Нумерация начинается с «1»;
  • value – устанавливаемое значение. Параметр может иметь значение «nil».

Функция возвращает «true» в случае успешного завершения, иначе – «false».

Пример:

function OnCalculate(i)
    local ret_value = 0
    if i == 1 then
        ret_value = 1
    else
        ret_value = GetValue(i-1, 1)+2
    end
    if i%3 == 0 then
        ret_value = SetValue(i-1, 1, 2)
    end
    return ret_value
end


GetValue

Функция предназначена для определения значения, установленного на выбранной линии указанной свечи индикатора:

Формат вызова:

NUMBER value GetValue(NUMBER index, NUMBER line_number)

Параметры:

  • index – индекс свечи;
  • line_number – номер линии.

Функция возвращает значение value, установленное для линии line_number свечи index. В случае ошибки функция возвращает «nil».

Пример:

function OnCalculate(i)
    local ret_value = 0
    if i == 1 then
        ret_value = 1
    else
        ret_value = GetValue(i-1, 1)+2
    end
    if i%3 == 0 then
        ret_value = SetValue(i-1, 1, 2)
    end
    return ret_value
end


SetRangeValue

Функция предназначена для установки указанного значения на выбранной линии для определенного интервала индексов свечей индикатора:

Формат вызова:

BOOLEAN SetRangeValue(NUMBER line_number, NUMBER start_index, NUMBER end_index, NUMBER value)

Параметры:

  • line_number – номер линии;
  • start_index – индекс начальной свечи интервала;
  • end_index – индекс конечной свечи интервала;
  • value – устанавливаемое значение.

Функция устанавливает значение value для линии line_number от индекса start_index до индекса end_index включительно.

Функция возвращает «true» в случае успешного завершения, иначе – «false».

Пример:

function OnCalculate(index)
    local range = Settings.range
    if index >= range then
        SetValue(index-range, 1, nil)
        SetValue(index-range, 2, nil)

        SetValue(index-range+1, 1, H(index-range+1))
        SetValue(index-range+1, 2, L(index-range+1))
        SetRangeValue(1, index-range+2, index-1, nil)
        SetRangeValue(2, index-range+2, index-1, nil)

        --[[
        for i = index-range+2, index-1 do
            SetValue(i, 1, nil)
            SetValue(i, 2, nil)
        end
        --]]

        return H(index), L(index)
    else
        return nil, nil
    end
end


Таблица «Settings»

Таблица Settings содержит настройки индикатора и в скрипте объявляется как глобальная.

Список предопределённых полей с примерами:

  • STRING Name – строка с названием индикатора.
Settings.Name = "Two MA"
  • STRING line[n].Name – строка с именем линии с номером N. Индексы линий начинаются с «1».
Settings.line[1].Name = "First MA"
Settings.line[2].Name = "Second MA"
  • NUMBER line[n].Type – тип отображения линии. Задаются с помощью предопределенных констант: TYPE_LINE, TYPE_HISTOGRAM, TYPE_POINT, TYPE_DASHDOT, TYPE_DASH, TYPE_TRIANGLE_UP, TYPE_TRIANGLE_DOWN.
Settings.line[1].Type = TYPE_LINE --линии
Settings.line[2].Type = TYPE_HISTOGRAM --гистограммы
Settings.line[3].Type = TYPE_POINT --точки
Settings.line[4].Type = TYPE_DASHDOT --точка-тире
Settings.line[5].Type = TYPE_DASH --тире
Settings.line[6].Type = TYPE_TRIANGLE_UP --треугольник вверх
Settings.line[7].Type = TYPE_TRIANGLE_DOWN --треугольник вниз
  • NUMBER line[n].Width – толщина линии.
Settings.line[1].Width = 5
  • NUMBER line[n].Color – цвет линии. Результат выполнения функции RGB.
Settings.line[1].Color = RGB(255, 0, 0)
Settings.line[2].Color = RGB(0, 255, 0)

Поля в таблице Settings отображаются в диалоге настроек в разделе «Пользовательские настройки».

Типы пользовательских параметров: числа и строки.

Поля, значения которых не определены в скрипте, будут проинициализированы значениями по умолчанию.

Для параметров Settings.Name, Settings.line[n].Name (и любых других пользовательских строковых параметров) не рекомендуется использовать многострочную конструкцию. В случае использования многострочной конструкции, считается только первая строка, например, для параметра вида:
Settings.Name = [[Two

MA]]
названием индикатора станет строка «Two».

Пример диалога настроек с привязкой таблицы «Settings»

Изменение настроек в диалоге приводит к изменению значений полей таблицы Settings на работающей Lua-машине без изменений исходного кода.


Список функций, доступных из скрипта индикатора

  • getWorkingFolder – возвращает путь, по которому находится файл info.exe, исполняющий скрипт,
  • getScriptPath – возвращает путь, по которому находится запускаемый скрипт,
  • getNumberOf – возвращает количество записей в таблице «TableName»,
  • getItem – возвращает таблицу Lua, содержащую информацию о данных из строки с номером «Index» из таблицы с именем «TableName»,
  • getParamEx – получает значения всех параметров биржевой информации из Таблицы текущих торгов,
  • message – отображает сообщения в терминале QUIK,
  • isConnected – определяет состояние подключения клиентского места к серверу,
  • getTradeDate – получает дату торговой сессии,
  • getInfoParam – позволяет получить параметры для информационного окна (Связь/Информационное окно),
  • getClassSecurities – получает список кодов бумаг для списка классов, заданного списком кодов,
  • getClassInfo – получает информацию о классе,
  • getClassesList – получает список кодов классов, полученных с сервера в ходе сеанса связи,
  • getSecurityInfo – получает информацию по инструменту,
  • getQuoteLevel2 – получает стакан по указанному классу и бумаге,
  • getMoney – получает информацию по денежным лимитам,
  • getDepo – получает информацию по бумажным лимитам,
  • sendTransaction – функция для работы с заявками,
  • SearchItems – позволяет реализовать быструю выборку элементов из хранилища терминала и возвращает таблицу с индексами элементов, удовлетворяющих условию поиска,
  • getPortfolioInfo – получает значения параметров таблицы «Клиентский портфель»,
  • getBuySellInfo – получает параметры таблицы «Купить/Продать»,
  • getPortfolioInfoEx – получает значения параметров таблицы «Клиентский портфель» с учетом вида лимита,
  • getBuySellInfoEx – получает параметры таблицы «Купить/Продать» с учетом вида лимита,
  • getOrderByNumber –возвращает таблицу Lua, содержащую описание параметров Таблицы заявок и индекс заявки в хранилище терминала,
  • RGB – преобразовывает компоненты RGB (red, green, blue) в одно число,
  • AddLabel - добавляет метку с заданными параметрами,
  • DelLabel - удаляет метку с заданными параметрами,
  • DelAllLabels - удаляет все метки на диаграмме с указанным графиком,
  • GetLabelParams - получает параметры метки,
  • SetLabelParams - задает параметры для метки с указанным идентификатором,
  • SetValue - устанавливает указанное значение на выбранной линии определенной свечи индикатора,
  • GetValue - получает значение, установленное на выбранной линии указанной свечи индикатора,
  • SetRangeValue - устанавливает указанное значение на выбранной линии для определенного интервала индексов свечей индикатора.
  • isDarkTheme - позволяет получить информацию о том, в какой теме оформления интерфейса в настоящий момент работает терминал: стандартной или тёмной.


Загрузка и сохранение настроек индикатора в файл

При выборе пункта меню Система/Сохранить настройки в файл..., сохраняются все значения из таблицы Settings в wnd-файл.

При загрузке настроек из файла, модуль qchart получает от модуля qlua список индикаторов и автоматически создает индикатор по его имени.

Если загружаемый индикатор отсутствует в списке (например, удален файл или изменялось значение в поле «Settings.Name»), индикатор не отображается. Для того чтобы индикаторы не пропадали при изменении настроек в коде Lua, на графике отображается его легенда и доступен диалог редактирования настроек.


Потокобезопасные функции для работы с таблицами Lua

Одновременная работа с таблицами из функций обратного вызова скрипта и функции main() может приводить к неопределенным ситуациям. Для решения этой проблемы qlua.dll предоставляет потокобезопасные аналоги стандартных функций Lua.

Выполнение потокобезопасной функции блокирует выполнение кода в другом потоке до окончания работы функции.

Формат вызова потокобезопасной функции совпадает с форматом вызова аналогичной стандартной функции Lua.

В таблице представлены стандартные функции Lua и соответствующие им потокобезопасные аналоги:

Стандартная функция Lua | Потокобезопасная функция
concat | sconcat
remove | sremove
insert | sinsert
sort | ssort


Приложения

  • Приложение 1. Пример скрипта на языке Lua
  • Приложение 2. Примеры сортировки в таблице
  • Приложение 3. Примеры обработки событий для таблиц
  • Приложение 4. Примеры использования параметра «params» в функции «SearchItems»


Приложение 1. Пример скрипта на языке Lua

В данном приложении приведен пример скрипта на языке Lua для создания таблицы в Рабочем месте QUIK.

Файл table_object.lua:

dofile (getScriptPath() .. "\\quik_table_wrapper.lua")
dofile (getScriptPath() .. "\\ntime.lua")
stopped = false
function format1(data)
    return string.format("0x%08X", data)
end

function format2(data)
    return string.format("%06d", data)
end

function OnStop(s)
    stopped = true
end

function main()
    -- поворачивающиеся «палочки» в заголовке таблицы
    local palochki = {"-","\\", "|", "/"}
    -- создать экземпляр QTable
    t = QTable.new()
    if not t then
        message("error!", 3)
        return
    else
        message("table with id = " ..t.t_id .. " created", 1)
    end

    -- добавить два столбца с функциями форматирования
    -- в первом столбце – hex-значения, во втором – целые числа
    t:AddColumn("test1", QTABLE_INT_TYPE, 10,format1)
    t:AddColumn("test2", QTABLE_INT_TYPE, 10, format2)
    -- добавить столбцы без форматирования
    t:AddColumn("test3", QTABLE_CACHED_STRING_TYPE, 50)
    t:AddColumn("test4", QTABLE_TIME_TYPE, 50)
    t:AddColumn("test5", QTABLE_CACHED_STRING_TYPE, 50)

    t:SetCaption("Test")
    t:Show()
    i=1
    -- исполнять цикл, пока пользователь не остановит скрипт из диалога управления
    while not stopped do
        -- если таблица закрыта, то показать ее заново
        -- при этом все предыдущие данные очищаются
        if t:IsClosed() then
            t:Show()
        end
        -- на каждой итерации повернуть «палочку» на 45 градусов
        t:SetCaption("QLUA TABLE TEST " .. palochki[i%4 +1])
        -- метод добавит в таблицу новую строчку и вернет ее номер
        local row = t:AddLine()
        t:SetValue(row, "test1", row, i)
        t:SetValue(row, "test2", row, i)

        -- заполнить ячейку текущим заголовком таблицы
        -- тип столбца – строковый, поэтому последний параметр пропускается
        SetCell(t.t_id, row, 3, GetWindowCaption(t.t_id))

        _date = os.date("*t")
        -- 4-й столбец заполнить данными типа время (число в формате <ЧЧММСС>)
        -- Функция для строкового представления времени определена в файле ntime.lua
        -- Функция NiceTime возвращает строку
        SetCell(t.t_id, row, 4,
        NiceTime(_date) .. string.format(" (%02d:%02d:%02d)", _date.hour, _date.min, _date.sec),
        _date.hour*10000+_date.min*100 +_date.sec)
        -- пятый столбец имеет строковый тип и заполняется результатом выполнения функции NiceTime
        -- исходный код функции взят из виджета Conky Lua для Ubuntu
        SetCell(t.t_id, row, 5, NiceTime(_date))
        sleep(1000)
        i=i+1
    end
    message("finished")
end

Файл quik_table_wrapper.lua:

-- Перегрузка функции message с необязательным вторым параметром
old_message = message
function message(v, i)
    old_message(tostring(v), i or 1)
end

QTable ={}
QTable.__index = QTable

-- Создать и инициализировать экземпляр таблицы QTable
function QTable.new()
    local t_id = AllocTable()
    if t_id ~= nil then
        q_table = {}
        setmetatable(q_table, QTable)
        q_table.t_id=t_id
        q_table.caption = ""
        q_table.created = false
        q_table.curr_col=0
        -- таблица с описанием параметров столбцов
        q_table.columns={}
        return q_table
    else
        return nil
    end
end

function QTable:Show()
    -- отобразить в терминале окно с созданной таблицей
    CreateWindow(self.t_id)
    if self.caption ~="" then
        -- задать заголовок для окна
        SetWindowCaption(self.t_id, self.caption)
    end
    self.created = true
end
function QTable:IsClosed()
    -- если окно с таблицей закрыто, возвращает «true»
    return IsWindowClosed(self.t_id)
end

function QTable:delete()
    -- удалить таблицу
    DestroyTable(self.t_id)
end

function QTable:GetCaption()
    if IsWindowClosed(self.t_id) then
        return self.caption
    else
        -- возвращает строку, содержащую заголовок таблицы
        return GetWindowCaption(self.t_id)
    end
end

-- Задать заголовок таблицы
function QTable:SetCaption(s)
    self.caption = s
    if not IsWindowClosed(self.t_id) then
        res = SetWindowCaption(self.t_id, tostring(s))
    end
end

-- Добавить описание столбца <name> типа <c_type> в таблицу
-- <ff> – функция форматирования данных для отображения
function QTable:AddColumn(name, c_type, width, ff )
    local col_desc={}
    self.curr_col=self.curr_col+1
    col_desc.c_type = c_type
    col_desc.format_function = ff
    col_desc.id = self.curr_col
    self.columns[name] = col_desc
    -- <name> используется в качестве заголовка таблицы
    AddColumn(self.t_id, self.curr_col, name, true, c_type, width)
end

function QTable:Clear()
    -- очистить таблицу
    Clear(self.t_id)
end

-- Установить значение в ячейке
function QTable:SetValue(row, col_name, data)
    local col_ind = self.columns[col_name].id or nil
    if col_ind == nil then
        return false
    end
    -- если для столбца задана функция форматирования, то она используется
    local ff = self.columns[col_name].format_function

    if type(ff) == "function" then
        -- в качестве строкового представления используется
        -- результат выполнения функции форматирования
        SetCell(self.t_id, row, col_ind, ff(data), data)
        return true
    else
        SetCell(self.t_id, row, col_ind, tostring(data), data)
    end
end

function QTable:AddLine()
    -- добавляет в конец таблицы пустую строчку и возвращает ее номер
    return InsertRow(self.t_id, -1)
end

function QTable:GetSize()
    -- возвращает размер таблицы
    return GetTableSize(self.t_id)
end

-- Получить данные из ячейки по номеру строки и имени столбца
function QTable:GetValue(row, name)
    local t={}
    local col_ind = self.columns[name].id
    if col_ind == nil then
        return nil
    end
    t = GetCell(self.t_id, row, col_ind)
    return t
end

-- Задать координаты окна
function QTable:SetPosition(x, y, dx, dy)
    return SetWindowPos(self.t_id, x, y, dx, dy)
end

-- Функция возвращает координаты окна
function QTable:GetPosition()
    top, left, bottom, right = GetWindowRect(self.t_id)
    return top, left, right-left, bottom-top
end

Файл ntime.lua:

words = {"one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine "}
levels = {"thousand ", "million ", "billion ", "trillion ", "quadrillion ", "quintillion ", "sextillion ", "septillion ", "octillion ", [0] = ""}
iwords = {"ten ", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "}
twords = {"eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "}

function digits(n)
    local i, ret = -1
    return function()
    i, ret = i + 1, n % 10
    if n > 0 then
    n = math.floor(n / 10)
    return i, ret
    end
    end
end

level = false
function getname(pos, dig)
    level = level or pos % 3 == 0
    if(dig == 0) then return "" end
    local name = (pos % 3 == 1 and iwords[dig] or words[dig]) .. (pos % 3 == 2 and "hundred " or "")
    if(level) then name, level = name .. levels[math.floor(pos / 3)], false end
    return name
end

function numberToWord(number)
    if(number == 0) then return "zero" end
    vword = ""
    for i, v in digits(number) do
    vword = getname(i, v) .. vword
    end

    for i, v in ipairs(words) do
    vword = vword:gsub("ty " .. v, "ty-" .. v)
    vword = vword:gsub("ten " .. v, twords[i])
    end
    return vword
end

function _Time(t)
    hour = t.hour
    minute = t.min
    hour = hour % 12
    if(hour == 0) then
    hour, nextHourWord = 12, "one "
    else
    nextHourWord = numberToWord(hour+1)
    end
    hourWord = numberToWord(hour)
    if(minute == 0 ) then
    return hourWord .. "o'clock"
    elseif(minute == 30) then
    return "half past " .. hourWord
    elseif(minute == 15) then
    return "a quarter past " .. hourWord
    elseif(minute == 45) then
    return "a quarter to " .. nextHourWord
    else
    if(minute < 30) then
    return numberToWord(minute) .. "past " .. hourWord
    else
    return numberToWord(60-minute) .. "to " .. nextHourWord
    end
    end
end

function _Seconds(s)
    return numberToWord(s)
end

function NiceTime(t)
    return _Time(t) .."and ".. _Seconds(t.sec) .. "second"
end

В результате выполнения скрипта в Рабочем месте QUIK создается таблица вида:


Приложение 2. Примеры сортировки в таблицах

Примеры сортировки в столбце таблицы, содержащем данные числового (столбец «test4») и строкового (столбец «test5») типа:


Приложение 3. Примеры обработки событий для таблиц

Пример обработки событий мыши и клавиатуры

stopped = false
t_id = nil

old_message = message
local fmt = string.format
function message(v, t)
                 t= t or 1
                 old_message(tostring(v), t)
end

function OnStop(s)
    stopped = true
    if t_id~= nil then
                DestroyTable(t_id)
    end
end
event_table = {
    [QTABLE_LBUTTONDOWN] = "Нажали левую кнопку мыши",
    [QTABLE_RBUTTONDOWN] = "Нажали правую кнопку мыши",
    [QTABLE_LBUTTONDBLCLK] = "Левый даблклик",
    [QTABLE_RBUTTONDBLCLK]  = "Правый даблклик",
    [QTABLE_SELCHANGED] ="Изменилась строка",
    [QTABLE_CHAR] = "Символьная клавиша",
    [QTABLE_VKEY] = "Еще какая-то клавиша",
    [QTABLE_CONTEXTMENU] = "Контекстное меню",
    [QTABLE_MBUTTONDOWN] = "Нажали на колесико мыши",
    [QTABLE_MBUTTONDBLCLK] = "Даблклик колесом",
    [QTABLE_LBUTTONUP] = "Отпустили левую кнопку мыши",
    [QTABLE_RBUTTONUP] = "Отпустили правую кнопку мыши",
    [QTABLE_CLOSE] = "Закрыли таблицу"
    }
function event_callback_str(t_id, msg, par1, par2)
    local str = fmt("%s, par1 = %d, par2 = %d", event_table[msg], par1, par2)
    SetWindowCaption(t_id, str)
    message(str)
end

local p_row = -1
local p_col = -1
function event_callback_color(t_id, msg, par1, par2)
    if par1==3 and par2 == 1 then
               os.exit()
    end
    if msg == QTABLE_LBUTTONDOWN then
                if p_col ~= -1 and p_col ~= -1 then
                                               SetColor(t_id, p_row, p_col, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR)
                end
                SetColor(t_id, par1, par2, RGB(240, 128, 128), QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR)
                 p_row = par1
                 p_col = par2
    end
end

function main()

    data = {
                                      {"1", 2, 20130530},
                     {"4", 5, 20130529},
                      {"7", 8, 20130528}
                   }

         t_id = AllocTable()
         message (t_id)
         AddColumn(t_id, 1, "строка", true, QTABLE_CACHED_STRING_TYPE, 10)
         AddColumn(t_id, 2, "число", true, QTABLE_INT_TYPE, 10)
         AddColumn(t_id, 3, "дата", true, QTABLE_DATE_TYPE, 10)
        CreateWindow(t_id)

         for _, v in pairs(data) do
      row = InsertRow(t_id, -1)
      SetCell(t_id, row, 1, v[1])
      SetCell(t_id, row, 2, string.format("value = %d",v[2]), v[2])
      SetCell(t_id, row, 3, string.format("%04d - %02d - %02d",v[3]/10000, (v[3]%10000)/100, v[3]%100), v[3])
         end
    SetWindowCaption(t_id, "EXAMPLE")
    SetTableNotificationCallback(t_id, event_callback_str)
    sleep(5000)
    SetTableNotificationCallback(t_id, event_callback_color)
    SetCell(t_id, 3, 1, "DO NOT CLICK ME")
    SetTableNotificationCallback(t_id, dummy)

    while not stopped do
           sleep(100)
    end
end

Пример реализации игры «Крестики-нолики»

--[[ TIC-TAC-TOE
by Evan Hahn (http://evanhahn.com/how-to-code-tic-tac-toe-and-a-lua-implementation/
--]]

----------------------------------------------
-- Configuration (change this if you wish!) --
----------------------------------------------
t_id=nil --grid
-- Are they playable by human or computer-controlled?
PLAYER_1_HUMAN = true
PLAYER_2_HUMAN = false

-- Board size
BOARD_RANK = 3	-- The board will be this in both dimensions.

-- Display stuff
PLAYER_1 = "[x]"	-- Player 1 is represented by this. Player 1 goes first.
PLAYER_2 = "[o]"	-- Player 2 is represented by this.
EMPTY_SPACE = "[ ]"	-- An empty space is displayed like this.
DISPLAY_HORIZONTAL_SEPARATOR = "-"	-- Horizontal lines look like this.
DISPLAY_VERTICAL_SEPARATOR = " | "	-- Vertical lines look like this

--[[ ###################################################################
     ####   Don't mess with things below here unless you are brave  ####
     ################################################################### --]]

------------------------
-- More configuration --
------------------------

MAX_BOARD_RANK = 100	-- Won't run above this number. Prevents crashes.

-------------------------------------------------------
-- Don't run if the board is larger than the maximum --
-------------------------------------------------------

if BOARD_RANK > MAX_BOARD_RANK then os.exit(0) end

-----------------------------
-- Create board (2D table) --
-----------------------------

space = {}
for i = 0, (BOARD_RANK - 1) do
    space[i] = {}
    for j = 0, (BOARD_RANK - 1) do
        space[i][j] = nil	-- start each space with nil
    end
end

---------------------
-- Board functions --
---------------------

-- get the piece at a given spot
function getPiece(x, y)
    return space[x][y]
end

-- get the piece at a given spot; if nil, return " "
-- this is useful for output.
function getPieceNoNil(x, y)
    if getPiece(x, y) ~= nil then
        return getPiece(x, y)
    else
        return EMPTY_SPACE
    end
end

-- is that space empty?
function isEmpty(x, y)
    if getPiece(x, y) == nil then
        return true
    else
        return false
    end
end

-- place a piece there, but make sure nothing is there already.
-- if you can't play there, return false.
function placePiece(x, y, piece)
    if isEmpty(x, y) == true then
        space[x][y] = piece
        return true
    else
        return false
    end
end

-- is the game over?
function isGameOver()
    if checkWin() == false then	-- if there is no win...
        for i = 0, (BOARD_RANK - 1) do	-- is the board empty?
            for j = 0, (BOARD_RANK - 1) do
                if isEmpty(i, j) == true then return false end
            end
        end
        return true
    else	-- there is a win; the game is over
        return true
    end
end

-- create a string made up of a certain number of smaller strings
-- this is useful for the display.
function repeatString(to_repeat, amount)
    if amount <= 0 then return "" end
    local to_return = ""
    for i = 1, amount do
        to_return = to_return .. to_repeat
    end
    return to_return
end

-- display the board.
-- this uses the configuration file pretty much entirely.
function displayBoard()
    for i = (BOARD_RANK - 1), 0, -1 do
        for j = 0, (BOARD_RANK - 1) do	-- generate that row
            local piece = getPieceNoNil(j, i)
            SetCell(t_id, i+1, j+1, piece)
        end
    end
end

-------------------------------------------------
-- Create regions (I admit this is a bit ugly) --
-------------------------------------------------

-- declare region and a number to increment
region = {}
region_number = 0

-- vertical
for i = 0, (BOARD_RANK - 1) do
    region[region_number] = {}
    for j = 0, (BOARD_RANK - 1) do
        region[region_number][j] = {}
        region[region_number][j]["x"] = i
        region[region_number][j]["y"] = j
    end
    region_number = region_number + 1
end

-- horizontal
for i = 0, (BOARD_RANK - 1) do
    region[region_number] = {}
    for j = 0, (BOARD_RANK - 1) do
        region[region_number][j] = {}
        region[region_number][j]["x"] = j
        region[region_number][j]["y"] = i
    end
    region_number = region_number + 1
end

-- diagonal, bottom-left to top-right
region[region_number] = {}
for i = 0, (BOARD_RANK - 1) do
    region[region_number][i] = {}
    region[region_number][i]["x"] = i
    region[region_number][i]["y"] = i
end
region_number = region_number + 1

-- diagonal, top-left to bottom-right
region[region_number] = {}
for i = (BOARD_RANK - 1), 0, -1 do
    region[region_number][i] = {}
    region[region_number][i]["x"] = BOARD_RANK - i - 1
    region[region_number][i]["y"] = i
end
region_number = region_number + 1

----------------------
-- Region functions --
----------------------

-- get a region
function getRegion(number)
    return region[number]
end

-- check for a win in a particular region.
-- returns a number representation of the region. occurrences of player 1
-- add 1, occurrences of player 2 subtract 1. so if there are two X pieces,
-- it will return 2. one O will return -1.
function checkWinInRegion(number)
    local to_return = 0
    for i, v in pairs(getRegion(number)) do
        local piece = getPiece(v["x"], v["y"])
        if piece == PLAYER_1 then to_return = to_return + 1 end
        if piece == PLAYER_2 then to_return = to_return - 1 end
    end
    return to_return
end

-- check for a win in every region.
-- returns false if no winner.
-- returns the winner if there is one.
function checkWin()
    for i in pairs(region) do
        local win = checkWinInRegion(i)
        if math.abs(win) == BOARD_RANK then
            if win == math.abs(win) then
                return PLAYER_1
            else
                return PLAYER_2
            end
        end
    end
    return false
end

------------------
-- UI Functions --
------------------

-- human play
function humanPlay(piece)
    message("Human turn")
    displayBoard()
    local placed = false
    while placed == false do	-- loop until they play correctly
        sleep(100)
        if g_X ~= -1 and g_Y ~=-1 then
            local x = tonumber(g_Y)-1
            local y = tonumber(g_X)-1
            g_X = -1
            g_Y= -1
            message("clicked in " .. x .. " and " .. y)
            placed = placePiece(x, y, piece)
            if placed == false then
                message("I'm afraid you can't play there!")
            end
        end
    end
    displayBoard()

end

-- AI play
function AIPlay(piece)

    -- am I negative or positive?
    local me = 0
    if piece == PLAYER_1 then me = 1 end
    if piece == PLAYER_2 then me = -1 end

    -- look for a region in which I can win
    for i in pairs(region) do
        local win = checkWinInRegion(i)
        if win == ((BOARD_RANK - 1) * me) then
            for j, v in pairs(getRegion(i)) do
                if isEmpty(v["x"], v["y"]) == true then
                    placePiece(v["x"], v["y"], piece)
                    return
                end
            end
        end
    end

    -- look for a region in which I can block
    for i in pairs(region) do
        local win = checkWinInRegion(i)
        if win == ((BOARD_RANK - 1) * (me * -1)) then
            for j, v in pairs(getRegion(i)) do
                if isEmpty(v["x"], v["y"]) == true then
                    placePiece(v["x"], v["y"], piece)
                    return
                end
            end
        end
    end

    -- play first empty space, if no better option
    for i = 0, (BOARD_RANK - 1) do
        for j = 0, (BOARD_RANK - 1) do
            if placePiece(i, j, piece) ~= false then return end
        end
    end

end
g_X=-1
g_Y=-1
function event_callback(t_id, msg, par1, par2)
    if msg == QTABLE_LBUTTONDOWN then
        g_X = par1
        g_Y = par2
    end
end

old_message = message
local fmt = string.format
function message(v, t)
    t= t or 1
    old_message(tostring(v), t)
end

function main()
    t_id = AllocTable()
    AddColumn(t_id, 1, "", true, QTABLE_CACHED_STRING_TYPE, 5)
    AddColumn(t_id, 2, "", true, QTABLE_CACHED_STRING_TYPE, 5)
    AddColumn(t_id, 3, "", true, QTABLE_CACHED_STRING_TYPE, 5)
    CreateWindow(t_id)
    for i=1, 3 do
        row = InsertRow(t_id, -1)
        SetCell(t_id, row, 1, "[ ]")
        SetCell(t_id, row, 2, "[ ]")
        SetCell(t_id, row, 3, "[ ]")
    end
    SetTableNotificationCallback(t_id, event_callback)
    message("Welcome to Tic-Tac-Toe!")

-- play the game until someone wins
    while true do
        sleep(100)
    -- break if the game is won
        if isGameOver() == true then
         break
        end
    -- player 1
        if PLAYER_1_HUMAN == true then
            humanPlay(PLAYER_1)
        else
            AIPlay(PLAYER_1)
        end

        if isGameOver() == true then
            break
        end

        if PLAYER_2_HUMAN == true then
            humanPlay(PLAYER_2)
        else
            AIPlay(PLAYER_2)
        end
    end

-- show the final board
    displayBoard()

-- write who won, or if there is a tie
    win = checkWin()
    if win == false then
        message("Tie game!\n")
    else
        message(win)
        message(" wins!\n")
    end
end


Приложение 4. Примеры использования параметра «params» в функции «SearchItems»

Пример 1

Если не задан последний параметр в функции SearchItems, то в функцию обратного вызова fn передается обезличенная сделка в виде таблицы Lua:

function fn(t)
    if t.qty == 103 then
        return true
    else
        return false
    end
end
t1 = SearchItems("all_trades", 0, getNumberOf("all_trades")-1, fn)

Пример 2

В случае, если список полей задан, в функцию fn передаются параметры в том порядке, в котором они перечислены в списке параметров. В примере par1 содержит поле qty, par2 – class_code, par3 – sec_code.

Если перечисленные параметры отсутствуют в списке полей элемента, то в качестве параметра передается nil.

function fn(par1, par2, par3)
    if par1 ==  103 and par2 == "SPBFUT" and par3 == "RIM3" then
        return true
    else
        return false
    end
end
t1 = SearchItems("all_trades", 0, getNumberOf("all_trades")-1, fn, "qty,class_code, sec_code")

Пример 3

В примере par1 примет значение nil, par2 – class_code, par3 – sec_code:

function fn(par1, par2, par3)
    if par1 ==  103 and par2 == "SPBFUT" and par3 == "RIM3" then
        return true
    else
        return false
    end
end
t1 = SearchItems("all_trades", 0, getNumberOf("all_trades")-1, fn, "test,class_code, sec_code")

Пример 4

Элементы вложенных таблиц передаются через точку, например:

function fn(par1, par2)
    if par1 ==  17 and par2 == 5 then
        return true
    else
        return false
    end
end
t1 = SearchItems("all_trades", 0, getNumberOf("all_trades")-1, fn, "datetime.hour, datetime.min")