如何在R中使用股票报价器和for循环来进行技术分析



我很难找到股票技术指标,使用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天移动均线对于个股来说是完美的,只是不适合for循环。例如代码:

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

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

谢谢你的帮助。

无需手动计算移动平均线。quant mod/TTR有一整套不同的MAs。(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函数。

相关内容

  • 没有找到相关文章

最新更新