VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 23
声望: 0

初衷:(基于双均线策略)想规避开盘前后的剧烈波动,不想持隔夜仓。想加入交易时间段的方法
我是这样写的:

设置交易时间参数,我想在9:15-14:45 和21:15-22:45 这段时间交易

DAY_START = time(9, 15)
DAY_END = time(14, 45)

NIGHT_START = time(21, 15)
NIGHT_END = time(22, 45)
TIME_NOW = datetime.now().time()

其他内容没改,就加入了个判断:

判断交易时间

    if DAY_END >= TIME_NOW >= DAY_START or NIGHT_END >= TIME_NOW >= NIGHT_START:

        if cross_over:
            if self.pos == 0:
                self.buy(bar.close_price, 1,stop=True)
            elif self.pos < 0:
                self.cover(bar.close_price, 1,stop=True)
                self.buy(bar.close_price, 1,stop=True)

        elif cross_below:
            if self.pos == 0:
                self.short(bar.close_price, 1,stop=True)
            elif self.pos > 0:
                self.sell(bar.close_price, 1,stop=True)
                self.short(bar.close_price, 1,stop=True)

        self.put_event()
    # 如果不在交易时间,停止交易并且清仓
    else:
        if  self.pos > 0:
            self.cover(bar.close_price, 1,stop=True)

        elif self.pos < 0:
            self.short(bar.close_price, 1,stop=True)

        else:            
            self.cancel_all()

        self.put_event()

我遇到的问题是:既没有报错,也能运行到最底部。但是回测的时候显示成交记录为空。不知道哪里写错了。
是不是我判断的逻辑,或者放的位置不正确?请大佬指点一下。

Member
avatar
加入于:
帖子: 5010
声望: 302

回测的时候你这个TIME_NOW就是回测的时间点不是按你所想的收到每根K线的时间

Member
avatar
加入于:
帖子: 23
声望: 0

xiaohe wrote:

回测的时候你这个TIME_NOW就是回测的时间点不是按你所想的收到每根K线的时间
感谢回复
是的,我也发现了,就是我电脑当前时间

但是,我直接实盘模拟的时候 也是没有交易委托提交。是不是我这个循环判断放的地方不对呀

Member
avatar
加入于:
帖子: 5010
声望: 302

自己在策略里打印排查一下就知道了

Member
avatar
加入于:
帖子: 7
声望: 1

BarData是有datetime属性的,可以尝试用bar.datetime访问最新一根K线的时间,代替TIME_NOW进行> 判断

Member
avatar
加入于:
帖子: 23
声望: 0

VN神经蛙 wrote:

BarData是有datetime属性的,可以尝试用bar.datetime访问最新一根K线的时间,代替TIME_NOW进行> 判断

谢谢回答
这个问题解决了。是用的bar.datetime
回测成交记录为空,是因为我的判断语句写的逻辑错了。原本写的else,现在重新把不在交易时间的情况写在elif里面了。给遇到同样问题的小伙伴做个参考。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】