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

CTP仿真环境支持本地停止单吗?

用华鑫期货的仿真环境,测试中用到了vnpy的本地停止单(local_stop_order)功能,在IF1912合约上。发现出错。 策略发的本地停止单3840的空单,ctp发的
3476的现价空单。 所以仿真环境CTP报错,错误信息是超出报价范围。

我看了一下CtaEngine类的check_stop_order()函数。需要ticket中的tick.ask_price_5,bid_price_5,或者tick.limit_down,tick.limit_up。仿真环境中买五,卖五的价格都没有啊。

            if stop_order.direction == Direction.LONG:
                if tick.limit_up:
                    price = tick.limit_up
                else:
                    price = tick.ask_price_5
            else:
                if tick.limit_down:
                    price = tick.limit_down
                else:
                    price = tick.bid_price_5
Member
avatar
加入于:
帖子: 18
声望: 0

是不是中信期货的仿真环境功能比较全,中信期货仿真交易下可以用本地停止单吗?

Administrator
avatar
加入于:
帖子: 4502
声望: 321

中信期货环境公认是维护的比较好的一个了,可以使用本地停止单

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

今天测试了一下中信期货仿真生产环境,发现IF1912不能支持本地停止单。 目前程序用市价单,就是tick.limit_up 和tick.limit_down报单,被拒。中金所仿真环境的报价范围好像只有当前价格的上下30个点。 ticket对象中也没有ask_price_5或者bid_price_5。 (其他非中金所的品种没有测试)

中信期货仿真生产环境如下:
brokid :66666
针对生产版本API_6.3.15
tcp://ctpfz1-front1.citicsf.com:51305
tcp://ctpfz1-front1.citicsf.com:51313

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

description

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

中金所 仿真环境的限制, 如上楼。还是影响了IF的仿真。

本地停止单对分钟线上日内交易有价值。我把策略逻辑改为非本地停止单,策略效果大大退步。本地停止单可以在本bar完成,而非停止单要本bar完成后的下一个ticket才触发。

我自己稍微修改了一下,CtaEngine类的check_stop_order()函数。在原来的代码下面增加了一段。这里 CtaEngine.sim_trade 是类变量,可以用来做全局变量,控制这段逻辑,这样实盘就不用改代码了。

           """这里重新计算停止单"""
            # 在中金所仿真环境中,tick.limit_up tick.limit_down报价失败,同时也没有tick.ask_price_5和tick.bid_price_5
            if CtaEngine.sim_trade:
                jump = tick.ask_price_1 - tick.bid_price_1
                if stop_order.direction == Direction.LONG:
                    price =tick.ask_price_1 + 5*jump
                else:
                    price =tick.bid_price_1 - 5*jump
Member
avatar
加入于:
帖子: 18
声望: 0

策略代码中,收盘1%的报价间隔也超出仿真环境报价范围。需要改小,比如改为0.5%的报价间隔

        if self.pos > 0:
            self.sell(bar.close_price * 0.995, abs(self.pos))  # 原来1%的差距太大。在仿真环境超出报价范围
        elif self.pos < 0:
            self.cover(bar.close_price * 1.005, abs(self.pos))   # 原来1%的差距太大。在仿真环境超出报价范围
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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