
Продолжаем цикл «Ребалансинг в алго».
Сегодня разбираем робота RebalancerByDividendQuality — самый компактный и наглядный ребалансер сборника. Никаких индикаторов, никаких весов: только календарь дивидендов и бинарное решение раз в неделю. Идеальный экземпляр для первого знакомства с тем, как устроены ребалансировщики в коде.
1) Торговая идея
Робот еженедельно переключает капитал между двумя состояниями:
• Есть кандидаты. В скринере нашлись акции, у которых отсечка реестра наступит в ближайшие 7 дней, а доходность выплаты не ниже 0.8%. Тогда торговый капитал равномерно входит в эти акции.
• Кандидатов нет. Тогда все позиции в акциях закрываются, и капитал уходит в TMON@ — фонд денежного рынка. Капитал не простаивает: пока рынок «без дивидендов», он зарабатывает ставку.
ВАЖНО!
Робот использует фонд ликвидности. Это такой инструмент, который всегда растёт, давая прибыль в условную ставку ЦБ. На западных площадках самый популярный инструмент называется LQDT («Ликвидность»). У нас в РФ множество других инструментов с похожей механикой и похожими названиями. У брокера Т-Инвестиции такой инструмент называется TMON@, а в тестере это LQDTMOEX. И то и другое — одно и то же.
2) Источники робота
BotTabScreener — скринер по множеству бумаг: робот каждую неделю заново отбирает из него кандидатов.
BotTabSimple — отдельная вкладка под TMON@ (в тестере LQDTMOEX). Через неё же робот читает стоимость портфеля и свободные деньги.
WikiMaster — источник данных о дивидендах: даты отсечек и доходность ближайших выплат. Работает и в тестере, и в бою.
3) Индикаторы
Их нет совсем. Робот не смотрит ни на тренд, ни на волатильность, ни на объёмы — только на календарь дивидендов и доходность выплат. Вся магия в отборе бумаг и в гигиене исполнения, о которой ниже.
Это хороший пример для дискуссии о том, что робот — не обязательно индикаторная машина. Иногда достаточно календаря и дисциплины.
4) Логика робота
Наступил день и час ребалансировки (по умолчанию понедельник, 11:00). Дальше всё просто:
Шаг 1. Отбор кандидатов. По каждой бумаге скринера робот запрашивает ближайший дивиденд и берёт бумагу, если:
дата отсечки реестра — в окне Lookahead days от текущей даты (по умолчанию 7 дней);
дивидендная доходность выплаты не ниже Min dividend % (по умолчанию 0.8%).
Шаг 2. Кандидаты есть: робот закрывает позицию в TMON@, закрывает все старые позиции в акциях и покупает кандидатов равными долями. Под акции выделяется Max stocks deposit percent капитала (по умолчанию 50%).
Шаг 3. Кандидатов нет: робот закрывает все позиции в акциях, если позиции в TMON@ ещё нет, покупает TMON@, на Max LQDT deposit percent капитала (по умолчанию 49%).
А теперь две детали кода, ради которых стоит открыть исходник.
Первая — TMON@ не перезакупается каждую неделю. Если позиция в фонде уже есть, робот её не трогает — зачем лишние сделки? Перезакупка происходит только при смене года: позиция закрывается и открывается заново. Это сделано осознанно — чтобы зафиксировать прибыль внутри налогового периода и не портить налоговый учёт.
Вторая — автообновление базы дивидендов. В боевом режиме утром в день ребалансировки (по умолчанию 8:00) робот проверяет возраст базы Wiki/Dividends. Если ей больше 5 дней — запускается обновление через WikiMaster в отдельном потоке, не блокируя торговлю. А если к моменту ребаланса обновление ещё идёт, ребаланс честно откладывается до его завершения. Торговать по протухшему календарю робот не будет.
5) Исходный код в проекте
Робот лежит в открытом доступе на ГитХабе:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/Rebalancers/RebalancerByDividendQuality.cs
6) Настройки робота
Параметры разбиты на две вкладки. Разбираем по порядку.
Вкладка Base:
Regime — режим работы: On / Off.
Rebalance day of week — день недели: Monday / Tuesday / Wednesday. По умолчанию понедельник.
Rebalance time — время ребалансировки. По умолчанию 11:00.
Lookahead days — на сколько дней вперёд смотреть отсечки. По умолчанию 7.
Min dividend % — минимальная дивидендная доходность. По умолчанию 0.8%.
Max LQDT deposit percent — доля капитала под LQDT. По умолчанию 49%.
Max stocks deposit percent — доля капитала под акции. По умолчанию 50%.
Rebalance NOW — кнопка немедленной ребалансировки вне расписания.
Вкладка Update:
Auto update dividends — автообновление базы дивидендов в боевом режиме. По умолчанию On.
Dividends update check time — время проверки базы в день ребалансировки. По умолчанию 8:00.
Dividends max age days — предельный возраст базы. По умолчанию 5 дней.
Start update dividends — кнопка ручного запуска обновления.
7) Запуск робота в тестере
Создайте сет из ликвидных дивидендных акций MOEX — Сбербанк, Газпром, Лукойл и другие бумаги с регулярными выплатами.
Добавьте вторую вкладку с TMON@, через неё робот паркует капитал в «пустые» недели.
Таймфрейм — 30 минут. Меньше не надо: решения принимаются раз в неделю по закрытию свечи, и получасовиков хватает с запасом.
Включите выплату дивидендов в тестере. В эмуляторе биржи.
Запустите тест на нескольких годах истории. Обратите внимание, как портфель «дышит»: весна-лето — акции, поздняя осень и январь — подолгу TMON@.
8) Один из вариантов тестирования
Штатные настройки робота, ТОП-30 дивидендных акций MOEX + TMON@(LQDTMOEX в тестере), тест за 10 лет:
9) Риски и нюансы
Честно про слабые места:
1) Дивидендный гэп. Робот покупает перед отсечкой и держит до следующего ребаланса. Если рынок рухнул вместе с гэпом — неделя будет тяжёлой. Защиты от этого в роботе нет: это осознанно простая конструкция.
2) Без фильтра качества бумаги. Доходность выше порога — единственный критерий. Высокая доходность бывает и у падающих бумаг (знаменитая ловушка: цена упала — доходность выросла). Следите за составом сета.
3) Концентрация. Капитал делится поровну между всеми кандидатами, сколько бы их ни было. Два кандидата — по 25% на бумагу. Десять — по 5%.
4) Зависимость от базы дивидендов. Протухшая база = неверные решения. В реале робот следит за этим сам, но первичную базу закачайте руками и проверьте, что она обновляется.
Следующая статья — RebalancerByMomentum: добавим к ребалансировке тренд, золото и айсберг-заявки. Самый технологичный робот цикла. Подписывайтесь!
Удачных алгоритмов!

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