Автор: Николай Камынин
Проведенные мною в последнее время исследования скорости исполнения транзакций и обмена информацией сервера , терминала и внешнего приложения с использованием экспорта по DDE, убедили меня в том, что выбранный мною ранее способ построения торговых роботов полностью себя оправдывает.
В общем, использование DDE обмена дает выигрыш, по сравнению с роботом на основе QPILE и Амиброкера лишь для торговли большим числом инструментов ( более 20 ).
Поэтому, схема Амиброкер <–> файловый интерфейс <-> QPILE может использоваться практически для любого робота.
Однако, существенным недостатком в этом случае является убогость языка QPILE и практически полное отсутствие средств разработки программ на его основе.
Поэтому , сегодня начал проект по созданию таких средств.
Для наглядности приведу пример:
Одна из моих программ робота содержит : Основное тело — 400 строк. К нему подключаются еще 1500 строк библиотеки функций.
При этом, если Вы делаете робота, в котором не требуются некоторые из функций, то надо либо руками их выбрать из общей кучи, либо включать всегда все функции, вне зависимости от их использования.
Вот так выглядит тело основной программы при применении разработанного мною макроязыка, который я условно назвал nkQPL :
‘# C:/NK_QPILE путь к библиотекам
‘# TITLE заголовок
‘# INIT блок инициализации
if INIT>=0
FILT_TRADES() ‘таблица сделок результат в файле позиции
FILT_OWN() ‘таблица портфеля
FILT_OSO() ‘таблица ордеров и стоп-ордеров
end if
‘# SET_OWN запись параметров в программируемую таблицу
‘# JNIT контроль связи с сервером
‘# OWN описание программируемой таблицы
~~~~~~~~~
Как видим, вместо 400 строк основного тела , теперь в основном теле присутствуют лишь с 11 строки, что согласитесь более наглядно.
Так как в торговом терминале реализован интерпретатор, то загружаемый в торговый терминал портфель будет содержать все 400 строк основной программы и лишь необходимые для работы функции, которые компилятор подключит автоматически.
Компилятор сам выберет нужные функции и включит их в состав портфеля.
Кроме того, данный компилятор позволяет использовать в программе собственные макроопределения.
Например, чтобы заполнить ассоциативный массив значениями, вместо такой последовательности операторов:
MP=SET_Value(MP,»SECCODE»,TT)
MP=SET_Value(MP,»PRICE»,AVAILABLE)
MP=SET_Value(MP,»PROFIT»,CBPLUSED)
MP=SET_Value(MP,»VAL»,VARMARGIN)
MP=SET_Value(MP,»OFFER»,CBPLPLANNED)
MP=SET_Value(MP,»D»,LRT)
MP=SET_Value(MP,»QR»,INIT)
MP=SET_Value(MP,»TF»,LRT_OLD)
Можно записать так:
‘# SET MP SECCODE=TT; PRICE=AVAILABLE; PROFIT=CBPLUSED; VAL=VARMARGIN; OFFER=CBPLPLANNED; D=LRT; QR=INIT; TF=LRT_OLD