Path: blob/master/sandbox/paper_analysis/R_interpretation/findDrawdowns.R
1433 views
1library(PerformanceAnalytics)2z = rnorm(50)3z = xts( z , order.by = as.Date(c(1:50)))4table.Drawdowns(z)567findDrawdowns =8function (R, geometric = TRUE, ...)9{10x = checkData(R[, 1, drop = FALSE], method = "matrix")11drawdowns = Drawdowns(x, geometric = geometric)12draw = c()13begin = c()14end = c()15length = c(0)16trough = c(0)17index = 118if (drawdowns[1] >= 0)19priorSign = 120else priorSign = 021from = 122sofar = drawdowns[1]23to = 124dmin = 125for (i in 1:length(drawdowns)) {26thisSign <- ifelse(drawdowns[i] < 0, 0, 1)27if (thisSign == as.numeric(priorSign)) {28#if (drawdowns[i] < sofar) {29if (drawdowns[i] < as.numeric(sofar)) {30sofar = drawdowns[i]31dmin = i32}33to = i + 134}35else {36draw[index] = sofar37begin[index] = from38trough[index] = dmin39end[index] = to40from = i41sofar = drawdowns[i]42to = i + 143dmin = i44index = index + 145priorSign = thisSign46}47}48draw[index] = sofar49begin[index] = from50trough[index] = dmin51end[index] = to52list(return = draw, from = begin, trough = trough, to = end,53length = (end - begin + 1), peaktotrough = (trough -54begin + 1), recovery = (end - trough))55}5657