-1

I am having trouble finding stock technical indicators using a for-loop to loop through stocks.

Below I am using 10 stocks and am trying to see (through the output) if the current 10 day moving average (MA) for each stock is above, below, or at the current stock price.

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"
  }
}

The code does not successfully run because myStock$myStock.Adjusted does not run correctly. I am pretty sure that the variable myStock only holds the stock ticker (AAPL, for example), not the actual stock information with the highs, lows, open, close prices and such.

My 10-Day MA Code works perfectly to my knowledge for individual stocks, just not with the for loop. For instance the code:

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

I plan to add more tickers and more complex analysis to this code. Hence, listing out all the code for each stock is not a very viable or efficient solution.

Thanks for your help.

scuba
  • 3
  • 3

1 Answers1

0

No need to manually calculate Moving Averages. quant mod/TTR has a whole array of different MAs. (SMA,EMA,WMA …) ? is your friend :-). With just a few lines you can attach MAs to your symbols and chart, compare to the current price or do whatever you like. i.e. a simple 10day MA using the adjusted closings:

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

All stocks are in a list now and you can access them like so: i.e. to get 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

If you want to convert the list back to individual named xts-objects you can use the list2env function.

hvollmeier
  • 2,956
  • 1
  • 12
  • 17
  • Thanks a bunch for your help! Just for reference, I commented out the SMA line in my code and manually did a SMA calculation because I was told to for the research I am doing :). – scuba Aug 17 '16 at 18:21