Блог им. usenkov1988
Здравствуйте друзья. Изучая вопрос портфельного инвестирования для долгосрочной перспективы наткнулся на работы Гарри Марковица. Изложенные им труды показались достаточно логичными и легкореализуемыми в условиях сегодняшней компьютеризации. Основные идеи Г. Марковица, которые были использованы для составления портфельной модели:
Перед тем как начать, дам определение некоторым понятиям, использованным в статье:
Целью данной работы являлось создание портфельной модели, критерием оценки которой является доходность.
Портфельная модель разрабатывается для отечественного фондового рынка. Торговые инструменты (акции) входящие в расчет взяты из индексов MICEX (Oil & Gas Indices; Consumer Goods & Retail Indices; Chemicals Indices; Metals & Mining Indices; Telecoms Indices; Electric Utilities Indices; Financials Index; Transport Index), в количестве 76 единиц. Расчетный период – один месяц.
Для начала обозначим все пункты параметры модели:
Перед составлением оптимального портфеля необходимо убедиться в том, что данная модель характеризуется положительной доходностью. Для этого были взяты данные месячных котировок в период с 01.01.2000 – 01.12.2018 гг., данные брались с торговой платформы Quik. Затем, используя IDE Visual Studio Community 2017, на языке C# запрограммированы все правила портфельной модели и запущены на истории котировок. Разработанная программа (рабочее название – Elegant Portfolio) служит исключительно для проверки параметров модели, на внешний вид внимание не обращайте – немножко бардак. В качестве механизма для поиска оптимального решения была использована библиотека Microsoft Solver Foundation 3.1. С кодом проекта можно ознакомится здесь: https://github.com/usenkov1988/ElegantPortfolio.
Рис. 1. Главное рабочее окно программы
После всевозможных результатов тестирования были получены следующие результаты (рис. 2 и 3):
Рис. 2. График накопительной доходности для портфеля в 70 000 руб.
Рис. 3. График накопительной доходности в относительных единицах
Пояснение к графикам. Изображенные три линии показывают доходность портфеля после моделирования: в первый (красная линия), на второй (оранжевая) и на третий (зеленая) месяцы.
На обоих графиках есть момент резкого падения, который приходится на кризис 2008 года. При попытках «подогнать» портфельную модель для нивелирования данной просадки, в целом, результаты оказались хуже. Тем не менее, характер линий плавно растущий.
Подведем промежуточный итог. Первая поставленная цель выполнена. Далее необходимо создать «калькулятор» для оценки текущего состояния рынка и подготовки оптимального портфеля в соответствии с моделью. Для решения этой задачи в качестве среды разработки послужил Microsoft Excel 2010 и его инструмент – «Поиск решения».
Рассмотрим состав и назначение основных вкладок «калькулятора»:
Рис. 4. Внешний вид вкладки «Data»
Детально остановимся на рассмотрении вкладки «Params» (рис. 5)
Рис. 5. Часть вкладки «Params» (ее полная ширина не вмещается на экран)
Все поля, отмеченные голубым цветом и белым шрифтом, служат для ввода данных пользователем:
После настройки запускаем поиск решения (Главное меню – Данные – Анализ – Поиск решения, рис. 6) и просим много уважаемый компьютер найти решение.
Рис. 6. Окошко поиска решений с параметрами портфельной модели
Повторяем операцию до тех пор, пока результат расчета не удовлетворит требования исследователя.
Скачать файл последней версии «калькулятора» и ознакомится с ним можно в группе vk – https://vk.com/family_trust, раздел «Документы».
Запуск системы на реальном счету начнется с января 2019 г. За результатами работы проекта можно также следить через сервис управления портфелем: https://portfolio.conomy.ru/portfolios/3223.
Спасибо за внимание.
За сколько периодов вы берёте данные и для скольких акций считаете ковариационный матрицу?
Иван Усенков, все равно не очень понял. Вы считали ковариация для 76 акций. Сколько периодов данных было использовано для ее расчета? Из текста и скриншотов я понял, что 18? Так это или нет?
Если так то вы получаете заведомо сингулярную матрицу — то есть полную фигню (якобы можно создать портфель с нулевым риском). И вообще при оценке ковариационной матрицы для 76 активов грубо говоря оценивается 76 * 75 / 2 ~ 3000 параметров. Чтобы получить хоть в каком-то смысле разумную статистическую оценку нужно использовать выборку их десятков тысяч предыдущих значений. В большинстве случаев таких данных просто нет, поэтому прямую оценку ковариационной матрицы никто не использует при анализе больших портфелей.
Обычно используют методы оценки на основе сжатия к ковариционной матрице с малым числом оцениваемых параметров. Наиболее известный подход та или иная модификация сжатия Ledoit-Wolf
en.wikipedia.org/wiki/Estimation_of_covariance_matrices#cite_ref-Ledoit_and_Wolf_(2004b)_10-0
scikit-learn.org/stable/modules/covariance.html
www.ledoit.net/honey.pdf
Ковариация определяет взаимодействие между парами, но пар для 76 акций 76*75 / 2 — несколько тысяч. Чтобы получить “достоверную” оценку такого количества парных ковариация нужно очень много данные за десятки тысяч периодов, а не за 18. Иначе вы получите просто случайный “мусор”. Более того, если периодов меньше количества Акции, то полученная матрица будет сингулярной (совсем бессмысленной).
1. Посчитаете доходность каждой бумаги
2. риск каждой бумаги
3. затем из имеющихся данных о количестве бумаг составите матрицу
4. запустите алгоритм который найдет минимальное значение от перемноженной матрицы на два вектора частей портфеля (корень этого числа будет риск портфеля) при максимальном результирующем доходе. Так?
(p.s. тоже работал в вузе, как научный сотрудник, специализировался на разработке биометрических моделей)
Актуальный код https://github.com/WLM1ke/poptimizer