使用R语言构建Neuralnet应用时提取股票调整价格并计算移动平均线的报错求助
解决R语言提取股票调整价格并计算移动平均线的报错问题
我来帮你排查下这个问题——你遇到的错误核心原因是**getSymbols返回的是xts时间序列对象**,而非普通数据框,而且你引用调整价格列的方式不对:你用了固定的$tickers.adjusted,但实际上每只股票的调整价格列名是[股票代码].Adjusted这种动态格式(比如苹果股票的列名是AAPL.Adjusted)。
下面我给你修正后的代码,再逐个解释关键改动:
修正后的完整代码(核心改动在最后循环部分)
# 导入库 library(quantmod) library(BatchGetSymbols) library(TTR) library(shiny) library(lubridate) library(neuralnet) # 获取前20只标普500股票代码 df_SP500 <- GetSP500Stocks() tickers <- head(df_SP500$Tickers,20) # 设置时间范围 my_date <- Sys.Date() first.date <- my_date %m-% years(20) last.date <- Sys.Date() # 批量拉取股票数据 stockValues <- list() for (i in 1:length(tickers)){ stockValues[[i]] <- getSymbols(tickers[i],auto.assign = FALSE, from = first.date) } # 提取调整价格并计算移动平均线 df_Svalues <- list() for (i in 1:length(tickers)){ # 1. 动态生成当前股票的调整价格列名 adj_col_name <- paste0(tickers[i], ".Adjusted") # 2. 从xts对象中提取调整价格列 df_Svalues[[i]] <- stockValues[[i]][, adj_col_name] # 3. 用TTR包的SMA函数直接计算移动平均线(无需先初始化0) df_Svalues[[i]]$mav10 <- SMA(df_Svalues[[i]][, 1], n = 10) df_Svalues[[i]]$mav50 <- SMA(df_Svalues[[i]][, 1], n = 50) df_Svalues[[i]]$mav200 <- SMA(df_Svalues[[i]][, 1], n = 200) } # 查看结果结构 str(df_Svalues)
关键改动说明
动态列名生成
每只股票的xts对象列名都是代码.Adjusted格式,所以用paste0(tickers[i], ".Adjusted")拼接出当前股票的调整价格列名,避免了固定列名的错误。xts对象的列提取方式
对xts时间序列对象,用[, 列名]的方式提取列比$更可靠,尤其是处理动态列名时,能避免语法错误。直接计算移动平均线
不用先初始化mav10 <- 0,直接用TTR包的SMA()函数计算——它会自动处理前n-1个周期的NA值(比如前9天没有10日均线),结果更符合金融数据的逻辑。
进阶优化:避免循环,合并所有股票数据
如果后续需要统一处理所有股票数据,还可以把所有调整价格合并成一个大的xts对象,再批量计算均线,代码更简洁:
# 合并所有股票的调整价格 all_adj_prices <- do.call(merge, lapply(stockValues, function(x) x[, grep("Adjusted", colnames(x))])) colnames(all_adj_prices) <- tickers # 批量计算各周期均线 all_mav10 <- SMA(all_adj_prices, n = 10) colnames(all_mav10) <- paste0(tickers, "_mav10") all_mav50 <- SMA(all_adj_prices, n = 50) colnames(all_mav50) <- paste0(tickers, "_mav50") all_mav200 <- SMA(all_adj_prices, n = 200) colnames(all_mav200) <- paste0(tickers, "_mav200") # 合并所有数据(原始价格+均线) all_data <- merge(all_adj_prices, all_mav10, all_mav50, all_mav200)
内容的提问来源于stack exchange,提问作者Bill Moran
相关产品推荐
相关产品推荐

