Подробности релиза 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.