RiskContributionAnalysis

class qf_lib.common.timeseries_analysis.risk_contribution_analysis.RiskContributionAnalysis[source]

Bases: object

Calculates risk contribution metrics.

Methods

get_distance_to_equal_risk_contrib(…)

By minimising this function it is possible to calculate Equal Risk Contribution Portfolio.

get_risk_contribution(factors_rets, …)

Calculates risk contribution of different factors to the portfolio.

get_risk_contribution_optimised(assets_rets, …)

Calculates risk contribution of each asset of the portfolio.

is_equal_risk_contribution(…)

Tells whether each asset has an equal risk contribution to the portfolio.

classmethod get_distance_to_equal_risk_contrib(assets_returns_covariance: qf_lib.containers.dataframe.qf_dataframe.QFDataFrame, weights_of_assets: qf_lib.containers.series.qf_series.QFSeries) → float[source]

By minimising this function it is possible to calculate Equal Risk Contribution Portfolio. It has better numerical properties than simple approach ( riskContribution - mean(riskContribution) ) Details: http://www.thierry-roncalli.com/download/erc-slides.pdf

Parameters
  • assets_returns_covariance – covariance matrix for assets returns data frame

  • weights_of_assets – weight of each asset in the portfolio. It’s indexed with names of assets.

Returns

Return type

L2 (euclidean) distance from equal risk distribution

classmethod get_risk_contribution(factors_rets: qf_lib.containers.dataframe.simple_returns_dataframe.SimpleReturnsDataFrame, weigths_of_assets: qf_lib.containers.series.qf_series.QFSeries, portfolio_rets: qf_lib.containers.series.simple_returns_series.SimpleReturnsSeries)qf_lib.containers.series.qf_series.QFSeries[source]

Calculates risk contribution of different factors to the portfolio. Risk is defined as volatility. Uses x-sigma-rho formula (MSCI Bara paper).

Parameters
  • factors_rets – dataframe consisted of returns for different assets

  • weigths_of_assets – series of weights of each asset. It’s indexed with names of assets.

  • portfolio_rets – return of the whole portfolio

Returns

Series of risk contributions (one for each asset) to the portfolio. It’s indexed with names of assets.

Return type

pandas.Series

classmethod get_risk_contribution_optimised(assets_rets: qf_lib.containers.dataframe.simple_returns_dataframe.SimpleReturnsDataFrame, weights_of_assets: qf_lib.containers.series.qf_series.QFSeries)qf_lib.containers.series.qf_series.QFSeries[source]

Calculates risk contribution of each asset of the portfolio.

Parameters
  • assets_rets – returns of assets building the portfolio (each assets in a separate column)

  • weights_of_assets – Series of weights (one for each asset). It’s indexed with names of assets.

Returns

Return type

Series of risk contributions (one for each asset) It’s indexed with names of assets

classmethod is_equal_risk_contribution(returns_covariance: qf_lib.containers.dataframe.qf_dataframe.QFDataFrame, weights_of_assets: qf_lib.containers.series.qf_series.QFSeries) → bool[source]

Tells whether each asset has an equal risk contribution to the portfolio.

Parameters
  • returns_covariance – DataFrame which is a covariance matrix. Columns and rows are both indexed with names of assets.

  • weights_of_assets – Series of weights (one weight for each asset). It’s indexed with names of assets.

Returns

Return type

True if each asset has and equal risk contribution. False – otherwise.