Автор: Николай Камынин
Ранее я рассказал свой способ построения роботов на основе торгового терминала QUIK.
При этом функционально робот разделен на два модуля.
1) Модуль контроля и управления позициями (МКУП)
2) Модуль генерации торговых сигналов и управления рисками (МСУР)
Рассмотрим структуру и функции МКУП подробнее.
МКУП реализован на QPILE и обеспечивает выполнение следующих функций:
1) Формирование портфеля торгуемых инструментов;
2) Контроль доступности данных и наличия связи с торговым сервером;
3) Сбор и накопление истории сделок по инструментам;
4) Контроль и расчет текущей позиции по инструменту;
5) Прием торговых сигналов от внешнего приложения;
6) Выставление заявок по торговым сигналам и контроль их исполнения;
7) Контроль исполнения стоп-ордеров;
8) Ведение истории позиций по инструментам.
Формирование портфеля торгуемых инструментов
Портфель торгуемых инструментов отображается в виде программируемой таблицы.
Возможны два инициатора изменения позиций торгуемых инструментов.
Либо внешний модуль робота, либо человек- трейдер.
Для указания роботу, какими инструментами он может работать, предназначен файл инициализации.
В файле инициализации можно описать не только инструменты, доступные роботу, но и инструменты, по которым робот не будет торговать, но, по которых он должен управлять стоп-ордерами.
Для этой цели в файле инициализации указывается формат описания инструмента, после которого записываются параметры инструментов.
Например:
формат описания торгуемых инструментов:
#NAME,SECCODE,CLASSCODE,QR,OFFSET,OFFSET_UNITS,SPREAD,SPREAD_UNITS,
MARKET_STOP_LIMIT,MARKET_TAKE_PROFIT,PROFIT,PRICE,STOPPRICE,STOPPRICE2,D,T,TS,BS,QTY
Описание инструмента- обыкновенная акция сбербанка:
<SBER,SBER,EQBR,0,0,PRICE_UNITS,1,PERCENTS,NO,NO
Если роботу разрешено торговать данным инструментом, то параметр QR содержит, либо максимальное число лотов (целое), либо долю депозита (меньше 1) для позиции торгуемого инструмента.
Для определения всех открытых позиций, модуль просматривает таблицу лимитов по бумагам и таблицу позиций по клиентским счетам.
Обнаруженные позиции по инструментам, которые не указаны в файле инициализации, робот записывает в портфель и в дальнейшем осуществляет слежение за их изменением.
Сбор и накопление истории сделок по инструментам
В каталог HISTORY записываются файлы истории сделок по инструменту.
При этом имя файла состоит из имени инструмента (в файле инициализации – NAME, либо кода инструмента, если имя не определено в файле инициализации) , даты торгов и значения интервала.
На каждой итерации модуль дописывает новые свечи в соответствующий файл, предварительно определив интервал графика.
График должен иметь идентификатор, который соответствует NAME инструмента.
Ведение истории позиций по инструментам
Для ведения истории позиции по инструменту предназначены каталоги с именами, равными номерам счетов.
Для каждого инструмента и торгового дня записывается файл позиции по инструменту в каталог торгового счета по данному инструменту.
В файл по каждому торговому дню пишется следующая информация:
TIME – время сделки
NUMBER –номер сделки
PRICE-цена сделки
COMIS-комиссия
BALANCE- итого за всю историю торговли данным инструментом
VALUE- итого по открытой позиции
QUNTITY – количество (>0 –лонг, <0 – шорт )
Контроль исполнения стоп-ордеров
Блок содержит следующие функции:
1) Сброс стоп-ордеров при отсутствии позиции по инструменту
2) Установка и изменения стоп-ордеров при изменении позиции
3) Управление следящими стоп-ордерами
4) Исполнение ”зависшего” стоп-ордера
Контроль и расчет текущей позиции по инструменту
Данный блок осуществляет расчет текущей стоимости позиции, определяет число лотов инструмента доступных для торговли, наилучшие цены сделки для заданного объема.
Прием торговых сигналов от внешнего приложения
Обмен информацией между модулями осуществляется через файл.
Файл для каждого инструмента имеет имя инструмента (параметр Name)
Внешний модуль передает следующую информацию:
DC — дата сигнала
TC — время сигнала
BS – код сигнала
Price- цена сделки , если 0 –то по рынку
PQ — количество лотов или доля депозита
StopLoss – цена стоп-ордера
TakeProfit — цена тейк-профита
Кроме перечисленных файлов, МКУП ведет файл учета торговых дней.
Основной цикл МКУП имеет следующий вид:
if INIT>=0
T_ID=0 ‘идентификатор первой транзакции в текущем расчете
FILT_TRADES() ‘таблица сделок результат в файле позиции
FILT_OWN() ‘таблица портфеля
FILT_OSO() ‘таблица ордеров и стоп-ордеров
end if
Переменная INIT больше нуля, если доступны все данные и связь с торговым сервером установлена
Программа МКУП организована таким образом, что обработка соответствующих таблиц осуществляется лишь при их изменении.
При этом , всегда обрабатываются лишь новые записи в таблицах ордеров и сделок.
Таблицы лимитов обрабатываются лишь при наличии новых сделок, т.е. при изменении позиции по инструменту.