【问题标题】:Load multiple symbols using csv with quantmod使用 csv 和 quantmod 加载多个符号
【发布时间】:2012-08-27 15:52:37
【问题描述】:

我正在尝试使用 csv 文件加载多个符号,而不是从 Yahoo 下载。原始代码效果很好并使用

load.packages('quantmod')
tickers = spl('TLT,IWM,GLD')
data <- new.env()
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data,
           auto.assign = T)

但是,当我尝试使用下面的代码时,它会导致脚本稍后出现“下标越界”错误:

load.packages('quantmod')
tickers = spl('TLT,IWM,GLD')
data <- new.env()
getSymbols(tickers, src="csv", dir= "C:/Users/Admiral/Downloads/",
           env = data, auto.assign = T)

任何人都知道为什么第二个代码集不起作用?为了测试,我刚刚从 Yahoo 下载了 csv 数据并保存在本地(Windows)。如果我只使用一个 csv 文件,我不会收到下标错误。我也尝试了下面的代码,但稍后在脚本中得到了相同的错误:

setSymbolLookup(tickers=list(src="csv", dir= "C:/Users/Admiral/Downloads/"))
getSymbols(tickers, auto.assign = T, from = '1980-01-01', env=data)

【问题讨论】:

  • 这看起来像是系统的投资者代码。运行rm(index.xts),然后再次尝试您的代码。 (stackoverflow.com/questions/12124683/…)
  • 是的,它是 SI 代码 - 我试过你的建议,但似乎没有任何效果。
  • 如果您希望我们找出为什么 getSymbols.csv 不适合您,那么您必须向我们展示您的一些 CSV 文件。或者,也许你可以展示你是如何创建它们的。
  • csv 文件以符号命名,包含从 Yahoo 下载的数据,即在文件“IWM”中: Date Open High Low Close Volume Adj Close 8/28/2012 125.75 126.36 125.59 125.84 3412600 125.84 8/27/2012 125.34 125.8 125.27 125.54 3906100 125.54 8/24/2012 125.47 125.56 124.67 124.81 5001400 124.81 5001400 124.81 8/23/2012 124.74 125.14 124.65 124.93 7139100 124.93 SPAN
  • 啊。我看到了你的问题。日期的格式必须是“%Y-%m-%d”,但你的格式是“%m/%d/%Y”。您最好使用 zoo 包中的read.zoo,它比getSymbols.csv 灵活得多

标签: r time-series xts quantmod


【解决方案1】:

我会使用 FinancialInstrument 包来做到这一点

require('quantmod')
require('FinancialInstrument')
tickers <- c("TLT", "IWM", "GLD")
data <- new.env()
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data)

# Now save the data in a directory
tmpdir <- tempdir()
saveSymbols.common(tickers, tmpdir, env=data)

#remove the data    
rm(list=tickers, pos=data)
ls(data) # see that there is nothing there
# Now load the data back from disk
getSymbols(tickers, src='FI', dir=tmpdir, env=data, split_method='common')
ls(data)

如果你想使用getSymbols.csv,你的数据必须有日期和6列(OHLCVA)

#write data to csv files on disk
for (i in seq_along(tickers)) {      
  write.zoo(get(tickers[i], pos=data), file=paste0(tmpdir, "/", tickers[i], ".csv"), sep=",")
}
rm(list=tickers, pos=data) #remove from memory
getSymbols(tickers, src='csv', dir=tmpdir)#, env=data)  #load from csv files

【讨论】:

  • 虽然,将其保存为 rda 文件,而不是 CSV 文件
  • 感谢您的帮助。以上工作,但我可以在运行脚本之前修改 rda 文件(即更改收盘价)吗?我正在尝试使用修改后的数据而不是 Yahoo 数据。
  • 是的,或者您可以在保存之前修改它们。
  • 好的,很好。我正在尝试做的是通过加载盘中数据(例如在收市前半小时)为“今天”在脚本中使用,而不是等待仅在收市后几个小时可用的收盘数据,从而使 SI 代码“可交易”关闭。关于如何使用您的代码为“今天”数据加载“当前”收盘价的任何想法?
  • 您可以使用getQuote 获取雅虎最近的报价。然后您可以使用rbind.xts 将该数据添加到您的xts 对象中。像这样的东西:thread.gmane.org/gmane.comp.lang.r.finance/8748/focus=8770
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
相关资源
最近更新 更多