Investment portfolio and stocks analyzing tools for Python with free historical data
Okama 1.4.0 introduces investment strategies with contributions and withdrawals in Portfolio
class. New methods support discounted cash flows (DCF) and Monte Carlo simulation for portfolio longevity.
Portfolio
classNew Portfolio
class attributes (all are optional):
initial_amount
- Portfolio initial investment FV (at last_date)cashflow
- portfolio monthly cash flow FV (at last_date). Negative value corresponds to withdrawals.
Positive value corresponds to contributions. Cash flow value is indexed each month by inflation.discount_rate
- cash flow discount rate required to calculate PV values.New dcf.
methods in Portfolio
class:
dcf.plot_forecast_monte_carlo()
method to plot Monte Carlo simulation for portfolio future wealth indexes optionally together with historical wealth index.dcf.monte_carlo_survival_period()
method to generate a survival period distribution for a portfolio with cash flows by Monte Carlo simulation.dcf.wealth_index
property to calculate wealth index time series for the portfolio with contributions and
withdrawals.dcf.survival_period
property to calculate the period when the portfolio has positive balance considering withdrawals on the historical data.dcf.survival_date
property to get the date when the portfolio balance become negative considering withdrawals on the historical data.dcf.cashflow_pv
property to calculate the discounted value (PV) of the cash flow amount at the historical first_date
.dcf.initial_amount_pv
property to calculate the discounted value (PV) of the initial investments at the historical first_date
.Portfolio
classassets_dividend_yield
property to calculate last twelve months (LTM) dividend yield time series (monthly) for each assetdividends_annual
property to get calendar year dividends sum time series for each asset.AssetList
classget_rolling_risk_annual()
method to calculate annualized risk rolling time series for each asset.get_dividend_mean_yield()
method to calculate the arithmetic mean for annual dividend yield over a specified period.dividend_yield_annual
property to calculate last twelve months (LTM) dividend yield annual time series.Asset_List.risk_annual
returns expanding risk time series (not float)Portfolio.recovery_period
returns time series of recovery periods over historical data (not a single period)describe()
method shows the rate of return arithmetic mean (expected return) in Portfolio
, AssetList
classesxy_text
argument in plot_assets()
method to position better point labels
in Portofolio
, AssetList
classesAssetList
, Portfolio
, EfficientFrontier
, EfficientFrontierReb
)Okama now supports Panadas 2.0.0 and further versions. There is no backward compatibility with previous Pandas versions.
set_values_monthly()
method in Inflation to forecast data and change previos valuesdividend_yield_annual
property in AssetList calculates dividend yield time series for calendar yearsget_dividend_mean_yield()
method in AssetList shows mean dividend yield for a given periodplot_cml()
has new y_axe
parameter to switch from CAGR to mean rate of returns in the plotsasset_dividend_yield
property renamed to dividend_yield
in AssetListindex_corr()
, index_beta()
, tracking_error()
index_corr()
and index_rolling_corr()
are combined into a single function index_corr()
in the AssetList__getitem__
, __iter__
methods.get_namspaces()
and other aliases in init.py (this resulted in the database requests during library import)EfficientFrontier.plot_pair_ef()
faled if inflation=FalseThe release uses runtime Python 3.8. This version is recomended for development. Previous versions of okama were using legacy Python 3.7.
New features:
EfficentFrontier().get_monte_carlo()
method return risk, return and weights data for random portfolios.Fix:
Portfolio().weights_ts
New features:
get_tangency_portfolio()
can calculate tangency portfolio weights for CAGR (rate of return with geometric mean).Fix:
first_date
and last_date
were calculated wrong in AssetList, Portfolio and EfficientFrontierIndicator
3 macroeconomic classes are available (and Documented):
Indicator
: Macroeconomic indicators and ratios. (.RATIO
NEW namespace)Inflation
: Inflation related data and methods (.INFL
namespace)Rates
: Rates of central banks and banks (.RATE
namesapce)Cyclically adjusted price-to-earnings ratios (CAPE10) for 20+ countries are in the DataBase: USA_CAPE10.RATIO, CHN_CAPE10.RATIO, CHN_CAPE10.RATIO etc.
Rate
class has .values_daily
property which can be used with bak raters and some other symbols:
ok.Rate("RUONIA.RATE").values_daily
all Macro classes have .values_monthly
property.
.describe()
methods in all macroeconomic classes.describe()
methods show descriptive statistics for YTD and given periods:
Inflation
class .describe()
method is different. It generates inflation-specific statistics:
.tracking_difference()
and tracking_difference_annualized()
in AssetList
class are now methods (where properties). Methods have rolling_window
attribute to set wolling window size (in months).
To calclulate 24 months movig tracking difference:
x.tracking_difference(rolling_window=24)
Full Changelog: https://github.com/mbk-dev/okama/compare/v1.1.6...v1.2.0
Introduce parallel computing for heavy calculations in multi-period portfolio optimization (Efficient Frontier).
Minor changes:
black
for code formattingUse new financial API (api.okama.io) for historical data requests.