Алгоритмичен език QPILE за програмиране на търговски роботи за QUIK.
Търговските роботи могат да бъдат написани на определен език, подобен на програмния код. QPILE е един от тях, статията ще разгледа този език, ще сравни езиците QPILE и
LUA и ще предостави примери за роботи на този език.
- Обща информация за QPILE
- Работа с маса
- QPILE конструкции
- Типове данни
- Изрази
- Функции
- Програми за отстраняване на грешки
- QPILE или LUA?
- Как да създадете робот за търговия на QPILE?
- Търговски роботи на QPILE – готови решения
- Робот с подвижна средна стойност
- Н. Морошкин позиция калкулатор
- Филтър за обем
- Опции гърци
- TRIX робот за търговия за QUIK
- M4 препроцесор
Обща информация за QPILE
QPILE е съкращение, което означава QUIK програмируем интерфейс и логическа среда.
Това е поредица от команди, интерпретирани от работната станция 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 конструкции
Типове данни
- Струна – низ.
- Double е число с плаваща запетая.
- Колекция – колекция.
- Карта – асоциативен масив – последователност от двойки, която ви позволява да получите информация по ключ.
Изрази
Прилагат се аритметичните действия събиране, изваждане, умножение, деление. Използват се и логическите изрази “и”, “или”, равно, повече, по-малко, неравенства, условна конструкция “ако … то…”.
Функции
Функциите могат да бъдат разположени навсякъде в програмата и да имат различни имена. Налични са общо 18 групи математически функции и функции за получаване на стойностите на таблици и параметри, асоциативни масиви, списък с таблици и други задачи. Първи клас:
- Математически функции , които ви позволяват да върнете стойността на синуса, косинуса, тангенса, котангенса на аргумента, да изчислите степента на аргумента, да генерирате произволно число и т.н.
- Общи команди : NEW_GLOBAL за инициализиране на глобална променлива и MESSAGE за отваряне на съобщения.
Функции за работа с:
- Колекции от предмети (Колекция) . Те ви позволяват да създадете нова колекция, да върнете необходимия брой елементи, да замените или вмъкнете желаните стойности.
- Асоциативни масиви (MAP) . Помощ за създаване и управление на масива.
- Файлове – работа с текстови файлове, поддържане на log-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?
За да създадете търговски съветник, ще ви трябват следните програми:
- ITS Quik.
- Редактор на код Notepad++.
- Ръководство за QPILE.
- XML плъгин за откриване на код в Notepad++.
Изтеглете и инсталирайте тези програми. Активирайте синтаксиса на езика, като поставите userDefineLang.xml в пътя C:\Users\User\ AppData\Roaming\Notepad++\
Първо, нека създадем следната стратегия за търговия. Скриптът трябва да изчислява Hi и Low за последните няколко свещи всяка минута, проверете текущата цена на инструмента. Позиция се отваря в желаната посока, ако цената на инструмента достигне максималната или минималната стойност за периода. При получаване на сигнал за къса, дългата позиция се затваря автоматично. Роботът използва инструмента GAZP, времевата рамка е зададена на 1 минута. Дълбочината на високо-ниско измерване е настроена на 5 свещи. За да влезете в Long, се задава правило и пресечната точка на текущата цена на максималната стойност за периода. Роботът ще влезе в Short, ако текущата цена премине минималната стойност за тези 5 свещи. Напишете блок код в Notepad++ с основни настройки и дата и час на сървъра. Този код е показан на снимката по-долу.
Първите 4 реда код формират заглавката на програмата. Между редове 6 и 44 е тялото на програмата, което съдържа съдържанието на робота. Редове 7 – 12 съдържат потребителски настройки, които включват кодовете на инструмента, групата и клиента, номера на сметката на MICEX. Тези стойности не се променят по време на изпълнение на програмата. Редове 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 UTC.
Най-често индикатори, осцилатори, статистически изчисления се изчисляват от последните N свещи на графиката. QPILE няма функция за събиране на броя свещи преди N периода като такава, но има функция GET_CANDLE, която осъществява достъп до свещите на графиката по дата и час в текстов формат. Нашият код съдържа функцията за получаване на последните N ленти OHLC(). Той създава колекция с параметрите на последните свещи, вложени в списъка COLLECTION. Програмата проверява стойността на ИНТЕРВАЛ и ако тя не попада в диапазона 0…60, се извежда съобщение, че стойността не отговаря на допустимия диапазон. Създава се MAP колекция със свещи в ред 88. FOR цикъл, анкетиращ диаграмата до необходимата дълбочина със стъпка INTERVAL от новата към старата свещ. В ред 90, след като цикълът е деклариран, роботът се връща интервал назад. Когато получите свещ с GET_CANDLE, поставете го в колекцията BARLIST с помощта на функцията INSERT_COLLECTION_TEAM. В резултат на действието на командата OHLC(), BARLIST се попълва с последните свещи от графиката на инструмента в размер на 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:
Н. Морошкин позиция калкулатор
Програма за изчисляване на нивата на максимално допустимото усвояване и целта за дълги и къси позиции при текущите цени продава и продава. Нивата се изчисляват за 2 стойности на обема за въвеждане на позиция. Роботът намира допустимия обем на позицията при задаване на стоп поръчка в една стъпка от цената на отваряне с изчисляване на отварянето на позиция в посоката на растеж на лентата. Намерените нива се въвеждат в прозореца на терминала, които впоследствие се отразяват в ценовата графика. Транзакциите са фиксирани за даден инструмент. Ако се отвори позиция, роботът започва да изчислява нейните параметри. В зависимост от промяната на позицията, зададените поръчки се коригират.
Филтър за обем
Портфолио робот за изчисляване на средноаритметичното на обема за свещи и сравняването му със средния продукт по коефициента X. Работи коректно с начертани графики в избрания период от време.
Опции гърци
Портфолио за изчисляване и показване на “гърци” на опции. Различава се от метода Black-Showers.
TRIX робот за търговия за QUIK
Програмата е базирана на индикатора TRIX. Когато индикаторът се затвори над нулевата линия, определеното ниво, роботът заема дълга позиция. Позицията се затваря чрез Take Profit, Stop Loss или плаващ стоп.
M4 препроцесор
Програма за работа с 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к