如何在 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
函数。
我无法使用 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
函数。