На данный момент мы рассмотрели основные возможности языка Lua для создания торговых роботов. Чтобы скрипт на языке Lua мог взаимодействовать с терминалом QUIK, в терминале существует интерпретатор языка Lua под названием QLua. QLua это набор функций, при вызове которых происходит определенное действие. Функции интерпретатора QLua вызываются с определенными параметрами, и в зависимости от параметров, указанных при вызове, совершают определенное действие или возвращают определенное значение. Все функции интерпретатора QLua прописаны в документации по языку Lua в QUIK, файл документации можно скачать на официальном сайте QUIK www.arqatech.com или найти в документах данного курса.

Работа торгового робота заключается в следующем. С помощью интерпретатора QLua робот получает необходимую информацию из терминала QUIK, далее робот при помощи языка Lua обрабатывает полученные значения и в зависимости от результата обработки отправляет в терминал QUIK поручение, на совершение сделки, используя интерпретатор QLua. Как обрабатывать информацию при помощи языка Lua нам уже известно. Теперь разберемся с получением информации из терминала QUIK. Для изучения функций получения данных из терминала QUIK будем использовать фьючерс на индекс RTS – RIZ7.

Основной код скрипта для терминала QUIK пишется в специальной функции под названием main(). Функция вызывается терминалом QUIK, и выполняется в отдельном потоке, не связанным с потоком выполнения программы терминала QUIK. Скрипт считается запущенным, пока выполняется функция main(), как только выполнение функции main() заканчивается, скрипт считается остановленным.

Записывается функция main(), как обычная функция:

function main()

end

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

Для начала создадим окно, в программе QUIK, в которое, будем выводить необходимые значения инструмента. Окно будет в виде таблицы с одной строкой и несколькими столбцами. Для создания окна в виде таблицы используется функция AllocTable(), данная функция описывает структуру таблицы и возвращает числовой идентификатор таблицы, по данному идентификатору мы будем обращаться к данной таблице, чтобы внести в нее изменения.

Создадим новый скрипт с именем «014 Пользовательские таблицы.lua»

Пропишем функцию main(). Создадим переменную с именем TableRTS и поместим в нее числовой идентификатор, используя функцию AllocTable(). Функция AllocTable() возвращает числовой идентификатор таблицы. С помощью числового идентификатора мы будем заполнять и редактировать нашу таблицу.

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

Назовем их следующим образом:

Дата – Дата.
Время – Время.
Код торгового инструмента — Код.
Цена последней сделки – Цена.
Гарантийное обеспечение – ГО.
Плановые чистые позиции – Лимит, руб.
Количество контрактов, которое мы можем купить – Контракты.
Текущая позиция – Позиция.

Для добавления колонок в окно таблицы используется функция AddColumn() принимающая на вход следующие обязательные значения:

1.Идентификатор таблицы (в данном случае TableRTS).
2.Код параметра выводимого в колонке (задается вручную, в данном примере коды будут начинаться с 1 и заканчиваться на 8, поскольку в таблице будет восемь колонок).
3.Название колонки (первая колонка будет называться «Код», далее по списку).
4.Не используемый, но обязательный параметр – его значение всегда будет true.
5.Тип данных содержащихся в колонке. Данный параметр проставляется в зависимости от вида данных отображаемых в колонке и может принимать несколько значений, мы будем использовать следующие значения:
— QTABLE_INT_TYPE – целое число;
— QTABLE_DOUBLE_TYPE – число с плавающей точкой;
— QTABLE_STRING_TYPE – строковое значение;
— QTABLE_DATE_TYPE – дата;
— QTABLE_TIME_TYPE – время.
6.Ширина колонки в условных единицах – подбирается методом проб.

Добавим строки.

Структура окна таблицы создана, теперь для отображения окна таблицы в терминале QUIK создадим таблицу с помощью функции CreateWindow() (создать окно), передадим в функцию идентификатор окна таблицы TableRTS.

Чтобы добавить заголовок окну таблицы TableRTS используем функцию SetWindowCaption (установить заголовок окна), передадим в функцию идентификатор окна таблицы и строковое название.

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

Верхний левый угол будет иметь координаты 0 по ширине окна QUIK и 10 по высоте окна QUIK, нижний правый угол будет иметь координаты 600 по ширине окна QUIK и 70 по высоте окна QUIK. Координаты окна задаются с помощью функции SetWindowPos(), в которую передается идентификатор окна таблицы TableRTS и координаты углов.

Это ознакомительная часть курса, что бы просмотреть полный курс, пожалуйста оплатите подписку, подписка действует 2 года. Помимо доступа к полному тексту курса, предоставляются все коды скриптов и вспомогательные файлы. Первые три раздела предоставляются бесплатно в полном объеме. Всем кто ранее покупал коды скриптов доступ будет предоставлен бесплатно, пожалуйста пришлите запрос с Email на который Вам были направлены коды.