米筐的1分钟k线从9:01开始,代表9:00:00到9:01:00(左闭右开)这段时间的数据描述。
我的理解是,从1分钟线合成15分钟线时,应该走完9:01~9:15这15根k线才进行合成。
我在米筐的研究环境中做了实验,如果取每天早上的第一条15分钟K线,其成交量为前15分钟K线之和(如下图所示),即用到了9:01~9:15这15条数据。
但是vnpy在合成xmin bar的逻辑有如下代码:
if not (bar.datetime.minute + 1) % self.window:
finished = True
由于这个“+1”的存在,导致程序走完9:14这一根k线的时候就合成完毕了,实际上只用了前14根k线。不知道这算不算bug呢?
我理解实盘的时候是将tick数据转换成分钟数据,因此vnpy是以一分钟的开始作为标记,即用9:30标记9:30~9:31(左闭右开)的数据;然而米筐数据是采用分钟的结束作为标记,即用9:31来标记9:30~9:31(左闭右开)的数据。如果是做回测,是不是会导致分钟k线错位?举个例子:
15分钟K线应该对应以9:16~9:30标记的分钟数据,而vnpy在回测时用到的数据却是9:15~9:29,因为代码中的“+1“,恰好错位了1分钟。