Author Archive
Автор: Николай Камынин
В широко используемом торговом терминале QUIK есть встроенный интерпретатор языка QPILE. Изначально этот язык предназначался для программирования таблиц, в которых отображается состояние активов клиента.
Однако, в настоящее время данный язык используется для написания торговых роботов.
QPILE имеет особенности и ограничения.
Однако,учитывая эти особенности можно программировать практически любые стратегии.
Тот факт, что программа не компилируется, а выполняется интерпретатором приводит к существенной потере быстродействия.
Первой особенностью языка является наличие фактически лишь двух форматов данных –DOUBLE и STRING, с плавающей точкой и строковых соответственно.
В языке отсутствуют операторы явного преобразования форматов. При этом, если в операторе сравнения участвуют операнды разных форматов, то интерпретатор выдает ошибку.
Поэтому разработчики рекомендуют для гарантированного получения числовых операндов складывать их с нулем. Часто вместо числового операнда получается строковый при извлечении значения из ассоциативного массива.
Второй особенностью QPILE является отсутствие областей видимости переменных.
В обычных языках программирования можно в различных функциях обозначать различные внутренние переменные одинаковым именем. В QPILE область видимости любой переменной – вся программа. Кроме того, максимальное число переменных не может быть более 1000.
Данное ограничение приводит к тому, что нет практического смысла вводить формальные переменные при создании функций, так как это приводит лишь к замедлению выполнения программы.
Существенным ограничением программы на QPILE является отсутствие программных средств для ввода информации в программу с клавиатуры, что исключает возможность диалога с торговым роботом.
Поэтому роботов, созданных с помощью QPILE, я классифицирую как автоматические устройства на “жесткой логике”.
Следующей особенностью QPILE является время жизни переменных. Если переменная определена как GLOBAL, то время жизни равно времени работы программы.
Определения такой переменной выполняется оператором NEW_GLOBAL(“Y”, 10) – определяет переменную Y с начальным значением 10. Оператор NEW_GLOBAL(“X”, CREATE_MAP ()) определяет ассоциативный массив с именем X.
Время жизни других переменных определяется одним циклом выполнения программы. При каждом новом цикле исполнения программы, переменные не определенные как GLOBAL будут определяться снова с присвоением начальных условий. Переменные , определенные как GLOBAL будут сохранять свои значения, полученные ими в прошедшем цикле.
Для программирования механических торговых систем (МТС) или торговых роботов рекомендую разработать библиотеку программ.
Tags: QPILE, QUIK, торговый робот