我很难找到股票技术指标,使用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
函数。