pub struct RiskContribution;Expand description
Computes per-position marginal risk contributions from a covariance matrix.
§Example
use fin_primitives::attribution::RiskContribution;
// Two-asset portfolio: equal weights, uncorrelated, same vol
let weights = vec![0.5, 0.5];
let cov = vec![
vec![0.04, 0.0], // var(A) = 0.04, cov(A,B) = 0
vec![0.0, 0.04], // cov(B,A) = 0, var(B) = 0.04
];
let ids = vec!["A".to_owned(), "B".to_owned()];
let result = RiskContribution::compute(&ids, &weights, &cov).unwrap();
// Each asset contributes 50% of portfolio risk
assert!((result[0].pct_risk_contribution - 50.0).abs() < 0.01);Implementations§
Source§impl RiskContribution
impl RiskContribution
Sourcepub fn compute(
ids: &[String],
weights: &[f64],
cov: &[Vec<f64>],
) -> Result<Vec<PositionRiskContribution>, FinError>
pub fn compute( ids: &[String], weights: &[f64], cov: &[Vec<f64>], ) -> Result<Vec<PositionRiskContribution>, FinError>
Compute per-position marginal risk contributions.
§Parameters
ids— Position identifiers, length N.weights— Portfolio weights, length N.cov— N×N covariance matrix (row-major).
§Errors
Returns FinError::InvalidInput if:
ids,weights, andcovlengths are inconsistent.- Portfolio volatility is zero (all-zero weights or flat covariance).
- Any weight or covariance entry is non-finite.
Auto Trait Implementations§
impl Freeze for RiskContribution
impl RefUnwindSafe for RiskContribution
impl Send for RiskContribution
impl Sync for RiskContribution
impl Unpin for RiskContribution
impl UnsafeUnpin for RiskContribution
impl UnwindSafe for RiskContribution
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more