# quant-metrics
Pure-math portfolio statistics for Rust. Decimal-backed, zero I/O, zero async, WASM-compatible.
Conventions match Bloomberg / MetaTrader / TradeStation where they exist (e.g. Sharpe uses linear risk-free approximation per Bloomberg, Sortino uses total-N denominator per Sortino & Price 1994, win rate excludes zero-PnL from wins).
## Install
```toml
[dependencies]
quant-metrics = "0.4"
```
## Statistics
| Returns | `total_return`, `annualized_return`, `cagr` |
| Risk-adjusted | `sharpe_ratio`, `sortino_ratio`, `calmar_ratio`, `information_ratio` |
| Drawdown | `max_drawdown`, `drawdown_series`, `max_drawdown_duration`, `recovery_time` |
| Risk | `value_at_risk` (VaR), `conditional_var` (CVaR) |
| Trade stats | `win_rate`, `profit_factor`, `avg_win`, `avg_loss`, `expectancy` |
| Composition | `compose`, `compose_mixed`, allocation methods (equal-weight, inverse-vol, HRP) |
| Cointegration | `pearson_correlation`, OLS hedge ratio, ADF test, Ornstein-Uhlenbeck half-life |
| Rolling | `RollingWindow` for returns, vol, sharpe, max-drawdown |
## Example
```rust
use quant_metrics::{sharpe_ratio, max_drawdown};
use rust_decimal_macros::dec;
let returns = vec![dec!(0.01), dec!(-0.02), dec!(0.03), dec!(0.005)];
let sharpe = sharpe_ratio(&returns, dec!(0.02), 252); // rf=2%, daily
let dd = max_drawdown(&returns);
```
## Audit
See `AUDIT-VERDICT.md` at the workspace root for formula correctness, numerical stability, and convention notes (reviewed by Claude Opus agent personas — not a human-conducted audit).
## License
MIT — see [LICENSE-MIT](../../LICENSE-MIT).