VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 8
声望: 0

以下是vnpy.trader.converter里PositionHolding里的convert_order_request_lock函数,为什么第二个if判断的时候,需要区分标的交易所是否为上期/上期能源?我理解即使是上期所标的,在锁仓的情况下也是可以直接通过开仓的方式锁仓的?
`def convert_order_request_lock(self, req: OrderRequest) -> List[OrderRequest]:
""""""
if req.direction == Direction.LONG:
td_volume: int = self.short_td
yd_available: int = self.short_yd - self.short_yd_frozen
else:
td_volume: int = self.long_td
yd_available: int = self.long_yd - self.long_yd_frozen

    close_yd_exchanges: Set[Exchange] = {Exchange.SHFE, Exchange.INE}

    # If there is td_volume, we can only lock position
    if td_volume and self.exchange not in close_yd_exchanges:
        req_open: OrderRequest = copy(req)
        req_open.offset = Offset.OPEN
        return [req_open]
    # If no td_volume, we close opposite yd position first
    # then open new position
    else:
        close_volume: int = min(req.volume, yd_available)
        open_volume: int = max(0, req.volume - yd_available)
        req_list: List[OrderRequest] = []

        if yd_available:
            req_yd: OrderRequest = copy(req)
            if self.exchange in close_yd_exchanges:
                req_yd.offset = Offset.CLOSEYESTERDAY
            else:
                req_yd.offset = Offset.CLOSE
            req_yd.volume = close_volume
            req_list.append(req_yd)

        if open_volume:
            req_open: OrderRequest = copy(req)
            req_open.offset = Offset.OPEN
            req_open.volume = open_volume
            req_list.append(req_open)

        return req_list`
Member
avatar
加入于:
帖子: 8
声望: 0

已解决
想明白了二者的差异是,非上期所/上期能源的交易发出平仓指令时候无法自主选择平今还是平昨,交易所平仓时候会先平今,这样会违背锁仓的目的;
而上期所/上期能源可主动平昨

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

沪公网安备 31011502017034号

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