Иван Усенков
Иван Усенков личный блог
30 декабря 2018, 16:40

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

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

  1. Величина риска – стандартное квадратическое отклонение доходности за расчетный период
  2. Уровень риска портфеля – умножение ковариационной матрицы на два вектора частей акций, входящих в портфель

Перед тем как начать, дам определение некоторым понятиям, использованным в статье:

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

Целью данной работы являлось создание портфельной модели, критерием оценки которой является доходность.

Портфельная модель разрабатывается для отечественного фондового рынка. Торговые инструменты (акции) входящие в расчет взяты из индексов MICEX (Oil & Gas Indices; Consumer Goods & Retail Indices; Chemicals Indices; Metals & Mining Indices; Telecoms Indices; Electric Utilities Indices; Financials Index; Transport Index), в количестве 76 единиц. Расчетный период – один месяц.

Для начала обозначим все пункты параметры модели:

  1. уровень риска портфеля стремится к минимуму;
  2. уровень доходности портфеля больше 2% за расчетный период (параметр настраиваемый);
  3. стоимость портфеля соответствует имеющимся средствам (т.е. расчетные части для каждой бумаги в портфеле учитывают размер лота этой бумаги);
  4. каждая бумага ограничена участием в портфеле, а именно не более 20% от размера портфеля (параметр настраиваемый);

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

График накопительной доходности для портфеля в 70 000 руб.
Рис. 2. График накопительной доходности для портфеля в 70 000 руб.

График накопительной доходности в относительных единицах
Рис. 3. График накопительной доходности в относительных единицах

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

На обоих графиках есть момент резкого падения, который приходится на кризис 2008 года. При попытках «подогнать» портфельную модель для нивелирования данной просадки, в целом, результаты оказались хуже. Тем не менее, характер линий плавно растущий. 

Подведем промежуточный итог. Первая поставленная цель выполнена. Далее необходимо создать «калькулятор» для оценки текущего состояния рынка и подготовки оптимального портфеля в соответствии с моделью. Для решения этой задачи в качестве среды разработки послужил Microsoft Excel 2010 и его инструмент – «Поиск решения».

Рассмотрим состав и назначение основных вкладок «калькулятора»:

  1. Data – вкладка содержит данные котировок анализируемых акций (или других финансовых инструментов, рис. 4). В данную вкладку вносятся значения 18 последних месяцев. Количество строк определено пользователем, по результатам тестов период расчета в 18 единиц показался оптимальным;
  2. Profitable – расчетная вкладка, где рассчитываются доходности за каждый период для каждого инструмента.
  3. CovMatrix – ковариационная матрица каждой возможной пары инструментов. При пересчете данной вкладки придется подождать;
  4. Params – сердце расчетной системы. Здесь происходит основная настройка параметров.
  5. Groups – состав индексов, какие акции относятся к каким индексам.

Внешний вид вкладки «Data»
Рис. 4.  Внешний вид вкладки «Data»

Детально остановимся на рассмотрении вкладки «Params» (рис. 5)
Часть вкладки «Params» (ее полная ширина не вмещается на экран)

Рис. 5.  Часть вкладки «Params» (ее полная ширина не вмещается на экран)

Все поля, отмеченные голубым цветом и белым шрифтом, служат для ввода данных пользователем:

  • размер портфеля;
  • плановая доходность за период (в данном случае за месяц). На рисунке установлено значение «0,035», что значит доходность 3,5% за месяц;
  • размер для лота каждого инструмента;
  • доля участия каждого инструмента;
  • минимальная и максимальная доли участия индексов в портфеле.

После настройки запускаем поиск решения (Главное меню – Данные – Анализ – Поиск решения, рис. 6) и просим много уважаемый компьютер найти решение.
Окошко поиска решений с параметрами портфельной модели

Рис. 6.  Окошко поиска решений с параметрами портфельной модели

Повторяем операцию до тех пор, пока результат расчета не удовлетворит требования исследователя.

Скачать файл последней версии «калькулятора» и ознакомится с ним можно в группе vk – https://vk.com/family_trust, раздел «Документы».

Запуск системы на реальном счету начнется с января 2019 г. За результатами работы проекта можно также следить через сервис управления портфелем: https://portfolio.conomy.ru/portfolios/3223.
Спасибо за внимание.









31 Комментарий
  • ves2010
    30 декабря 2018, 16:58
    нет форвардного теста
  • Гражданин РФ
    30 декабря 2018, 17:56
    Из ссылки на группу в VK, запятую в конце уберите. 
  • Михаил
    01 января 2019, 20:35
    Не очень понятно из вашего объяснения, но есть подозрение, что ваши расчеты априори некорректны. 
    За сколько периодов вы берёте данные и для скольких акций считаете ковариационный матрицу?
  • Михаил
    01 января 2019, 22:01
    Иван Усенков, не обижайтесь, но думаю, что вы не очень разбираетесь в статистике. 
    Ковариация определяет взаимодействие между парами, но пар для 76 акций 76*75 / 2 — несколько тысяч. Чтобы получить “достоверную” оценку такого количества парных ковариация нужно очень много данные за десятки тысяч периодов, а не за 18. Иначе вы получите просто случайный  “мусор”. Более того, если периодов меньше количества Акции, то полученная матрица будет сингулярной (совсем бессмысленной).

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн