我利用了PerformanceAnalytics 包里面的maxDrawdown函数求最大回撤
但现在需要求沪深300等指数的每周的最大回撤,在数据量稍微大一些的时候,由于循环计算,代码计算效率就比较低,代码数据如下:
pcg.xt 为xts格式的时间序列,里面有四个指数的交易日涨跌幅数据(2002-01-04 to 2019-11-30)该data 为4345*4 matrix
我是写了for循环来计算的,我先找到了每周周一与周五的日期索引,然后计算该区间内的最大回撤、
yd <- index(pcg.xt[xts::: endof(pcg.xt,"weeks")]) # get year/month/week end date index in data pcg.xt
dd <- data.frame(matrix(NA,nrow = (length(yd)+1),ncol = l)) # maxDrawdown dataframe
dd[,1] <- c(as.character(yd),"total") # week end date
is <- 1 # get monday index
for (i in 1:ncol(pcg.xt)) {
for (j in 1:(nrow(dd)-1)) {
ie <- which(index(pcg.xt) == yd[j]) # get friday index
dd[j,(i+1)] <- round(maxDrawdown(pcg.xt[is:ie,i]/100,invert = FALSE)*100,2)
is <- ie+1 #get next week mondy index
}
is <- 1 #restart
}
最后dd是最大回撤的表格,代码是可以运行的,但是会运行一段时间,问一下论坛里的大神,如何不用for循环算呢?