计算R中收益的滚动下降

问题描述

XTS被称为“ x”,每天有七种货币回报。

x=structure(c(0,-0.00237747604278071,-4.10901316858503e-05,-0.00292075554430804,-0.00327746821541597,-0.0024832242245989,-7.13774881431206e-05,-0.00288771987280823,-0.00239072530655426,-0.00238446679144366,-0.00169293890925615,-0.0036441365731773,-0.00370471543592221,-0.00244664834224606,-0.00285354593582876,-0.00288034192721653,-0.00310375411764707,-0.00146643546387215,-0.00427725501167975,-0.00376793265740194,-0.00183281566844917,-0.00294652695187159,-0.0021703202366018,-0.00243030417112311,-0.000372071536924534,-0.00330455837816801,-0.00245257154873846
),class = c("xts","zoo"),index = structure(c(1297296000,1297382400,1297641600,1297728000,1297814400,1297900800),tzone = "UTC",tclass = "Date"),.Dim = 6:7,.Dimnames = list(
    NULL,c("AUD","EUR","GBP","JPY","KRW","TWD","USD")))

我已经使用PerformanceAnalytics函数Drawdowns来计算和绘制累积的dropdown,这很好。但是,我也希望滚动60天,并且尝试了rollapply和apply.rolling但没有运气。

任何人都可以推荐解决方案吗?

structure(c(0.00371570839572193,0.00118836834224599,-0.00237747604278075,0.00234195385026738,-0.00287978374331551,-0.000357757593582888,0.00265543171122995,0.000720424064171123,-0.00248322422459893,0.00241785080213904,-0.00281654342245989,0.000498433903743315,0.00302572497326203,0.00161579593582888,-0.00238446679144385,0.000693180748663102,-0.00195450652406417,-6.08004278074866e-05,0.00387943005347594,0.00128238518716578,-0.00244664834224599,0.00274308647058824,-0.00285354593582888,-2.68726737967914e-05,0.00367270588235294,0.00235053556149733,-0.00310375411764706,0.00164241631016043,-0.00281494748663102,0.000511510213903743,0.00330757946524064,0.00212843374331551,-0.0018328156684492,0.00260363310160428,-0.00294652695187166,0.000778500588235294,0.00273476534759358,0.000962438395721925,-0.00243030417112299,0.00206324695187166,-0.00293357834224599,0.000854811604278075
),"USD")))

rollapply(x,width = 60,FUN = Drawdowns)

如果数组(ans,c(len.a%/%d2,d.ans),if(!is.null(names(dn.ans))||: 'dimnames'[1]的长度不等于数组范围

apply.rolling(x,宽度= 60,FUN = SharpeRatio)

rbind(calcs,calc)中的错误: 矩阵的列数必须匹配(请参见参数2)

解决方法

以下是使用xts和PerformanceAnalytics软件包的建议: 我创建了一个具有模拟收益的xts对象,并从Zoo包(装有xts)中应用了rollapply函数,其宽度为25天。

测试器

library(xts)
library(PerformanceAnalytics)

set.seed(123)
returns <- matrix(rnorm(n = 365*7,mean = 0.001,sd = 0.002),ncol = 7)
timeindex <- seq.Date(as.Date('2019-01-01'),to = as.Date('2019-12-31'),by = 'days')
test_xts <- xts(x = returns,order.by = timeindex)
colnames(test_xts) <- c("AUD","EUR","GBP","JPY","KRW","TWD","USD")

rolling_maxDD <- rollapply(test_xts,width = 25,FUN = maxDrawdown)

plot.xts(-rolling_maxDD,legend.loc = 'bottomleft')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...