使用quantmod设置打开和关闭时间

时间:2013-04-21 00:05:01

标签: r quantmod

我正在研究R期货合约。期货市场在美国东部时间下午6点开盘,第二天美国东部时间下午5点结束。我正在处理小时级别的数据。当我使用quantmod时,它假定Open是在凌晨12:00,而Close是在晚上11:59。有没有办法改变开启和关闭时间,还是有更好的方法来解决问题?

1 个答案:

答案 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)
}