refactor check limit order

This commit is contained in:
zhiyong 2025-05-15 10:43:15 +08:00
parent 0f23e5d6ba
commit 8f2ea1c260
2 changed files with 10 additions and 23 deletions

View File

@ -196,6 +196,15 @@ class RealTraderManager:
if duration > Config.RTM_ORDER_TIMEOUT: if duration > Config.RTM_ORDER_TIMEOUT:
logger.info(f"限价单超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}") logger.info(f"限价单超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}")
self.trader.cancel(order_id) self.trader.cancel(order_id)
time.sleep(1)
order = self.trader.get_order(order_id)
if order.order_status == xtconstant.ORDER_CANCELED:
logger.info(f"限价单已撤销: ID={order_id}, 策略={strategy_name}")
self.trader.handle_order_update(order_id, strategy_name)
logger.info(f"检测到限价单被撤销,准备进行市价单补单: ID={order_id}")
self.trader.place_market_order_for_remainder(order_info, strategy_name)
else:
logger.warning(f"限价单撤销失败: ID={order_id}, 策略={strategy_name}")
else: else:
logger.info(f"限价单未超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}") logger.info(f"限价单未超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}")

View File

@ -56,6 +56,7 @@ class MyXtQuantTraderCallback:
def on_stock_asset(self, asset): def on_stock_asset(self, asset):
logger.info(f"资金变动: {asset.account_id} {asset.cash} {asset.total_asset}") logger.info(f"资金变动: {asset.account_id} {asset.cash} {asset.total_asset}")
def on_stock_order(self, order): def on_stock_order(self, order):
logger.warning(f"委托回报变化: ID={order.order_id} 状态={order.order_status}")
if order.order_status == xtconstant.ORDER_PART_SUCC: if order.order_status == xtconstant.ORDER_PART_SUCC:
strategy_name = self.trader_instance.get_strategy_name(order.order_id) strategy_name = self.trader_instance.get_strategy_name(order.order_id)
logger.info(f"委托部分成交: code={order.stock_code} id={order.order_id} strategy={strategy_name}") logger.info(f"委托部分成交: code={order.stock_code} id={order.order_id} strategy={strategy_name}")
@ -65,29 +66,6 @@ class MyXtQuantTraderCallback:
strategy_name = self.trader_instance.get_strategy_name(order.order_id) strategy_name = self.trader_instance.get_strategy_name(order.order_id)
logger.info(f"委托全部成交: code={order.stock_code} id={order.order_id} strategy={strategy_name}") logger.info(f"委托全部成交: code={order.stock_code} id={order.order_id} strategy={strategy_name}")
self.trader_instance.handle_order_update(order.order_id, strategy_name) self.trader_instance.handle_order_update(order.order_id, strategy_name)
elif order.order_status in [xtconstant.ORDER_CANCELED, xtconstant.ORDER_PART_CANCEL]:
strategy_name = self.trader_instance.get_strategy_name(order.order_id)
logger.info(f"委托撤单成功: code={order.stock_code} id={order.order_id} strategy={strategy_name}")
# 撤单后, 如果position manager中订单为pedding, 且为限价单, 则需要补单
position_manager = self.trader_instance.get_position_manager(strategy_name)
if position_manager and strategy_name:
# 先获取已经撤单的order
order_info = position_manager.get_pending_order(order.order_id)
if order_info:
# 更新订单状态
self.trader_instance.handle_order_update(order.order_id, strategy_name)
# 如果order_info为限价单, 则进行市价单补单
if order_info.order_type == ORDER_TYPE_LIMIT:
logger.info(f"检测到限价单被撤销,准备进行市价单补单: ID={order.order_id}")
self.trader_instance.place_market_order_for_remainder(order_info, strategy_name)
else:
logger.warning(f"撤单成功但未找到订单信息: ID={order.order_id}")
else:
logger.warning(f"撤单成功但未找到策略或持仓管理器: ID={order.order_id}, strategy={strategy_name}")
else:
logger.warning(f"委托回报变化: ID={order.order_id} 状态={order.order_status}")
def on_stock_trade(self, trade): def on_stock_trade(self, trade):
logger.info(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}") logger.info(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}")