package finance // MaxDrawdown calcula el maximo drawdown de una serie de valores (e.g. equity curve). // Retorna la magnitud del drawdown (valor positivo entre 0 y 1 como fraccion del pico), // y los indices de inicio (pico) y fin (valle) del peor drawdown. // Si la serie tiene menos de 2 elementos, retorna 0, 0, 0. func MaxDrawdown(values []float64) (maxDD float64, start, end int) { n := len(values) if n < 2 { return 0, 0, 0 } peakIdx := 0 peak := values[0] for i := 1; i < n; i++ { if values[i] > peak { peak = values[i] peakIdx = i } dd := (peak - values[i]) / peak if dd > maxDD { maxDD = dd start = peakIdx end = i } } return }