Продолжаем цикл «Аллокация капитала».
Сегодня — второй алгоритм, академический: иерархический риск-паритет, или HRP. В отличие от равновесной кластеризации из прошлой статьи, он не делит капитал поровну, а распределяет его обратно волатильности: менее волатильные роботы получают больше.
1) Откуда ноги растут
Метод описал Маркос Лопес де Прадо в 2016 году. Он решает ту самую проблему, о которой мы говорили в статье про Марковица: классическая оптимизация весов неустойчива — малые ошибки в оценке ковариаций дают большие скачки весов.
Идея де Прадо: не решать задачу оптимизации «в лоб», а сначала построить иерархию (дерево) из активов по корреляции, а потом делить капитал сверху вниз по этому дереву. Устойчивость — потому что дерево меняется мало, даже если входные оценки слегка шумят.
2) Три шага алгоритма
Шаг 1. Tree Clustering — строим дерево. По корреляционной матрице считаем расстояния:
и строим дендрограмму — дерево, в котором похожие роботы сливаются раньше, разные — позже. Метод слияния задаётся параметром линковки: single (по ближайшим), complete (по дальним), average (по средним) или ward.
Шаг 2. Quasi-Diagonalization — упорядочиваем. Обходим дерево так, чтобы похожие роботы оказались рядом. На выходе — порядок роботов, где соседи максимально похожи.
Шаг 3. Recursive Bisection — делим капитал. Идём сверху вниз по дереву: на каждом разветвлении считаем дисперсию левой и правой ветки и делим капитал между ними обратно дисперсии. Ветка с меньшей волатильностью получает большую долю.
3) Формулы
Дисперсия ветки считается как дисперсия портфеля с весами ∝ 1/σ² внутри неё. Грубо: сначала каждому роботу внутри ветки даётся вес, обратный его волатильности, потом из этого считается дисперсия всей ветки.
На каждом разветвлении доли:
α = 1 − v₁ / (v₁ + v₂)
где v₁ и v₂ — дисперсии двух веток. Менее волатильная ветка получает больше. Веса роботов перемножаются по пути от корня к листьям.
4) Интерфейсы
В OsEngine алгоритм живёт на вкладке «Расчёты» → «Иерархический риск-паритет».
Линковка (single / complete / average / ward) — метод слияния в дереве.
Ковариация (sample / shrinkage) — как оценивается ковариационная матрица. Shrinkage — это сглаживание Ледойта–Вольфа, устойчивее обычной выборочной оценки.
Корреляция (Pearson / Spearman) — какой мерой считается похожесть.
Кнопка «Рассчитать».
Дендрограмма — дерево, точки роботов раскрашены по кластерам. Клик по точке — подсветка робота в таблице.
Таблица результата — те же колонки весов 100%–600%.
Кнопка «Сохранить результат».
5) MCP API
Через MCP — те же действия:
allocation_hrp_settings_set — linkage / covariance / correlation;
allocation_hrp_calculate — рассчитать;
allocation_hrp_result_get — веса, кластеры, а также дерево (allocation_merges) и порядок листьев (allocation_leaf_order).
Удачных алгоритмов!
Комментарии открыты для друзей!
https://smart-lab.ru/company/os_engine/blog/1024149.php
Скачать OsEngine: https://github.com/AlexWan/OsEngine
Официальная поддержка OsEngine в MAX: https://max.ru/join/Yar1c0k41XMwbnBXWutnmj4rWMk3RrhXIUqpGl8wOog
Канал Научный трейдинг в MAX: https://max.ru/id2373023082_biz
Поддержка OsEngine в Телеграм: https://t.me/osengine_official_support
Канал Научный трейдинг (BadQuant) в Телеграм: https://t.me/bad_quant