【问题标题】:R use apply function on xts zoo classR在xts动物园类上使用apply函数
【发布时间】:2018-01-21 09:12:51
【问题描述】:

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

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"

然后我又试了一个:

Error:
y$II <- apply(y,2,function(x) (2(x[,4]) - x[,2] - x[,3]) / (x[,2] - x[,3]) * x[,5])
Error in FUN(newX[, i], ...) : attempt to apply non-function

之后,我想对 y$II 求和 21 天,但我不知道如何应用函数在每 21 天之间求和 21 天

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

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

有人可以帮助我吗?请指教,谢谢。

【问题讨论】:

  • 也许 2Cl ... 中的错字应该是 2*Cl ... ?

标签: apply xts zoo quantmod


【解决方案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 在 zoo 包中。

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

还可以查看 TTR 包。

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

【讨论】:

  • 谢谢,如果我想总结 21 天 IIstd = Sum 21 ((2*CHL)/(HL)) * V IInorm = (IIstd / Sum 21 V) * 100 你知道怎么做吗与申请有关吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 2016-06-14
  • 2015-03-23
  • 2011-05-18
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多