Trading tools

Сотрудничество


 
Полезное
Подписка на RSS-ленту

Поддержать проект:

WM:
R757443857681
Z305778025977

TradeProcessor

  1. Назначение
  2. Порядок запуска модуля, требования к открытым окнам в Quik
  3. Настройка работы модуля
  4. Создание, редактирование и удаление задач. Настройки задачи
  5. Программистам: функции модуля TradeProcessor, доступные для вызова
  6. Возможные проблемы
  7. Условия распространения

1. Назначение

Модуль TradeProcessor предназначен для автоматизированного исполнения торговой стратегии, либо одновременно нескольких торговых стратегий. Алгоритм работы модуля задается посредством настройки задач. Задачи бывают двух типов:

  1. Задача, описывающая какой объём актива должен находиться портфеле в зависимости от его цены
  2. Задача, описывающая, в каком диапазоне должна быть дельта опционной позиции портфеля (в том числе для разных номеров счета)
Одновременно может быть создано несколько задач. Любая задача может находиться в состоянии выполнения, либо в неактивном состоянии. По задачам контроля дельты в любом (в том числе неактивном) состоянии рассчитывается и отображается дельта позиции в реальном времени.

Наверх

2. Порядок запуска модуля, требования к открытым окнам в Quik

Чтобы начать работать с модулем TradeProcessor.dll:

1. Поместите файл TradeProcessor.dll поддиректорию lib или в любое другое место, где у вас хранятся библиотеки для работы с QuikOrdersDOM. В эту же папку необходимо положить файл с настройками для базовых активов TradeProcessor.ini. Эти настройки понадобятся, если вы будете работать с библиотекой, чтобы управлять опционной позицией по дельте. Помимо TradeProcessor.ini нужен еще файл TPList.ini

2. В QuikOrdersDOM на вкладке "Настройки" в пункте "Библиотека автотрейдинга" выберите TradeProcessor.dll, чтобы модуль запускался вместе с запуском привода. Если вы не хотите, чтобы модуль начинал работу сразу после запуска QuikOrdersDOM, то это тоже можно настроить (в файле TPList.ini в [COMMON] параметр EnableTasks=0).

Второй вариант — добавить TradeProcessor.dll в список задач TaskManager. Здесь можно "отсрочить" запуск модуля в настройках.

Требования к открытым в Quik котировальным окнам (стаканам) почти такие же, как у QuikOrdersDOM: они должны быть открыты по всем инструментам, с которыми вы собираетесь работать.

Если в портфеле есть опционы и вы собираетесь с помощью модуля TradeProcessor выравнивать позицию по дельте, то вам необходимо также иметь открытые стаканы по опционам ближайших соседних страйков (в случае, если вы работаете с дальними страйками, в стаканах может отсутствовать спрос или предложение — тогда волатильность для рассчета дельты будет вычисляться для опциона соседнего страйка, находящегося ближе к центральному). Кроме того, необходимо открывать котировальные окна обоих типов опционов (put и call) каждого страйка рабочего диапазона цены базового актива.

Наверх

3. Настройка работы модуля

Настройки для модуля хранятся в ini-файлах. Редактировать настройки следует вручную, непосредственно в ini-файлах с помощью текстового редактора. Некоторые настройки (параметры задач) доступны к редактированию через интерфейс модуля.

Наверх

TradeProcessor.ini — настройки для базовых активов

В файле TradeProcessor.ini содержатся настройки для базовых активов. Эти настройки будут использоваться для вычисления дельты позиции по этим активам.

Пример INI файла:

[COMMON]
FUTCLASS=SPBFUT
OPTCLASS=SPBOPT

[RIH2]
CALLNAME1=RI*BA2
CALLNAME2=RI*BB2
CALLNAME3=RI*BC2
PUTNAME1=RI*BM2
PUTNAME2=RI*BN2
PUTNAME3=RI*BO2
STRIKESTEP=5000
MM_CONST=4
MIN_STRIKE=10000
MAX_STRIKE=300000

[RIM2]
CALLNAME1=RI*BD2
CALLNAME2=RI*BE2
CALLNAME3=RI*BF2
PUTNAME1=RI*BP2
PUTNAME2=RI*BQ2
PUTNAME3=RI*BR2
STRIKESTEP=5000
MM_CONST=4
MIN_STRIKE=10000
MAX_STRIKE=300000

В разделе COMMON хранится настройка для названий классов фьючерсов и опционов (соответственно FUTCLASS и OPTCLASS). Эти настройки можно не трогать, они пока не пригодятся.

Далее каждая группа соответствует настройкам определенного базового актива. Его название — в названии группы (в примере даны настройки для RIH2 и RIM2). Для каждого нового фьючерса, с опционами на который вы собираетесь работать, надо будет добавить отдельную группу настроек.

Параметры CALLNAME[N] и PUTNAME[N], где вместо [N] — порядковые числа, представляют собой пары опционов CALL и PUT с одинаковым сроком экспирации. Значения этих параметров — маски шаблонов названий. В них страйк заменен "звездочкой" (знаком "*").

STRIKESTEP — шаг цены страйк базового актива.

MM_CONST — ширина рабочей зоны в страйках. MM_CONST страйков в направлении роста цены базового актива и MM_CONST страйков в направлении снижения цены базового актива.

MIN_STRIKE, MAX_STRIKE — минимальный и максимальный страйки, с которыми следует работать.

Наверх

TPList.ini — файл с настройками торговли

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

Общие настройки содержатся в секции [COMMON]. Эти настройки можно редактировать только вручную, непосредственно в файле.

Пример настроек:

[COMMON]
BeginWorkPeriod1=10:00:00
EndWorkPeriod1=14:00:00
BeginWorkPeriod2=14:03:00
EndWorkPeriod2=18:45:00
BeginWorkPeriod3=19:00:00
EndWorkPeriod3=23:50:00
PlaySoundAfterOrder=0
SoundPath=C:\Windows\Media\tada.wav
EnableTasks=1
AutostartDelay=0
AccountList=SPBFUT00312
ShowFormAtStart=1

Параметры BeginWorkPeriod[N] и EndWorkPeriod[N], где вместо [N] — порядковые числа, представляют собой пары времени начала и окончания интервалов, на которых разрешена торговля. Как видно на примере, торговая сессия не включает дневной и вечерний клиринг.

Если параметр PlaySoundAfterOrder установлен равным 1, то отправка заявки будет сопровождаться звуковым сигналом, файл со звуковым сигналом должен быть указан в параметре SoundPath.

EnableTasks — если этот параметр равен 1, то задачи, имеющие статус "Запущена", будут автоматически запускаться сразу после запуска модуля. Если статус установлен в 0, то запуск всех задач будет произведен только после нажатия на кнопку "Разрешить запуск задач" в интерфейсе модуля.

AutostartDelay — задержка автозапуска (в секундах). Параметр имеет смысл только тогда, когда EnableTasks = 1.

AccountList — список счетов клиента, разделенных "точкой с запятой".

ShowFormAtStart — если этот параметр равен 1, то при запуске модуля (например, через привод или TaskManager) автоматически появится на экране его форма.

Остальные разделы настроек — это параметры задач, которые выполняет TradeProcessor. Редактирование параметров задач доступно через интерфейс.

Наверх

4. Создание, редактирование и удаление задач. Настройки задачи

Для того, чтобы открылась форма с перечнем задач, нужно:

  • нажать на кнопку "Настройка" на вкладке "Настройки" QuikOrdersDOM, если модуль — единственная библиотека, которая запущена;
  • если модуль запускается с помощью TaskManager-а, то тоже нажать на кнопку "Настройка" на вкладке "Настройки" QuikOrdersDOM, а после появления окна Менеджера еще раз нажать на "Настройки" — на этот раз в строке с модулем (см. рис. 4.1.).
  • если в настройках модуля в файле TPList.ini в секции [COMMON] значение параметра ShowFormAtStart равно 1, то форма появится автоматически, когда модуль запустится одним из предыдущих способов.

Рисунок 4.1. — форма модуля TaskManager

Появится главная форма модуля. В левой части список задач. При выборе конкретной задачи в правой части окна отображаются ее параметры.

Рисунок 4.2. — форма модуля TradeProcessor

В верхней части общий статус работы модуля: "Работа задач разрешена" или "Работа задач запрещена". После нажатия на кнопку "Запретить" работа всех задач останавливается (их статусы при этом не меняются). Если нажать на кнопку "Разрешить" — начинается работа всех задач, имеющих статус "Запущена".

Чтобы добавить новую задачу, необходимо нажать на кнопку "Добавить", чтобы удалить — на кнопку "Удалить" соответственно.

Параметры доступны для редактирования только в том случае, когда задача не запущена. Остановите задачу (кнопка "Остановить"), измените и сохраните настройки, а потом снова запустите (кнопка "Запустить").

Форма добавления задачи представлена на рисунке 4.3.:

Рисунок 4.3. — форма добавления задачи

Рассмотрим более подробно все параметры задач в зависимости от режима работы (типа).

Режим работы задачи

Как было описано выше, в модуле предусмотрено 2 режима работы задачи:

  1. Хэджирование позиции по дельте (m_Delta)
  2. Управление позицией "по точкам" (уровням цены) (m_Points)
Наверх

Автоматическое управление дельтой опционной позиции портфеля (разных номеров счета)

Параметры

Главные параметры — это "Тикер базового актива", "Минимальное значение дельты", "Максимальное значение дельты". Первое задает, с каким активом работать (настройки для актива обязательно должны быть в файле TradeProcessor.ini), а 2 других — диапазон, в котором надо держать дельту.

Максимальное количество контрактов в заявке — параметр, который может быть полезен при работе с большими объемами позиции. Если потребуется продать/купить количество контрактов, большее, чем указано в настройках, то робот будет формировать последовательно заявки на покупку/продажу этого объема по частям и отправлять их через интервалы, указанные в параметре "Задержка между отправкой заявок (в мс)".

Проскальзывание (в %) — установите этот параметр равным проценту допустимого проскальзывания. Заявка будет выставляться с поправкой на это значение.

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

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

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

Если вы работаете с опционами дальних страйков (которые дальше от базового, чем параметр настройки MM_CONST в TradeProcessor.ini), то при отсутствии заявок в стаканах волатильность для рассчета дельты по инструменту будет вычисляться в соседних страйках, расположенных ближе к центральному.

Даже если задача не запущена, но имеет тип m_Delta, значение дельты отображается в реальном времени.

Рисунок 4.4. — отображение дельты позиции в реальном времени

Управление позицией по точкам

Параметры

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

Считать позицию по заявкам, а не по портфелю: если эта опция включена, то учет позиции, привязанной к задаче, будет вестись автономно самой программой по тому, сколько и каких заявок отправляется в систему. Это делает возможным запуск двух и более задач управления позицией по точкам на одинаковый инструмент на разных номерах счета. До версии 1.0.0.4 учет велся в целом по портфелю.

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

Файл с настройками: выберите файл, в котором хранятся настройки для управления торговлей. Для этого сначала создайте простой текстовый файл и сохраните на диск (например, в папку QuikOrdersDOM/lib/files/).

Структура данных в файле должна быть определенного формате. В качестве примера:

175500;5
176000;3
176500;2
177000;1
177500;2
178000;7
178500;3
179000;5
179500;4

Примечание: сортировать список необязательно, он в любом случае будет автоматически отсортирован при работе.

В каждой строке первое число — это уровень цены. Второе — размер позиции, который должен соответствовать данной цене актива, а также интервалу цен актива от текущей до соседних заданных значений цены актива. Этот файл вы создаете и заполняете, в соответствии с вашей торговой стратегией.

Частота считывания настроек в циклах — через какое количество циклов настройки из файла с точками будут перечитываться. Если вы планируете менять настройки во время работы автомата (вручную или с помощью внешних автоматических систем) , то обязательно укажите этот параметр.

Уровни цен актива, после достижения которых останавливать работу задачи (максимальный и минимальный) — если цена актива выйдет за указанные границы, то задача будет автоматически остановлена. Обязательно(!) указывайте такие уровни, которые есть в настройках. Автомат выровняет позицию в соответствии с тем, что требуется в настройках, — и только после этого завершит свою работу.

Наверх

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

Начиная с версии 1.0.0.1 в модуле TradeProcessor появились функции, которые можно вызвать. Функции условно можно поделить на 2 группы:

  1. Функции для работы со списком задач.
  2. Функции для работы с дельтой.

Для использования описанных ниже функций необходимо в раздел uses подключить модуль uATDeltaLibrary.pas, в котором описаны структуры и функции для работы.

Структуры, описанные в uATDeltaLibrary.pas

TDeltaInitialRecord — структура, содержащая описание данных, доступных в этой библиотеке для работы с QuikOrdersDOM. Переменная типа указатель на объект такой структуры объявляется в модуле:

PDR                : PDeltaInitialRecord;

а потом и инициализируется в функции AT_LIB_INIT следующим образом:

PDR := R.fATLibGetRegisteredObject('tprocessor_lib');

Дальнейший доступ ко всем функциям можно будет получить через эту переменную.

Эта структура состоит из:

  TDeltaInitialRecord = packed record
    fATDGetDTasksCount      : TATDGetDTasksCount;
    fATDNewDTask            : TATDNewDTask;
    fATDStartDTask          : TATDStartDTask;
    fATDStopDTask           : TATDStopDTask;
    fATDDeleteDTask         : TATDDeleteDTask;
    fATDGetDTaskParams      : TATDGetDTaskParams;
    fATDSetDTaskParams      : TATDSetDTaskParams;
    fATDGetPortfDelta       : TATDGetPortfDelta;
    fATDGetDelta            : TATDGetDelta;
  end;

Последние 2 функции — функции для работы с дельтой; остальные — для работы со списком задач, которыми управляет TradeProcessor.

fATDGetDTasksCount : TATDGetDTasksCount; Функция возвращает количество задач или $FFFFFFFF в случае ошибки.
fATDNewDTask : TATDNewDTask; Функция создания новой задачи. Результат — Id или $FFFFFFFF в случае ошибки.
fATDStartDTask : TATDStartDTask; Запуск задачи.
fATDStopDTask : TATDStopDTask; Остановка задачи.
fATDDeleteDTask : TATDDeleteDTask; Удаление задачи.
fATDGetDTaskParams : TATDGetDTaskParams; Получение пораметров задачи.
fATDSetDTaskParams : TATDSetDTaskParams; Установка параметров задачи.
fATDGetPortfDelta : TATDGetPortfDelta; Вычисление дельты портфеля.
fATDGetDelta : TATDGetDelta; Вычисление дельты инструмента.

Еще одна используемая структура:

TDParams = packed record // параметры задачи

Id: Cardinal;Id задачи
MODE: byte;режим задачи: 0 - выравнивание по дельте, 1 - управление по точкам
MinDValue: double;Минимальное значение дельты
MaxDValue: double;Максимальное значение дельты
Title: TCharArr20;Отображаемое имя задачи
ShareClass: TCharArr20;Класс бумаги
ShareName: TCharArr20;Название бумаги
SET_DELTA_VALUE: boolean;Выравнивание дельты до значения. Если true, то дельта позиции будет выравниваться до NeedDValue, в противном случае - до ближайшей границы
NeedDValue: double;Значение, до которого выравнивается дельта при условии, что SET_DELTA_VALUE := true;
MaxQuantityInOrder: Cardinal;Максимальное количество в заявке
Slippage: double;Проскальзывание в %
MinOrdersDelay: integer;Задержка в мс между заявками
PointsIniFile: TCharArr512;Файл с уровнями для управления позицией по точкам
PointsRefreshFreq: integer;Частота перечитывания файла с уровнями в цмклах
IS_STARTED: boolean;Статус задачи (запущена/не запущена)
Account: TCharArr20;Аккаунт
MinStopTaskBAVal: double;Минимальный уровень цены, после которого надо останавливать задачу (в режиме управления по точкам)
MaxStopTaskBAVal: double;Максимальный уровень цены, после которого надо останавливать задачу (в режиме управления по точкам)
OwnPosMode: boolean;Включение режима контроля позиции по заявкам, а не по портфелю (для управления позицией по точкам)
OwnPos: integer;Количество базовых активов в позиции по задаче
wReserved: Array [0..1023] of byte;Зарезервировано

Функции для работы со списком задач.

Подробнее о каждой функции.

TATDGetDTasksCount = function : Cardinal; stdcall; - Функция для получения количества задач в списке TradeProcessor-а. В список входят все задачи: и те, которые созданы через интерфейс, и те, которые добавлены через SDK. В случае ошибки функция вернет $FFFFFFFF

TATDNewDTask = function : Cardinal; stdcall; - Функция создания новой задачи. Возвращает индекс созданной задачи или $FFFFFFFF в случае ошибки

TATDStartDTask = function (aIndex : Cardinal) : Cardinal; stdcall; — Функция запуска задачи. В качестве параметра передается индекс (не Id!) задачи в списке задач (нумерация начинается с 0). В случае успешного выполнения возвращается 0.

TATDStopDTask = function (aIndex : Cardinal) : Cardinal; stdcall; — Функция остановки работы задачи. В качестве параметра передается индекс (не Id!) задачи в списке задач (нумерация начинается с 0). В случае успешного выполнения возвращается 0.

TATDDeleteDTask = function (aIndex : Cardinal) : Cardinal; stdcall; - удаление задачи из списка по индексу. В случае успешного выполнения возвращается 0.

TATDGetDTaskParams = function (aIndex : Cardinal; aParams : PDParams) : Cardinal; stdcall; - получение параметров задачи по индексу. В случае успешного выполнения возвращается 0.

TATDSetDTaskParams = function (aIndex : Cardinal; aParams : PDParams) : Cardinal; stdcall; - установка параметров задачи по индексу. В случае успешного выполнения возвращается 0.

Функции для работы с дельтой.

TATDGetPortfDelta =
     function (aAccount,
               aBAName      : PChar;
               var aDelta   : double) : Cardinal; stdcall;
Функция вычисления дельты портфеля базового актива aBAName. В случае успешного выполнения возвращается 0.

TATDGetDelta =
     function (aSecName,
               aClassName   : PChar;
               var aDelta   : double) : Cardinal; stdcall;
Функция вычисления дельты инструмента в портфеле. aClassName — класс бумаги, aSecName — тикер бумаги. В случае успешного выполнения возвращается 0.

6. Возможные проблемы и ошибки

  1. Вы хэджируете позицию по дельте, но у вас нет настроек по базовому активу в файле TradeProcessor.ini — дельта портфеля будет рассчитываться неправильно.
  2. Нельзя создавать больше одной задачи управления позицией по дельте для одного базового актива на одном и том же номере счета. В противном случае дельта может рассчитываться неверно.

Наверх

7. Условия распространения

Модуль TradeProcessor входит в состав платного пакета QuikOrdersDOM+ и оплачивается в соответствии с тарифами QuikOrdersDOM+. Без оплаты работает в демонстрационном режиме, без отправки транзакций в систему

Наверх

Эта инструкция описывает функции модуля TradeProcessor версии 1.0.0.7.


Приятного использования и больших профитов ;)

Скальперский привод для Quik QuikOrdersDOM

Подписаться на блог ttools.ru по email: