← К списку статей
May 22, 2026
5 мин. чтения

12 алгоритмов оптимизации портфеля: HRP, Black-Litterman, NCO и другие

12 алгоритмов оптимизации портфеля: HRP, Black-Litterman, NCO и другие
#оптимизация портфеля
#иерархический паритет риска
#HRP
#среднее-дисперсия
#Black-Litterman
#NCO
#паритет риска
#Rust
#количественные финансы
#распределение активов

Любой портфельный оптимизатор отвечает на один и тот же вопрос: если есть история цен нескольких активов, какую долю капитала вложить в каждый? Загвоздка в том, что единственно верного ответа не существует — есть лишь семейство ответов, и каждый из них вырастает из своего предположения о том, как ведут себя рынки и насколько вы доверяете собственным оценкам.

Поэтому вместо ставки на один метод мы собрали инструмент, который запускает двенадцать алгоритмов бок о бок — все за единым интерфейсом — и позволяет наблюдать, как они расходятся на реальных данных. Он открыт, написан на 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 трактует аллокацию как задачу условной оптимизации: максимизировать ожидаемую доходность при заданном уровне риска. Формально решается

maxwwμγ2wΣwприiwi=1,wi0\begin{aligned} \max_{w} \quad & w^\top \mu - \frac{\gamma}{2}\, w^\top \Sigma w \\ \text{при} \quad & \sum_i w_i = 1, \quad w_i \ge 0 \end{aligned}

где μ\mu — вектор ожидаемых доходностей, Σ\Sigma — ковариационная матрица, γ\gamma — ваше неприятие риска. Когда входные данные хороши, MVO непобедим: он по построению и есть эффективная граница.

Проблема в том, что входные данные хорошими не бывают никогда. Ожидаемые доходности μ\mu оцениваются по шумной истории, а MVO к ним крайне чувствителен — крошечное изменение оценки способно перебросить аллокацию с 80% в одном активе на 80% в другом. Практики называют это «максимизацией ошибки»: оптимизатор с радостью заливает капитал в тот актив, чья доходность была переоценена сильнее всего. MVO — это и эталон, с которым все сравниваются, и поучительная история, которую все цитируют.

Иерархическое семейство: HRP, HERC, GHRP, MHRP

В 2016 году Маркос Лопес де Прадо предложил другую идею: вообще не обращать ковариационную матрицу. Hierarchical Risk Parity (HRP) обходит нестабильность MVO, никогда не решая задачу оптимизации напрямую. Работает в три этапа:

  1. Древовидная кластеризация — превращаем корреляционную матрицу в метрику расстояния, dij=12(1ρij)d_{ij} = \sqrt{\tfrac{1}{2}(1 - \rho_{ij})}, и строим иерархию активов так, чтобы похожие активы оказались на одной ветви.
  2. Квазидиагонализация — переупорядочиваем ковариационную матрицу так, чтобы коррелированные активы стояли рядом, концентрируя большие значения вдоль диагонали.
  3. Рекурсивное деление — делим дерево сверху вниз, распределяя капитал между двумя половинами обратно пропорционально их дисперсии.

В результате портфель уважает структуру рынка — коррелированные активы конкурируют за вес друг с другом, а не со всем сразу. HRP заметно стабильнее MVO на новых данных именно потому, что никогда не обращает плохо обусловленную матрицу.

В проекте четыре представителя этого семейства:

  • HRP — исходный алгоритм Лопеса де Прадо.
  • HERC (Hierarchical Equal Risk Contribution) — заменяет деление по обратной дисперсии правилом равного вклада в риск в каждом узле, так что каждый кластер вносит равный вклад в общий риск.
  • GHRP (Generalized HRP) — параметризованное обобщение, позволяющее настраивать шаги кластеризации и аллокации.
  • MHRP (Modified HRP) — вариант, корректирующий веса при делении под распределения доходностей с тяжёлыми хвостами.

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

Добавляем мнение: Black-Litterman

Модель Блэка–Литтермана (Goldman Sachs, 1990-е) была создана, чтобы исправить самый практичный изъян MVO: он заставляет задавать ожидаемые доходности по каждому активу, даже по тем, о которых у вас нет никакого мнения. Black-Litterman вместо этого стартует из нейтрального рыночного равновесия и позволяет подмешать ваши собственные взгляды, взвешенные по уверенности.

E[R]=[(τΣ)1+PΩ1P]1×[(τΣ)1Π+PΩ1Q]\begin{aligned} E[R] = {} & \big[(\tau\Sigma)^{-1} + P^\top \Omega^{-1} P\big]^{-1} \\ & \times \big[(\tau\Sigma)^{-1}\Pi + P^\top \Omega^{-1} Q\big] \end{aligned}

Здесь Π\Pi — равновесная доходность, PP и QQ кодируют ваши взгляды («актив A обгонит актив B на 2%»), а Ω\Omega — неопределённость этих взглядов. Когда взглядов нет, формула схлопывается обратно в рыночный портфель; когда вы уверены — сильно кренится в сторону ваших ставок. Это самый чувствительный к мнению из двенадцати.

Гибрид: 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-проект.

Выводы

  1. Универсально лучшего оптимизатора нет. Правильный выбор зависит от того, насколько вы доверяете своим оценкам доходности. Доверяете → MVO/Black-Litterman. Нет → HRP и компания.
  2. MVO оптимален и хрупок. Он задаёт эффективную границу, но максимизирует ошибку оценки. Относитесь к его весам с подозрением, если входные данные не по-настоящему надёжны.
  3. Иерархические методы меняют пиковую доходность на стабильность. Они редко возглавляют отдельный бэктест, но и редко взрываются — а это и есть то, что важно, когда будущее неизвестно.
  4. Единый интерфейс — это суперсила. Когда каждый алгоритм — это prices -> weights, честное сравнение не стоит ничего, а переключение бесплатно.

Лучший способ понять двенадцать алгоритмов — наблюдать, как они спорят. Идите запустите сравнение на активах, которые вам действительно важны.

Источники

  1. Markowitz, H. (1952). Portfolio Selection. The Journal of Finance.
  2. López de Prado, M. (2016). Building Diversified Portfolios that Outperform Out of Sample. The Journal of Portfolio Management.
  3. López de Prado, M. (2020). Machine Learning for Asset Managers. Cambridge University Press.
  4. Black, F., & Litterman, R. (1992). Global Portfolio Optimization. Financial Analysts Journal.
  5. Meucci, A. (2008). Fully Flexible Views: Theory and Practice. Risk.
  6. 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

Количественные исследования и стратегии

Обсудить в Telegram
Newsletter

Будьте в курсе событий

Подпишитесь на нашу рассылку, чтобы получать эксклюзивную аналитику по AI-трейдингу и обновления платформы.

Мы уважаем вашу конфиденциальность. Отписаться можно в любой момент.