getSymbols 并使用 lapply、Cl 和 merge 来提取收盘价 [英] getSymbols and using lapply, Cl, and merge to extract close prices

查看:21
本文介绍了getSymbols 并使用 lapply、Cl 和 merge 来提取收盘价的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在纠结这个问题.我最近开始使用 quantmod 包对股票价格进行分析.

I've been messing around with this for some time. I recently started using the quantmod package to perform analytics on stock prices.

我有一个如下所示的股票代码向量:

I have a ticker vector that looks like the following:

> tickers 
 [1] "SPY" "DIA" "IWM" "SMH" "OIH" "XLY" "XLP" "XLE" "XLI" "XLB" "XLK" "XLU" "XLV"    
[14] "QQQ"   
> str(tickers)   
 chr [1:14] "SPY" "DIA" "IWM" "SMH" "OIH" "XLY" "XLP" "XLE" ...   

我编写了一个名为 myX 的函数,用于在 lapply 调用中保存矢量代码中每只股票的价格.它有以下代码:

I wrote a function called myX to use in a lapply call to save prices for every stock in the vector tickers. It has the following code:

myX <- function(tickers, start, end) { 
require(quantmod) 
getSymbols(tickers, from=start, to=end) 
} 

我自己调用 lapply

I call lapply by itself

图书馆(quantmod)lapply(tickers,myX,start="2001-03-01", end="2011-03-11")

library(quantmod) lapply(tickers,myX,start="2001-03-01", end="2011-03-11")

> lapply(tickers,myX,start="2001-03-01", end="2011-03-11") 
[[1]] 
[1] "SPY" 

[[2]] 
[1] "DIA" 

[[3]] 
[1] "IWM" 

[[4]] 
[1] "SMH" 

[[5]] 
[1] "OIH" 

[[6]] 
[1] "XLY" 

[[7]] 
[1] "XLP" 

[[8]] 
[1] "XLE" 

[[9]] 
[1] "XLI" 

[[10]] 
[1] "XLB" 

[[11]] 
[1] "XLK" 

[[12]] 
[1] "XLU" 

[[13]] 
[1] "XLV" 

[[14]] 
[1] "QQQ" 

效果很好.现在我想将每只股票的收盘价合并成一个看起来像

That works fine. Now I want to merge the Close prices for every stock into an object that looks like

#            BCSI.Close WBSN.Close NTAP.Close FFIV.Close SU.Close 
# 2011-01-03      30.50      20.36      57.41     134.33    38.82 
# 2011-01-04      30.24      19.82      57.38     132.07    38.03 
# 2011-01-05      31.36      19.90      57.87     137.29    38.40 
# 2011-01-06      32.04      19.79      57.49     138.07    37.23 
# 2011-01-07      31.95      19.77      57.20     138.35    37.30 
# 2011-01-10      31.55      19.76      58.22     142.69    37.04 

有人建议我尝试以下操作:

Someone recommended I try something like the following:

ClosePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))

ClosePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))

然而,我尝试了各种组合,但没有成功.首先我试着用 Cl(x)

However I tried various combinations of this without any success. First I tried just calling lapply with Cl(x)

>lapply(tickers,myX,start="2001-03-01", end="2011-03-11") Cl(myX)))

> lapply(tickers,myX,start="2001-03-01", end="2011-03-11") Cl(x)))
Error: unexpected symbol in "lapply(tickers,myX,start="2001-03-01", end="2011-03-11") Cl"
> 
> lapply(tickers,myX(x),start="2001-03-01", end="2011-03-11") Cl(x)))
Error: unexpected symbol in "lapply(tickers,myX(x),start="2001-03-01", end="2011-03-11") Cl"
> 
> lapply(tickers,myX(start="2001-03-01", end="2011-03-11") Cl(x)
Error: unexpected symbol in "lapply(tickers,myX(start="2001-03-01", end="2011-03-11") Cl"
> lapply(tickers,myX(start="2001-03-01", end="2011-03-11") Cl(x))
Error: unexpected symbol in "lapply(tickers,myX(start="2001-03-01", end="2011-03-11") Cl"
>

如有任何指导,我们将不胜感激.

Any guidance would be kindly appreciated.

推荐答案

正如我在 R-help 的回复中所说,getSymbols 是矢量化的,因此无需遍历 tickers.您不需要 myX 函数,并且 lapply 调用完全没有必要/多余.

As I said in my reply on R-help, getSymbols is vectorized, so there's no need to loop over tickers. You don't need your myX function and the lapply call is completely unnecessary / redundant.

我原始答案中的代码有效.为什么要尝试其他组合?

The code in my original answer works. Why are you trying other combinations?

tickers <- c("SPY","DIA","IWM","SMH","OIH","XLY",
             "XLP","XLE","XLI","XLB","XLK","XLU")
getSymbols(tickers, from="2001-03-01", to="2011-03-11")
ClosePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))
head(ClosePrices)
#            SPY.Close DIA.Close IWM.Close SMH.Close OIH.Close XLY.Close
# 2001-03-01    124.60    104.68     94.80     44.60     87.45     26.10
# 2001-03-02    123.61    104.80     95.05     45.34     91.20     26.30
# 2001-03-05    124.74    105.57     94.70     47.01     92.86     26.02
# 2001-03-06    126.08    106.15     96.10     49.59     94.34     26.68
# 2001-03-07    126.98    107.45     96.60     49.20     97.36     27.34
# 2001-03-08    127.12    108.61     95.80     49.20     97.59     27.78
#            XLP.Close XLE.Close XLI.Close XLB.Close XLK.Close XLU.Close
# 2001-03-01     26.39     32.10     29.28     21.14     28.80     31.62
# 2001-03-02     26.64     32.83     29.45     21.64     27.80     31.70
# 2001-03-05     26.54     33.01     29.82     22.03     28.40     31.64
# 2001-03-06     26.00     33.18     30.25     21.98     29.60     31.60
# 2001-03-07     25.83     33.89     30.61     22.63     29.64     31.45
# 2001-03-08     26.05     34.23     30.80     22.71     29.05     32.04

这篇关于getSymbols 并使用 lapply、Cl 和 merge 来提取收盘价的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆