Вопросы по работе библиотеки okama

Любые вопросы по работе библиотеки okama для Python.

Вопросы от Александра:

Спасибо еще раз. Если можно еще 2 вопроса:

  1. Набираю: x = ok.EfficientFrontier(ls,curr=‘RUB’)
    mc = x.get_monte_carlo(n=1000, kind=‘mean’)
    Выдает ошибку: mc = x.get_monte_carlo(n=1000, kind=‘mean’)
    AttributeError: ‘EfficientFrontier’ object has no attribute ‘get_monte_carlo’
    2.У вас данные только в годовом формате, или можно распечать котировки например PHOR.MOEX в дневном формате?
  1. Метод .get_monte_carlo для EfficientFrontier пока доступен только в версии библиотеки для разработчиков. На следующей неделе планируем релиз и там этот метод будет уже доступен.
  2. Данные есть в дневном и в месячном варианте.
1 лайк

Ну и в продолжение, как загрузить данные котировок за последние 10 лет с 01.12.10 по 01.12.20 в дневном формате например по акции Фосагро (цены открытия, закрытия, минимальные, максимальные, объемы). PHOR.MOEX?

1 лайк

ok.QueryData.get_close('PHOR.MOEX', first_date='1913-01-01', last_date='2100-01-01', period='D')
или если нужна полная доходность, то тоже самое с
.get_adj_close()

1 лайк

Понял, спасибо. Чем богаты, тем и рады. Недостающие данные запрошу с yahoo.finance

1 лайк

Чего не хватило в базе данных okama?

Повторюсь: цены открытия, минимальные, максимальные, объемы торгов. Я сторонник ежедневной микробалансировки портфеля. Мне надо.

Да, этого в базе данных не и не предвидится.

Добрый день! Штудирую 4 блокнот. Jarque-Bera test for Normality.
print(al.jarque_bera)
print(pf.jarque_bera)
Не проходит: AttributeError: ‘Series’ object has no attribute ‘set_index’

Обновите пожалуйста версию библиотеки до последней (0.91). Скорее всего, вы используете старую версию…

Обновил, не помогло.

Если я правильно понимаю, то ошибка появляется при вызове .jarque_bera для AssetList. Напишите пожалуйста, какой набор активов и другие параметры, которые вы используете для создания списка активов. Мне пока не удалось воспроизвести ошибку …

Все делал за вами по ноутбуку 1 в 1. Если это только у меня, то ладно. Не вопрос жизни и смерти. В целом мне понравилось, вижу большой потенциал проекта, в частности: 1). анализ временных рядов ( Time series analysis), 2) прогнозирование на основе нейронных сетей (DL, ML), 3) база данных финансовых показателей по голубым фишкам МБ.

Сергей (и Ко), спасибо большое за труд. Очень полезная библиотека.
Пока для своих нужд пользуюсь ей совместно с PyPortfolioOpt. Было бы здорово часть функционала этой библиотеки реализовать в вашей - матрицы корреляции активов, например.

Вопрос по дивидендам:

  1. какая доходность считается при методом my_portfolio.describe()? полная или только ценовая?
  2. что выдает метод .dividend_yield? это исторические дивиденды отнесенные к цене на момент выплаты или что-то другое?

Всё-таки было бы полезно отловить эту ошибку. Она может еще у кого-то встретиться. Можете написать версию Python и Pandas?

Спасибо! Корреляция есть нативная в Pandas. Просто набираете .ror.corr() или .ror.cov() и получаете корреляционную/ковариационную матрицу. Было бы интересно узнать, что еще в PyPortfolioOpt есть полезного, что нужно реализовать в okama.

  1. Python 3.7 (обновлять не буду) Pandas 1.2 + 2) Может будет желание доработать, Matplotlib графики рисует, но предупреждает: The colNum attribute was deprecated in Matplotlib 3.2 and will be removed two minor releases later. Use ax.get_subplotspec().colspan.start instead.
    if not layout[ax.rowNum + 1, ax.colNum]:

Протестировал в окружении с указанными версиями Python и Pandas. Никаких ошибок не возникает ни в .jarque_bera. Нет так же и предупреждений от Matplotlib. Интересно, что код rowNum в библиотеке не используется. Если он вообще где-то применяется, то самой библиотекой Pandas при использовании .plot.

Могу только предположить, что okama конфликтует с чем-то еще из установленных пакетов. Лучше пользоваться библиотекой в “чистом” окружении.

Дивидендная доходность в okama считается везде одинаково. Это LTM Dividend Yield. Считается как сегодняшняя цена разделенная на выплаченные дивиденды за последние 12 месяцев.

метод .dividend_yield показывает историю изменений этого параметра. Т.е. для каждой даты dв прошлом рассчитывается LTM dividend yield.

Сергей, спасибо за ответы.

  1. По поводу корреляций - будет здорово, если на гитхабе добавите пример построения и визуализации матрицы. Хорошо бы ещё понять, как строить корреляции по заданым периодам (год, квартал, месяц). Дневные корреляции долгосрочных инвесторов скорее путать будут.
    Визуализируется матрица корреляции/ковариации просто и красиво в Seaborn (тип графика heatmap)

  2. По поводу того, чего не хватает.

Изначально, после вполне удачных экспериментов в Okama, я пошел в PyPortfolioOpt оптимизировать портфели - там реализована оптимизация по риск-доходности с произвольными ограничениями на долю индивидуальных активов и даже секторов.
Хорошая опция, но практическая ценность спорная, тк вряд ли историческая доходность последних лет показательна.

У вашего пакета большое преимущество - удобная работа с русскими акциями и индексами (в pypot приходилось с api Московской биржи выгружать) + наличие данных по дивидендам наших компаний (чего в yahoo finance нет). Таблица сводная по портфелю также очень хороша.

Учитывая значительную дивидендную составляющую сейчас по России, было бы здорово , если бы можно было выдавать по каждому активу полную доходность с реинвестированием дивов (a-la вклад с капитализацией или индекс Moex полной доходности).

Было бы интересно проверить, например, как российские дивидендные стратегии выглядят относительно индекса. Врут Клоченок с Морозовой или нет :slight_smile:

Полезно было бы прогноз делать не только по историческим доходностям, но и по ожидаемым - заданных пользователем или типа Блэк-Литтермана. Бычий перформанс sp500 за последние 10 лет сильно искажает картину на будущее, на мой взгляд. Повторение такого перформанса, мягко говоря, лишь один из возможных сценариев. Но, возможно, такая опция есть уже, и нужно просто дать пример такого расчета.

Ещё (это уже не про PyPortfolioOpt) мне очень нравится в PortfolioVisualizer опция расчета Safe Withdrawal / Perpetual Withdrawal rates для прогнозных параметров портфеля и инфляции. Позволяет понять сколько надо накопить, чтобы успокоиться. Там, правда, можно доходность и риск задавать константами. Интересно в питоне задать входные функции распределения по этим двум параметрам и посмотреть соответствующие p10-p50-p90 на выходе.

1 лайк