Okama: финансовая библиотека для Python и бесплатная база исторических данных

21 сентября 2021

Коротко:

Финансовая библиотека okama для Python

В сентябре вышла версия 1.0.0 финансовой библиотеки okama, заработал сайт с документацией. Пора рассказать, что происходит с проектом …

Что такое okama?

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

Это далеко не единственная финансовая библиотека для Python. Но у окамы есть некоторые особенности.

Отличие #1

Основное отличие заключается в том, что okama работает с уже готовой бесплатной базой исторических данных. Не надо подключаться куда-то по API, собирать воедино что-то с бесплатного Yahoo Finance, с платного Quandl или аналогов.

Не надо проверять и чистить «сырые» финансовые данные. Мы уже это сделали …

Отличие #2

Еще одно важно отличие заключается в том, что создателей okama не интересовал трейдинг и различные спекулятивные алгоритмы… о слова «совсем». Большинство существующих финансовых библиотек с открытым кодом сконцентрированы именно на алгоритмическом трейдинге.

Мы внимательно изучили рекомендации CFA в области Quantitative Finance и реализовали их в виде простых алгоритмов. Конечно, реализовано пока не всё … но ведь пока вышла только версия 1 проекта, а впереди еще много интересной работы.

Отличие #3

Библиотека реализована финансистами для финансистов. Вы не обязаны быть программистом, чтобы ей пользоваться. okama не сложнее, чем финансы в Excel, а иногда даже проще. Кроме того, мы не является «теоретиками» … мы сами являемся инвесторами с 2006-2007 годов, а с 2012 года еще и независимыми (по-настоящему независимыми) финансовыми советниками.

Возможности библиотеки okama

Сегодня okama умеет следующее:

  • Оптимизация инвестиционного портфеля (Mean-Variance Analysis - MVA) и
  • Построение границы эффективности с учетом периодов ребалансировки портфеля
  • Прогнозирование показателей портфеля с использованием различных распределений: нормальное, логнормальное и т.п.
  • Применения метода Монте-Карло для создания случайных портфелей с заданными характеристиками
  • Расчет популярных метрик риска: волатильность, полудисперсия, VaR, CVaR и др.
  • Расчет дивидендной доходности различных активов
  • Бэктестинг произвольных инвестиционных портфелей
  • Бэктестинг популярных видов распределений
  • Приведение показателей портфеля к единой валюте
  • Сравнения показателей индексных фондов: отклонение, ошибка следования, бета и др.
  • Макроэкономические показатели различных рынков: инфляции, ставки банков, ставки ЦБ
  • Скрипты для визуализации Efficient Frontier, Transition Map, графиков исторической доходности и риска

Мы сделали много из того, что умеет Современная теория портфеля (Modern Portfolio Theory), разработанная Гарри Марковицем и немного больше…

На сегодняшний день мало кого можно удивить построением границы эффективности, через классическую задачу по оптимизации Mean-Variance Analysis. Но okama уже умеет оптимизировать инвестиционные портфели с учетом периода ребалансировки.  В качестве доходности в процессе оптимизации может использоваться не только обычная для таких расчетов ожидаемая доходность (среднее арифметическое), но и среднегодовая доходность (среднее геометрическое). Граница эффективности при использовании периода ребалансировки и использования среднего геометрического заметно отличается от классической «пули» Марковица…

Граница эффективности с учетом периода ребалансировки портфеля. Библиотека okama для Python

Метод Монте-Карло позволяет еще лучше визуализировать, что именно происходит внутри границы эффективности.

Генерация случайных инвестиционных портфелей методом Монте-Карло. Библиотека okama для Python

Бесплатная база исторических данных

Сегодня okama позволяет собирать инвестиционные портфели, состоящие из ценных бумаг различных фондовых рынков. Кроме того, в портфели можно включать и внебиржевые активы, например ПИФы, драгметаллы, валюты и криптовалюты. Вместо реально существующих активов можно использовать индексы.

Полный список видов исторических данных:

  • Цены акций и фондов (ETF) для различных рынков (Россия, США, ЕС и др.)
  • Стоимость пая и СЧА паевых инвестиционных фондов (ПИФ)
  • Стоимость товарных видов активов (золото, серебро и т.д.)
  • Котировки валют и криптовалют
  • Значения биржевых индексов
  • Значения индексов депозитов семейства OKID
  • Инфляция различных стран
  • Ставки ЦБ (Россия)
  • Цены на недвижимость (Россия)

Доступные биржи:

Мосбиржа, NYSE, NASDAQ, LSE, Европейские биржи (XETRA Exchange, Frankfurt Stock Exchange, Stuttgart Exchange, Euronext Amsterdam).

Документация okama

Документация для всех основных классов и методов библиотеки опубликована на сайте ReadTheDocs: okama.readthedocs.io

Документация библиотеки okama для Python на ReadTheDocs

Пока документация доступна на английском языке, но при необходимости, сделаем и на русском.

Довольно много примеров применения okama для решения типичных финансовых задач можно посмотреть в интерактивном формате Jupyter Notebook:

Все примеры могут быть запущены без установки библиотеки на Google Colab.

запуск okama на Google Colab

Комьюнити okama

Русскоязычный форум проекта okama живет на community.okama.io.

Мы с удовольствием отвечаем на вопросы о проекте. Кроме того, будем рады любой информации о имеющихся багах и неточностях.

Предлагайте свои идеи. Что бы вам хотелось видеть реализованным в okama? Какой информации не хватает в базе данных?

Планы на будущее

Сегодня инвестиционные портфели в okama не предусматривают каких-либо стратегий пополнения или снятия денег. Тем не менее было бы интересно для начала проводить тестирование подобных стратегий на исторических данных, а в будущем и оптимизировать портфели с учетом снятий и пополнений. Всё это ведет к внедрению всей математики, связанной с дисконтированием денежных потоков (DCF). Это интересное и обширное направление.

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

Кроме того, нам бы хотелось реализовать несколько важных и востребованных алгоритмов по расчету макроэкономических показателей, связанных со стоимостными характеристиками рынка. Например, CAPE (Cyclically adjusted price-to-earnings ratio) Роберта Шиллера.

Уже сейчас ведется работа по собору расширенных данных ETF всех бирж. Мы надеемся, что скоро библиотека позволит делать скрининг биржевых фондов всего мира по величине комиссии, типу активов, типу индекса, размеру СЧА и другим параметрам.

Еще одна идея, которую мы обязательно реализуем, это онлайн-курс по работе с финансовой математикой и с временными рядами в Python. Когда этот курс появится мы пока не знаем, но мы знаем где он будет. Конечно, на Финариуме

RoadMap для проекта обсуждается в отдельной ветке форума okama.


Комментарии

    Оставьте комментарий