adjustOHLC - 需要解决方案来循环通过代码的字符向量

时间:2012-04-14 19:15:46

标签: r lapply quantmod financial

我想做的事情相当容易,但我无法弄清楚。我以为我可以做一些与here

概述的类似的事情

我有一个代码字符向量,它们是由getSymbols返回的xts OHLC对象。我想循环遍历符号中的每个股票代码并将符号传递给adjustOHLC以调整分割:

symbols = c("FCX", "SPY")

for(symbol in symbols){
  return(adjustOHLC(symbol,adjust =c("split"), use.Adjusted=FALSE))
}

adjustOHLC似乎抓取变量'symbol'的值:

debug: div <- getDividends(symbol.name)
Browse[2]> symbol.name
[1] "symbol"
Browse[2]> 
Error in download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=",  : 
  cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=symbol&a=0&b=01&c=1970&d=3&e=14&f=2012&g=v&ignore=.csv'
In addition: Warning message:
In download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=",  :
  cannot open: HTTP status was '404 Not Found'

如果我使用get(symbols),我会得到相同的结果(我在本文顶部显示的链接中使用了类似的方法):

for(symbol in symbols){
  return(adjustOHLC(get(symbol),adjust =c("split"), use.Adjusted=FALSE))
}

debug: div <- getDividends(symbol.name)
Browse[2]> symbol.name
[1] "get(symbol)"
Browse[2]> 
Error in download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=",  : 
  cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=get(symbol)&a=0&b=01&c=1970&d=3&e=14&f=2012&g=v&ignore=.csv'
In addition: Warning message:
In download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=",  :
  cannot open: HTTP status was '404 Not Found'

我认为我也可以利用lapply来加快速度,但我认为我首先遇到了上述问题。

lapply(symbols, function(x) adjustOHLC(x, adjust=c("split"), use.Adjusted=FALSE) )

似乎很容易 - 如果这是如此微不足道,我道歉。感谢帮助。

1 个答案:

答案 0 :(得分:3)

x的{​​{1}}参数应该是xts对象。因此,您需要使用adjustOHLC来获取它。但是,如果yahoo股票代码符号与xts对象的名称不同(在这种情况下为get),则需要使用get(symbol)参数。此外,您需要在for循环中指定值,因为adjustOHLC不会像symbol.name那样“自动分配”。

getSymbols

既然您提到了使用lapply,那么就可以使用它了

symbols = c("FCX", "SPY")
getSymbols(symbols, src='yahoo')
for(symbol in symbols){
  assign(symbol,adjustOHLC(get(symbol, pos=.GlobalEnv), symbol.name=symbol, 
                           adjust=c("split"), use.Adjusted=FALSE))
}