rss

Профиль компании

Финансовые компании

Блог компании OsEngine | Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16

Данный пример робота – большой шаг для нас всех в сторону HFT и быстрых алгоритмов. Работающая модель котировщика в 600 строк кода с работающим тестером, у которого, чтобы это стало возможным, 30 тысяч строк кода логики и математики OsEngine под капотом.

И я несказанно рад, что мы заканчиваем публичную часть нашего Гайда по Сеткам на такой ноте. Сетки – не дерьмо, как я думал пару месяцев назад, начиная делать новый слой по сеткам под давлением сообщества. По крайней мере MarketMaking сетки и возможность их выбрасывать и остановить в 20 строк кода по любому сигналу – отличное начала для алгоритмов котировщиков. Это большой прорыв!

Сегодняшний пример: GridPair.

Тип сетки: MarketMaking.

Логика: Сигналом для выброса сетки служит раздвижка с «Графика минимальных остатков от разницы двух ценовых рядов с оптимальным мультипликатором», которая должна пробить уровень стандартного отклонения, умноженного на мультипликатор. Выход по обратному сигналу.

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

 

1. Пример в проекте.

Для начала Вам следует открыть исходный код робота GridPair. Внутри проекта это здесь:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

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

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Constructor, settings, service – сервисный код.
  2. Logic – основная торговая логика.
  3. Non trade periods – место хранения параметров и методов, отвечающих за неторговые периоды.

 

2. Конструктор.

Сеточники отличаются от обычного робота только способом открытия позиции. Т.е. конструкторы совершенно обычные. Данный робот использует источник BotTabScreener для работы с N инструментов одновременно.

ВАЖНО!!! Из скринера используются только первые ДВА источника. Т.е. если добавить потом в робота 3 или 30 источников, работать будут всё равно два. Это было сделано, чтобы было удобно открыть два окна источников рядом без лишней визуализации, как в BotTabPair.

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Блок кода, в котором мы создаём источник типа BotTabScreener. Сохраняем его в поле класса. Подписываемся на событие завершения свечи по какому-то инструменту. Подписываемся на событие старта теста для тестера.
  2. Создание параметров.
  3. Создание параметров для неторговых периодов, которые будут передаваться напрямую в сетки.

 

3. Параметры робота.

У данного робота три вкладки параметров, рассмотрим их по очереди.

Вкладка «Prime»:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Regime – режим работы.
    1. Off – Выключен.
    2. On – Включен и будет входить в лонг.
  2. Deviation chart length – за какое кол-во свечек будет считаться «График минимальных остатков от разницы двух ценовых рядов с оптимальным мультипликатором».
  3. Standard deviation value – мультипликатор для стандартного отклонения, для съёма сигнала с «Графика минимальных остатков от разницы двух ценовых рядов с оптимальным мультипликатором».
  4. Volume type – режим выбора объёма.
    1. Contracts – кол-во контрактов инструмента.
    2. Contract currency – валюта контракта.
    3. Deposit percent – процент от депозита.
  5. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
  6. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере и Т-Инвест оставляем «Prime». На крипте это обычно “USDT”.

*Все значения для объёмов указаны для одной линии.

Вкладка «Grid»:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Grid lines count – количество линий в сетке.
  2. Grid lines step – шаг в % между линиями.
  3. Profit % – расстояние до закрывающего ордера.

Вкладка «Trade periods»:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

Каждую настройку описывать не будем. Это полный дубль имеющихся в ручных настройках сетки неторговых периодов.

 

4. Точка входа в логику.

Завершение свечи по какому-то инструменту, подключенному в скринер:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Если главный режим робота Off, ничего не делаем.
  2. Если в скринере источников меньше двух, ничего не делаем.
  3. Блок кода, в котором мы берём свечи у первых двух источников и проверяем, чтобы в последней свече было одинаковое время.
  4. Если уже существует ранее выброшенная сетка по инструменту, то заходим в логику её закрытия и удаления.
  5. Если сеток по источнику нет, вызываем метод для попытки выбросить сетку по условию.

 

5. Логика сигнала на выброс сетки.

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16

  1. Фильтр по времени.
  2. Расчёт графика минимальных остатков.
  3. Зафиксирована ситуация, когда первая бумага ускорилась вниз, а вторая ускорилась вверх. По первой выставляем сетку на покупку, по второй на продажу.
  4. Зафиксирована ситуация, когда первая бумага ускорилась вверх, а вторая ускорилась вниз. По первой выставляем сетку на продажу, по второй на покупку.

 

6. Выброс сетки. Отдельным методом.

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Берём значение последнего закрытия свечи по инструменту.
  2. Создание основного объекта сетки.
  3. Устанавливаем тип сетки. В данном случае это MarketMaking. Т.е. будем заходить и выходить по каждой линии отдельно.
  4. Устанавливаем объёмы для сетки.
  5. Устанавливаем настройки для генерации сетки и вызываем метод генерации. После этого внутри сетки появляются линии, по которым будут в дальнейшем выставляться ордера.
  6. Устанавливаем неторговые периоды для сетки.
  7. Устанавливаем Trailing Up. Заметьте, что шаг сдвига рассчитывается в процентах. В данном случае это 0.2%, при этом вызван метод, обрезающий цены по цене инструмента.
  8. Устанавливаем Trailing Down. Заметьте, что шаг сдвига рассчитывается в процентах. В данном случае это 0.2%. При этом вызван метод, обрезающий цены по цене инструмента.
  9. Сохраняем то, что получилось.
  10. Включаем режим сетки в ON. После этого должны начать выставляться заявки.

 

7. Закрытие сетки по обратному сигналу.

Метод вызывается, когда уже есть выброшенные сетки в рынок.

Его смысл – сменить статус сетки на CloseForced, чтобы она закрылась, в случае, если наступило условие для закрытия сетки:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Костыли. Если сетки нет или есть не все, выходим из метода. Должно быть две.
  2. Если у сеток режим уже не On – выходим.
  3. Расчёт графика «Минимальных остатков» и расчёт сигнала относительно линии стандартного отклонения, умноженного на мультипликатор.
  4. В случае, если получен противоположный к открытию сеток сигнал, переводим сетки в режим CloseForced.

 

8. Удаление сетки из памяти по завершению.

Метод вызывается, когда уже есть выброшенные сетки в рынок.

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

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

  1. Удаляем сетку, если она уже отработала.

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16  

 

В заключении.

Данный робот – отличная заготовка для создания маркет-мейкерских алгоритмов. Почти все инструменты, которые мной включались в пару во время тестов, показывают прибыль, совершая десятки тысяч сделок в год:

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16

 Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16 

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

И это прекрасная заготовка под роботов для маркетмейкинга в «нужное» время и «нужную» сторону.

 

Ещё раз поздравляю нас с выходом в зону HFT.

 

Удачных алгоритмов!

Пост из серии статей про Сеточных роботов: https://smart-lab.ru/company/os_engine/blog/1167610.php

Комментарии открыты для друзей!

Торговля раздвижек пар через Маркет-Мейкерскую сетку. ГРААЛЬ. Робот с открытым кодом. Сетки #16

https://smart-lab.ru/company/os_engine/blog/1024149.php

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Канал научный трейдинг: https://t.me/bad_quant

5.9К | ★4

теги блога Алексей Ван <o-s-a.net>

....все тэги



UPDONW
Новый дизайн