pub struct DrawdownAnalysis;Expand description
Maximum drawdown calculator for a single path
Implementations§
Source§impl DrawdownAnalysis
impl DrawdownAnalysis
Sourcepub fn max_drawdown(values: &[f64]) -> f64
pub fn max_drawdown(values: &[f64]) -> f64
Calculate maximum drawdown from a value series
Maximum drawdown = max((peak - trough) / peak)
§Arguments
values- Time series of portfolio values
§Returns
Maximum drawdown as a positive fraction (0.1 = 10% drawdown)
§Example
use aprender::monte_carlo::risk::DrawdownAnalysis;
let values = vec![100.0, 110.0, 90.0, 95.0, 85.0, 100.0];
let max_dd = DrawdownAnalysis::max_drawdown(&values);
// Peak was 110, trough was 85: (110-85)/110 ≈ 0.227
assert!(max_dd > 0.22 && max_dd < 0.24);Sourcepub fn drawdown_series(values: &[f64]) -> Vec<f64>
pub fn drawdown_series(values: &[f64]) -> Vec<f64>
Calculate drawdown series from values
Returns the drawdown at each time point relative to the running peak
Sourcepub fn max_drawdown_duration(values: &[f64]) -> usize
pub fn max_drawdown_duration(values: &[f64]) -> usize
Calculate drawdown duration (time to recovery)
Returns the maximum number of periods spent in drawdown
Sourcepub fn ulcer_index(values: &[f64]) -> f64
pub fn ulcer_index(values: &[f64]) -> f64
Calculate Ulcer Index (quadratic mean of drawdowns)
UI = sqrt(mean(drawdown^2))
Penalizes deep drawdowns more than shallow ones
Sourcepub fn pain_index(values: &[f64]) -> f64
pub fn pain_index(values: &[f64]) -> f64
Calculate Pain Index (average drawdown)
Sourcepub fn from_paths(paths: &[SimulationPath]) -> DrawdownStatistics
pub fn from_paths(paths: &[SimulationPath]) -> DrawdownStatistics
Calculate drawdown statistics from simulation paths
Sourcepub fn recovery_factor(values: &[f64]) -> f64
pub fn recovery_factor(values: &[f64]) -> f64
Calculate recovery factor
Recovery Factor = Total Return / Max Drawdown
Higher is better - shows how well returns compensate for risk
Trait Implementations§
Source§impl Clone for DrawdownAnalysis
impl Clone for DrawdownAnalysis
Source§fn clone(&self) -> DrawdownAnalysis
fn clone(&self) -> DrawdownAnalysis
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for DrawdownAnalysis
impl RefUnwindSafe for DrawdownAnalysis
impl Send for DrawdownAnalysis
impl Sync for DrawdownAnalysis
impl Unpin for DrawdownAnalysis
impl UnwindSafe for DrawdownAnalysis
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more