From a.trapletti at swissonline.ch  Thu May 18 16:00:53 2006
From: a.trapletti at swissonline.ch (Adrian Trapletti)
Date: Thu, 18 May 2006 16:00:53 +0200
Subject: [Rd] Convention difference in tseries.maxdrawdown (PR#8872)
Message-ID: <446C7E15.9080205@swissonline.ch>

>
> Regarding the upwardly compatible comment, the dollar drawdown that
> corresponds to the maximum fractional drawdown is not necessarily the
> maximum dollar drawdown.
>
> For example, in this situation the maximum fractional drawdown
> is from 100 to 75 but the maximum dollar drawdown is from 200
> to 160.
>
>> x <- c(1, 100, 75, 200, 160)
>
>

What type of drawdown to work with depends on the context. If working in 
percent is more appropriate, then you might use

maxdrawdown(log(x))$maxdrawdown

or if log returns are not appropriate then the following transformation 
provides the equivalent what was suggested

-(exp(-maxdrawdown(log(x))$maxdrawdown)-1)


Best regards
Adrian

>> 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))
>> }
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>



[Rd] Convention difference in tseries.maxdrawdown (PR#8872)
Adrian Trapletti