12 алгоритмов оптимизации портфеля: HRP, Black-Litterman, NCO и другие
Любой портфельный оптимизатор отвечает на один и тот же вопрос: если есть история цен нескольких активов, какую долю капитала вложить в каждый? Загвоздка в том, что единственно верного ответа не существует — есть лишь семейство ответов, и каждый из них вырастает из своего предположения о том, как ведут себя рынки и насколько вы доверяете собственным оценкам.
Поэтому вместо ставки на один метод мы собрали инструмент, который запускает двенадцать алгоритмов бок о бок — все за единым интерфейсом — и позволяет наблюдать, как они расходятся на реальных данных. Он открыт, написан на Rust и доступен по адресу portfolio-optimizer.marketmaker.cc. Эта статья — карта: во что верит каждый алгоритм, откуда берётся математика и что происходит, когда все двенадцать смотрят на одну и ту же корзину криптоактивов.
Один интерфейс, двенадцать мнений
Каждый алгоритм в проекте экспортирует ровно одну и ту же сигнатуру функции:
pub fn optimize(prices: &[Vec<f64>]) -> Vec<f64>
На входе цены, на выходе веса. Веса только длинные (long-only), неотрицательные и в сумме дают 1.0. В этой однородности и весь смысл: можно заменить Hierarchical Risk Parity на Mean-Variance Optimization, не трогая ни строчки вызывающего кода, и провести бенчмарк всех алгоритмов на идентичных данных. Каждый алгоритм живёт в своём крейте (portfolio-hrp, portfolio-mvo, portfolio-nco, …), так что можно подключить только нужный.
А внутри они устроены совершенно по-разному. Пройдёмся по семействам.
Классика: Mean-Variance Optimization (MVO)
Отсюда началась современная теория портфеля — Гарри Марковиц, 1952 год. MVO трактует аллокацию как задачу условной оптимизации: максимизировать ожидаемую доходность при заданном уровне риска. Формально решается
где — вектор ожидаемых доходностей, — ковариационная матрица, — ваше неприятие риска. Когда входные данные хороши, MVO непобедим: он по построению и есть эффективная граница.
Проблема в том, что входные данные хорошими не бывают никогда. Ожидаемые доходности оцениваются по шумной истории, а MVO к ним крайне чувствителен — крошечное изменение оценки способно перебросить аллокацию с 80% в одном активе на 80% в другом. Практики называют это «максимизацией ошибки»: оптимизатор с радостью заливает капитал в тот актив, чья доходность была переоценена сильнее всего. MVO — это и эталон, с которым все сравниваются, и поучительная история, которую все цитируют.
Иерархическое семейство: HRP, HERC, GHRP, MHRP
В 2016 году Маркос Лопес де Прадо предложил другую идею: вообще не обращать ковариационную матрицу. Hierarchical Risk Parity (HRP) обходит нестабильность MVO, никогда не решая задачу оптимизации напрямую. Работает в три этапа:
- Древовидная кластеризация — превращаем корреляционную матрицу в метрику расстояния, , и строим иерархию активов так, чтобы похожие активы оказались на одной ветви.
- Квазидиагонализация — переупорядочиваем ковариационную матрицу так, чтобы коррелированные активы стояли рядом, концентрируя большие значения вдоль диагонали.
- Рекурсивное деление — делим дерево сверху вниз, распределяя капитал между двумя половинами обратно пропорционально их дисперсии.
В результате портфель уважает структуру рынка — коррелированные активы конкурируют за вес друг с другом, а не со всем сразу. HRP заметно стабильнее MVO на новых данных именно потому, что никогда не обращает плохо обусловленную матрицу.
В проекте четыре представителя этого семейства:
- HRP — исходный алгоритм Лопеса де Прадо.
- HERC (Hierarchical Equal Risk Contribution) — заменяет деление по обратной дисперсии правилом равного вклада в риск в каждом узле, так что каждый кластер вносит равный вклад в общий риск.
- GHRP (Generalized HRP) — параметризованное обобщение, позволяющее настраивать шаги кластеризации и аллокации.
- MHRP (Modified HRP) — вариант, корректирующий веса при делении под распределения доходностей с тяжёлыми хвостами.
Они близкие родственники, но на реальных данных расходятся существенно — поэтому иметь все четыре полезно.
Добавляем мнение: Black-Litterman
Модель Блэка–Литтермана (Goldman Sachs, 1990-е) была создана, чтобы исправить самый практичный изъян MVO: он заставляет задавать ожидаемые доходности по каждому активу, даже по тем, о которых у вас нет никакого мнения. Black-Litterman вместо этого стартует из нейтрального рыночного равновесия и позволяет подмешать ваши собственные взгляды, взвешенные по уверенности.
Здесь — равновесная доходность, и кодируют ваши взгляды («актив A обгонит актив B на 2%»), а — неопределённость этих взглядов. Когда взглядов нет, формула схлопывается обратно в рыночный портфель; когда вы уверены — сильно кренится в сторону ваших ставок. Это самый чувствительный к мнению из двенадцати.
Гибрид: Nested Clustered Optimization (NCO)
NCO, тоже от Лопеса де Прадо, — изящный брак двух миров выше. Он кластеризует активы как HRP, затем запускает небольшую, хорошо обусловленную Mean-Variance Optimization внутри каждого кластера и ещё раз между кластерами. Обращая только маленькие устойчивые подматрицы, NCO ловит оптимальность MVO там, где её безопасно использовать, и при этом избегает нестабильности от обращения одной гигантской ковариационной матрицы. Часто это лучшее из обоих поведений.
Остальной состав
- Entropy Pooling (Меуччи) — вероятностный фреймворк, который находит распределение, ближайшее к вашему априорному (по относительной энтропии), при выполнении набора взглядов как ограничений. Элегантно, когда хочется выразить неопределённость, а не точечные прогнозы.
- OLPS (Online Portfolio Selection) — семейство последовательных стратегий (универсальные портфели, follow-the-winner, возврат к среднему), которые ребалансируют по мере поступления новых цен и имеют доказуемые границы сожаления (regret). Единственный по-настоящему онлайновый метод в наборе.
- RBA (Robust Bayesian Allocation) — оборачивает аллокацию в байесовский слой сжатия, подтягивая шумные оценки к разумному априору, чтобы один странный месяц не доминировал в весах.
- TIC (Theory-Implied Correlation) — заменяет сырую выборочную корреляционную матрицу на очищенную против теоретической структуры (часто экономической таксономии), что может резко улучшить иерархические методы, питающиеся корреляциями.
- Pipeline — наш композитный «фирменный» алгоритм: основа на HRP с опциональным long/short-оверлеем и ограничением по CVaR (хвостовой риск). Через единый long-only-вход
optimize()он ведёт себя как HRP; его машинерия long/short и хвостового риска оживает, когда его кормят явными сигналами.
Что происходит, когда все двенадцать соревнуются
А вот и самое интересное. Мы направили все двенадцать на намеренно смешанную корзину — три сильных лидера (ZEC, Tether Gold, 1000RATS) и три тяжёлых аутсайдера (FLOW, KAVA, LINEA) — на окне с сентября 2025 по февраль 2026 и дали каждому распределить капитал.
| Алгоритм | Годовая доходность | Шарп |
|---|---|---|
| RBA | +149% | — |
| MVO | +74% | 2.52 |
| Entropy Pooling | +57% | 1.93 |
| NCO | +44% | — |
| HERC | +30% | — |
| Black-Litterman | +7% | — |
| OLPS | −74% | — |
| MHRP | −78% | — |
| GHRP | −95% | — |
| HRP / Pipeline | −103% | −2.45 |
| TIC | −131% | — |
Громкая оговорка, прежде чем вы что-то из этого выведете: эти числа получены на одной корзине за одно окно, и корзина была собрана с экстремальными лидерами и аутсайдерами специально. Это не заявление о доходности и тем более не совет — это демонстрация расхождения в поведении. Запустите на своих активах — и ранжирование полностью перестроится.
Но урок — в форме результата. Методы, ищущие доходность — MVO, RBA, Entropy Pooling, NCO — сконцентрировали капитал в лидерах и напечатали уверенный плюс. Чистые методы паритета риска — HRP, TIC, MHRP, GHRP — распределили вес равномерно ради диверсификации, а значит держали и аутсайдеров, и ушли в минус. Ни то, ни другое поведение не «неправильное». Паритет риска создан, чтобы выживать, когда вы не можете заранее отличить лидеров от аутсайдеров; на корзине, где будущее было подстроено предсказуемым, он платит цену за свою скромность. Это напряжение — концентрация против диверсификации, убеждённость против робастности — и есть вся область в одной таблице.
Open source и живой инструмент
Всё открыто: двенадцать крейтов-алгоритмов на Rust как git-сабмодули, HTTP-бэкенд на Axum, который их диспетчеризует, и фронтенд на Next.js с интерактивным графиком эффективной границы и таблицей сравнения. Вы можете:
- попробовать вживую на portfolio-optimizer.marketmaker.cc — выбрать активы, диапазон дат и алгоритм и смотреть, как обновляются веса и граница;
- открыть вкладку Compare Methods и прогнать все двенадцать на идентичных ценах сразу;
- подключить любой отдельный крейт (
portfolio-hrp,portfolio-nco, …) в свой Rust-проект.
Выводы
- Универсально лучшего оптимизатора нет. Правильный выбор зависит от того, насколько вы доверяете своим оценкам доходности. Доверяете → MVO/Black-Litterman. Нет → HRP и компания.
- MVO оптимален и хрупок. Он задаёт эффективную границу, но максимизирует ошибку оценки. Относитесь к его весам с подозрением, если входные данные не по-настоящему надёжны.
- Иерархические методы меняют пиковую доходность на стабильность. Они редко возглавляют отдельный бэктест, но и редко взрываются — а это и есть то, что важно, когда будущее неизвестно.
- Единый интерфейс — это суперсила. Когда каждый алгоритм — это
prices -> weights, честное сравнение не стоит ничего, а переключение бесплатно.
Лучший способ понять двенадцать алгоритмов — наблюдать, как они спорят. Идите запустите сравнение на активах, которые вам действительно важны.
Источники
- Markowitz, H. (1952). Portfolio Selection. The Journal of Finance.
- López de Prado, M. (2016). Building Diversified Portfolios that Outperform Out of Sample. The Journal of Portfolio Management.
- López de Prado, M. (2020). Machine Learning for Asset Managers. Cambridge University Press.
- Black, F., & Litterman, R. (1992). Global Portfolio Optimization. Financial Analysts Journal.
- Meucci, A. (2008). Fully Flexible Views: Theory and Practice. Risk.
- Marketmaker.cc: marketmaker.cc
Авторы
Евгений Соловьёв · suenot@gmail.com Разработка торговых ботов с 2017 года: межбиржевой арбитраж (подключал до 30 бирж), парный арбитраж на коинтеграции между спотом и фьючерсами, скальпинг, фронтраннинг, торговля по новостям, сентиментный анализ, трендовые алгоритмы, а также алгоритмы управления и балансировки портфелей. Делает выставление ордеров до 1 мс, warehouse для big data, бэктестинг-движки, AI-агентов и интерфейсы для ботов (в т.ч. open-source profitmaker.cc). Стек: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, архитектура.
Марина Журавлёва · marinade20p3@gmail.com Студентка 5 курса МГТУ им. Баумана (направление «системы автоматического управления»), развивает финансовую математику. Занималась калибровкой моделей стохастической волатильности (Хестон) и локальной волатильности (Дюпир), справедливой оценкой опционов (в том числе экзотических) как методами Монте-Карло, так и аналитическими формулами, устранением ошибки хеджирования, соприкасалась с LSV.
Кирилл Киселёв · kkiselev.nsk@gmail.com Студент 4 курса мехмата НГУ; диплом по калибровке модели Хестона и дельта-хеджированию в этой же модели. Занимался портфельной оптимизацией.
Citation
@article{soloviov2026portfoliooptimization,
author = {Soloviov, Eugen and Zhuravleva, Marina and Kiselev, Kirill},
title = {12 Portfolio Optimization Algorithms, Compared: HRP, Black-Litterman, NCO and Beyond},
year = {2026},
url = {https://marketmaker.cc/ru/blog/post/portfolio-optimization-algorithms-compared},
description = {A tour of twelve portfolio allocation algorithms — MVO, the hierarchical family (HRP, HERC, GHRP, MHRP), Black-Litterman, NCO, Entropy Pooling, OLPS, RBA, TIC and a composite pipeline — behind a single Rust interface, with an honest side-by-side comparison on a mixed crypto basket.}
}
MarketMaker.cc Team
Количественные исследования и стратегии