vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 11
声望: 0

1、我用1分钟k线合成6分钟k线,合成几分钟k线的代码:
if self.interval == Interval.MINUTE:

        # # x-minute bar
        # if not (bar.datetime.minute + 1) % self.window:
        #     finished = True
        if self.last_bar and bar.datetime.minute != self.last_bar.datetime.minute:
            self.interval_count += 1
            if not self.interval_count % self.window:
                finished = True
                self.interval_count = 0           
    elif self.interval == Interval.HOUR:
        if self.last_bar and bar.datetime.hour != self.last_bar.datetime.hour:
            # 1-hour bar
            if self.window == 1:
                finished = True
            # x-hour bar
            else:
                self.interval_count += 1

                if not self.interval_count % self.window:
                    finished = True
                    self.interval_count = 0

我希望的是31-36分钟的k线组成,但是实际是从32分钟到37分钟k线组成,,主要原因是
第一根1分钟k线推送过来时,self.last_bar是空的,所以
这段中的if self.last_bar and bar.datetime.minute != self.last_bar.datetime.minute:
self.interval_count += 1
是不执行的。所以这段代码是否可以优化。
2、回测的时候在def on_init(self): self.load_bar(8),所以成交记录是在第8天后开始,但是我在调试的时候,发生实际策略这之前就开始交易了,只是成交记录是记录第8天后开始的,不知道这个算不算一个bug。

Member
avatar
加入于:
帖子: 2357
声望: 148
  1. 没错呀
    description
  2. load_bar结束策略的trading状态才为true,此时才能发单,之前的都只是交易信号,trading状态为false的时候是发不出去单的
Member
avatar
加入于:
帖子: 11
声望: 0

1、如果一开始就没有k线,if self.last_bar and bar.datetime.minute != self.last_bar.datetime.minute:中self.last_bar是false,那下一句的 self.interval_count += 1就不会执行,self.interval_count 还是=0,得下一个k先出来后,self.last_bar才是ture,这时self.interval_count = 1,也就是第一根k线没加入合成。不是这样吗?我一步一步调试,也发现确实是这样的。
关键就是没有任何数据情况下,第一次加载的时候,self.last_bar是不是ture。

2、
description
我第一笔交易是买入1手,但是这里显示是5手,不知道是为什么?我一步一步调试也显示第一次交易只有买入1手。

Member
avatar
加入于:
帖子: 2357
声望: 148
  1. minute的时候不用interval_count,是if not (bar.datetime.minute + 1) % self.window(时间戳判断)判断合成的;
  2. 那就请对照策略的交易记录和vnpy.app.cta_backtester.ui.widget的order_dialog进行排查了
© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号