我正在研究R期货合约。期货市场在美国东部时间下午6点开盘,第二天美国东部时间下午5点结束。我正在处理小时级别的数据。当我使用quantmod时,它假定Open是在凌晨12:00,而Close是在晚上11:59。有没有办法改变开启和关闭时间,还是有更好的方法来解决问题?
答案 0 :(得分:1)
这里通常的技巧是设置一个时区,使午夜与日期结束。 EST的问题是夏季/冬季转换,但由于您的市场是23小时而不是24小时,您不需要处理它(而不是外汇市场)。
如果您尝试一次处理一天的数据,在R中,我使用下面的示例代码。它是rollapply.right
的修改。我的脚本data
位于UTC时区。 (data
可能是刻度数据,或每小时数据,或其他任何内容。
基本思路是获取数据的副本,将该副本移至其他时区,在其上运行endpoints
,然后在原始数据上使用endpoints
的结果。 “7 * 3600”调整将在下午5点前进到午夜。
rollapply_chunks.FX.xts=function(data,width,FUN,...,on="days",k=1){
data <- try.xts(data)
x2 <- data
index(x2) <- index(x2)+(7*3600)
indexTZ(x2) <- 'America/New_York'
ep <- endpoints(x2,on=on,k=k) #The end point of each calendar day (when on="days").
#Each entry points to the final bar of the day. ep[1]==0.
if(length(ep)<2){
stop("Cannot divide data up")
}else if(length(ep)==2){ #Can only fit one chunk in.
sp <- 1;ep <- ep[-1]
}else{
sp <- ep[1:(length(ep)-width)]+1
ep <- ep[(width+1):length(ep)]
}
xx <- lapply(1:length(ep), function(ix) FUN(.subset_xts(data,sp[ix]:ep[ix]),...) )
xx <- do.call(rbind,xx) #Join them up as one big matrix/data.frame.
tt <- index(data)[ep] #Implicit align="right". Use sp for align="left"
res <- xts(xx, tt)
return (res)
}