Оптимизация портфеля: как подобрать веса на исторических данных
Как задать цель и ограничения, что оптимизатор меняет в составе и как проверить, сохранить и повторить расчёт без иллюзии точного прогноза.
Оптимизация портфеля — это поиск весов, которые лучше других допустимых вариантов решают выбранную задачу на заданной истории. Инвестор определяет вселенную активов, цель и границы долей; алгоритм сравнивает возможные сочетания и возвращает найденный состав. Это не подбор идеального будущего портфеля, а формальный ответ на конкретный исторический эксперимент.
Оптимизатор ищет веса внутри заданных границ
Схема, не результат расчётаЧто остаётся решением инвестора
Алгоритм не знает вашу цель, горизонт, налоги и готовность пережить убыток. Он работает только внутри поставленной задачи. Если добавить в расчёт похожие акционные ETF, разрешить любой концентрации и выбрать удачное окно, оптимизатор добросовестно использует эти допущения — включая их слабости.
- Активы: от 2 до 10 инструментов из каталога. Состав вселенной важнее красивого результата поиска.
- Исходные веса: отправная точка для сравнения, сумма — 100%. Исходный портфель не изменяется ограничениями min и max.
- Границы долей: минимум и максимум для каждого оптимизируемого актива. Сумма минимумов не должна превышать 100%, сумма максимумов — быть ниже 100%.
- Период и валюта: определяют месячные доходности, на которых оцениваются портфели.
- Ребалансировка: ежемесячная, ежеквартальная, ежегодная или только начальная аллокация.
Long-only и сумма 100%
Все решения в оптимизаторе long-only: вес актива не может быть отрицательным, а сумма весов всегда равна 100%. Модель не использует короткие продажи, кредитное плечо и денежную позицию вне выбранных активов. Поэтому найденный ответ относится именно к такому классу портфелей, а не ко всем мыслимым стратегиям.
Пять целей — пять разных вопросов
- Минимальная волатильность: какой допустимый состав имел наименьший модельный разброс месячных доходностей.
- Максимальный Шарп: какой состав давал наибольшее модельное превышение средней доходности над 2% годовых на единицу волатильности.
- Максимальная Омега: какой фактический портфель имел лучшее отношение положительных месячных результатов к отрицательным относительно порога 0%.
- Максимальный Калмар: какой фактический портфель имел наибольшее отношение CAGR к модулю максимальной просадки.
- Максимальный Сортино: какой фактический портфель имел наибольшее превышение CAGR над 2% на единицу риска отрицательных отклонений.
Не существует цели, которая всегда лучше остальных. Минимум волатильности не обещает малую просадку, высокий Калмар зависит от одного худшего эпизода, а Омега и Сортино по-разному описывают асимметрию. Выбирайте метрику по смыслу задачи, а не по тому, какой результат выглядит выше.
Модельный расчёт и фактический бэктест
Для минимальной волатильности и модельного Шарпа используются средние месячные доходности и выборочная ковариационная матрица. Средняя доходность годовится умножением на 12, ковариации — тоже на 12. Это mean-variance модель: она удобна для анализа риска и эффективной границы, но её модельный Шарп не совпадает по формуле с фактическим Шарпом отчёта, где в числителе используется CAGR.
Омега, Калмар и Сортино оптимизируются по фактическому бэктесту каждого кандидата с выбранной ребалансировкой. Здесь важны не только средние и ковариации, но и последовательность месяцев, дрейф весов и путь капитала. Поэтому такой оптимум может не лежать на mean-variance эффективной границе.
Как проходит поиск
Задачи минимальной волатильности и целевой доходности решаются как квадратичное программирование. Для path-dependent целей применяются два независимых численных подхода: локальные парные перераспределения с сеткой и уточнением, а также differential evolution. Их результаты сравниваются, лучший кандидат дополнительно уточняется. Такой подход снижает риск остановиться в слабом локальном решении, но не доказывает глобальный оптимум.
Практический цикл работы
- Соберите экономически осмысленный состав и проверьте его в бэктесте или сравнении.
- Передайте тот же состав в оптимизатор: ссылка сохранит период, ребалансировку и валюту.
- Задайте цель и ограничения до просмотра ответа; не перебирайте их бесконечно ради красивой метрики.
- Сравните оптимизированный, исходный и равновесный варианты по CAGR, риску, просадкам и изменениям весов.
- Проверьте выбранный состав в полном бэктесте и при необходимости в Монте-Карло.
- Сохраните портфель: в кабинете останутся итоговые доли и исходная задача оптимизации. Повторный запуск использует последний полный месяц свежих данных.
Вкладка «Чувствительность» проверяет уже найденные веса на другом подокне без повторной оптимизации. Это полезный стресс-тест, но не независимый out-of-sample: альтернативное окно входит в историю, на которой искался оптимум. Настоящая проверка требует данных, не участвовавших в подборе.
Откройте предзаполненную задачу 60/40: SPY и TLT, старт с августа 2002 года, ежегодная ребалансировка и цель по модельному Шарпу. Сначала сравните ответ с исходным портфелем, затем измените одно допущение.
Оптимизировать портфель 60/40Проверьте, как усвоился материал
Пройти тест знаний