Risk API¶
asrquant.risk ¶
Portfolio risk decomposition, tail risk, and scenario analytics.
Risk measures in this module use a loss-positive convention: Value at Risk and Expected Shortfall are reported as positive loss magnitudes whenever the loss quantile is positive. Asset-return inputs remain ordinary signed returns.
PortfolioRiskReport
dataclass
¶
Compact portfolio-risk snapshot with inspectable decompositions.
Source code in src/asrquant/risk.py
portfolio_returns ¶
Compute fixed-weight portfolio returns after row-wise missing-data checks.
Source code in src/asrquant/risk.py
covariance_risk_contributions ¶
covariance_risk_contributions(weights: Series | Iterable[float], covariance: DataFrame | ndarray, *, asset_names: Iterable[str] | None = None) -> pd.DataFrame
Euler decomposition of portfolio volatility.
component_volatility sums to portfolio volatility (up to floating-point
precision) for a positive-volatility portfolio.
Source code in src/asrquant/risk.py
portfolio_var ¶
portfolio_var(returns: DataFrame, weights: Series | Iterable[float], *, level: float = 0.95, method: str = 'historical', horizon: int = 1) -> float
Portfolio Value at Risk using historical, Gaussian, or Cornish-Fisher loss.
Source code in src/asrquant/risk.py
portfolio_expected_shortfall ¶
portfolio_expected_shortfall(returns: DataFrame, weights: Series | Iterable[float], *, level: float = 0.95, method: str = 'historical', horizon: int = 1) -> float
Portfolio Expected Shortfall under historical or Gaussian assumptions.
Source code in src/asrquant/risk.py
expected_shortfall_contributions ¶
expected_shortfall_contributions(returns: DataFrame, weights: Series | Iterable[float], *, level: float = 0.95) -> pd.Series
Historical asset contributions to portfolio Expected Shortfall.
The contributions are conditional mean loss contributions in observations where the total portfolio loss breaches its historical VaR. Their sum equals the reported historical ES up to quantile/tie precision.
Source code in src/asrquant/risk.py
scenario_pnl ¶
scenario_pnl(weights: Series | Iterable[float], scenarios: DataFrame, *, capital: float = 1.0) -> pd.DataFrame
Apply instantaneous asset-return scenarios to a portfolio.
scenarios is a Scenario x Asset matrix of signed shocks/returns. Output
asset columns are P&L contributions and portfolio_pnl is their sum.
Source code in src/asrquant/risk.py
rolling_var ¶
rolling_var(returns: DataFrame, weights: Series | Iterable[float], *, window: int = 252, level: float = 0.95, method: str = 'historical') -> pd.Series
Rolling one-period portfolio VaR with a fixed weight vector.
Source code in src/asrquant/risk.py
portfolio_risk_report ¶
portfolio_risk_report(returns: DataFrame, weights: Series | Iterable[float], *, level: float = 0.95, annualization: int = 252) -> PortfolioRiskReport
Build a standard volatility + tail-risk report from asset returns.