Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Программирование

Алгоритмический язык QPILE для программирования торговых роботов для QUIK.

Торговые роботы могут быть написаны на определенном языке, подобно программному коду. QPILE является одним из них в статье будет рассмотрен этот язык, проведено сравнение языков QPILE и LUA, а также приведены примеры роботов на этом языке.

Общая информация про QPILE

QPILE – аббревиатура, расшифровываемая как QUIK Programmable Interface and Logic Environment.

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

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

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

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

При работе с таблицами QUIK таблицы на QPILE имеют стандартные функции. QUIK в рабочем месте оснащен отладчиком кода QPILE.

Торговый терминал Quik: функционал, подключение, настройка

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

Таблицы на QPILE можно редактировать, распечатать, скопировать, экспортировать по ODBC и DDE-серверу.

Исходными выступают данные из таблиц QUIK:

  • сделок, в т. ч для исполнения и обезличенных;
  • заявок, включая стоп-заявки, на внебиржевые сделки и заявки – отчеты на сделки РПС;
  • «клиентский портфель», «купить/продать»
  • данные из позиций участника по деньгам, торговым счетам, инструмента.

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

Работа с таблицей

Чтобы загрузить код программы, нужно выбрать меню сервисы, затем QPILE скрипты. Также можно использовать комбинацию Ctrl+F11. После нужно кликнуть «Добавить» и выбрать нужный файл. Он имеет расширение .qpl, а его имя отобразится в списке «Доступные скрипты».

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

В случае наличия в программе ошибки система сделает уведомление в «Окне сообщений», которое будет содержать имя дефектного файла и номер строки с ошибкой. Если в файле сбоев не обнаружено, в полях будут указаны следующие данные:

  • имя таблицы;
  • число столбцов и клиентов;
  • перечень идентификаторов и клиентов;
  • список параметров и исходный код файла.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Кнопка «Загрузить локально» позволит получить таблицу из файла, а «Загрузить на сервер» — отправить программу на сервер, чтобы все пользователи смогли получить к ней доступ.

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

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

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

Конструкции QPILE

Типы данных

  • String – строковый.
  • Double – число в плавающей точкой.
  • Collection – коллекция.
  • Map – ассоциативный массив — последовательность пар, позволяющая получить информацию по ключу.

Выражения

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

Функции

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

Первая градация:

  1. Математические функции, позволяющие вернуть значение синуса, косинуса, тангенса, котангенса аргумента, вычислить экспонент от аргумента, сгенерировать случайное число и т.д.
  2. Общие команды: NEW_GLOBAL для инициализации глобальной переменной и MESSAGE для открытия сообщений.

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

  • Коллекциями объектов (Collection). Позволяют создать новую коллекцию, возвратить нужное количество элементов, заменить или вставить нужные значения.
  • Ассоциативными массивами (MAP). Помогут создать и управлять массивом.
  • Файлами — работа с текстовыми файлами, ведение log-журнала программы. Название файла могут содержать путь к нему.
  • Строками.
  • Графиками. Функции GET_CANDLE для обращения к данным «свечек» и GET_CANDLE EX для возврата ассоциативного массива.
  • Заявками. Создание заявок и их отправка в торговую систему.
  • Метками. Их построение и установка на график. Добавление, удаление одной или всех меток, получение и установка параметров для определенной метки.

Также есть функции для:

  1. Для обращения к строкам произвольных таблиц QUIK и спискам доступных параметров. Доступ к данным таблицы рабочего места. К ним относятся GET_ITEM для возврата MAP и GET_NUMBER_OF для возврата количества записей.
  2. Для работы с программируемой таблицей. Эти команды работают с таблицей OWN. Она доступна для чтения стандартными функциями из предыдущего пункта и данными функциями. В эту группу входят команды добавления, модификации и удаления строки с индексом, полного очищения таблицы OWN.

Для получения значений используют:

  1. Таблицы текущих торгов. Получение параметров биржевой информации с помощью команд GET_PARAM (_EX).
  2. Окна котировок. Получение значений котировок инструментов.
  3. Таблицы позиций по инструментам и деньгам. Получение данных по клиенту, фирме, инструменту, счету депо по коду.

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

Отладка программ

Пошаговый контроль за работой программы осуществляется в окне «Отладка». Оно открывается из контекстного меню «Начать расчет в режиме отладки». Также его можно открыть с помощью команды breakpoint(), при этом строка программы будет выделена красным цветом.

Окно содержит поля с кодом программы и значениями переменных. Внизу окна расположены кнопки «Следующий шаг», «Продолжить выполнение», «Остановить расчет».

Нажатие F5 продолжит выполнение программы, комбинация Shift+F5 остановит отладку, клавиша F10 направит на следующую строку.

QPILE или LUA?

LUA – новый язык программирования для создания торговых роботов. Как и QPILE, он имплементирован в терминал QUIK.

Программирование на языке Lua, торговые роботы и скрипты для трейдинга

На сайте, посвященном разработке торговых роботов для трейдинга, приводятся преимущества языка LUA перед QPILE.

Так, он может функционировать в виде не скомпилированного скрипта и байт-кода, оснащен инструментами разработчика и механизмами объектно-ориентированного программирования.

К программам на LUA можно подключить объекты, выполненные на других языках программирования. На LUA представлены 8 типов данных, в том числе метатаблицы.

Язык LUA многопоточен, отличается большим быстродействием, а транзакции и события терминала проходят асинхронно. LUA более распространен, нежели QPILE, для него написано множество расширений.

Язык QPILE в настоящее признан устаревшим. Специалисты на форумах рекомендуют применять LUA. Хотя полезные и эффективные программы по-прежнему используются.

Тем не менее, язык QPILE отличается простотой, по сравнению с LUA, поэтому если Вы не обладаете опытом в программировании, лучше выбрать QPILE. На этом языке можно написать простого робота, если не требуется выполнять сложные вычисления.

Как создать торгового робота на QPILE?

Чтобы создать торгового советника, понадобятся программы:

  1. ИТС Quik.
  2. Редактор кода Notepad++.
  3. Руководство по QPILE.
  4. XML-плагин для обнаружения кода в Notepad++.

Загрузите и установите эти программы. Подключите синтаксис языка, поместив userDefineLang.xml в путь C:\Users\User\ AppData\Roaming\Notepad++\

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

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

В нужном направлении открывается позиция, если цена инструмента достигает максимального или минимального значения за период. При получении сигнала на short позиция long автоматически закрывается.

Робот использует инструмент GAZP, величина тайм-фрейма задана 1 мин. Глубина измерения hi-low задана в количестве 5 свечей. Для входа в Long задано правило и пересечении текущей цены максимального значения за период. В Short робот зайдет, если текущая цена пересечет минимальное значение за эти 5 свечей.

Напишите в Notepad++ блок кода с основными настройками и указанием на серверные дату и время. Этот код представлен на картинке ниже.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Первые 4 строки кода образуют заголовок программы. Между строками 6 и 44 расположено тело программы, в котором содержится содержание робота.

На строках 7 – 12 расположены пользовательские настройки, включающие в себя коды инструмента, группы и клиента, номер счета на ММВБ. В ходе выполнения программы эти значения неизменны.

Строки 13 – 16 – начальные значения переменных. Они будут обнуляться при каждом проходе итерации.

Строки 17 – 21 содержат указание на применение серверных даты и времени. Эти данные передаются в функцию DATETIME и преобразуются в текстовый формат.

Строки 22 – 29 отправляют полученные данные в таблицу.

Код нужно сохранить и задать расширение qpl.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Откройте программу в QUIK, нажав Ctrl+F10 и выбрав созданный qpl-файл. Комбинацией Ctrl+F11 откройте окно «Работа с портфелями» и установите период расчета портфеля 5 мин. Нажмите Ctrl+F12, чтобы установить столбцы, которые следует отобразить в таблице. На картинке виден результат работы робота.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Добавим в нашу программу еще несколько функций и условий.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Блок «Пользовательские настройки» дополнен переменными NUMBER и INTERVAL, которые будут задействованы в функции получения N последних баров. Функция DATETIME устанавливает серверные дату и время, а из нее вызваны функции текущих даты и времени CURDATE и CURTIME. Текущее время преобразуется в число в строке 24.

Строка 26 устанавливает время работы алгоритма с 10:00:01 до 18:40:00 МСК.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Чаще всего, индикаторы, осцилляторы, статистические расчеты рассчитываются по N последним свечам графика. В QPILE нет функции забора количества свечей N периодов назад как таковой, но есть функция GET_CANDLE, которая обращается к свечам на графике по дате и времени в текстовом формате.

В нашем коде представлена функция получения N последних баров OHLC(). Она создает коллекцию с параметрами последних свечей, вложенными в список COLLECTION.

Программа проверяет значение INTERVAL, и если оно не входит в интервал 0… 60, выводится сообщение о несоответствии значения допустимому диапазону.

MAP-коллекция со свечами создается в строке 88. Цикл FOR с опросом графика на необходимую глубину с шагом INTERVAL от новой к старой свече.

В строке 90, после объявления цикла, робот возвращается на интервал назад.

Когда Вы получите свечу с помощью GET_CANDLE, поместите ее в коллекцию BARLIST с помощью функции INSERT_COLLECTION_TEAM.

BARLIST в итоге работы команды OHLC() пополняется последними свечами с графика инструмента в количестве NUMBER. Количество элементов коллекции запрашивается командой GET_COLLECTION_COUNT () и сообщается переменной BARCOUNT.

Серверные дата, время, значения переменных INSTRUMENT и BARCOUNT сообщаются функцией SET_VALUE () в OUTPUT. Этот массив создан командой CREATE_MAP ().

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

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Торговые роботы на QPILE – готовые решения

Робот на скользящей средней

Демонстрационный робот, не подходящий для реального трейдинга.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Робот включает в себя 5 параметров. Значения идентификаторов DATE, TIME, PRICE заданы на уровне 30. Для идентификаторов MOVING и TP задана нулевая точность.

Код робота на скользящей средней писанного под QPILE:

Калькулятор позиции Н. Морошкина

Программа для расчета уровней максимально допустимой просадки и цели на длинной и короткой позициях по текущим ценам ask и bid.

Уровни рассчитываются для 2 значений объема входа в позицию. Робот находит допустимый объем позиции при назначении стоп-приказа в одном шаге от цены открытия с расчетом открытия позиции в сторону роста бара.

В окно терминала вносятся найденные уровни, которые впоследствии отражаются в графике цены.

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

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Фильтр объемов

Робот-портфель для вычисления среднего арифметического значения объема для свечей и сравнения его со средним произведением на коэффициент X. Корректно работает с построенными графиками в выбранном отрезке времени.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Греки опционов

Портфель для вычисления и отображения «греков» опционов. Отличается от метода Блэка-Шоуэрса.

Алгоритмический язык QPILE для программирования торговых роботов для QUIK

Торговый робот TRIX для QUIK

Программа основана на Индикаторе TRIX. При закрытии индикатора выше нулевой линии, заданного уровня робот принимает позицию Long. Позиция закрывается по Take Profit, Stop Loss или трейлинг-стопу.

М4 Препроцессор

Программа для работы с QPILE и Lua. Включает в себя архивы с выполняемыми файлами, документацией и DLL-файлами с разбором регулярных выражений. Чтобы задействовать программу, нужно распаковать выполняемые файлы и поместить regexp2 в путь C:\Windows.

Уроки по на QPILE для QUIK:

Установка скрипта на QPILE в терминале Quik:

Раздел на github, который описывает применение алгоритмического языка QPILE, встроенного в рабочее место системы QUIK находится по ссылке — https://euvgub.github.io/quik_user_manual/ch8.html.

QPILE – язык устаревший, но довольно простой и доступный даже начинающим трейдерам. На нем продолжают работать торговые роботы и программы, зарекомендовавшие себя в течение длительного времени. Однако, для более сложных задач лучше использовать LUA.

Если вам понравилась статья, то подписывайтесь на мой телеграм канал.

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

  1. Владимир Геннадьевич Евсеев

    Ответить