Оптимизация долгосрочного портфеля акций
О проекте
По образованию я человек далекий от программирования. Занимаюсь инвестициями с 2008 года. Целью проекта является изучение программирования и автоматизация процесса управления портфелем акций.
Используемый подход не предполагает баснословных доходностей, а нацелен на получение результата чуть лучше рынка при рисках чуть меньше рынка при относительно небольшом обороте. Портфель ценных бумаг должен быть достаточно сбалансированным, чтобы его не страшно было оставить без наблюдения на достаточно продолжительное время.
Большинство частных инвесторов стремиться к быстрому обогащению и, согласно известному афоризму Баффета, "мало кто хочет разбогатеть медленно", поэтому проект является открытым. Стараюсь по возможности исправлять ошибки, выявленные другими пользователями, и буду рад любой помощи от более опытных программистов. Особенно преветсвуются вопросы и предложения по усовершенствованию содержательной части подхода к управлению портфелем.
Проект находится в стадии развития и постоянно модифицируется (не всегда удачно), поэтому может быть использован на свой страх и риск.
Основные особенности
Оптимизация портфеля
- Базируется на Modern portfolio theory
- При построении порфеля учитываеются более 180 акций (включая иностранные) и ETF, обращающихся на MOEX
- В качестве критерия оптимизации используется максимизация отношения доходности сверх безрисковой ставки к риску портфеля
- Используется ансамбль моделей для оценки неточности предсказаний ожидаемых доходностей и рисков отдельных активов
- Используется робастная инкрементальная оптимизация на основе расчета достоверности улучшения доходности портфеля в результате торговли с учетом неточности имеющихся прогнозов вместо классической mean-variance оптимизации
- Применяется поправка Бонферрони на множественное тестирование с учетом большое количества анализируемых активов
Прогнозирование параметров активов
- Используются нейронные сети на основе архитектуры WaveNet с большим receptive field для анализа длинных последовательностей котировок
- Осуществляется совместное прогнозирование ожидаемой доходности и ее дисперсии с помощью подходов, базирующихся на GluonTS: Probabilistic Time Series Models in Python
- Для моделирования толстых хвостов в распределениях доходностей применяются смеси логнормальных распределений
- Используются устойчивые оценки исторических корреляционных матриц для большого числа активов с помощью сжатия Ledoit-Wolf
Формирование ансамбля моделей
- Используется многомерное простраство поиска гиперпараметров сетей, их оптимизаторов и комбинаций признаков
- Для исследования пространства применяются подходы алгоритма Метрополиса — Гастингса/Имитации отжига
- Для маштабирования локальной области поиска и кодирования гиперпараметров используются принципы дифференциальной эволюции
- Отбор претендентов в ансамбль осуществляется на основе статистических критериев с учетом неопределенности оценок качества отдельных моделей
Источники данных
- Реализована загрузка котировок всех акций (включая иностранные) и ETF, обращающихся на MOEX
- Поддерживается в актуальном состоянии база данных дивидендов с 2015г по включенным в анализ акциям
- Реализована возможность сверки базы данных дивидендов с информацией на сайтах:
Направления дальнейшего развития
- Применение нелинейного сжатия Ledoit-Wolf для оценки корреляции активов
- Реализация сервиса на Go для загрузки всей необходимой информации
- Рефакторинг кода на основе DDD, MyPy и wemake
- Использование архитектур на основе трансформеров вместо WaveNet
- Поиск оптимальной архитектуры сетей с помощью эволюции с "нуля" по аналогии с Evolving Neural Networks through Augmenting Topologies
- Использование Reinforcement learning для построения портфеля
Особые благодарности
- Evgeny Pogrebnyak за помощь в освоении Python
- RomaKoks за полезные советы по автоматизации некоторых этапов работы программы и исправлению ошибок
- AlexQww за содержательные обсуждения подходов к управлению портфелем, которые стали катализатором множества изменений в программе