我无法让 performanceAnalytics 与我的动物园系列一起工作,因此我决定编写自己的脚本。
如果你想计算最长的回撤,它应该得到 cummax(equity)-equity 作为输入。它还给出了这些时期的最大回撤值。
修正版如下。
拜托,你能检查我的脚本吗?它没有按预期工作。一些 maxDD 为零。我希望它对其他人有用。我在论坛上看到很多消息,人们在其中寻找类似的东西。
我已经用 Richie 的建议纠正了它:
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)
}
我还纠正了一个问题,该问题使我无法获得有序的答案,因为我写的是 index(DD[]) 而不是 index(DD)[]
现在它似乎有效,但我不确定。
对 Joshua:一开始我的数据是带有 chron 索引的 zoo 现在我已经将它转换为带有 posixct 索引的 xts,
"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 一起使用,尽管我可以绘制它并自己进行任何计算。Drawdown(myData) 给出了一个 xts 系列,其所有数据值为 NaN。我一直在查看 findDrawdown 代码,它与我的不同,因为它测量的是相对回撤而不是绝对回撤。
无论如何,我希望我的脚本对某人有用。