model

class model.model.Model(symbols, bounds=(0.0, 1.0), min_weight=0.0, margin_rate=0.0, long_weight=1.0, short_weight=0.0, frequency=252, optimization_method='mean_variance', risk_method='sample_cov', semivariance_benchmark=0, historical_prices=None, beta=0.95)

Bases: object

Description:

Class for the portfolio modeling.

Parameters:
  • symbols (list, required) – List of symbols

  • bounds (tuple, optional) – Bounds for long and short weights, default is (0.0, 1.0)

  • min_weight (float, optional) – Minimum weight, default is 0.0

  • margin_rate (float, optional) – Margin rate, default is 0.0

  • long_weight (float, optional) – Long weight, default is 1.0

  • short_weight (float, optional) – Short weight, default is 0.0

  • frequency (int, optional) – Frequency, default is 252

  • optimization_method (str, optional) – Method, default is ‘mean_variance’. Options are ‘mean_variance’, ‘semivariance’, ‘cvar’, ‘cdar’

  • risk_method (str, optional) – Risk model, default is ‘sample_cov’. Options are ‘sample_cov’, ‘semicovariance’, ‘exp_cov’, ‘ledoit_wolf’, ‘ledoit_wolf_constant_variance’, ledoit_wolf_single_factor, ledoit_wolf_constant_correlation, ‘oracle_approximating’

  • semivariance_benchmark (int, optional) – The return threshold to distinguish “downside” and “upside”. Default is 0

  • historical_prices (pandas.core.frame.DataFrame, optional) – Historical prices, default is None

  • beta (float, optional) – Confidence level (e.g., expected loss on the worst (1-beta) days). Default is 0.95

calculate_black_litterman(covariance_matrix, market_prices, risk_free_rate, market_caps, symbols, investor_views, confidences, prints=False)
Description:

Calculate Black-Litterman

Parameters:
  • covariance_matrix (pandas.core.frame.DataFrame, required) – Covariance matrix

  • market_prices (pandas.core.series.Series, required) – Market prices

  • risk_free_rate (float, required) – Risk free rate

  • market_caps (pandas.core.series.Series, required) – Market capitalization

  • symbols (list, required) – Symbols

  • investor_views (dict, required) – Investor views

  • confidences (pandas.core.series.Series, required) – Confidences

  • prints (bool, optional) – Prints, default is False

Returns:

posterior covariance matrix, posterior expected returns

Return type:

tuple

static calculate_covariance_matrix(prices, symbols, risk_method='sample_cov', prints=False)
Description:

Calculate covariance matrix

Parameters:
  • prices (pandas.core.frame.DataFrame, required) – Prices

  • symbols (list, required) – Symbols

  • risk_method (str, required) – Risk method

  • prints (bool, optional) – Prints, default is False

Returns:

Covariance matrix

Return type:

pandas.core.frame.DataFrame

static calculate_symbol_vols(covariance_matrix)
Description:

Calculate symbol volatilities

Parameters:

covariance_matrix (pandas.core.frame.DataFrame, required) – Covariance matrix

Returns:

Ticker volatilities

Return type:

pandas.core.series.Series

efficient_frontier_portfolios(posterior_expected_returns, posterior_covariance_matrix, risk_free_rate, prints=False)
Description:

Efficient frontier portfolios

Parameters:
  • posterior_expected_returns (pandas.core.series.Series, required) – Posterior expected returns

  • posterior_covariance_matrix (pandas.core.frame.DataFrame, required) – Posterior covariance matrix

  • risk_free_rate (float, required) – Risk free rate

  • prints (bool, optional) – Prints, default is False

Returns:

Efficient frontier portfolios, and portfolio results

Return type:

tuple

market_implied_risk_aversion(market_prices, risk_free_rate, prints=False)
Description:

Market implied risk aversion

Parameters:
  • market_prices (pandas.core.series.Series, required) – Market prices

  • risk_free_rate (float, required) – Risk free rate

  • prints (bool, optional) – Prints, default is False

Returns:

Market implied risk aversion

Return type:

float

maximum_risk_portfolio(posterior_expected_returns, posterior_covariance_matrix, risk_free_rate, prints=False)
Description:

Maximum risk portfolio

Parameters:
  • posterior_expected_returns (pandas.core.series.Series, required) – Posterior expected returns

  • posterior_covariance_matrix (pandas.core.frame.DataFrame, required) – Posterior covariance matrix

  • risk_free_rate (float, required) – Risk free rate

  • prints (bool, optional) – Prints, default is False

Returns:

Maximum risk portfolio volatility, asset weights, and portfolio results

Return type:

tuple

maximum_sharpe_portfolio(posterior_expected_returns, posterior_covariance_matrix, risk_free_rate, prints=False)
Description:

Maximum Sharpe ratio portfolio

Parameters:
  • posterior_expected_returns (pandas.core.series.Series, required) – Posterior expected returns

  • posterior_covariance_matrix (pandas.core.frame.DataFrame, required) – Posterior covariance matrix

  • risk_free_rate (float, required) – Risk free rate

  • prints (bool, optional) – Prints, default is False

Returns:

Maximum Sharpe portfolio asset weights, and portfolio results

Return type:

tuple

minimum_risk_portfolio(posterior_expected_returns, posterior_covariance_matrix, risk_free_rate, prints=False)
Description:

Minimum risk portfolio

Parameters:
  • posterior_expected_returns (pandas.core.series.Series, required) – Posterior expected returns

  • posterior_covariance_matrix (pandas.core.frame.DataFrame, required) – Posterior covariance matrix

  • risk_free_rate (float, required) – Risk free rate

  • prints (bool, optional) – Prints, default is False

Returns:

Minimum risk portfolio volatility, asset weights, and portfolio results

Return type:

tuple

static plot_efficient_frontier(expected_returns, results, covariance_matrix, figsize=(12, 6))
Description:

Plot efficient frontier

Parameters:
  • expected_returns (pandas.core.series.Series, required) – Expected returns

  • results (pandas.core.frame.DataFrame, required) – Results

  • covariance_matrix (pandas.core.frame.DataFrame, required) – Covariance matrix

  • figsize (tuple, optional) – Figure size, default is (12, 6)

Returns:

Plot

Return type:

matplotlib.pyplot.figure

static print_results(weights, print_results)
Description:

Print results

Parameters:
  • weights (pandas.core.frame.DataFrame, required) – Portfolio weights

  • print_results (pandas.core.series.Series, required) – Print results

Returns:

None

process_ef_output(ef, risk_free_rate, portfolio_name=None)
Description:

Process efficient frontier output

Parameters:
  • ef (pypfopt.efficient_frontier.EfficientFrontier, required) – Efficient frontier object

  • risk_free_rate (float, required) – Risk free rate

  • portfolio_name (str, optional) – Portfolio name, default is None

Returns:

volatility, weights, results, print_results

Return type:

tuple