将新行合并到现有的 xts 中(目的:将当前股票报价添加到 quantmod 的历史对象中)
Merge new row into an existing xts ( purpose: to add current stock quote to historical object from quantmod)
我喜欢做的是获取当前股票价格并将其附加到历史 xts 对象。例如,
require(quantmod)
x=getSymbols("AAPL", from = "2014-10-27" ,auto.assign=FALSE)
q = getQuote('AAPL')
# this produces, > tail(x)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2015-05-06 126.56 126.75 123.36 125.01 72141000 124.49
2015-05-07 124.77 126.08 124.02 125.26 43940900 125.26
2015-05-08 126.68 127.62 126.11 127.62 55550400 127.62
2015-05-11 127.39 127.56 125.63 126.32 42035800 126.32
2015-05-12 125.60 126.88 124.82 125.87 47109200 125.87
2015-05-13 126.15 127.19 125.87 126.01 34322000 126.01
> q
Trade Time Last Change % Change Open High Low Volume
AAPL 2015-05-14 11:38:00 128.3993 2.3893 +1.8961% 127.45 128.45 127.16 22635316
我喜欢做的是将 q 中的 "Last" 列作为 AAPL.Close 列,最高价和最低价分别放入 AAPL.High、AAPL.Close。到目前为止,我已经尝试通过缓慢添加新列、重命名它们并合并回原始 xts 来创建新数据框,但它似乎不起作用。提前致谢。
您只需要从报价数据创建一个新的 xts 对象,然后 rbind
它到历史数据。
require(quantmod)
x <- getSymbols("AAPL", from = "2014-10-27" ,auto.assign=FALSE)
q <- getQuote('AAPL')
qCols <- c("Open","High","Low","Last","Volume","Last")
qx <- xts(q[,qCols], as.Date(q[,"Trade Time"]))
y <- rbind(x, qx)
tail(y)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
# 2015-05-07 124.77 126.08 124.02 125.26 43940900 125.26
# 2015-05-08 126.68 127.62 126.11 127.62 55550400 127.62
# 2015-05-11 127.39 127.56 125.63 126.32 42035800 126.32
# 2015-05-12 125.60 126.88 124.82 125.87 47109200 125.87
# 2015-05-13 126.15 127.19 125.87 126.01 34322000 126.01
# 2015-05-14 127.45 128.45 127.16 128.40 22635316 128.40
getQuote returns 最后的交易时间以及日期。如果您需要捕获这个时间以及日期,您可以尝试类似
require(quantmod)
ticker <- "AAPL"
x <- getSymbols(ticker, from = "2014-10-27" ,auto.assign=FALSE)
q <- getQuote(ticker)
mkt_close_time <- "16:00:00"
index(x) <- strptime(paste(index(x),mkt_close_time), format="%F %X", tz="EST5EDT")
x <- rbind(x,xts( with(q, data.frame(Open, High, Low, Last, Volume, Last)),
order.by=strptime(q$"Trade Time", format="%F %X", tz="EST5EDT")))
我喜欢做的是获取当前股票价格并将其附加到历史 xts 对象。例如,
require(quantmod)
x=getSymbols("AAPL", from = "2014-10-27" ,auto.assign=FALSE)
q = getQuote('AAPL')
# this produces, > tail(x)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2015-05-06 126.56 126.75 123.36 125.01 72141000 124.49
2015-05-07 124.77 126.08 124.02 125.26 43940900 125.26
2015-05-08 126.68 127.62 126.11 127.62 55550400 127.62
2015-05-11 127.39 127.56 125.63 126.32 42035800 126.32
2015-05-12 125.60 126.88 124.82 125.87 47109200 125.87
2015-05-13 126.15 127.19 125.87 126.01 34322000 126.01
> q
Trade Time Last Change % Change Open High Low Volume
AAPL 2015-05-14 11:38:00 128.3993 2.3893 +1.8961% 127.45 128.45 127.16 22635316
我喜欢做的是将 q 中的 "Last" 列作为 AAPL.Close 列,最高价和最低价分别放入 AAPL.High、AAPL.Close。到目前为止,我已经尝试通过缓慢添加新列、重命名它们并合并回原始 xts 来创建新数据框,但它似乎不起作用。提前致谢。
您只需要从报价数据创建一个新的 xts 对象,然后 rbind
它到历史数据。
require(quantmod)
x <- getSymbols("AAPL", from = "2014-10-27" ,auto.assign=FALSE)
q <- getQuote('AAPL')
qCols <- c("Open","High","Low","Last","Volume","Last")
qx <- xts(q[,qCols], as.Date(q[,"Trade Time"]))
y <- rbind(x, qx)
tail(y)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
# 2015-05-07 124.77 126.08 124.02 125.26 43940900 125.26
# 2015-05-08 126.68 127.62 126.11 127.62 55550400 127.62
# 2015-05-11 127.39 127.56 125.63 126.32 42035800 126.32
# 2015-05-12 125.60 126.88 124.82 125.87 47109200 125.87
# 2015-05-13 126.15 127.19 125.87 126.01 34322000 126.01
# 2015-05-14 127.45 128.45 127.16 128.40 22635316 128.40
getQuote returns 最后的交易时间以及日期。如果您需要捕获这个时间以及日期,您可以尝试类似
require(quantmod)
ticker <- "AAPL"
x <- getSymbols(ticker, from = "2014-10-27" ,auto.assign=FALSE)
q <- getQuote(ticker)
mkt_close_time <- "16:00:00"
index(x) <- strptime(paste(index(x),mkt_close_time), format="%F %X", tz="EST5EDT")
x <- rbind(x,xts( with(q, data.frame(Open, High, Low, Last, Volume, Last)),
order.by=strptime(q$"Trade Time", format="%F %X", tz="EST5EDT")))