[Rd] Convention difference in tseries.maxdrawdown (PR#8872)
Adrian Trapletti
a.trapletti at swissonline.ch
Thu May 18 16:00:53 CEST 2006
>
> 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
>>
>
>
More information about the R-devel
mailing list