交易系统风险管理规则

基于Python代码的风险控制检查文档

1

保证金检查

此规则确保订单不会超过允许的最大保证金使用量,防止过度暴露和潜在的账户清算风险。

Python
def order_exceeded_max_margin(self, order: Order):
    provisional_margin = self.oms.estimate_margin(order)
    provisional_commission = self.oms.estimate_commission(order)
    self.logger.info(f"provisional_margin: {provisional_margin}, provisional_commission: {provisional_commission}")
    assert (
        AccountManager.cash - provisional_margin - provisional_commission > 0
    ), f"Cash balance ({AccountManager.cash}) insufficient for margin and commission: {provisional_margin + provisional_commission}"
2

持仓限制检查

此规则防止订单超出特定工具允许的最大持仓量,帮助管理集中度风险。

Python
def order_exceeded_position_limit(self, order: Order):
    if order.instrument_id not in self.config["instruments"]:
        raise Exception(f"Unspecified max_position for instrument {order.instrument_id}")
    if (
        (order.direction == OrderSide.LONG and order.order_flag == OrderFlag.OPEN) or 
        (order.direction == OrderSide.SHORT and order.order_flag in [OrderFlag.CLOSE, OrderFlag.CLOSE_TODAY])
    ):
        sign_volume = order.volume  
    else:
        sign_volume = -order.volume

    net_position = PositionManager.current_position[order.instrument_id] + sign_volume
    unsign_max_position = self.config["instruments"][order.instrument_id]["max_position"]

    assert (
        ((net_position) <= unsign_max_position) and ((net_position) >= -unsign_max_position)
    ), f"[order_exceeded_position_limit]: {order.instrument_id} Position {net_position} exceed limit of {unsign_max_position}"
3

交易量限制检查

此规则确保订单量符合特定工具的最小和最大交易量要求,这些要求根据订单类型有所不同。

Python
def order_violated_volume_limit(self, order: Order):
    instrument = InstrumentManager.get(order.instrument_id)
    if order.order_type == OrderType.LIMIT:
        volume_max_limit = instrument.MaxLimitOrderVolume
        volume_min_limit = instrument.MinLimitOrderVolume
    else:
        volume_max_limit = instrument.MaxMarketOrderVolume
        volume_min_limit = instrument.MinMarketOrderVolume
    assert (
        order.volume < volume_max_limit and order.volume >= volume_min_limit
    ), f"Order violated volume limit {order.volume} not in ({volume_min_limit} ~ {volume_max_limit})"
4

自成交检查

此规则防止交易系统与自己发出的订单成交,避免市场操纵和利益冲突。

Python
def _order_is_self_dealing(self, order1: Order, order2: Order) -> bool:
    if order1.direction == order2.direction:
        return False
    if (
        order1.order_type == OrderType.MARKET
    ) or (
        order1.direction == OrderSide.LONG and order1.price > order2.price
    ) or (
        order1.direction == OrderSide.SHORT and order1.price < order2.price
    ):
        return True
    
    return False
5

订单验证流程

所有订单必须通过以下所有检查才能被视为有效订单。

Python
def is_order_valid(self, order: Order):
    conditions = [
        self.order_exceeded_max_margin,
        self.order_exceeded_position_limit,
        self.order_violated_volume_limit,
        self.is_self_dealing_order
    ]

    for condition in conditions:
        (condition(order)) # 如果任何检查未通过,将引发异常

    self.logger.debug(f"All condition check passed. {order}")