问题描述
超过相对限价时订单会怎么处理?
解决方案
在 ptrade 量化交易平台中,当您的委托订单价格超过了交易所规定的相对限价(通常被称为“价格笼子”,例如科创板或创业板的 2% 价格限制)时,该订单最终会被交易所认定为废单。
具体在 ptrade 平台中的表现和处理流程如下:
1. 下单接口返回值
当您调用 order() 等下单函数时,即使下单价格超过了价格笼子,order 函数依然会正常返回一个 order_id,而不会返回 None。这是因为订单在本地柜台层面是成功生成的,只是在报送到交易所后被拒。
2. 委托主推回调 (on_order_response)
在委托主推回调函数中,该订单的初始状态 status 会显示为 2(已报),表示订单已经成功报送至交易所。
3. 成交主推回调 (on_trade_response)
当交易所处理该订单并判定其违反相对限价规则后,会将其打回。此时,在成交主推回调函数中,该订单的状态 status 会更新为 9(废单)。
应对建议与代码示例
为了避免策略因为废单而逻辑错乱,建议在策略中:
- 下单前校验:尽量在下单前获取最新的行情快照(
get_snapshot)或档位行情(get_gear_price),确保委托价格在合理的价格笼子范围内。 - 监听废单状态:通过
on_trade_response或定时查询订单状态,捕获废单并进行相应的重试或撤单逻辑处理。
def on_trade_response(context, trade_list):
for trade in trade_list:
if trade['status'] == '9':
log.warning(f"订单 {trade['entrust_no']} 成为废单,可能是因为超过了相对限价(价格笼子)。")
# 在此处添加您的废单处理逻辑,例如重新计算价格后再次下单