Author Archive
Немного о QPILE
Возникло желание развеять некоторые заблуждения и поделиться своим опытом программирования торговых стратегий и роботов.
Начну с языка программирования QPILE, интерпретатор которого встроен в QUIK.
При множестве недостатках интерпретатора, пожалуй это единственный способ реализации простых и надежных торговых роботов на основе торгового терминала QUIK.
Если не ставить нереальные задачи, типа создать HFT робот на основе торгового терминала QUIK,
то на QPILE можно реализовать практически любой торговый алгоритм.
На вопрос о том, какой самый хороший язык программирования, я отвечаю так:
«Хороший язык программирование тот, на котором Вы умеете мыслить.»
Если Вы не профессиональный программист, то хороший язык тот , который проще и отражает предметную область.
К сожалению, усердно продвигаемая Майкрософт среда NET и реализация в ней языка C#, который является универсальным языком, т е не отражает предметную область, не есть панация от всех бед.
Да и абстрактные понятия объектно-ориентированного программирования не есть общеизвестное и легко усвояемое.
Думаю, что желающие создать торговый робот, не очень вдохновятся необходимостью изучать абстрактные понятия объектно-ориентированного программирования.
Язык QPILE сравнительно простой и предметно ориентированный.
Поэтому на нем программа торгового робота будет наиболее проста в реализации.
Что бы упростить написания программ на QPILE и сделать их более наглядными,
я добавил в QPILE макрокоманды и сделал для сборки загружаемого портфеля компилятор NKQPL.
Программу любого торгового робота на QPILE можно записать следующим образом:
#pathLib C:\NK_QPILE
#TITLE test; pobot 30.03.2012;
#INIT
if INIT>0 AND LRT-LRT_OLD!=0
#FILT_TRADES
#FILT_OWN
#FILT_OSO
#SET_OWN
end if
#OWN
Символ # указывает на то, что далее за ним следует макрокоманда.
Поясню, что означает каждая из строк данной программы
pathLib C:\NK_QPILE — определяем путь к каталогу библиотеки функций.
Т е в данном случае, вы разрабатываете или получаете от других разработчиков различные функции и помещаете их в указанный каталог.
В дальнейшем , в своих программах, вы обращаетесь к этим функциям и они, на этапе компиляции, автоматически вставляются в конечный текст портфеля.
TITLE test; pobot 30.03.2012 — описание (test) и название программы (pobot 30.03.2012)
INIT — инициализация переменных, загрузка из файла параметров клиента и торгуемых инструментов
if INIT>0 AND LRT-LRT_OLD!=0 — условие исполнения основного тела программы
FILT_TRADES обработка таблицы сделок, результат обработки сохраняется в файле истории позиции
FILT_OWN обработка программируемой таблицы , которая содержит информацио о торгуемых инструментах, открытых позициях
FILT_OSO обработка таблицы ордеров и стоп-ордеров, управление стопами
SET_OWN запись параметров позиции в программируемую таблицу
OWN описание программируемой таблицы
~~~~~~~~~~~~~~~~~~~~~~~~~
Хочу показать как элегантно пишутся торговые команды выставления заявок в моей реализации макро QPILE.
Команда stop-loss и take-profit:
#STOP_LOSS_PROFIT trz; PRICE; Q; STOPPROFIT; OFFSET; STOPLOSS; AFT; ATT; NUMBER
В результате в переменной NUMBER мы получим номер выставленного стоп ордера.
а вот так отменить стоп ордер под номером NUNBER
#KILL_STOP_ORDER NUMBER; SECCODE; CLASSCODE
команда «купить»:
#BUY trz;PRICE; Q; SECCODE; CLASSCODE; NUMBER
команда «продать»:
#SELL trz;PRICE; Q; SECCODE; CLASSCODE; NUMBER
Все просто и наглядно.
Все макросы также как и функции хранятся в библиотеке и автоматически подставляются компилятором на этапе сборки загружаемого портфеля.