如何在 R 中同时使用股票代码和 for 循环进行技术分析?

How do you use stock tickers and for-loops together in R for technical analysis?

我无法使用 for-loop 循环遍历股票来查找股票技术指标。

下面我使用了 10 只股票,并试图(通过输出)查看每只股票的当前 10 天移动平均线 (MA) 是高于、低于还是处于当前股价。

library(quantmod) # also loads xts and TTR
ticker = c("GD","BA","ALV","AGU","MOS","POT","MON","CF","BG","SQM") 
#10 ticker symbols that I want to find the 10 day MA of

z<-1 # z starts with a value of 1
for ( z in 1:10) { 
  myStock<-getSymbols(ticker[z])  
#gets the z'th stock ticker are puts in into variable myStock
  stock_ts = ts(myStock$myStock.Adjusted)

##Moving Average Calculations back 10 steps using TTR:  
  #SMA(stock_ts, n=10)
  x<- length(stock_ts)
  y <- 0
  averagediv <- 10
  for ( i in (x-9):x) {
    y <- y + stock_ts[i]
  }

  ma10 <- y/averagediv

  print(ticker[z])
  if(ma10 <  stock_ts[x]) {
      print(mySP)
      print ("green")
      finalMA<-"green"
  } else if (ma10 > stock_ts[x]) {
      print(mySP)
      print ("red")
      finalMA<-"red"
  } else {
      print(mySP)
      print("even")
      finalMA<-"even"
  }
}

代码没有成功 运行 因为 myStock$myStock.Adjusted 没有 运行 正确。我很确定变量 myStock 只包含股票代码(例如 AAPL),而不是包含高点、低点、开盘价、收盘价等的实际股票信息。

据我所知,我的 10 天 MA 代码对个股非常有效,只是不适用于 for 循环。例如代码:

...
getSymbols("AAPL")  
stock_ts = ts(AAPL$AAPL.Adjusted)
##Moving Average Calculations back 10 steps using TTR:
...

我计划在此代码中添加更多代码和更复杂的分析。因此,列出每只股票的所有代码并不是一个非常可行或有效的解决方案。

感谢您的帮助。

无需手动计算移动平均线。 quant mod/TTR 有一整套不同的 MA。 (SMA,EMA,WMA …) ? 是你的朋友 :-)。只需几行,您就可以将 MA 附加到您的符号和图表上,与当前价格进行比较或做任何您喜欢的事情。即使用调整后收盘价的简单 10 日均线:

tickers <- c('GE','IBM')
getSymbols(tickers, from = '2016-01-01')
smas <- lapply(1:length(tickers),function(x) SMA(get(tickers[x])[,6],10))
stocks <- lapply(1:length(tickers), function(x) cbind(get(tickers[x]),smas[[x]][,1]))
names(stocks) <- tickers

现在所有股票都在一个列表中,您可以像这样访问它们: 即获得 GE

> tail(stocks$GE)
           GE.Open GE.High GE.Low GE.Close GE.Volume GE.Adjusted    SMA
2016-08-08   31.30   31.40  31.21    31.27  20434100       31.27 31.219
2016-08-09   31.23   31.35  31.15    31.30  20108800       31.30 31.202
2016-08-10   31.25   31.34  31.20    31.27  18538100       31.27 31.201
2016-08-11   31.31   31.37  31.20    31.29  37986200       31.29 31.205
2016-08-12   31.20   31.28  31.18    31.24  21327000       31.24 31.215
2016-08-15   31.30   31.35  31.22    31.24  19546600       31.24 31.224

如果您想将列表转换回单独命名的 xts 对象,您可以使用 list2env 函数。