Новые релизы okama

Подробности релиза 1.5.0

Кроме стратегий ребалансировок в классе EfficientFrontierReb появилась возможность учитывать ограничения по весам (параметр bands). Устранена важная ошибка, которая мешала правильно строить границы эффективности с учетом ребалансировок.
Большое спасибо @Artt за участие в работе над релизом!

В нескольких классах добавлены новые методы. Есть важные исправления ошибок.

Класс Rebalance

rs = ok.Rebalance(
    period="year",
    abs_deviation=0.10,
    rel_deviation=0.30
)
pf = ok.Portfolio(['SPY.US', 'AGG.US'], rebalancing_strategy=rs)

ВНИМАНИЕ:
Старый способ инициализации Portfolio устарел:

# Устаревший вариант (не работает!)
ok.Portfolio(rebalancing_period="year")

В тоже время всё еще можно инициализировать класс Portfolio вообще без указания стратегии ребалансировки (по умолчанию используется календарная ежемесячная ребалансировка):

# Рабочий вариант (ребалансировка по умолчанию - ежемесячная)
ok.Portfolio(['SPY.US', 'AGG.US'], weights=[.6, .4])

Класс Rebalance

  • Новый класс Rebalance имеет 3 параметра: period, abs_deviation, rel_deviation
  • Rebalance.wealth_ts() рассчитывает временной ряд для баланса ребалансируемого портфеля (опционально с активами)
  • Rebalance.assets_weights_ts() вычисляет месячные временные ряды весов активов портфеля с учетом ребалансировки
  • Rebalance.return_ror_ts() возвращает временной ряд месячной доходности портфеля с учетом ребалансировок

Новые методы и свойства класса Portfolio

  • новое свойство rebalancing_strategy для настройки периодичности, абсолютных и относительных отклонений весов в стратегии ребалансировки
  • новое свойство rebalancing_events возвращает временной ряд событий ребалансировки и их тип

Изменения в классе PortoflioDCF

  • PortfolioDCF.monte_carlo_wealth_pv генерирует дисконтированные случайные временные ряды балансов портфелей с учетом пополнений/изъятий
  • PortfolioDCF.monte_carlo_wealth_fv генерирует номинальные (не дисконтированные) случайные временные ряды балансов портфелей с учетом пополнений/изъятий
  • PortfolioDCF.find_the_largest_withdrawals_size() теперь использует метод бисекции для поиска максимального размера изъятий
  • PortfolioDCF.find_the_largest_withdrawals_size() имеет 3 возможные цели: ‘maintain_balance_pv’, ‘maintain_balance_fv’ и ‘survival_period’
  • PortfolioDCF.find_the_largest_withdrawals_size() имеет новый атрибут withdrawals_range определяет возможный диапазон изъятий для ускорения расчетов
  • в PortfolioDCF.find_the_largest_withdrawals_size() атрибут iter_max ограничивает количество промежуточных итераций при поиске решения
  • PortfolioDCF.find_the_largest_withdrawals_size() метод возвращает класс Result. Если решение не найдено, остаются доступными промежуточные результаты

Новые методы и свойства класса EfficienFrontierReb

Класс EfficienFrontierReb теперь использует параметр rebalancing_strategy при инициализации (аналогично Portfolio).
Поддерживает ограничения весов активов через параметр bounds.

  • новый параметр rebalancing_strategy для определения стратегии ребалансировки
  • новый параметр bounds задает ограничения на веса активов
  • новый метод EfficienFrontierReb.plot_pair_ef() строит Границу эффективности для каждой пары активов

Изменения в классе EfficientFrontier

  • метод EfficientFrontier.get_monte_carlo генерирует случайные ребалансируемые портфели методом Монте-Карло с учетом ограничений bounds.

Новый Jupyter Notebook с примерами стратегий ребалансировки

Добавлен новый Jupyter Notebook с примерами инвестиционных портфелей с различными стратегиями ребалансировки:
10 rebalancing portfolio.ipynb

Обновленная документация с подробным описаниями всех классов доступна на ReadTheDocs.