-1

我在使用 for 循环遍历股票时无法找到股票技术指标。

下面我使用 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:
...

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

谢谢你的帮助。

4

1 回答 1

0

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

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函数。

于 2016-08-16T08:34:39.953 回答