rss

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

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

Блог компании OsEngine | Синтетические облигации в алго №5: SyntheticBondsScalper — скальпер по стакану

Продолжаем цикл «Синтетические облигации в алго».

До этого мы разбирали арбитражных роботов, которые входили в синтетическую облигацию в основную торговую сессию.

В этой статье покажем робота иного склада: SyntheticBondsScalper. Позиция «лонг акция + шорт фьючерс» набирается у него лимитными ордерами по стакану, по уровням контрагента, асинхронно. Работает он круглосуточно — днём, ночью и в выходные, когда на рынке нет маркет-мейкера, а слабые трейдеры есть. И есть возможность собрать «по зёрнышку» позицию на 30–70% лучше по прибыли, чем LQDT.

Синтетические облигации в алго №5: SyntheticBondsScalper — скальпер по стакану

1) Торговая идея

Синтетическая облигация — конструкция из акции (базы) и фьючерса на неё. Пока фьючерс дороже базы (контанго), позиция лонг акция + шорт фьючерс к экспирации приносит почти безрисковую доходность: цены сходятся, а раздвижка между ними забирается как прибыль.

Классика входит в такой арбитраж маркетом: две ноги уходят рыночными ордерами, и весь контанго-спред съедается проскальзыванием в стакане. Скальпер действует иначе — он снимает ликвидность постепенно, лимитками на встречной стороне:

фьючерс продаёт по биду контрагента.

базу покупает по аску контрагента.


Позиция набирается порциями, не торопясь. А поскольку MOEX теперь торгуется почти круглосуточно (будни с 07:00 до 23:50, выходные 09:50–19:00), робот ловит контанго и в те часы, когда обычный маркет-арбитражёр давно спит.

 

2) Источники робота

BotTabSimple — вкладка под базовую акцию. Десять пар, как у арбитражей сборника.

BotTabScreener — скринер серий фьючерсов. В отличие от арбитражей, здесь берутся три ближайшие серии — все три равноправные кандидаты на вход.

BotTabSimple под LQDT — парковка свободных денег. Свободные деньги уходят в фонд ликвидности TMON, но не целиком: робот всегда оставляет буфер свободных рублей на счёте (об этом в логике).

Авто-деплой, мультипликаторы и сами пары — всё как у предыдущих роботов, повторяться не будем.

 

3) Режимы работы

Базовых режимов четыре:

Off — логика отключена;

OnByLqdtSpread — вход, если годовая доходность контанго выше LQDT + порог;

OnByFixedYield — вход, если годовая доходность выше фиксированного порога;

OnlyExit — только выход: входы запрещены, робот закрывает набранные позиции. Сюда робот уходит и сам, при накоплении ошибок.

 

4) Логика робота

Шаг 1. Выбор претендента. Раз в Logic thread interval (5 секунд) робот перебирает десять пар и у каждой — три ближайшие серии. Считает годовую доходность каждой комбинации «бумага × серия» и выбирает максимальную. В серии ближе, чем Days before expiration to exit дней до экспирации, не входит — их пора закрывать, а не открывать.

Шаг 2. Порог входа. В режиме OnByLqdtSpread порог — доходность LQDT + Min yield diff over LQDT % ann (3.75). В OnByFixedYield — фиксированный Min yield to entry % ann (10). Доходность ниже порога — стоим.

Шаг 3. Размер позиции от денег. Параметров Volume type/Volume здесь нет: сайзинг считается от свободных денег. Робот берёт минимум из двух ограничений — сколько позволяет потолок Max position % портфеля и сколько хватает свободных денег с учётом ГО фьючерса.

Шаг 4. Вход лимитками. Фьючерс продаётся лимитным ордером по биду, затем пауза Delay in real ms (500 мс), затем база покупается лимиткой по аску. Ордер, не исполнившийся за Limit order timeout, sec (30), отменяется — робот не гоняется за рынком.

Шаг 5. Защита от параллельных входов. Пока на бирже висят неисполненные лимитки (HasOrdersInMarket по всем вкладкам), новых входов нет. Плюс кулдаун Entry cooldown, sec (20) после исполнения — позиция не набирается дёрганно.

Шаг 6. Выход. Единственный плановый выход — за Days before expiration to exit (7) дней до экспирации, лимитками в окне Exit window start/end hour (10–18). Выходные для выхода включаются флагами Exit on Saturday/Sunday. Если лимитки не исполнились за Exit market fallback, sec (120) — уходим маркетом. Если фьючерс уже экспирировался — аварийный маркет сразу. И в любой момент есть ручная кнопка Close в мониторе.

Шаг 7. LQDT-ветка. Свободные деньги паркуются в TMON, но с буфером LQDT free money buffer (5000): выше буфера — докупаем TMON, ниже — продаём TMON, чтобы не уйти в минус. Покупка ограничивается реальным свободным остатком (чтобы не лезть в маржу по фонду). Между операциями — кулдаун 60 секунд, ордера меньше 1000 ₽ не выставляются.

Шаг 8. Ошибки. Робот считает ошибки открытия и отмены ордеров. Накопилось Fail open orders to reaction (10) или Fail cancel orders to reaction (10) — автоматический переход в OnlyExit и растущий «отпуск» логики. Счётчики сбрасываются в начале дня.

 

5) Исходный код в проекте

Робот в открытом доступе на ГитХабе:

https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/SyntheticBond/SyntheticBondsScalper.cs

 

6) Настройки робота

Пройдёмся по вкладкам.


ВкладкаBase:

Regime — режим работы: Off / OnByLqdtSpread / OnByFixedYield / OnlyExit. По умолчанию Off.

Logicthreadinterval, sec — период основного цикла логики. По умолчанию 5 секунд.

Table update interval, sec — период обновления таблицы монитора. По умолчанию 5 секунд.

Full log is on — подробное логирование всех решений. По умолчанию включено.

Entry cooldown, sec — пауза между входами после исполнения ордера. По умолчанию 20 секунд.

Min yield diff over LQDT % ann — порог превышения доходности контанго над LQDT для режима OnByLqdtSpread. По умолчанию 3.75.

Min yield to entry % ann — фиксированный порог доходности для режима OnByFixedYield. По умолчанию 10.

Max position % of portfolio — потолок доли портфеля под позицию. По умолчанию 85.

Limit order timeout, sec — через сколько секунд отменять неисполненную лимитку. По умолчанию 30.

Non trade periods — кнопка неторговых периодов. Из коробки выставлены периоды MOEX по дням недели: будни — ночь, утренний аукцион, дневной и вечерний клиринги, конец дня; выходные — свой сокращённый график. С отступами по 20 секунд от границ. Выходные торгуются.


Вкладка Exit:

Days before expiration to exit — выход из позиции за столько дней до экспирации. По умолчанию 7.

Exit market fallback, sec — через сколько секунд уходить маркетом, если лимитки выхода не исполнились. По умолчанию 120.

Exit window start hour / end hour — окно ликвидности для лимитного выхода. По умолчанию 10–18.

Exit on Saturday / Sunday — разрешение планового выхода по выходным. По умолчанию выключено.


Вкладка Trade series:

Trade series 1/2/3 is on — какие из трёх ближайших серий фьючерса рассматривать как кандидатов. По умолчанию все три включены.

Вкладка Errors reaction:

Fail orders reaction is on — реакция на ошибки ордеров. По умолчанию включена.

Fail open orders to reaction — порог ошибок открытия для перехода в OnlyExit. По умолчанию 10.

Fail cancel orders to reaction — порог ошибок отмены. По умолчанию 10.

Reset error counters at start of day — сброс счётчиков ошибок в начале дня. По умолчанию включён.

Delay in real, ms — пауза между ногами входа и базовая задержка «отпуска» логики. По умолчанию 500.


Вкладка LQDT:

LQDT regime is on — парковка свободных денег в фонд ликвидности. По умолчанию включена.

LQDT yield days — окно расчёта доходности LQDT для гейта входа. По умолчанию 10 дней.

LQDT free money buffer — сколько свободных рублей всегда оставлять на счёте. По умолчанию 5000.

ВкладкаFut mults:

Mult regime — Auto или Manual. В Auto мультипликаторы проставляются при деплое по бумаге и дате.

Fut mult 2, 4, …, 20 — мультипликаторы для режима Manual. Как и у арбитражей, параметры названы чётными номерами.

Вкладка Auto deploy:

Portfolio number — портфель для деплоя в реале.

Deploy time frame — таймфрейм источников в реале. По умолчанию Min5.

Deploy standard securities — кнопка авто-развёртывания десяти пар и LQDT-вкладки по бумагам коннектора с диалогом подтверждения.

 

7) Запуск робота в реале

Робот разворачивается кнопкой «Deploy standard securities» под T-Инвестиции: десять пар «акция + фьючерсы» и вкладка LQDT прописываются автоматически.

Стартовать логику имеет смысл постепенно: сначала Regime = Off, прогнать деплой, убедиться, что стаканы и портфель живы. Затем OnByLqdtSpread — робот начнёт набирать позиции лимитками по мере появления контанго.

Следите за неторговыми периодами: робот сам не полезет в аукционы и клиринги, но расписание MOEX меняется — при необходимости — правки через кнопку «Non trade periods».

 

8) На что смотреть

Монитор. Таблица с парами: акция, мультипликатор, три серии фьючерсов (кнопки-чарты с доходностью), кнопка Close. Позиции подсвечиваются с объёмами. Отдельная строка LQDT показывает парковку и её доходность.

Лог. При Full log is on видно всё: ENTRY limit с объёмами и ценами, LQDT park buy / LQDT cover sell, EXIT by expiration, MANUAL CLOSE. По логу легко проверить, что робот входит лимитками, а не маркетом.

Ночь и выходные. Это родная среда робота: утром до 07:00 и вечером после 23:50 в будни и вне окна 09:50–19:00 в выходные, он стоит по неторговым периодам, а в остальное время набирает позицию.

Ошибки. Если ордера начнут отваливаться, робот сам уйдёт в OnlyExit и остановит новые входы — это штатная защита, а не сбой.

 

ВАЖНО 1!

Это единственный робот сборника по синтетике, который создан только под реальную торговлю. Тестера и оптимизатора у него нет: логика опирается на живой стакан. Пожалуйста, не надо пытаться тестировать робота за 10 лет на свечных данных. Если нужны тесты принципиальной прибыльности этой стратегии — нужно использовать предыдущие роботы серии. Этот для запуска по стаканам. Робот, собирающий свою позицию по 1 контракту, если придётся.

 

ВАЖНО 2!!!

Робот тестировался у брокера Т-Инвестиции. Только у него будет полноценно работать режим «Авто-развёртывания». Также у брокера есть режим дополнительных ночных сессий, в которых данный робот также может собирать позицию из «слабых рук».

 

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

Синтетические облигации в алго №5: SyntheticBondsScalper — скальпер по стакану

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

 

Скачать OsEngine: https://github.com/AlexWan/OsEngine
Официальная поддержка OsEngine в MAX:https://max
Канал Научный трейдинг в MAX:https://max.ru/

Поддержка OsEngine в Телеграм:https://t.me/osengine_official_support 
Канал Научный трейдинг (Bad Quant) в Телеграм:https://t.me/bad_quant

Синтетические облигации в алго №5: SyntheticBondsScalper — скальпер по стакану
https://www.tbank.ru/invest/

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • обсудить на форуме:
  • OsEngine
7.2К | ★8

теги блога OS_Engine_team

....все тэги



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