Алгоритмічна мова QPILE для програмування торгівельних роботів для QUIK.
Торгові роботи можуть бути написані певною мовою, подібно до програмного коду. QPILE є одним з них у статті буде розглянута ця мова, проведено порівняння мов QPILE та
LUA , а також наведено приклади роботів цією мовою.
- Загальна інформація про QPILE
- Робота з таблицею
- Конструкції QPILE
- Типи даних
- Вирази
- Функції
- Налагодження програм
- QPILE чи LUA?
- Як створити торгового робота на QPILE?
- Торгові роботи на QPILE – готові рішення
- Робот на ковзній середній
- Калькулятор позиції Н. Морошкіна
- Фільтр обсягів
- Греки опціонів
- Торговий робот TRIX для QUIK
- М4 Препроцесор
Загальна інформація про QPILE
QPILE – абревіатура, що розшифровується як QUIK Programmable Interface and Logic Environment.
Це ряд команд, які інтерпретуються робочим місцем QUIK. Застосовується він головним чином розрахунку ціни портфелів цінних паперів. Мова використовується також для:
- динамічного перерахунку ціни активів клієнтів на робочому столі брокера та їх портфелях. У разі перераховується ще й сумарна їх вартість;
- знаходження відсутніх показників за власними алгоритмами та даними для маржинального кредитування;
- розробки необхідної торгової стратегії.
Мовою описується структура таблиці: призначення стовпців і рядків, формули. В останніх для обчислення можуть використовуватись математичні операції, змінні, дані з інших таблиць. Завантажений із сервера QUIK або з диска користувача код програми проходить обробку інтерпретатором мови, що обчислює значення у формулах. Таблиці однієї програми мають одне джерело даних, але розрахунки не дублюються і впливають ефективність системи. Працюючи з таблицями QUIK таблиці на QPILE мають стандартні функції. QUIK у робочому місці оснащений налагоджувачем коду QPILE. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm Мова дозволить описати нові таблиці із заданою структурою, виділити кольором осередки з певними значеннями, обчислити поля на основі математичних та логічних виразів. Користувач отримає сповіщення у вигляді звукового сигналу або текстового повідомлення. Таблиці на QPILE можна редагувати, роздрукувати, скопіювати, експортувати з ODBC та DDE-серверу. Вихідними є дані з таблиць QUIK:
- угод, у т. ч. для виконання та знеособлених;
- заявок, включаючи стоп-заявки, на позабіржові угоди та заявки – звіти на угоди РПС;
- «Клієнтський портфель», «купити/продати»
- дані з позицій учасника щодо грошей, торгових рахунків, інструменту.
Таблиці на основі QPILE не можуть бути скопійовані в текстовий файл через контекстне меню та експортовані до систем теханалізу, а на їх основі не можуть бути розроблені графіки. До таблиць на основі QPILE не можна застосовувати фільтри та сортування.
Робота з таблицею
Щоб завантажити код програми, потрібно вибрати меню послуги, потім QPILE скрипти. Можна також використовувати комбінацію Ctrl+F11. Після цього потрібно клікнути «Додати» і вибрати потрібний файл. Він має розширення .qpl, а його ім’я з’явиться у списку “Доступні скрипти”.
У разі наявності в програмі помилки система зробить повідомлення у вікні повідомлень, яке міститиме ім’я дефектного файлу та номер рядка з помилкою. Якщо у файлі збоїв не виявлено, у полях будуть вказані такі дані:
- ім’я таблиці;
- число стовпців та клієнтів;
- перелік ідентифікаторів та клієнтів;
- список параметрів та вихідний код файлу.
Кнопка “Завантажити локально” дозволить отримати таблицю з файлу, а “Завантажити на сервер” – надіслати програму на сервер, щоб усі користувачі змогли отримати доступ до неї. Щоб створити таблицю, натисніть кнопку «Створити таблицю». У «Доступних скриптах» оберіть потрібну для виконання програму, задайте число рядків через «Фільтр клієнтів», визначте потрібні стовпці та їх послідовність.
У контекстному меню доступні призупинення та відновлення розрахунку, початку розрахунку заново та в режимі налагодження, збереження опису у файл, демонстрації формули, параметрів скрипту.
Конструкції QPILE
Типи даних
- String – рядковий.
- Double – число в точці, що плаває.
- Collection – колекція.
- Map – асоціативний масив – послідовність пар, що дозволяє отримати інформацію за ключом.
Вирази
Застосовуються арифметичні дії додавання, віднімання, множення, розподілу. Також використовуються логічні вирази «і», «або», рівності, більше, менше, нерівності, умовна конструкція «якщо…, то…»
Функції
Функції можуть бути розміщені в будь-якому місці програми і мають різні імена. Усього доступно 18 груп математичних функцій та функцій для отримання значень таблиць та параметрів, асоціативних масивів, списку таблиць та інших завдань. Перша градація:
- Математичні функції , що дозволяють повернути значення синуса, косинуса, тангенсу, котангенсу аргументу, обчислити експонент від аргументу, згенерувати випадкове число тощо.
- Загальні команди : NEW_GLOBAL для ініціалізації глобальної змінної та MESSAGE для відкриття повідомлень.
Функції для роботи з:
- Колекціями об’єктів (Collection) . Дозволяють створити нову колекцію, повернути потрібну кількість елементів, замінити чи вставити потрібні значення.
- Асоціативними масивами (MAP) . Допоможуть створити та керувати масивом.
- Файлами – робота з текстовими файлами, ведення log-журналу програми. Назва файлу може містити шлях до нього.
- Рядками .
- Графіки . Функції GET_CANDLE для звернення до даних «свічок» та GET_CANDLE EX для повернення асоціативного масиву.
- Заявками . Створення заявок та їх відправлення до торгової системи.
- Мітками . Їх побудова та встановлення на графік. Додавання, видалення однієї або всіх позначок, отримання та встановлення параметрів для певної позначки.
Також є функції для:
- Для звернення до рядків довільних таблиць QUIK та списків доступних параметрів . Доступ до даних таблиці робочого місця. До них відносяться GET_ITEM для повернення MAP та GET_NUMBER_OF для повернення кількості записів.
- Для роботи з програмованою таблицею . Ці команди працюють із таблицею OWN. Вона доступна для читання стандартними функціями попереднього пункту та даними функціями. Ця група включає команди додавання, модифікації та видалення рядка з індексом, повного очищення таблиці OWN.
Для отримання значень використовують:
- Таблиці поточних торгів . Отримання параметрів біржової інформації за допомогою GET_PARAM (_EX).
- Вікна котирувань . Отримання значень котирувань інструментів.
- Таблиці позицій щодо інструментів та грошей . Отримання даних за клієнтом, фірмою, інструментом, рахунком депо за кодом.
Сервісні функції – повернення дати поточної торгової сесії, асоціативного ряду, поточної дати та часу, визначення стану підключення, переривання режиму розрахунку.
Налагодження програм
Покроковий контроль за роботою програми здійснюється у вікні «Налагодження». Воно відкривається з контекстного меню “Почати розрахунок в режимі налагодження”. Також його можна відкрити за допомогою команди breakpoint(), при цьому рядок програми буде виділено червоним кольором. Вікно містить поля з кодом програми та значеннями змінних. Внизу вікна розташовані кнопки “Наступний крок”, “Продовжити виконання”, “Зупинити розрахунок”. Натискання F5 продовжить виконання програми, комбінація Shift+F5 зупинить налагодження, клавіша F10 направить на наступний рядок.
QPILE чи LUA?
LUA – нова мова програмування для створення торгових роботів. Як і QPILE, він імплементований термінал QUIK. https://articles.opexflow.com/programming/lua.htm На сайті, присвяченому розробці торгових роботів для трейдингу, наводяться переваги мови LUA перед QPILE. Так, він може функціонувати у вигляді не скомпільованого скрипта та байт-коду, оснащений інструментами розробника та механізмами об’єктно-орієнтованого програмування. До програм LUA можна підключити об’єкти, виконані іншими мовами програмування. На LUA представлено 8 типів даних, зокрема метатаблиці. Мова LUA багатопотокова, відрізняється великою швидкодією, а транзакції та події терміналу проходять асинхронно. LUA найбільш поширений, ніж QPILE, для нього написано безліч розширень.
Мова QPILE в даний час визнана застарілою. Спеціалісти на форумах рекомендують застосовувати LUA. Хоча корисні та ефективні програми, як і раніше, використовуються.
Тим не менш, мова QPILE відрізняється простотою, порівняно з LUA, тому якщо Ви не маєте досвіду в програмуванні, краще вибрати QPILE. Цією мовою можна написати простого робота, якщо не потрібно виконувати складні обчислення.
Як створити торгового робота на QPILE?
Щоб створити торгового радника, знадобляться програми:
- ІТС Quik.
- Редактор коду Notepad++.
- Посібник з QPILE.
- XML-плагін для виявлення коду Notepad++.
Завантажте та встановіть ці програми. Підключіть синтаксис мови, помістивши userDefineLang.xml у шлях C:\Users\User\ AppData\Roaming\Notepad++\
Спочатку створимо наступну торгову стратегію. Скрипт щохвилини повинен розраховувати Hi та Low за кілька останніх свічок, перевіряти поточну ціну інструменту. У потрібному напрямку відкривається позиція, якщо ціна інструменту досягає максимального або мінімального значення за період. При отриманні сигналу short позиція long автоматично закривається. Робот використовує інструмент GAZP, розмір тайм-фрейму заданий 1 хв. Глибина виміру hi-low задана у кількості 5 свічок. Для входу в Long встановлено правило і перетин поточної ціни максимального значення за період. У Short робот зайде, якщо поточна ціна перетне мінімальне значення за ці 5 свічок. Напишіть у Notepad++ блок коду з основними налаштуваннями та вказівкою на серверну дату та час. Цей код представлений на малюнку нижче.
Перші 4 рядки коду утворюють заголовок програми. Між рядками 6 та 44 розташоване тіло програми, в якому міститься зміст робота. На рядках 7 – 12 розташовані налаштування користувача, що включають коди інструменту, групи і клієнта, номер рахунку на ММВБ. У виконання програми ці значення незмінні. Рядки 13 – 16 – початкові значення змінних. Вони обнулятимуться при кожному проході ітерації. Рядки 17 – 21 містять вказівку застосування серверних дати і часу. Ці дані передаються у функцію DATETIME та перетворюються на текстовий формат. Рядки 22 – 29 відправляють отримані дані таблицю. Код потрібно зберегти та встановити розширення qpl.
Відкрийте програму в QUIK, натиснувши Ctrl+F10 та обравши створений qpl-файл. Комбінацією Ctrl+F11 відкрийте вікно «Робота з портфелями» та встановіть період розрахунку портфеля 5 хв. Натисніть Ctrl+F12, щоб встановити стовпці, які потрібно відобразити в таблиці. На малюнку видно результат роботи робота.
Додамо до нашої програми ще кілька функцій та умов.
Блок «Налаштування користувача» доповнений змінними NUMBER та INTERVAL, які будуть задіяні у функції отримання N останніх барів. Функція DATETIME встановлює серверні дату та час, а з неї викликані функції поточної дати та часу CURDATE та CURTIME. Поточний час перетворюється на число рядку 24. Рядок 26 встановлює час роботи алгоритму з 10:00:01 до 18:40:00 МСК.
Найчастіше, індикатори, осцилятори, статистичні розрахунки розраховуються за 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(). Дані потрапляють у таблицю користувача, яку можна бачити на фото нижче. значення змінних INSTRUMENT та BARCOUNT повідомляються функцією SET_VALUE() у OUTPUT. Цей масив створено командою CREATE_MAP(). Дані потрапляють у таблицю користувача, яку можна бачити на фото нижче. значення змінних INSTRUMENT та BARCOUNT повідомляються функцією SET_VALUE() у OUTPUT. Цей масив створено командою CREATE_MAP(). Дані потрапляють у таблицю користувача, яку можна бачити на фото нижче.
Торгові роботи на QPILE – готові рішення
Робот на ковзній середній
Демонстраційний робот, який не підходить для реального трейдингу.
Робот включає 5 параметрів. Значення ідентифікаторів DATE, TIME, PRICE задані на рівні 30. Для ідентифікаторів MOVING та TP встановлено нульову точність. Код робота на ковзній середній писаного під QPILE: [Gallery columns = “5”
Калькулятор позиції Н. Морошкіна
Програма для розрахунку рівнів максимально допустимого просідання та мети на довгій та короткій позиціях за поточними цінами ask та bid. Рівні розраховуються для двох значень обсягу входу в позицію. Робот знаходить допустимий обсяг позиції при призначенні стоп-наказу за один крок від ціни відкриття з розрахунком відкриття позиції у бік зростання бару. У вікно терміналу вносяться знайдені рівні, що згодом відображаються у графіку ціни. ПО заданому інструменту фіксуються угоди. Якщо буде виявлено відкриття позиції, робот починає розрахунок параметрів. Залежно від зміни позиції призначені накази коригуються.
Фільтр обсягів
Робот-портфель для обчислення середнього арифметичного значення обсягу для свічок та порівняння його із середнім твором на коефіцієнт X. Коректно працює з побудованими графіками у вибраному відрізку часу.
Греки опціонів
Портфель для обчислення та відображення «греків» опціонів. Відрізняється від методу Блека-Шоуерса.
Торговий робот TRIX для QUIK
Програма базується на Індикаторі TRIX. При закритті індикатора вище нульової лінії заданого рівня робот приймає позицію Long. Позиція закривається за Take Profit, Stop Loss або трейлінг-стопом.
М4 Препроцесор
Програма для роботи з QPILE та Lua. Включає архіви з виконуваними файлами, документацією і DLL-файлами з розбором регулярних виразів. Щоб задіяти програму, потрібно розпакувати файли і помістити regexp2 в шлях C:\Windows. Уроки з QPILE для QUIK: https://youtu.be/vMTXwDUujpI Встановлення скрипту на QPILE у терміналі Quik: https://youtu.be/0B7qL8Svh7I Розділ на github, який описує застосування алгоритмічної мови QPILE, вбудованої в робоче місце системи QUIK знаходиться за посиланням – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE – мова застаріла, але досить проста і доступна навіть трейдерам-початківцям. На ньому продовжують працювати торгові роботи та програми, що зарекомендували себе протягом тривалого часу. Однак, для складніших завдань краще використовувати LUA.
0к