Coder Social home page Coder Social logo

poptimizer's Introduction

Оптимизация долгосрочного портфеля акций

О проекте

По образованию я человек далекий от программирования. Занимаюсь инвестициями с 2008 года. Целью проекта является изучение программирования и автоматизация процесса управления портфелем акций.

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

Большинство частных инвесторов стремиться к быстрому обогащению и, согласно известному афоризму Баффета, "мало кто хочет разбогатеть медленно", поэтому проект является открытым. Стараюсь по возможности исправлять ошибки, выявленные другими пользователями, и буду рад любой помощи от более опытных программистов. Особенно приветствуются вопросы и предложения по усовершенствованию содержательной части подхода к управлению портфелем.

Проект находится в стадии развития и постоянно модифицируется (не всегда удачно), поэтому может быть использован на свой страх и риск.

Основные особенности

Оптимизация портфеля

  • Базируется на Modern portfolio theory
  • При построении портфеля учитывается более 190 акций (включая иностранные) и 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 за содержательные обсуждения подходов к управлению портфелем, которые стали катализатором множества изменений в программе

poptimizer's People

Contributors

wlm1ke avatar romakoks avatar alexqww avatar anaskras avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.