Quantmod,getSymbols,在 R 中提取收盘价
Quantmod, getSymbols, Extracting Close Price in R
我有一串代码,我正在尝试获取使用 Quantmod 的数据。我的列表很长,而且有一些错误的代码,所以我使用合并 try 函数。
我在使用 Quantmod 的 Cl 函数时遇到问题。据我所知,它应该可以工作——但我确定我的语法有一个小问题。
代码:
tickers = c("IBM","GM") #This is an example for purpose here
stock_data <- lapply(tickers, function(tickers), try(getsymbols(tickers,
auto.assign=FALSE)))
close_prices <- do.call(merge,Cl(stock_data))
stock_data 返回为由代码标识的 xts 对象列表,每个元素的行作为日期值,列为一系列与代码相关的数据(开盘、收盘等) .
close_prices 应该是仅包含所有代码的收盘价列的列表或数据框(即来自 IBM 的收盘价列、来自 GM 的收盘价列等)。
当我应用 do.call 时(我有各种排列 - none 它们是正确的)我收到一个错误,告诉我它们在 xts 对象中没有包含 "close" - 事实并非如此。对于每个 xts 元素(在本例中标识为 "IBM" 和 "GM"),都有一个名为 "XXX.close" 的列(例如,IBM.Close、GM.Close)。我不知道为什么我无法获得正确的语法或让 Cl 看到关闭的列。
感谢任何帮助。
谢谢。
**** Edit/UPDATE ***
我的样本向量列表 stock_data 具有以下结构:
str(stock_data)
List of 2
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 161 160 157 156 158 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "IBM.Open" "IBM.High" "IBM.Low" "IBM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 35 34.4 35.2 36.1 36.2 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "GM.Open" "GM.High" "GM.Low" "GM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
实际向量的结构相同 - 只是更长,维度更多。
尝试以下操作:
library(plyr)
library(quantmod)
stocks <- c("IBM","GM")
data.env <- new.env()
### here we use l_ply so that we don't double save the data
### getSymbols() does this already so we just want to be memory efficient
### go through every stock and try to use getSymbols()
l_ply(stocks, function(sym) try(getSymbols(sym,env=data.env),silent=T))
### now we only want the stocks that got stored from getSymbols()
### basically we drop all "bad" tickers
stocks <- stocks[stocks %in% ls(data.env)]
### now we just loop through and merge our good stocks
### if you prefer to use an lapply version here, that is also fine
### since now we are just collecting all the good stock xts() objects
data <- xts()
for(i in seq_along(stocks)) {
symbol <- stocks[i]
data <- merge(data, Ad(get(symbol,envir=data.env)))
}
您知道非常有用的 quantmod 插件 "qmao" 吗?它提供了一个函数 "PF" (用于 price frame ),如果我正确理解你的问题,它就可以满足你的需求。 (还有一个函数 "RF" 与 returns 而不是价格相同)
示例:
library(quantmod)
library(qmao)
tickers = c('AMZN','AAPL','MSFT')
getSymbols(tickers,from='2005-01-01')
prices <- PF(tickers, silent=TRUE) # by default adj. closing prices are used, but you can select any column. open, high ...
> head(prices)
AMZN AAPL MSFT
2005-01-03 44.52 4.209303 21.03721
2005-01-04 42.14 4.252533 21.11588
2005-01-05 41.77 4.289778 21.06868
2005-01-06 41.05 4.293103 21.04508
2005-01-07 42.32 4.605692 20.98214
2005-01-10 41.84 4.586404 21.08441
更多信息请查看:?PF
或 ?makePriceFrame(PF 是 makePriceFrame 的别名)
我有一串代码,我正在尝试获取使用 Quantmod 的数据。我的列表很长,而且有一些错误的代码,所以我使用合并 try 函数。
我在使用 Quantmod 的 Cl 函数时遇到问题。据我所知,它应该可以工作——但我确定我的语法有一个小问题。
代码:
tickers = c("IBM","GM") #This is an example for purpose here
stock_data <- lapply(tickers, function(tickers), try(getsymbols(tickers,
auto.assign=FALSE)))
close_prices <- do.call(merge,Cl(stock_data))
stock_data 返回为由代码标识的 xts 对象列表,每个元素的行作为日期值,列为一系列与代码相关的数据(开盘、收盘等) .
close_prices 应该是仅包含所有代码的收盘价列的列表或数据框(即来自 IBM 的收盘价列、来自 GM 的收盘价列等)。
当我应用 do.call 时(我有各种排列 - none 它们是正确的)我收到一个错误,告诉我它们在 xts 对象中没有包含 "close" - 事实并非如此。对于每个 xts 元素(在本例中标识为 "IBM" 和 "GM"),都有一个名为 "XXX.close" 的列(例如,IBM.Close、GM.Close)。我不知道为什么我无法获得正确的语法或让 Cl 看到关闭的列。
感谢任何帮助。
谢谢。
**** Edit/UPDATE ***
我的样本向量列表 stock_data 具有以下结构:
str(stock_data)
List of 2
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 161 160 157 156 158 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "IBM.Open" "IBM.High" "IBM.Low" "IBM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 35 34.4 35.2 36.1 36.2 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "GM.Open" "GM.High" "GM.Low" "GM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
实际向量的结构相同 - 只是更长,维度更多。
尝试以下操作:
library(plyr)
library(quantmod)
stocks <- c("IBM","GM")
data.env <- new.env()
### here we use l_ply so that we don't double save the data
### getSymbols() does this already so we just want to be memory efficient
### go through every stock and try to use getSymbols()
l_ply(stocks, function(sym) try(getSymbols(sym,env=data.env),silent=T))
### now we only want the stocks that got stored from getSymbols()
### basically we drop all "bad" tickers
stocks <- stocks[stocks %in% ls(data.env)]
### now we just loop through and merge our good stocks
### if you prefer to use an lapply version here, that is also fine
### since now we are just collecting all the good stock xts() objects
data <- xts()
for(i in seq_along(stocks)) {
symbol <- stocks[i]
data <- merge(data, Ad(get(symbol,envir=data.env)))
}
您知道非常有用的 quantmod 插件 "qmao" 吗?它提供了一个函数 "PF" (用于 price frame ),如果我正确理解你的问题,它就可以满足你的需求。 (还有一个函数 "RF" 与 returns 而不是价格相同) 示例:
library(quantmod)
library(qmao)
tickers = c('AMZN','AAPL','MSFT')
getSymbols(tickers,from='2005-01-01')
prices <- PF(tickers, silent=TRUE) # by default adj. closing prices are used, but you can select any column. open, high ...
> head(prices)
AMZN AAPL MSFT
2005-01-03 44.52 4.209303 21.03721
2005-01-04 42.14 4.252533 21.11588
2005-01-05 41.77 4.289778 21.06868
2005-01-06 41.05 4.293103 21.04508
2005-01-07 42.32 4.605692 20.98214
2005-01-10 41.84 4.586404 21.08441
更多信息请查看:?PF
或 ?makePriceFrame(PF 是 makePriceFrame 的别名)