Algostream_risk_management.Proprietary_modelsProprietary composite risk score.
Bundles the per-dimension risk signals produced by Monitor.update — GARCH-forecast VaR vs limit, drawdown vs limit, leverage vs limit, correlation breakdown severity, circuit-breaker state, and a realized-vs-baseline volatility regime — into a single 0..1 composite score with a risk_level tier (Low / Moderate / High / Critical) and an independent volatility-regime classification (Calm / Normal / Elevated / Stressed).
Default weights bias toward forward-looking VaR (0.30) and drawdown (0.25) over the lagging signals. Strategies override ~weights when they have a different risk philosophy.
Tier classification of the composite score:
Low — score < 0.25Moderate — 0.25 ≤ score < 0.50High — 0.50 ≤ score < 0.75Critical — score ≥ 0.75Vol-regime classification based on realized / baseline volatility ratio:
Calm — ratio < 0.5Normal — 0.5 ≤ ratio < 1.5Elevated — 1.5 ≤ ratio < 3.0Stressed — ratio ≥ 3.0type score = {composite : float;level : risk_level;var_component : float;drawdown_component : float;leverage_component : float;correlation_component : float;circuit_component : float;vol_regime : vol_regime;vol_ratio : float;realized_vol / baseline_vol
*)}Each component is in 0, 1 — 0 means "well within limit", 1 means "at or beyond limit". composite is the weighted average.
val default_weights : weightsDefault weights: var=0.30, drawdown=0.25, leverage=0.15, correlation=0.15, circuit=0.15. Sum normalized to 1.0 during composition; any positive weights work.
val classify_vol_regime :
realized_vol:float ->
baseline_vol:float ->
vol_regimeval classify_risk_level : score:float -> risk_levelval compute_score :
?weights:weights ->
var_pct:float ->
max_var_pct:float ->
current_drawdown:float ->
max_drawdown:float ->
leverage:float ->
max_leverage:float ->
correlation_status:Correlation_breakdown.status ->
circuit_state:Circuit_breaker.state ->
realized_vol:float ->
baseline_vol:float ->
unit ->
scorePure-function composition. All inputs explicit so the function is trivially testable.
val from_snapshot :
snapshot:Risk_snapshot.t ->
limits:Risk_limits.t ->
realized_vol:float ->
baseline_vol:float ->
?weights:weights ->
unit ->
scoreConvenience: derive the score directly from a published Risk_snapshot.t + the Risk_limits.t config + the Monitor's last realized + baseline volatility (via Monitor.realized_vol / Monitor.baseline_vol).
val risk_level_to_string : risk_level -> stringval vol_regime_to_string : vol_regime -> stringval score_to_string : score -> string