
Сегодня разбираем робота RebalancerByMomentum — самого насыщенного ребалансера сборника. Если предыдущие два опирались на календарь дивидендов, то этот вообще не смотрит на выплаты. Его вопрос к рынку другой: где сейчас сила? В акциях — берём самые сильные. Нет силы в акциях — проверяем золото. Нет силы нигде — сидим в денежном рынке.
1) Торговая идея
Классическая моментум-логика: активы, которые росли последнее время, склонны продолжать рост. Робот каждую неделю измеряет силу тренда по трём классам активов и перекладывает капитал в сильнейшие:
Акции. Если рынок в целом здоров — покупаем топ-10 бумаг с самым сильным моментумом.
Золото. Если акции слабы, а у золота есть умеренный тренд — паркуемся в нём.
TMON@ (LQDTMOEX в тестере). Если слабо всё — капитал ждёт в денежном рынке и зарабатывает ставку.
Получается трёхуровневая защита: агрессия, защитный актив, кэш. Робот сам решает, на каком уровне находиться, и делает это по расписанию — без паники и суеты.
ВАЖНО!
Робот использует фонд ликвидности. Это такой инструмент, который всегда растёт, давая прибыль в условную ставку ЦБ. На западных площадках самый популярный инструмент называется LQDT («Ликвидность»). У нас в РФ множество других инструментов с похожей механикой и похожими названиями. У брокера Т-Инвестиции такой инструмент называется TMON@, а в тестере это LQDTMOEX. И то и другое — одно и то же.
2) Источники робота
BotTabScreener — скринер по множеству акций: именно здесь считаются индикаторы и отбирается топ по моментуму.
BotTabSimple под золото — со своими собственными индикаторами и настройками.
BotTabSimple под TMON@ (LQDTMOEX в тестере) — финальная парковка капитала. Через эту вкладку робот также читает портфель и свободные деньги.
3) Индикаторы
Momentum — классический моментум: отношение текущей цены к цене N свечей назад, в процентах. Значение выше 100 — актив вырос за период, ниже 100 — упал. Периоды по умолчанию: 49 свечей для акций, 60 для золота.
Keltner Channel — канал Кельтнера: EMA плюс-минус ATR, умноженный на коэффициент. Мы подробно разбирали его в третьей статье прошлого цикла. Здесь канал работает в двух ролях: верхняя граница — условие пробоя для входа, центральная линия — фильтр здоровья рынка. Настройки по умолчанию: акции — EMA 375, ATR 20, множитель 5,5; золото — EMA 640, ATR 20, множитель 1,4.
Обратите внимание: множители канала подобраны под таймфрейм 30 минут. Это не случайные числа — они калиброваны под получасовую динамику. Меняете таймфрейм — переподбирайте и канал, и пороги моментума.
4) Логика робота
Наступило время основного ребаланса (по умолчанию вторник, 10:00).
Робот идёт по шагам:
Шаг 1. Фильтр здоровья рынка. Сначала робот оценивает рынок в целом: считает, какая доля бумаг скринера торгуется выше центральной линии канала Кельтнера. Если растущих бумаг меньше, чем Stock % grow (по умолчанию 54%) — рынок считается слабым и в акции робот не идёт вообще, каким бы сильным ни был моментум отдельных бумаг. Это главный рубильник стратегии.
Шаг 2. Отбор акций. Если рынок здоров, бумага попадает в кандидаты, когда совпадают оба условия:
моментум не ниже Stock min momentum (по умолчанию 103,9 — то есть бумага выросла минимум на 3,9% за 49 свечей);
Цена закрытия выше верхней границы канала Кельтнера — есть подтверждённый пробой.
Кандидаты сортируются по убыванию моментума, и робот берёт топ-10 (параметр Stock Top N). Под акции выделяется до 50% депозита, деньги делятся поровну.
Шаг 3. Золото. Если по акциям позиций нет, робот проверяет золото. Условия хитрее, чем кажется:
моментум золота должен быть в коридоре от 99,5 до Gold max momentum (по умолчанию 102,3). Не перегрето и не в обвале — золото как защита покупается именно в умеренном тренде;
цена выше верхней границы канала Кельтнера.
Шаг 4. TMON@ (LQDTMOEX в тестере). У фонда своё отдельное время ребаланса (по умолчанию 11:00, через час после основного). Логика аккуратная: если есть позиции в акциях или золоте — TMON@ закрывается; если их нет — докупается до 49% депозита. В тестере позиция переоткрывается при смене года, а за 5 дней до конца теста закрывается, чтобы не тянуть хвост в отчёт.
И три детали кода, которые отличают боевого робота от учебного:
1) айсберг-заявки.
Все входы и выходы по акциям и золоту исполняются через BuyAtIcebergMarket / CloseAtIcebergMarket: заявка дробится на части с паузами между ними. На крупном капитале это экономит реальные деньги на проскальзывании.
2) пауза после закрытия акций.
В реальном режиме, закрыв позиции по акциям, робот ждёт 30 секунд, пока портфель обновится на бирже, и только потом считает деньги под золото. Без этой паузы расчёт объёма пошёл бы по устаревшей стоимости портфеля.
3) робот не доливает в существующие позиции.
Если по бумаге уже есть позиция, новый вход не открывается: только полное закрытие на ребалансе и новый вход по новому сигналу. Это делает поведение предсказуемым и упрощает учёт.
5) Исходный код в проекте
Робот лежит в открытом доступе на ГитХабе:
https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/Rebalancers/RebalancerByMomentum.cs
6) Настройки робота
Параметры разбиты на четыре вкладки. Разбираем по порядку.
Вкладка Base:
Regime — режим работы: On / Off.
Вкладка Stock:
Вкладка Gold:
Вкладка LQDT:
7) Запуск робота в тестере
Создайте сет из ликвидных акций MOEX — чем шире, тем честнее фильтр здоровья рынка: он считает долю растущих бумаг по всему сету. Не менее 30 бумаг.
8) Один из вариантов тестирования
Штатные настройки робота, ТОП-30 ликвидных акций MOEX + золото + LQDTMOEX, тест за 10 лет:
На этом цикл «Ребалансинг в алго» заканчивается. Теперь у вас есть полный набор: календарный ребалансер, смешанный с золотом и моментумный с трёхуровневой защитой. Берите код, тестируйте, подгоняйте под себя — и делитесь результатами в сообществе!
Удачных алгоритмов!
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