2015-08-24 4 views
-1

Я хочу использовать функцию maxDrawdown в пакете PerformanceAnalytics для вычисления максимальной просадки, но обнаруживаю, что она всегда возвращает ноль (а это не так).Почему функция maxDrawdown в пакете PerformanceAnalytics возвращает неверный результат?

Я использую maxDrawdown нравится эта

> maxDrawdown(my.xts) 
[1] 0 

Мой XTS, как это:

> my.xts 
      value 
2004-06-16 4.150 
2004-06-17 4.225 
2004-06-18 4.025 
2004-06-21 4.000 
2004-06-23 4.425 
2004-06-24 4.450 
2004-06-25 4.400 
2004-06-28 4.325 
2004-06-29 4.325 
2004-06-30 4.300 
2004-07-02 4.350 
2004-07-06 4.400 
2004-07-07 4.275 
2004-07-08 4.100 
2004-07-09 4.075 
2004-07-12 4.000 
2004-07-13 4.025 
2004-07-14 3.800 
2004-07-15 3.675 
2004-07-16 3.700 

ул (my.xts) возвращает

An ‘xts’ object on 2004-06-16/2004-07-16 containing: 
    Data: num [1:20, 1] 4.15 4.22 4.03 4 4.42 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr "value" 
    Indexed by objects of class: [POSIXct,POSIXt] TZ:- 
    xts Attributes:-- 
NULL 

И, я пишу функцию уточнить

my.mmd <- function(v) { 
    max(1 - v/cummax(v)) 
} 

Результаты не равны нулю.

> my.mmd(my.xts$value) 
[1] 0.1741573 

Почему maxDrawdown возвращает 0?


Я строю корпус, используя http://www.investopedia.com/terms/m/maximum-drawdown-mdd.asp.

other.xts <- xts(c(500,750,400,600,350, 800), Sys.Date() + 1:6) 
maxDrawdown(other.xts) # --> here still returns 0! 
my.mmd(other.xts) # -> my function returns 0.5333333, seems right. 

Возможно, я использую функцию maxDrawdown неправильно! Но я снова просматриваю документ() и до сих пор не могу его получить. Мне что-то не хватает в использовании этой функции?

+1

Там нет 'maxDrawdown' в 'xts'. Вы имеете в виду 'maxDrawdown' в' PerformanceAnalytics'? –

+0

извините .. да, я имею в виду PerformanceAnalytics. – hliu

+0

Использование 'data (edhec)' и 'x <- edhec [,« Funds of Funds »]', 'maxDrawdown (x)' дает '0.2059145', а ваша функция (' my.mmd (x) ') дает' 2.416092'. –

ответ

2

Ваш объект XTS содержит Цена данных в сравнении Возвраты и именно поэтому вы получаете maxDrawdown = 0

Например:

# Using Prices instead of returns to calculate Drawdowns 
a <- Ad(getSymbols("AAPL", auto.assign = FALSE)) 

head(a) 
      AAPL.Adjusted 
2007-01-03  11.19449 
2007-01-04  11.44295 
2007-01-05  11.36147 
2007-01-08  11.41757 
2007-01-09  12.36603 
2007-01-10  12.95782 

maxDrawdown(head(a)) 
[1] 0 

Теперь с помощью Возвраты:

# Nice wrapper to calculate returns via PerformanceAnalytics 
ret <-CalculateReturns(head(a), "discrete") 

> head(ret) 
      AAPL.Adjusted 
2007-01-03   NA 
2007-01-04 0.022195570 
2007-01-05 -0.007121151 
2007-01-08 0.004938271 
2007-01-09 0.083070194 
2007-01-10 0.047855606 
> maxDrawdown(ret) 
[1] 0.007121151