2

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

4

1 回答 1

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)
}
于 2013-04-21T13:38:26.740 回答