vn.py官网
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 78
声望: 0

对冲引擎在计算对冲报单手数时, 可能会出现纯小数手数, 或非整数手数,
send_order(self, req: OrderRequest) 会把这个接直报给Gateway 的send_order去报单,

CTP Gateway 在send_order里面,对报单手数进行了取整 int(req.volume),
对于大于1的非整数手数, 取整之后的手数会>=1, 报单没有问题,
但对于纯小数手数, 取整之后的手数会变成0, 这样报单会不会被认为是废单/无效单?
如果这种废单/无效单?频繁报送, API那边会不会被封掉账号呢?,
不知道这种情况一般是怎么处理的?

Administrator
avatar
加入于:
帖子: 4469
声望: 302

不会,对冲最小的数量是1,如果小于1应该是不会发出委托的。

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

我说的正是这个意思呢.
但是, 对冲引擎的代码中并没有做这个检查,而是直接去发单了, 我跟踪代码直到CTP Gageway API报单出去, 都未见到有做这个检查, 是直接报单出去了..

我目前是这么弄的, 在对冲引擎的定时器 事件处理 上下文的 run 函数中加了一句, 检查对冲手数是否小于1:


        order_volume = abs(hedge_volume)           

        if order_volume < 1:           # # 这里做一个检查,  对冲最小的手数是1,如果小于1,不发出委托
            return

        req = OrderRequest(
            symbol=contract.symbol,
            exchange=contract.exchange,
            direction=direction,
            type=OrderType.LIMIT,
            volume=order_volume,
            price=round_to(price, contract.pricetick),
        )
......................................
.......................................
Administrator
avatar
加入于:
帖子: 4469
声望: 302

已在DEV分支修改

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

沪公网安备 31011502017034号