基于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}"
此规则防止订单超出特定工具允许的最大持仓量,帮助管理集中度风险。
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}"
此规则确保订单量符合特定工具的最小和最大交易量要求,这些要求根据订单类型有所不同。
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})"
此规则防止交易系统与自己发出的订单成交,避免市场操纵和利益冲突。
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
所有订单必须通过以下所有检查才能被视为有效订单。
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}")