XTS:按交易日分割外汇日内柱线数据

问题描述 投票:0回答:2

我想将一个函数应用于 20 个交易日的每小时外汇数据(作为众多示例中的一个)。

我从

rollapply(data,width=20*24,FUN=FUN,by=24)
开始。这似乎运作良好,我什至可以断言我总是收到 480 个酒吧的传递......直到我意识到这不是我想要的。由于夏令时和市场假期的变化,这 480 个柱的开始和结束时间多年来一直在变化。

所以,我想要的是一个将一天视为我们有数据的每一天的 22:00 到 22:00 的函数。 (纽约夏季时间 21:00 至 21:00 - 我的数据时区是 UTC,日开始时间定义为东部时间下午 5 点)

所以,我以此为核心制作了自己的 rollapply 函数:

 ep=endpoints(data,on=on,k=k) 
 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]),...) )

然后我用 on="days"、k=1 和 width=20 来调用它。

这有两个问题:

  1. 天数是指天数,而不是交易日!因此,我得到的数据不是通常 4 周的数据,而是不到 3 周的数据。
  2. 截止时间为 UTC 午夜。我不知道如何更改它以使用 22:00(或 21:00)截止时间。

更新:上面的问题1是错误的! XTS

endpoints
功能在交易日而非日历日有效。我之所以这么认为,是因为时区问题使它看起来像是 6 天的交易 周:周日至周五。一旦时区问题得到解决(请参阅我的 自我回答),使用
width=20
on="days"
确实给了我 4 数周的数据。

(“通常”很重要:当这 4 周内有交易假期时,我预计会收到 4 周 1 天的数据,即始终恰好是 20 个交易日。) 我开始研究一个将数据切割成几周的功能,以为我可以将它们切割成五个 24 小时的块,但这感觉是错误的方法,

肯定有人在我之前发明了这个轮子?

r xts
2个回答
1
投票

x2=x index(x2)=index(x2)+(7*3600) indexTZ(x2)='America/New_York'

即只需设置时区即可将黎明时间设置为 17:00;我们希望它在 24:00,所以先添加 7 个小时。

在以下人士的帮助下:

POSIXct 和 xts 中的时区,从 R 中的 GMT 转换

完整功能如下:

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

您可以看到我们使用 
modified

索引来分割 original 数据。 (如果 R 在幕后使用写时复制,那么唯一的额外内存需求应该是索引的副本,而不是数据的副本。) (法律位:请考虑它已获得 MIT 许可,但如果需要,则明确允许在 GPL-2 XTS 包中使用。)


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.