Финансовая библиотека с открытым кодом на Python - yapo

26 июн 2019

Коротко:

  • Библиотека с открытым кодом yapo опубликована на GitHub
  • Базовый функционал библиотеки предусматривает расчет доходности, риска, инфляции и др.
  • Библиотека позволяет использовать нашу открытую базу финансовых данных (MICEX, NYSE, NSADAQ, валюты, инфляции стран мира и др.)
  • Простейшие примеры использования библиотеки доступны на MyBinder
  • Комьюнити проекта – возможности для участия в развитии yapo

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

Зачем нужна еще одна библиотека?

В 2017 году, когда началась первая работа в Python мы решили просто усовершенствовать свою работу и разработать алгоритм, который бы хорошо справлялся с поиском решений для построения границы эффективности и другими классическими задачами в рамках Современной теории портфеля (СТП). Математика этого подхода хорошо известна. Более того, в последние 20-30 лет он стал своего рода мейнстримом в инвестиционной индустрии вместе с увеличением популярности индексного подхода к инвестициям.

Мы с энтузиазмом взялись за работу, надеясь, что «обойдется» адаптацией уже существующих решений под конкретные задачи. Язык Python был выбран благодаря своей популярности и простоте использования. Кроме того, именно на нем можно найти огромное количество библиотек с открытым кодом для большого числа типовых проблем. Но, как мы быстро убедились, при всем разнообразии библиотек на Python количество подходящих финансовых решений крайне мало и ни одна из имеющихся библиотек не может претендовать на законченное решение для типовых финансовых задач (даже более простых чем СТП). Более того, как мы выяснили, после поисков и сравнений, в области OSS (Open Source Software) в принципе крайне мало сколько-нибудь пригодных к использованию проектов в области финансов. Чтобы не быть голословным, можно обратиться к перечню финансовых OSS проектов, который ведется на BogleHeads.

Стоит оговориться, что в мире существует много качественного финансового программного обеспечения. Например, MATLAB Computational Finance Suite или Simulation Programming Language (SIMSCRIPT) самого Марковица. Но все значительные финансовые проекты являются проприетарными. Интересно, что в области корпоративных финансов все еще является стандартом использование EXCEL в лучшем случае с VBA для частичной автоматизации.

Нам пришлось сделать шаг назад, разрабатывая собственные решения для простейших финансовых операций, исключающих возможность ошибки и человеческого фактора (Типичным ошибкам в финансовых вычислениях и работе с временными рядами в финансах будет посвящена следующая статья). Хотите безошибочно вычислить среднюю доходность SPY за последние 54 месяца в любой валюте? … придется писать код самостоятельно.

Что умеет yapo сегодня

В настоящее время библиотека умеет следующее:

  • Работа с временными данными финансовых активов (Time Series с метаинформацией)
  • Вычисления накопленной доходности и среднегодовой доходности
  • Вычисления доходности скорректированной на размер инфляции (реальная доходность)
  • Вычисление риска активов (стандартное отклонение)
  • Составление инвестиционных портфелей (комбинация временных рядов для различных активов)
  • Вычисление индекса доходности депозитов TOP-10 (OKID10 – доступен через виджет)

В разработке сейчас находятся новые функции yapo:

  • Оптимизация инвестиционных портфелей и построение границы эффективности
  • Расчет корреляции активов и индексов
  • Альтернативные варианты для расчета риска:
    • VaR
    • CVaR
    • Полудисперсия
  • Вычисление ошибки следования для индексного фонда
  • Вычисление коэффициента бета
  • Применение метода Монте-Карло для финансовых временные рядов
  • Вычисление доходности к погашению и дюрации для облигаций
  • Вычисление Adjusted Close (учет сплитов, дивидендов и купонов в цене закрытия)

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

Вычисление ошибки следования российских индексных фондов (ПИФ)

Пример: вычисление ошибки следования российских индексных фондов акций (ПИФ)

Открытая база данных финансовых активов и экономических показателей

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

В настоящее время в нашей базе присутствуют:

  • Исторические данные для всех акций и ETF, доступных на следующих биржах:
    • NYSE (США)
    • NASDAQ (США)
    • CBOE (США)
    • MICEX (Россия)
  • Взаимные фонды США
  • Наиболее важные ценовые индексы и индексы полной доходности
  • Паевые инвестиционные фонды (ПИФ)
  • Курсы валют ЦБ (Рубль, Евро, Доллар США)
  • Инфляция (США, ЕС, Россия)
  • Ставки максимальной процентной ставки TOP-10 банков России

В ближайшее время база данных будет расширена и станут доступны следующие данные:

  • Новые биржи:
    • LSE (Великобритания)
    • SSE (Китай)
    • BSE (Индия)
  • Данные по российским облигациям
  • Цены золота
  • Цены серебра
  • Курсы криптовалют

Библиотека yapo – проект с открытым кодом

В настоящее время библиотека опубликована на GitHub и легко устанавливается на популярных операционных системах: Windows, Lunux, MacOS

pip install yapo

Примечание: для Windows требуется предварительная установка Python 3

Библиотека может быть запущена онлайн без предварительной установки через MyBinder, где вы найдете примеры простейших вычислений и действий с данными в формате Jupyter Notebook.

Запустить библиотеку в формате Jupyter Notebook на MyBinder

Комьюнити проекта

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

Участие в комьюнити проекта возможна следующими способами:

  • Участие в разработке программного обеспечения библиотеки (Python, F#)
  • Тестирование библиотеки и выявление ошибок
  • Создание примеров применения библиотеки и обучающих материалов
  • Написание документации и примеров использования
  • Совершенствование сайта проекта okama.io (TypeScript, Angular 2)
  • Развитие базы финансовых и экономических данных и API (GraphQL)
  • Финансовая помощь проекту

Если yapo вам понравился, поставьте "звезду" в GitHub.

Следующая статья будет посвящена типичным ошибкам в финансовых вычислениях и работе с временными рядами исторических финансовых данных (Time Series).

Понравилась статья?

Самое интересное и важное в нашей рассылке

Анонсы свежих статей Информация о вебинарах Советы экспертов

Нажимая на кнопку "Подписаться", я соглашаюсь с политикой конфиденциальности


Комментарии (0)

    наверх