From 8f2ea1c260eb5f4e3dd60cfb169fe51c7bc57156 Mon Sep 17 00:00:00 2001 From: zhiyong Date: Thu, 15 May 2025 10:43:15 +0800 Subject: [PATCH] refactor check limit order --- src/real/real_trader_manager.py | 9 +++++++++ src/real/xt_trader.py | 24 +----------------------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/real/real_trader_manager.py b/src/real/real_trader_manager.py index 33819d2..6e69b5e 100644 --- a/src/real/real_trader_manager.py +++ b/src/real/real_trader_manager.py @@ -196,6 +196,15 @@ class RealTraderManager: if duration > Config.RTM_ORDER_TIMEOUT: logger.info(f"限价单超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}秒") 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: logger.info(f"限价单未超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}秒") diff --git a/src/real/xt_trader.py b/src/real/xt_trader.py index c3fb4d1..e6fae09 100644 --- a/src/real/xt_trader.py +++ b/src/real/xt_trader.py @@ -56,6 +56,7 @@ class MyXtQuantTraderCallback: def on_stock_asset(self, asset): logger.info(f"资金变动: {asset.account_id} {asset.cash} {asset.total_asset}") def on_stock_order(self, order): + logger.warning(f"委托回报变化: ID={order.order_id} 状态={order.order_status}") if order.order_status == xtconstant.ORDER_PART_SUCC: 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}") @@ -65,29 +66,6 @@ class MyXtQuantTraderCallback: 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}") 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): logger.info(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}")