Merge new row into an existing xts ( purpose: to add current stock quote to historical object from quantmod)

泪湿孤枕 提交于 2019-12-06 10:40:22

问题


What I like to do is to get and attach current stock price to an historical xts object. example,

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

What I like to do is place the "Last" column from q as the AAPL.Close column, High & Low into AAPL.High, AAPL.Close, respectively. I have tried so far to create a new dataframe by slowly adding in new columns, renaming them and merging back onto the original xts but it does not appear to work. Thanks in advance.


回答1:


You just need to create a new xts object from the quote data and rbind it to the historical data.

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



回答2:


getQuote returns the last transaction time as well as date. If you need to capture this time as well as the date, you might try something like

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")))


来源:https://stackoverflow.com/questions/30241932/merge-new-row-into-an-existing-xts-purpose-to-add-current-stock-quote-to-hist

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!