Я не могу заставить PerformanceAnalytics работать с моими сериями зоопарков, и я решил написать свой собственный скрипт.
Предполагается получить cummax (equity) -eity в качестве входных данных, если вы хотите вычислить десамые длинные просадки.Он также дает максимальное значение просадки за эти периоды.
исправленная версия приведена ниже.
Пожалуйста, не могли бы вы проверить мой сценарий.Это не работает, как ожидалось.Некоторые maxDD равны нулю.Я надеюсь, что это может быть полезно для других людей.Я видел много сообщений на форумах, где люди ищут что-то подобное.
Я исправил это, предложив Ричи:
findDD <- function(DD, n=5){
rr <- rle(sign(coredata(DD)))
lens <- rr$length
lens[!rr$value] <- 0
ll <- head(order(lens, decreasing=TRUE),n)
sumas <- cumsum(c(1,rr$length)) # I need to access the original lenghts
maxDD <- sapply(ll,FUN = function(x) max(window(DD,start=index(DD)[sumas[x]],end=index(DD)[sumas[x+1]-1])))
data.frame(start=index(DD)[sumas[ll]],end=index(DD)[sumas[ll+1]-1], length=(index(DD)[sumas[ll+1]-1]-index(DD)[sumas[ll]])+1, maxDD)
}
Я также исправил проблему, которая помешала мнеот получения упорядоченного ответа, потому что я писал индекс (DD []) вместо индекса (DD) []
Теперь это похоже на работу, но я не уверен.
Джошуа:В начале мои данные были zoo с индексом chron. Теперь я преобразовал их в xts с индексом posixct,
"2010-01-11 18:00:00" 9338.37028375963
"2010-01-11 18:15:00" 8086.45780960387
"2010-01-11 18:30:00" 7762.75622449016
"2010-01-11 18:45:00" 8358.3609798313
"2010-01-11 19:00:00" 8598.69695502083
"2010-01-11 19:15:00" 8568.56256494502
"2010-01-11 19:30:00" 8488.4281748692
...
по-прежнему не работает с performanceAnalytics, хотя я могу отобразить их и выполнить любые вычисления по моимсвоя.Просадка (myData) дает серию xts со всеми значениями данных NaN.Я смотрел на код findDrawdown, и он отличается от моего, потому что он измеряет относительные просадки вместо абсолютных просадок.
В любом случае, я надеюсь, что мой сценарий может быть кому-то полезен.