我在一段时间内有一个特定ETF所有交易的不规则时间序列:
> head(BKF.xts)
BKF.xts
2008-01-02 09:30:01 59.870
2008-01-02 09:38:04 59.710
2008-01-02 09:39:51 59.612
2008-01-02 09:51:16 59.640
2008-01-02 10:06:08 59.500
> tail(BKF.xts)
BKF.xts
2011-12-30 15:59:23 36.26
2011-12-30 15:59:53 36.26
2011-12-30 15:59:56 36.27
2011-12-30 15:59:57 36.27
2011-12-30 15:59:58 36.27
2011-12-30 16:00:00 36.33
我想要的是在所有交易日每隔5分钟获得一次价格。因为我正在处理交易所买卖基金,所以市场开放的日期可能是ETF没有交易的,因此我的样本中没有该日期的数据。但是我需要我的最后时间序列来计算所有交易日。我已经下载了同一时期的每日数据,因此我每个交易日都有另一个时间序列。不确定这是否有帮助。
此外,如果在5:00分钟的时间戳上没有特定的交易,我想要了解最近交易的价格。所以对于我上面发布的数据,我想要的是:
> head(BKF.xts)
BKF.xts
2008-01-02 09:35:00 59.870
2008-01-02 09:40:00 59.612
2008-01-02 09:45:00 59.612
2008-01-02 09:50:00 59.640
2008-01-02 09:55:00 59.640
非常感谢任何帮助。
答案 0 :(得分:2)
如previous question所述,
您可以使用to.period
在每个5分钟的时间段内获得最后一个值,
align.time
用每个句点结束时替换时间戳,
cbind
添加缺失的期间(缺少值)
并na.locf
替换缺失的值。
# Sample data
library(quantmod)
days <- seq(Sys.Date(), by=1, length=20)
days <- days[ ! format(days, "%A") %in% c("Saturday", "Sunday") ]
timestamps <- ISOdatetime(
year(days), month(days), day(days),
9, 0, 0 # You may want/need to add the timezone
)
timestamps <- timestamps[-2]
x <- lapply(timestamps, function(u) sort(u + sample(60*60*8,200)))
x <- do.call(c, x)
x <- xts(rnorm(length(x)), x)
# Value at the end of each 5-minute period
y <- to.minutes5(x)
y <- Cl(y)
y <- align.time(y, 5*60)
# All 5-minute periods, betweem 9am (excluded)
# and 5pm (included) for each day
z <- lapply(timestamps, function(u) u + 5*60*(1:(12*8)))
z <- do.call(c, z)
z <- cbind(y, xts(, z))
# Fill in missing values
z <- na.locf(z)
答案 1 :(得分:1)
谢谢,我经过足够的试验和错误并发现xts子集函数后,我自己想出来了。这是我做的:
#BKF here is my data set
BKF<-xts(BKF$PRICE,order.by=BKF$DATE)
colnames(BKF)=c("Price")
BKF<-to.minutes5(BKF)
BKF<-align.time(BKF,5*60)
#create a regular time series that has values for each 5 minute interval and use cbind to merge with my data
tmp<-xts(,seq.POSIXt(start(BKF),end(BKF),by="5 mins"))
BKF<-cbind(tmp,BKF)
# subset data from 9:30am to 4:00pm and replace NA's with last observation
BKF<-BKF["T09:30:00/T16:00:00"]
BKF<-na.locf(BKF)
# SP here is daily S&P data for the same sample period
SP<-xts(order.by=as.Date(td$Date,tz="",format="%y-%m-%d"))
# Subset observations for all trading days according to the daily S&P data
test<-bt[as.Date(index(bt),tz="")%in%as.Date(index(td),tz="")]
完成。