pub struct PerformanceTearsheet {Show 15 fields
pub observation_count: usize,
pub total_return: f64,
pub annualised_return: f64,
pub annualised_volatility: f64,
pub sharpe_ratio: Option<f64>,
pub max_drawdown: f64,
pub calmar_ratio: Option<f64>,
pub annualised_excess_return: f64,
pub tracking_error: f64,
pub information_ratio: Option<f64>,
pub sortino_ratio: Option<f64>,
pub win_rate: f64,
pub return_min: f64,
pub return_max: f64,
pub return_mean: f64,
}Expand description
Comprehensive performance summary computed from a return series.
Covers absolute performance, risk-adjusted metrics, and drawdown analysis.
§Example
use fin_primitives::attribution::{PerformanceTearsheet, ReturnObservation};
let obs = vec![
ReturnObservation { label: "d1".to_owned(), portfolio_return: 0.01, benchmark_return: 0.008 },
ReturnObservation { label: "d2".to_owned(), portfolio_return: -0.005, benchmark_return: -0.003 },
ReturnObservation { label: "d3".to_owned(), portfolio_return: 0.02, benchmark_return: 0.015 },
];
let ts = PerformanceTearsheet::compute(&obs, 252).unwrap();
assert!(ts.annualised_return.is_finite());
assert!(ts.max_drawdown <= 0.0);Fields§
§observation_count: usizeNumber of observations used.
total_return: f64Compounded total portfolio return over all periods.
annualised_return: f64Annualised portfolio return (geometric).
annualised_volatility: f64Annualised volatility of portfolio returns.
sharpe_ratio: Option<f64>Sharpe ratio: annualised_return / annualised_volatility.
None if volatility is zero.
max_drawdown: f64Maximum peak-to-trough drawdown (always <= 0).
calmar_ratio: Option<f64>Calmar ratio: annualised_return / |max_drawdown|.
None if max_drawdown is zero.
annualised_excess_return: f64Annualised excess return over the benchmark.
tracking_error: f64Annualised tracking error (std dev of excess returns).
information_ratio: Option<f64>Information ratio: annualised_excess_return / tracking_error.
None if tracking error is zero.
sortino_ratio: Option<f64>Sortino ratio: annualised_return / downside_deviation.
None if downside deviation is zero.
win_rate: f64Win rate: fraction of periods with positive portfolio return.
return_min: f64Per-period return statistics: min, max, mean.
return_max: f64Maximum single-period return.
return_mean: f64Mean single-period return.
Implementations§
Source§impl PerformanceTearsheet
Calculates a PerformanceTearsheet from a sequence of return observations.
impl PerformanceTearsheet
Calculates a PerformanceTearsheet from a sequence of return observations.
Sourcepub fn compute(
observations: &[ReturnObservation],
periods_per_year: usize,
) -> Result<Self, FinError>
pub fn compute( observations: &[ReturnObservation], periods_per_year: usize, ) -> Result<Self, FinError>
Compute all performance metrics from a return series.
§Parameters
observations— Ordered sequence of return observations.periods_per_year— Annualisation factor: 252 for daily, 12 for monthly, 4 for quarterly.
§Errors
Returns FinError::InvalidInput if:
observationsis empty.periods_per_yearis zero.- Any return value is non-finite.