今天我们来谈一下量化投资中涉及到的关于时间和周期的一些问题。 在前面的讲解中,大家应该还记得量化中的数据主要有两种:一种是tick数据,另一种则是bars数据。bars数据理解起来较为简单,它就是K线中蜡状图所包含的最高、最低、开盘、收盘等数据;bars数据是与周期有关的,如日K中看到的一根bar就是以1d为周期。对于什么是tick数据,我想大家可能还不太明白,下面我们对它的含义做了一个浅显的解释。
在国内,tick是一种snapshot,它指的是间隔很短的时间(毫秒)对交易流数据进行快照。tick数据也包含了开盘价、最高价、最低价、最新价、成交量、成交额这些字段,需要注意的是这些数据是从开盘作为起始时间点计算的。这种tick数据可以理解为更加高频的bars数据,它并不能反映真实的订单成交情况,相邻的tick与tick数据之间可能发生了多笔成交事件。
真实的tick是把orderbook每一次变化的结果在成交价附近取一个快照记录下来,只要在交易委托book上最优买卖单的状态发生变化,那么就会产生一条tick数据。这里的状态改变指的是增加、减少订单数量,改变订单价格,订单成交等。
Bars数据是与周期有关的,那么自然就产生了一个问题,如何将短周期的bars变换为长周期的bars数据。
我们以日线和周线为例来讲解周期变换的过程,周线中的各数据指标与日线指标之间的关系如下:
周线【close】= 本周最后一个交易日线【close】
周线【open] = 本周最后一个交易日线【open】
周线的【high】= max(本周所有日线【high】)
周线的【low】= min(本周所有日线【low】)
周线的【volume】= sum(本周所有日线【volume】)
在 发明者量化 上写的 Bars 周期转换:
Convert_Record_Cycle 策略作者: jxc6698 转换任意K线周期
从前面的讨论我们知道,任何bars数据都是内含周期的,于是便产生了一个问题:如何区分相同时间但不同周期的bars数据。我们需要一种通用的方法对时间周期进行编码,使得同一交易品种在不同时间周期的数据具有唯一性。编码的方式可以采用时间戳+周期自定义id的形式进行,实现该编码变换比较简单,大家有兴趣可以自己练习。
利用时间戳,我们可以很方便的设置一些计时功能,如 多少时间周期 触发一个什么样的操作。再比如判断是否有新周期K线数据产生。关于时间、周期的使用技巧还很多,需要在编写策略的过程中总结这些经验。
xiahaohuan001 可以用(tick的时间戳 - tick当天0点的时间戳)/60生成一个1m Kdata,其他Kdata不就都可以生成了。。