2

对 R 和 TTR 来说非常新。我已经创建了我认为是由 R 中的 TTR 包检索到的所有股票代码的向量,其中包含以下内容:

stockDataFrame <- stockSymbols()
symbs <- stockDataFrame[["Symbol"]]

所以我在变量“symbs”中得到了所有的符号。如何在此向量的每个元素上应用 TTR 函数“getYahooData”,尤其是因为该函数不仅需要股票代码,还需要 start、end、freq、type、adjust 和 quiet 参数值?

4

2 回答 2

3

只需使用将为您加载TTR的quantmod。你不会伤害@JoshuaUlrich 的感情,因为他也是 quantmod 项目的开发者。查看网站上的示例:http ://www.quantmod.com/

getSymbols是一种“通用”函数,它具有针对不同数据源的“方法”。默认情况下,src=yahoo这意味着getSymbols.yahoo被调用。这可以处理符号向量。

默认情况下auto.assign=TRUE,这意味着返回的数据是在.GlobalEnv(默认情况下)分配的,并返回分配的对象的名称。

> library(quantmod)
> getSymbols(symbs[1:5])
[1] "AA-P" "AAU"  "ACU"  "ACY"  "ADGE"

> head(ACY)
           ACY.Open ACY.High ACY.Low ACY.Close ACY.Volume ACY.Adjusted
2007-01-03     6.58     7.15    6.58      6.99      31700         6.99
2007-01-04     7.24     7.35    7.15      7.35      18600         7.35
2007-01-05     7.39     7.55    7.25      7.45      15200         7.45 
2007-01-08     7.32     7.35    7.01      7.26      16100         7.26
2007-01-09     7.15     7.50    7.15      7.16      12100         7.16
2007-01-10     7.30     7.45    7.21      7.24      13700         7.24

如果您真的不想下载 6,000 多只股票的数据,还有一个方便的选择: attachSymbols通过惰性评估使所有这些符号按需可用。第一次使用 Symbol 时,它将被下载并缓存,以便下次使用它时,将从内存(或磁盘,具体取决于您使用的参数attachSymbols)中读取。

> attachSymbols()
> tail(GS)
           GS.Open GS.High GS.Low GS.Close GS.Volume GS.Adjusted
2012-11-26  119.16  120.95 118.50   120.94   3371000      120.43
2012-11-27  120.50  121.34 118.38   118.41   3875200      117.91
2012-11-28  117.25  119.33 116.57   119.33   3811200      119.33
2012-11-29  120.00  120.45 118.52   118.73   2980800      118.73
2012-11-30  117.96  119.44 117.69   117.79   4264300      117.79
2012-12-03  118.42  119.64 118.07   118.40   3613900      118.40
于 2012-12-04T23:42:33.023 回答
1

您可以使用 plyr 包来遍历您的符号列表。

我不确定 getYahooData 是否可以加载所有符号的数据。我认为应该有更好的方法来使用 TTR。但是这里我展示了plyr包的使用。这是一种通用方法。

我调用 llply 来获取两个日期之间前 6 个市场符号的所有数据(您可以添加其他函数参数,..)

    library(plyr)
    ll <- llply(symbs[1:6],getYahooData ,start=20081201, end=20081207)

$`AA-P`
               Open     High      Low    Close   Volume Unadj.Close Div Split Adj.Div
2008-12-01 49.39233 49.39233 49.39233 49.39233 243.9650       60.25  NA    NA      NA
2008-12-02 49.39233 49.39233 49.39233 49.39233 243.9650       60.25  NA    NA      NA
2008-12-03 49.39233 49.39233 49.39233 49.39233   0.0000       60.25  NA    NA      NA
2008-12-04 49.80223 51.64676 49.80223 51.64676 487.9300       63.00  NA    NA      NA
2008-12-05 49.79403 49.79403 49.79403 49.79403 121.9825       60.74  NA    NA      NA

$AAU
           Open High  Low Close Volume
2008-12-01 0.49 0.53 0.49  0.50  57100
2008-12-02 0.52 0.54 0.51  0.52  33400
2008-12-03 0.50 0.54 0.49  0.49  52800
2008-12-04 0.49 0.49 0.44  0.44  62400
2008-12-05 0.44 0.48 0.42  0.47  87600

$ACU
               Open     High      Low    Close   Volume Unadj.Close Div Split Adj.Div
2008-12-01 6.168596 6.168596 5.823880 5.823880 3196.838        6.42  NA    NA      NA
2008-12-02 5.987166 6.077881 5.814809 5.987166 8157.448        6.60  NA    NA      NA
2008-12-03 6.068810 6.068810 5.896452 5.987166 1984.244        6.60  NA    NA      NA
于 2012-12-04T23:17:55.767 回答