From 11c620310c6da26b86ca3ac9470c6b027578d60f Mon Sep 17 00:00:00 2001 From: zhiyong Date: Thu, 15 May 2025 11:07:28 +0800 Subject: [PATCH] refactor on_stock_trade --- src/real/xt_trader.py | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/real/xt_trader.py b/src/real/xt_trader.py index 5ae91ab..dde6898 100644 --- a/src/real/xt_trader.py +++ b/src/real/xt_trader.py @@ -67,24 +67,9 @@ class MyXtQuantTraderCallback: 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) def on_stock_trade(self, trade): - logger.info(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}") + self.trader_instance.handle_trade_update(trade.order_id) + logger.warning(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}") - # 当有成交回报时,立即更新订单状态 - try: - if self.trader_instance: - order_id = trade.order_id - # 查找该订单所属的策略 - strategy_name = self.trader_instance.get_strategy_name(order_id) - if strategy_name: - # 使用trader的方法来处理订单状态更新,避免直接调用real_trader_manager - self.trader_instance.handle_order_update(order_id, strategy_name) - logger.info(f"成交回报触发订单状态更新: ID={order_id}, 策略={strategy_name}") - else: - logger.warning(f"成交回报触发订单状态更新失败: 根据order id未找到策略名 ID={order_id}, 策略={strategy_name}") - else: - logger.warning(f"成交回报触发订单状态更新失败: trader_instance为空") - except Exception as e: - logger.error(f"成交回报处理异常: {str(e)}", exc_info=True) def on_stock_position(self, position): logger.info(f"持仓变动: {position.stock_code} {position.volume}") def on_order_error(self, order_error): @@ -720,3 +705,17 @@ class XtTrader(BaseTrader): except Exception as e: logger.error(f"市价单补单过程发生异常: {str(e)}", exc_info=True) return {"success": False, "error": f"市价单补单异常: {str(e)}"} + + def handle_trade_update(self, order_id): + # 当有成交回报时,立即更新订单状态 + try: + # 查找该订单所属的策略 + strategy_name = self.get_strategy_name(order_id) + if strategy_name: + # 使用trader的方法来处理订单状态更新,避免直接调用real_trader_manager + self.handle_order_update(order_id, strategy_name) + logger.info(f"成交回报触发订单状态更新: ID={order_id}, 策略={strategy_name}") + else: + logger.warning(f"成交回报触发订单状态更新失败: 根据order id未找到策略名 ID={order_id}, 策略={strategy_name}") + except Exception as e: + logger.error(f"成交回报处理异常: {str(e)}", exc_info=True) \ No newline at end of file