3

我想生成一个 1 分钟间隔的时间序列,然后粘贴到 xts 对象。基本上,我有一个逐个滴答的 dateTime 对象,如下所示:

 [1] "2010-02-02 08:00:03 CET" "2010-02-02 08:00:04 CET" "2010-02-02 08:00:04 CET" "2010-02-02 08:00:04 CET" "2010-02-02 08:00:04 CET"
 [6] "2010-02-02 08:00:04 CET" "2010-02-02 08:00:04 CET" "2010-02-02 08:00:05 CET" "2010-02-02 08:00:05 CET" "2010-02-02 08:00:05 CET"

我正在聚合我的 xts 系列(按上一个刻度)以使用 RTAQ 包函数获得 1 分钟(相等)间隔的时间序列:

price_1m<-aggregatets(price,FUN="previoustick",k=1,on="minutes")

问题是时间标签未聚合,即聚合系列未由 1 分钟间隔的时间对象标记。这是因为有几秒钟没有价格。为了获得等间隔的时间序列,这些函数用前一个分时价格填充空白。

因此,我如何创建一个 1 分钟间隔的时间序列来获得一个人工的 1 分钟间隔时间序列?

谢谢。

4

1 回答 1

3

出于兴趣,RTAQ 是否提供其他 R 包中没有的东西?0.1 版是两年多前发布的,所以它看起来像是一个死项目。无论如何,您仍然可以使用 XTS 的to.minute()功能,因为 RTAQ 似乎使用 xts 对象。

这是我用来获取刻度并转换为条形的一些示例代码,以及添加其他列,例如平均值/标准差:

k=60
...
bars=to.period(x,k,period="secs")
colnames(bars)=c("Open","High","Low","Close")
ep=endpoints(x,"secs",k)
bars$Volume=period.apply(x,ep,length)
bars$mean=period.apply(x,ep,mean)
bars$sd=period.apply(x,ep, function(x){apply(x,2,sd)})
align.time(bars,k)  #Do this last

而不是align.time我使用align.time.down, 以便从 06:00:00 到 06:00:59.999 的刻度进入标有“06:00:00”的条,而不是标有“06:01:00”的条。这与我拥有的历史数据格式相匹配。如果你需要它,定义是:

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

最后,如果您有一整分钟没有刻度,并且仍然希望在您的数据中为它们提供一个条形图,我使用它(与上面相同的 k=60):

full_index=do.call("c",mapply(
    seq.exclude_final_period.POSIXt,period_from,period_to,by=k,SIMPLIFY=F
    ))
bars=merge(bars,xts(,full_index),all=TRUE)

seq.exclude_final_period.POSIXt函数定义如下:

#' Helper for process_one_day_of_ticks(); intended as a
#' replacement for seq.POSIXt (which will not exclude the final period).
#' @internal Use from=from+by instead of to=to-by to exclude the
#      first period instead.
seq.exclude_final_period.POSIXt=function(from,to,by){
to=to-by    #Make the final entry exclusive
seq(from,to,by)
}

period_fromperiod_toPOSIXct对象,描述了您的交易时段的开始和结束。

于 2012-07-25T23:42:01.257 回答