如何使用TTR指示符函数使用XTS period.apply()?

如何使用TTR指示符函数使用XTS period.apply()?,r,xts,quantitative-finance,R,Xts,Quantitative Finance,我似乎无法将TTR指示符函数直接与XTS中的period.apply()一起使用。请帮我找出我做错了什么 > require(TTR) > require(quantmod) > require(xts) > data(sample_matrix) > period.apply(sample_matrix, endpoints(sample_matrix,"weeks"), RSI) Error in EMA(c(NA, 0.190714286249097, 0

我似乎无法将TTR指示符函数直接与XTS中的period.apply()一起使用。请帮我找出我做错了什么

> require(TTR)
> require(quantmod)
> require(xts)
> data(sample_matrix)

> period.apply(sample_matrix, endpoints(sample_matrix,"weeks"), RSI)

Error in EMA(c(NA, 0.190714286249097, 0.190459011271606, 0, 0, 0, NA,  : 
  Invalid 'n'

我还尝试先将
设置为.xts(sample_matrix)
,但没有任何帮助。

根据对您的问题的评论,我认为您希望这样:

> RSI(Cl(to.period(sample_matrix, "weeks", 2)),4)
               [,1]
2007-01-07       NA
2007-01-21       NA
2007-02-04       NA
2007-02-18       NA
2007-03-04 58.42659
2007-03-18 40.25955
2007-04-01 27.12793
2007-04-15 50.26745
2007-04-29 38.97652
2007-05-13 22.03943
2007-05-27 28.75952
2007-06-10 22.21261
2007-06-24 21.58207
2007-06-30 41.69338

根据对你问题的评论,我认为你想要这样的东西:

> RSI(Cl(to.period(sample_matrix, "weeks", 2)),4)
               [,1]
2007-01-07       NA
2007-01-21       NA
2007-02-04       NA
2007-02-18       NA
2007-03-04 58.42659
2007-03-18 40.25955
2007-04-01 27.12793
2007-04-15 50.26745
2007-04-29 38.97652
2007-05-13 22.03943
2007-05-27 28.75952
2007-06-10 22.21261
2007-06-24 21.58207
2007-06-30 41.69338

您的示例中的错误是由于RSI的默认值
n=10
造成的,并且没有10天的星期。您还向RSI发送一个OHLC对象,RSI需要一个单变量对象。即使您解决了这些问题,
?period.apply
表示它将函数应用于沿向量的非重叠间隔,并返回一个长度为INDEX-1的向量;您正在尝试返回与
示例\u矩阵
长度相同的向量。与其只是发布不起作用的代码,不如告诉我们您将要完成的任务。@joshu ulrich感谢您指出我的错误。我试图在period.apply中使用[code]端点(示例_矩阵,'weeks',k=2)[/code],这样我就可以在2周的周期序列上获得RSI值。to.period()方法不支持非统一周期(例如,2、3周而不是1周),因此我认为这可能会做到。Paul,
to.period
肯定支持非统一周期。这就是
k
参数的作用(例如
to.period(示例矩阵,“weeks”,2)
)。示例中的错误是因为
RSI
的默认值
n=10
,没有10天的周。您还向RSI发送一个OHLC对象,RSI需要一个单变量对象。即使您解决了这些问题,
?period.apply
表示它将函数应用于沿向量的非重叠间隔,并返回一个长度为INDEX-1的向量;您正在尝试返回与
示例\u矩阵
长度相同的向量。与其只是发布不起作用的代码,不如告诉我们您将要完成的任务。@joshu ulrich感谢您指出我的错误。我试图在period.apply中使用[code]端点(示例_矩阵,'weeks',k=2)[/code],这样我就可以在2周的周期序列上获得RSI值。to.period()方法不支持非统一周期(例如,2、3周而不是1周),因此我认为这可能会做到。Paul,
to.period
肯定支持非统一周期。这就是
k
参数的作用(例如
to.period(示例矩阵,“周”,2)
),谢谢!抱歉,我简直不敢相信我在to.period()中漏掉了“k”选项!谢谢抱歉,我简直不敢相信我在to.period()中漏掉了“k”选项!