R在xts zoo类上使用apply函数

时间:2017-08-07 13:06:41

标签: apply xts zoo quantmod

我是R的新手,我尝试在xts zoo类上使用apply函数,但是它显示错误。我有一个公式:((2 * Close-High-Low)/(High-Low))* Volume

float f = (float)333.50;

然后我尝试了另一个:

Input:
y <- getSymbols("0005.HK", auto.assign = FALSE, src = "yahoo")

Error:

y$II <- apply(y,2,function(x) (2Cl(x) - Hi(x) - Lo(x)) / ((Hi(x) - Lo(x)) * Vo(stk)))
Error: unexpected symbol in "apply(y,2,function(x) (2Cl"

在那之后,我想总结y $ II 21天,但我不知道怎么做申请功能每21天之间总计21天

IIstd = 21的总和((2 * C-H-L)/(H-L))* V

IInorm =(IIstd / Sum 21天V)* 100

任何人都可以帮助我吗?请指教,谢谢。

1 个答案:

答案 0 :(得分:1)

这里有两个问题:

  • 2Cl(x)我无效R - 使用2 * Cl(x)
  • 右侧的所有操作都已经过矢量化,因此我们首先不需要apply

为了清楚起见,我们假设II =(2C - H - L)/((H-L)* V)并且您想要21倍周期体积加权移动平均值的100倍。如果那不是你想要的那样修改。

试试这个:

y$II <- (2*Cl(y) - Hi(y) - Lo(y)) / ((Hi(y) - Lo(y)) * Vo(y))

关于问题的第二部分,试试这个 - rollapplyr在动物园包中。

wmean <- function(x) weighted.mean(x$II, Vo(x))
y$MeanII <- 100 * rollapplyr(y, 21, wmean, by.column = FALSE, fill = NA)

同时查看TTR套餐。

更新:在问题的第二部分添加了答案。