Повышение быстродействия роботов на QPILE

14 апреля, 2012

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

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

Кроме того, если Вас устраивает время реакции робота на событие на рынке в пределах 0.5-5 секунд, то QPILE – может обеспечить такое  решение.

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

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

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

Например, четыре пустых строки или строки комментарии, занимают столько же времени на исполнение,  как оператор цикла FOR.

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

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

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

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

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

Для этого заранее определите названия переменных и их функциональное назначение.

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

Макросы применяются для обеспечения наглядности и компактности исходного текста программы.

Функции применяются для сокращения размеров исполняемого кода.

Применение функций всегда замедляет исполнение программы.

Однако, в языке QPILE приходится применять функции фактически для уменьшения размера текста программы, что в конечном счете приводит к дополнительным затратам времени на  ее исполнение.

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

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

Для этого, сначала определим следующие переменные, которые будем использовать в своих программах:

HHMMSS – время в формате HHMMSS

HHMM – время с точность до минуты

_H – часы

_M- минуты

_S-секунды

YYYYMMDD – дата в формате YYYYMMDD

Y_ –год

M_ — месяц

D_ — дата

 

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

Однако, получение торговой и текущей даты и времени, возможны в формате DD.MM.YYYY. и в формате HH:MM:SS

Поэтому, для начала, получим текущее время и дату и разделим  их на составляющие.

X= GET_VALUE(GET_DATETIME (),”DATETIME”)

D_=substr(X,0,2)

M_= substr(X,3,2)

Y_= substr(X,5,4)

_H= substr(X,11,2)

_M= substr(X,15,2)

_S= substr(X,18,2)

Дата и время в форматах, необходимых для работы с графиками запишутся в виде:

YYYYMMDD=100*(100*_Y_+M_)+D_

HHMMSS=100*(100*_H+_M)+_S

 

Теперь рассмотрим алгоритм управления временем.

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

Рассмотрим алгоритм  изменения времени для выбора свечей и индикаторов с графиков

            Уменьшить время на T минут

_M=_M-T

If _M<0

_M=_M+60

H=H-1

END IF

            Увеличить время на T минут

_M=_M+T

If _M>60

_M=_M-60

_H=H+1

END IF

Время в формате HHMM=100*_H+_M

Для обеспечения наглядности программы без потери быстродействия, я оформляю алгоритмы изменения времени в виде макросов  #DEC_T и #INC_T.

            С потерей быстродействия, можно оформить их в виде функций без параметров:

 FUNC DEC_T()

_M=_M-T

If _M<0

_M=_M+60

H=H-1

END IF

END FUNC

И

FUNC INC_T()

_M=_M-T

If _M<0

_M=_M+60

H=H-1

END IF

END FUNC

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

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

 

Обработка истории сделок на QPILE

9 апреля, 2012

В качестве информации предлагаю следующие результаты экспериментов оценки быстродействия работы с историей сделок на QPILE
1) Вывод истории сделок с графиков.
Программа определяет интервал графика и выводит всю историю в реальном времени, которой еще нет в файлах.
а)  Истории нет. Вывод 3000 свечей (максимальная длина истории с сервера КВИК) с графика составляет 12 секунд.
б) Отсутствует один день — 500 свечей — 2 секунды.
в) прием новой свечи <20 мс.
2) Вывод таблицы всех сделок по всем инструментам (1000 )
Всего сделок было в пятницу 892 тысячи
Время вывода в файлы на диск с сортировкой по инструментам 970 секунд.
Время вывода лишь сделок по индексу РТС ( всего сделок 283 тысячи) составляет 460 секунд.

~~~~~~~~~~~~~~~~~~~~~~~
Для сравнения эффективности привожу данные по выводу в файловую базу данных таблицы всех сделок с использованием DDE и сортировки инструментов (язык С++)
Эксперимент проводился ранее, объем ТВС 1.2 млн сделок инструментов 1000. время вывода с сортировкой по инструментам 8 секунд.
Выводы:
1) На QPILE вполне успешно можно работать с графиками сделок даже без предварительного сохранения в файле при числе необходимых сделок до 100 (примерно получим с графика за 1 секунду)
2) При работе с ТВС, скорость обработки информации на QPILE примерно в 100 раз меньше, чем во внешнем приложении с передачей ТВС по DDE.

~~~~~~~~~~~~~~~~~~~~~~~~~~~