maximumdrawdown(x) # function defined in post
$maximumdrawdown
[1] 0.25
$maxdrawdown
[1] 25
$from
[1] 2
$to
[1] 3
maxdrawdown(x) # function from tseries
$maxdrawdown
[1] 40
$from
[1] 4
$to
[1] 5
On 5/17/06, rproject at boonstra.org <rproject at boonstra.org> wrote:
Full_Name: Brian K. Boonstra
Version: 2.2.1
OS: WinXP, OSX
Submission from: (NULL) (63.172.178.137)
The maxdrawdown function in tseries defines the maximum drawdown in
terms of
absolute dollars (or whatever units the input is in). Industry
convention is to
do this in percentage terms. I have written the code below as
maximumdrawdown(), which retains backward compatibility with the current
version. It has the flaw that it does not check for zero or negative
values.
maximumdrawdown <- function (x)
{
if (NCOL(x) > 1)
stop("x is not a vector or univariate time series")
if (any(is.na(x)))
stop("NAs in x")
cminx <- x/cummax(x)
mdd <- min(cminx)
to <- which(mdd == cminx)
from <- double(NROW(to))
for (i in 1:NROW(to)) {
from[i] <- max( which(cminx[1:to[i]] == 1) )
}
return(list(maximumdrawdown = 1-mdd, maxdrawdown =
(1-mdd)*x[from], from =
from, to = to))
}