生成1分钟间隔的时间序列(R语言)

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"

我正在使用一个RTAQ软件包中的函数,将我的xts系列(按照前一个tick)聚合起来,以获取一个1分钟(等间隔)的时间序列:
price_1m<-aggregatets(price,FUN="previoustick",k=1,on="minutes")

问题在于时间标签没有合并,即聚合的序列没有被1分钟间隔的时间对象标记。这是因为有些秒钟没有价格。为了得到等间隔的时间序列,该函数使用前一次的价格填充空白。因此,如何创建一个1分钟间隔的时间序列以获得人工1分钟间隔的时间序列?谢谢。

1
哪个软件包定义了aggregatets函数? - Joshua Ulrich
2
看看 ?to.period 和相关函数。 - Dirk Eddelbuettel
xts函数to.period的问题在于它将一个逐笔不均匀的时间序列转换为另一个不均匀的序列。 - marino89
标题上说5分钟,问题中说1分钟。哪个是正确的? - David Robinson
@user1474263: to.period 返回一个常规的时间序列,但索引可能不是常规间隔,因为to.period将结果对齐到每个间隔的最后一个观察值。 如果您想要正则间隔,请在to.period的结果上使用align.time - Joshua Ulrich
相关(同一用户):https://dev59.com/CGbWa4cB1Zd3GeqPYJEK - Darren Cook
1个回答

3

我想知道RTAQ是否提供其他R包中没有的东西?0.1版本已经发布了两年多,看起来这个项目已经死了。不过你仍然可以使用XTS的to.minute()函数,因为RTAQ使用xts对象。

这是一些示例代码,用于将ticks转换成bars,并添加其他列,如平均值/标准差:

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.down而不是align.time,这样从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 对象,用于描述您交易会话的开始和结束时间。


1
版本0.1?请查看版本0.2版本0.3 - GSee
@Gsee 谢谢!我只看到了http://www.econ.kuleuven.be/public/n09022/RTAQ.htm,不幸的是它看起来很正式! - Darren Cook
是的,这是我的情况,我有没有打勾的分钟。我不明白如何使用您的full.index,我应该在参数中放什么? - marino89
有人理解 full.index 函数吗? - marino89
@user1474263 抱歉!我刚刚添加了seq.exclude_final_period.POSIXt的定义。period_from和period_to是POSIX日期对象,用于定义您的交易期的开始和结束。(我排除最后一个周期的原因与我使用align.time.down()相同)(这段代码很旧,是我第一次学习R时写的;现在看来,我怀疑有更优雅的方法来实现这个功能。) - Darren Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接