首页 > 解决方案 > 如何遍历 R 中的股票/共同基金数据

问题描述

我可以使用 tidyquant/quantmod 在 R 中下载股票/共同基金数据;但是,我需要 3rd 方应用程序可以读取的格式。

下载格式如下:

日期 FSAIX.Open FSAIX.High FSAIX.Low FSAIX.Close FSAIX.Volume FSAIX.Adjusted

1985 年 12 月 16 日 10 10 10 10 0 1.995289

但是,我需要这种格式:

日期 开盘 高 低 收盘

1985 年 12 月 16 日 1.995289 1.995289 1.995289 1.995289

请注意,“FSAIX.Adjusted”成为当天的开盘价、最高价、最低价和收盘价。这很好,因为 FSAIX 是一个共同基金,每天只以一个价格“交易”。(对于那些好奇的人,“_______.调整后的”价格是指根据拆分、股息或分配调整的收盘价)

我已经能够“硬编码”R,一次给我一只股票/共同基金的数据。这是我的代码:

##################################
library(tidyquant)
library(data.table)

# symbol list to download
fid_symbol <- c("FSAIX","FSAVX")

# Download symbol's data from yahoo finance
getSymbols(fid_symbol,src = 'yahoo',from = "1970-01-01", to = "2020-07-22")

# Change XTS file into a data table for both formatting
##    and easier to export with the date included 
my_DT <- as.data.table(FSAIX)

# Make new columns in the data table
my_DT[,"Open":=FSAIX.Adjusted]
my_DT[,"High":=FSAIX.Adjusted]
my_DT[,"Low":=FSAIX.Adjusted]
my_DT[,"Close":=FSAIX.Adjusted]

# Delete old clumns in the data table
my_DT <- my_DT[,-c(2:7)]

#Change index column name to date
setnames(my_DT,old="index",new="Date")

# write file to working directory
fwrite(my_DT,file = "FSAIX.csv")
#################################

这确实为硬编码符号 - FSAIX 提供了所需的输出。是的我!,我一开始是这么想的。但是,当我尝试遍历一个列表,而不是示例中的 2 个共同基金(股票)符号时,问题就出现了。:-/ 在过去的 1.5 周里,我碰上了砖墙……

我最近尝试“复制”我在 quantstrattrader 网站上找到的一些代码,https: //quantstrattrader.wordpress.com/2018/09/17/principal-component-momentum/ 在我自己的多次尝试失败后,以及这段代码工作:

require(PerformanceAnalytics)
require(quantmod)
require(stats)
require(xts)
 
symbols <- c("SPY", "EFA", "EEM", "DBC", "HYG", "GLD", "IEF", "TLT")  
 
# get free data from yahoo
rets <- list()
getSymbols(symbols, src = 'yahoo', from = '1990-12-31')
for(i in 1:length(symbols)) {
  returns <- Return.calculate(Ad(get(symbols[i])))
  colnames(returns) <- symbols[i]
  rets[[i]] <- returns
}
rets <- na.omit(do.call(cbind, rets))

但是,当我尝试根据需要对其进行修改时,它不起作用。这是我的最新示例:

### Fidelity Funds Dowload Script...

library(tidyquant)
library(data.table)

# symbol list to download
fid_symbol <- c("FSAIX","FSAVX")

# Download symbol's data from yahoo finance
getSymbols(fid_symbol,src = 'yahoo',from = "1970-01-01", to = "2020-07-22")

# My 'loop' to get the symbols in fid_symbol
for (i in 1:length(fid_symbol) )
{
  # make data table
  my_DT<- as.data.table(fid_symbol[[i]])
  # get symbol from fid_symbol
  sym <- fid_symbol[[i]]
  
  # make new columns and delete old
  my_DT[,"Open":=sym.Adjusted]
  my_DT[,"High":=sym.Adjusted]
  my_DT[,"Low":=sym.Adjusted]
  my_DT[,"Close":=sym.Adjusted]
  my_DT <- my_DT[,-c(2:7)]
 
  # Change index column name to date

  setnames(my_DT,old="index",new="Date")

  # write file to working directory

  fwrite(my_DT,file = paste0(sym,'.csv'))
}

################################

这个最近的 failed_attempt_11.0 在运行时给出了以下错误:“ eval(jsub,SDenv,parent.frame())中的错误:找不到对象'sym.Adjusted'”

我还尝试将这种技术编写为函数并使用“应用”系列,但也失败了......

感谢您提前提供任何帮助或建议!干杯,克里斯

标签: rloopsstock

解决方案


推荐阅读