我无法让performanceAnalytics与我的动物园系列合作,我决定编写自己的剧本。
如果你想计算最长的亏损,它应该得到cummax(股权) - 平等作为输入。它还给出了这些时期的最大亏损值。
更正后的版本如下。
拜托,你能查一下我的剧本吗?它没有按预期工作。一些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)[]
现在它似乎有效,但我不确定。
约书亚: 一开始我的数据是带有chron索引的动物园 现在我用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代码,它与我的不同,因为它测量相对下降而不是绝对下降。
无论如何,我希望我的剧本对某人有用。
答案 0 :(得分:3)
您可以查看tseries包中较旧的函数maxdrawdown
。以下是其手册页中的示例:
mxdrwdR> # Realistic example
mxdrwdR> data(EuStockMarkets)
mxdrwdR> dax <- log(EuStockMarkets[,"DAX"])
mxdrwdR> mdd <- maxdrawdown(dax)
mxdrwdR> mdd
$maxdrawdown
[1] 0.25647
$from
[1] 236
$to
[1] 331
答案 1 :(得分:1)
我对最大缩编知之甚少,但这里有一些关于你的代码的想法。
输入DD
的形式并不完全清楚。您可能需要进行一些输入检查以确保它已正确形成。
rr <- rle(coredata(sign(DD)))
除非你重载了这个函数,sign
返回一个数字向量(包含-1s,0和1)。您的意思是sign(coredata(DD))
吗?
lens[rr$value == FALSE] <- 0
您定义变量lens
,但稍后再使用rr$length
。
rr$value == FALSE
改用!rr$value
;它更清楚。
ll <- head(order(rr$length, decreasing=TRUE),5)
我不知道这对方法有多重要,但您可能希望允许用户输入有多少最长的运行用于函数,而不是将其硬编码为5。
当您与放置空格的位置一致时,代码更易于阅读。就个人而言,我更喜欢逗号后的空格和操作符之前和之后的空格。
答案 2 :(得分:1)
使用chron作为索引时,PerformanceAnalytics中的函数只会失败。我之前建议你不要依赖chron作为你的zoo / xts索引值。
该错误为您提供了一个提示:为什么它不起作用:“Rownames应该有标准的日期格式,例如'1985-03-15'”。 chron不使用标准日期格式,因此错误。
library(quantmod)
library(PerformanceAnalytics)
library(chron)
getSymbols("SPY")
r <- na.omit(ROC(Cl(SPY)))
# xts object with 'Date' index
str(SPY)
table.Drawdowns(r)
table.Drawdowns(as.zoo(r))
# convert index to chron
index(r) <- as.chron(index(r))
table.Drawdowns(r) # fails
table.Drawdowns(as.zoo(r)) # fails
# convert index to POSIXct
index(r) <- as.POSIXct(index(r))
table.Drawdowns(r)
table.Drawdowns(as.zoo(r))