Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EMA功能(组件TTR)-无效N_R_Xts_Technical Indicator - Fatal编程技术网

EMA功能(组件TTR)-无效N

EMA功能(组件TTR)-无效N,r,xts,technical-indicator,R,Xts,Technical Indicator,我在使用EMA函数创建循环时遇到了一些问题 for(i in c(1,2,3)){ paste("Q",i,"$",tick[i],"_EMA10", sep="") = EMA(na.locf(paste("Q",i,"$",tick[i]),sep=""),10) } 其中tick=cAAPL、MSFT、NQ和Q1、Q2、Q3是xts表,因此此循环的目标是遍历所有xts表,将列的每个值作为输入,并使用xts表上的值创建新列 预期结果就像我在下面单独运行一样: Q1$AAPL_EMA1

我在使用EMA函数创建循环时遇到了一些问题

for(i in c(1,2,3)){ 

paste("Q",i,"$",tick[i],"_EMA10", sep="") = EMA(na.locf(paste("Q",i,"$",tick[i]),sep=""),10)

}
其中tick=cAAPL、MSFT、NQ和Q1、Q2、Q3是xts表,因此此循环的目标是遍历所有xts表,将列的每个值作为输入,并使用xts表上的值创建新列

预期结果就像我在下面单独运行一样:

Q1$AAPL_EMA10 <- EMA(na.locf(Q1$AAPL), 10)

问题是,我得到的错误是无效的N,我似乎无法解决它。你能帮忙吗?

你在做一些奇怪的事情:

paste("Q",i,"$",tick[i])
[1] "Q 2 $ MSFT"
即使在将字符串传递到na.locf之后,仍将传递给EMA,EMA需要一个xts对象

这就实现了你想要的,稍微整理一下:

library(quantmod)
tick <- c("AAPL","MSFT","NQ")
getSymbols(tick)

for (i in 1:3) { 
  sym <- tick[i]
  x <- get(sym, envir = .GlobalEnv)
  x <- merge(x, EMA(Cl(x), 10))
  assign(x = sym, value = x, envir = .GlobalEnv)
}

tail(AAPL)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted      EMA
# 2018-01-05    173.44    175.37   173.05     175.00    23660000        175.00 172.6937
# 2018-01-08    174.35    175.61   173.93     174.35    20567800        174.35 172.9948
# 2018-01-09    174.55    175.06   173.41     174.33    21584000        174.33 173.2376
# 2018-01-10    173.16    174.30   173.00     174.29    23959900        174.29 173.4289
# 2018-01-11    174.59    175.49   174.49     175.28    18667700        175.28 173.7655
# 2018-01-12    176.18    177.36   175.65     177.09    25226000        177.09 174.3700
在上面的示例中,您可能需要重新考虑如何处理数据,而不是使用单独命名的对象Q1、Q1、Q3或符号名称作为变量名。下面的一个例子应该让这一点更清楚

将每个符号的数据放入列表中可能更容易,每个元素都包含特定符号的数据。然后,您可以轻松地对可能变得非常大的一批符号应用操作

r <- lapply(X = tick, FUN = function(sym) {
  x <- get(sym, envir = .GlobalEnv)
  x <- merge(x, EMA(Cl(x), 10))
  x
})


lapply(r, tail, n = 1)
# [[1]]
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted    EMA  EMA.1
# 2018-01-12    176.18    177.36   175.65     177.09    25226000        177.09 174.37 174.37
# 
# [[2]]
# MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted      EMA    EMA.1
# 2018-01-12     88.67     89.78    88.45       89.6    24236500          89.6 87.72638 87.72638
# 
# [[3]]
# NQ.Open NQ.High NQ.Low NQ.Close NQ.Volume NQ.Adjusted      EMA    EMA.1
# 2018-01-12    4.03    4.03   3.88     3.89   1034400        3.89 3.988761 3.988761