Okama 1.3.1. Новая версия финансовой библиотеки для Python

24 мая 2023

Вышла новая версия финансовой библиотеки okama для Python. Установить можно уже сейчас:

pip install okama -U

Простейшие примеры использования библиотеки доступны на GitHub.

Новое в версии 1.3.1

Добавлена поддержка Python 3.11.

Кроме того:

  • В ошибку следования (Tracking Error) и в «бету» добавлена возможность считать скользящие.
    Параметр rolling_window доступен в функциях AssetList: index_corr()index_beta()tracking_error(). Теперь можно строить скользящие для Ошибки следования, для беты и для корреляции с бенчмарком.
  • Две функции index_corr() и index_rolling_corr() слиты в одну в AssetList
  • AssetList, Prtfolio, EfficentFrontier и EfficentFrontierReb теперь являются sequences(последовательностями) и обладают методами __getitem__, __iter__.

Исправление ошибок

  • get_namspaces() и другие алиасы из __init__.py больше не совершают удаленных запросов по API при импорте
  • попарное построение Границ эффективности plot_pair_ef() попадала при inflation=False
  • Можно использовать тикеры с точкой. Такие как BRK.B

Скользящие для ошибки следования (Tracking Error)

Примеры использования новых возможностей версии 1.3.1. Выбираем самые популярные ETF, следующие S&P 500, на NYSE и LSE:

создание AssetList в библиотеке okama для индексных фондов на S&P 500: SPY, VOO, CSPX

Строим 2-х летнюю скользящую для Ошибки следования (Tracking Error):

библиотека okama: 2-х летняя скользящая для Ошибки следования (Tracking Error) для индексных фондов на S&P 500

Разница впечатляет … не так ли?
0,2% - это ошибка следования американских ETF и около 5% для европейского фонда CSPX на Лондонской бирже. Откуда такая разница?

Недавно опубликовал статью Методика сравнения индексных фондов. Tracking Difference и Tracking Error 1. Там подробно объясняются, откуда берутся подобные расхождения.

Использование итерируемых объектов okama

Теперь AssetList, Prtfolio, EfficentFrontier и EfficentFrontierReb - это последовательности (sequence).

Последовательность формируется из объектов класса ok.Asset.

Можно обращаться к активу по его порядковому номеру. Например, для того чтобы посмотреть текущую цену бумаги:

библиотека okama: вызов свойств актива при помощи порядкового номера в AssetList

Или использовать в циклах:

библиотека okama: использование AssetList в циклах

Изменений на сайте okama.io

Изменения в версии 1.3.1 можно увидеть на примерах в финансовом виджете Сравнение с бенчмарком на сайте okama.io.

Настройка финансового виджета на okama.io для построения ошибки следования (Tracking Error)

Улучшения в документации

В документации классов AssetList, Portfolio, EfficientFrontier, EfficientFrontierReb появились новые методы:

Раньше эти методы не присутствовали на okama.readthedocs.io, т.к. документация классов не показывала наследуемые методы.

Что дальше?

К этому времени можно сказать, что все самые популярные формулы финансовой математики уже реализованы. Не все, конечно, речь идет лишь о том, что применяется к временным рядам в рамках Современной теории портфеля (СТП).

Пора приступить к проработки различных стратегий пополнений / снятий денег в портфеле. Для этого я планирую добавить отдельный класс, который будет описывать такие стратегии. У стратегии должно быть предусмотрены регулярные пополнения или снятия денег, нерегулярные пополнения (нужен список дат), пополнения с более сложными условиями (например, Value Averaging). В реальной жизни бывают и снятия и пополнения… попробуем и это предусмотреть.

Можно сказать, что сейчас реализуется простейший вариант такой стратегии – пополнение только при создании портфеля.

Новый класс (как бы его назвать?) должен быть связан с Portfolio и влиять на wealth index.

Это простая часть…

Более сложная часть плана – реализовать сравнение «выгодности» стратегий. Я думаю придерживаться концепции «один портфель – одна стратегия пополнений». Это значит, что сравнивать будем между собой не стратегии, а портфели.

С точки зрения финансов портфели, у которых есть промежуточные снятия или пополнения, можно сравнивать с помощью дисконтирования денежных поток (DCF). Придется научиться вычислять IRR и NPV портфеля.

А дальше – оптимизация весов портфеля и формирование Границы эффективности по этим критериям. В качестве целевой функции (Utility Function) можно будет использовать, например, NPV.

Что есть у коллег?

Не хочется начинать с нуля, поэтому хотелось бы посмотреть, что уже реализовано на эту тему.

Пока мне известно только о похожих вещах на Portfolio Visualizer (PV):

Настройка стратегии изъятия / пополнения портфеля в Portfolio Visualizer

В PV возможны только простейшие стратегии пополнения / изъятия:

  • без пополнений (есть сейчас в okama)
  • пополнения с фиксированной суммой
  • изъятия с фиксированной суммой
  • изъятия с фиксированным процентом

Но PV это не open source. Посмотреть на реализацию там не получится.

Если вдруг кому-то известно о других софтверных проектах, где реализованы стратегии пополнения / изъятия портфеля, дайте знать (можно писать в комментариях).

 


Комментарии

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