export type DrawdownDurationResult = { durations: Int32Array; maxDuration: number; }; export type MaxDrawdownInfo = { maxDrawdown: number; peakIndex: number; troughIndex: number; startIndex: number; endIndex: number; }; /** * Compute the drawdown series from an equity/price series. * For valid points: out[i] = equity[i]/peak - 1 (<= 0). NaNs propagate and do not update the peak. * @param equity Array-like equity or price series * @returns Float64Array of drawdowns (same length) */ export declare function dd(equity: ArrayLike): Float64Array; /** * Compute the maximum drawdown magnitude over the entire series. * Returns a positive number (0..+inf) or NaN when no valid points. * @param equity Array-like equity or price series * @returns Maximum drawdown magnitude (positive) or NaN */ export declare function maxdd(equity: ArrayLike): number; /** * Compute detailed information about the maximum drawdown, including peak, trough, and recovery indices. * When no valid points exist returns NaN/placeholder indices (-1). * @param equity Array-like equity or price series * @returns MaxDrawdownInfo with `maxDrawdown`, `peakIndex`, `troughIndex`, `startIndex`, and `endIndex` */ export declare function maxddDetails(equity: ArrayLike): MaxDrawdownInfo; /** * Rolling maximum drawdown over a trailing window. * For each index i computes the max drawdown observed within the trailing window. * @param equity Array-like equity or price series * @param window Rolling window length (positive integer) * @returns Float64Array of rolling max drawdowns */ export declare function rollmaxdd(equity: ArrayLike, window: number): Float64Array; /** * Compute drawdown durations (consecutive periods in current drawdown) and the maximum duration. * Positions where equity is NaN are marked with -1. * @param equity Array-like equity or price series * @returns DrawdownDurationResult { durations: Int32Array, maxDuration: number } */ export declare function dduration(equity: ArrayLike): DrawdownDurationResult; /** * Recovery factor: ratio of annualized return (CAGR) to maximum drawdown magnitude. * Returns NaN if insufficient data, invalid start value, or zero/NaN max drawdown. * @param equity Array-like equity or price series * @param freq Periods per year (default 252) * @returns Recovery factor or NaN */ export declare function recoveryfactor(equity: ArrayLike, freq?: number): number; /** * Calmar ratio: CAGR over a lookback period divided by the max drawdown magnitude over the same period. * If `lookbackPeriodYears` is null uses the entire series. Returns NaN on invalid inputs or zero drawdown. * @param equity Array-like equity or price series * @param lookbackPeriodYears Lookback window in years (null = full span) * @param freq Periods per year (default 252) * @returns Calmar ratio or NaN */ export declare function calmar(equity: ArrayLike, lookbackPeriodYears?: number | null, freq?: number): number; /** * Ulcer Index: measures depth and duration of drawdowns (root-mean-square of depths). * Returns NaN for empty input. * @param equity Array-like equity or price series * @returns Ulcer Index (>=0) or NaN */ export declare function ulcer(equity: ArrayLike): number; /** * Rolling Ulcer Index computed over a trailing window. * Returns NaN for windows with insufficient valid samples (< minPeriod) or invalid window. * @param equity Array-like equity or price series * @param window Rolling window length (positive integer) * @param minPeriod Minimum number of valid points required in window * @returns Float64Array of rolling ulcer index values */ export declare function rollulcer(equity: ArrayLike, window: number, minPeriod?: number): Float64Array;