Робострой - створення робота на qpile

Створюємо «каркас» майбутнього робота

засоби розробки

Що нам знадобиться:

C: \ Documents and Settings \<имя пользователя>\ Application Data \ Notepad ++ \

де <имя пользователя> - обліковий запис, під якою ви перебуваєте в системі.

теорія QPILE

Файл з кодом програми є текстовий файл в кодуванні CP-1251 (Windows) c розширенням .qpl і складається з трьох частин:

  1. «Тема» - найменування таблиці і визначення основних параметрів,
  2. «Тіло програми» - код програми,
  3. «Опис стовпців таблиці» - визначення назв стовпців і формату відповідних їм осередків для виведення даних в таблицю.

Файл програми завжди починається з заголовка і закінчується рядком «END_PORTFOLIO_EX».
Більш детально інформацію по структурі qpl-програми та синтаксису можна подивитися в керівництві користувача, а ми переходимо до опису торгової стратегії.

торгова стратегія

Ми крок за кроком реалізуємо в коді наступну стратегію:
Qpile-cкриптов раз в хвилину розраховує Hi і Low за кілька останніх свічок, перевіряє поточну ціну інструменту, і, якщо вона перетинає максимальну або мінімальну ціну за період, відкриває позицію в потрібному напрямку.
Стратегія є реверсивної, тобто при отриманні сигналу на shortавтоматіческі закривається позиція long і навпаки. Стратегія - навчальна, і, тому, швидше за все, заробити на ній не вийде, але зрозуміти принципи роботи QPILE- цілком :)

Параметри торгової системи:

код програми

Для початку напишемо блок коду, в якому будуть задаватися основні настройки, а також виводитися дата / час з сервера QUIK і назва інструменту в таблицю. Він буде служити нам каркасом, на базі якого ми будемо «надбудовувати» додатковий функціонал.

Код1.1
PORTFOLIO_EX HI-LOW ROBOT;
DESCRIPTIONРобот на пробиття максимумів і мінімумів;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;

PROGRAM
'========= користувача настройки =============
INSTRUMENT = "GAZP" 'код інструменту
CLASSCODE = "EQNE" 'код групи
ACCOUNT = "L00-00000000" 'тут вводиться номер Вашого рахунку на ММВБ
CLIENTCODE = "00000" 'тут вводиться Ваш код клієнта

'==================== Змінні ==================
HH = 0 'Обнуляємо максимум за
LL = 10000000 'Обнуляємо мінімум за

'=============== СЕРВЕРНІ ДАТА І ЧАС ===============
SERVERDATE = GET_INFO_PARAM ( "TRADEDATE") 'дата сервера в форматі DD.MM.YYYY
SERVERTIME = GET_INFO_PARAM ( "SERVERTIME") 'час сервера в форматі HH: MM: SS
DATETIME (SERVERDATE, SERVERTIME) 'виклик функції дати-часу

'=============== ДАНІ В ТАБЛИЦЮ ===============
DELETE_ALL_ITEMS ()
OUTPUT = CREATE_MAP ()
OUTPUT = SET_VALUE (OUTPUT, "SERVERDATE". SERVERDATE)
OUTPUT = SET_VALUE (OUTPUT, "SERVERTIME". SERVERTIME)
OUTPUT = SET_VALUE (OUTPUT, "INSTRUMENT". INSTRUMENT)
ADD_ITEM (1, OUTPUT)

'=============== ФУНКЦІЇ ===============
'ФУНКЦІЯ СЕРВЕРНИХ ДАТИ І ЧАСУ
FUNC DATETIME (FSERVERDATE, FSERVERTIME)
CURYEAR = SUBSTR (FSERVERDATE, 6,4) 'поточний рік в текстовому форматі
CURMONTH = SUBSTR (FSERVERDATE, 3,2) 'поточний місяць в текстовому форматі
CURDAY = SUBSTR (FSERVERDATE, 0,2) 'поточний день в текстовому форматі
CURDATE = CURYEAR CURMONTH CURDAY 'дата в текстовому форматі

CURHOUR = SUBSTR (FSERVERTIME, 0,2) 'поточні годинник в текстовому форматі
CURMIN = SUBSTR (FSERVERTIME, 3,2) 'поточні хвилини в текстовому форматі
CURSEC = SUBSTR (FSERVERTIME, 6,2) 'поточні секунди в текстовому форматі
CURTIME = CURHOUR CURMIN CURSEC 'час в текстовому форматі
END FUNC

PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Поточна дата;
PARAMETER_TYPE STRING (10);
END

PARAMETER SERVERTIME;
PARAMETER_TITLE Час;
PARAMETER_DESCRIPTION Поточний час;
PARAMETER_TYPE STRING (10);
END

PARAMETER INSTRUMENT;
PARAMETER_TITLE Інструмент;
PARAMETER_DESCRIPTION торгованих інструмент;
PARAMETER_TYPE STRING (4);
END

Код необхідно скопіювати в Notepad ++ і зберегти в файл з розширенням .qpl

Розбір коду

Перші чотири рядки - це заголовок програми.
Далі між рядками PROGRAMі END_PROGRAM полягає тіло програми. У тілі прописана основна логіка програми:
Призначені для користувача настройки (код інструменту, код групи, номер рахунку на ММВБ і код клієнта) - це змінні. які не змінюються в процесі виконання програми.

Змінна - це область пам'яті комп'ютера із змінним значенням, визначеним програмою або користувачем.

Початкові значення змінних - «максимум за» і «мінімум за». Ці змінні будуть приводитися до початкових значень (обнулятиметься) при кожному проході програми (ітерації).
Далі ми отримуємо дату і час з сервера і передаємо їх в функцію DATETIME, для перетворення цих даних в текстовій формат. Це потрібно нам надалі при реалізації алгоритмів програми.

ФункціявQPILE- це підпрограма, в яку через кому передаються аргументиіз основного тіла програми для певної обробки. У QPILE можна використовувати функції, передбачені самим мовою (наприклад, функції для роботи з таблицями), або визначати власні (призначені для користувача) функції. Зазвичай типові завдання (наприклад запис інформації в log-файл, запит дати і часу з сервера, округлення чисел, відправка транзакцій на біржу і т.д.) реалізуються за допомогою функцій. Після виконання функції програма продовжує працювати з того місця, звідки було викликано функцію.

Отримані дані виводяться в таблицю. Опис параметрів таблиці PARAMETER, PARAMETER_TITLE, PARAMETER_DESCRIPTION, PARAMETER_TYPE є в інструкції з мови QPILE, тому ми не будемо зупинятися на них докладно.

Завантаження робота в торговий термінал QUIK

Для завантаження робота в ІТС QUIK необхідно

  1. Задати портфель комбінацією клавіш CTRL + F10 і вибрати в провіднику qpl-файл, який ми зберегли раніше.
  2. Виставити період розрахунку портфеля в формі «Робота з портфелями» в 5 хв (викликається комбінацією клавіш CTRL + F11)
  3. Визначити стовпці для виведення в таблицю (комбінація клавіш CTRL + F12). Зазвичай додаються всі стовпці для виведення в таблицю.
  4. Алгоритм почне працювати автоматично


Результат роботи програми Ви бачите на скріншоті:

Схожі статті