update check pendding order

This commit is contained in:
zhiyong 2025-05-15 11:14:53 +08:00
parent 11c620310c
commit 28472a3bb1
2 changed files with 7 additions and 29 deletions

View File

@ -79,8 +79,8 @@ class RealTraderManager:
# 检查限价单是否超时 # 检查限价单是否超时
if hasattr(Config, "RTM_ORDER_TIMEOUT"): if hasattr(Config, "RTM_ORDER_TIMEOUT"):
try: try:
schedule.every(30).seconds.do( schedule.every(10).seconds.do(
run_threaded(self.check_limit_orders) run_threaded(self.check_pending_orders)
) )
except Exception as e: except Exception as e:
logger.error(f"限价单超时检查任务配置错误: {e}") logger.error(f"限价单超时检查任务配置错误: {e}")
@ -176,7 +176,7 @@ class RealTraderManager:
return {"success": False, "error": f"下单异常: {str(e)}"} return {"success": False, "error": f"下单异常: {str(e)}"}
def check_limit_orders(self): def check_pending_orders(self):
"""检查限价单是否超时""" """检查限价单是否超时"""
try: try:
# 获取所有未完成订单 # 获取所有未完成订单
@ -205,6 +205,9 @@ class RealTraderManager:
self.trader.place_market_order_for_remainder(order_info, strategy_name) self.trader.place_market_order_for_remainder(order_info, strategy_name)
else: else:
logger.warning(f"限价单撤销失败: ID={order_id}, 策略={strategy_name}") logger.warning(f"限价单撤销失败: ID={order_id}, 策略={strategy_name}")
else:
logger.info(f"更新市价单: ID={order_id}, 策略={strategy_name}, 订单类型={order_info.order_type}")
self.trader.handle_order_update(order_id, strategy_name)
except Exception as e: except Exception as e:
logger.error(f"检查限价单是否超时时发生异常: {str(e)}") logger.error(f"检查限价单是否超时时发生异常: {str(e)}")

View File

@ -57,19 +57,8 @@ class MyXtQuantTraderCallback:
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}") 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}")
self.trader_instance.handle_order_update(order.order_id, strategy_name)
elif order.order_status == xtconstant.ORDER_SUCCEEDED:
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)
def on_stock_trade(self, trade): def on_stock_trade(self, trade):
self.trader_instance.handle_trade_update(trade.order_id)
logger.warning(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}") logger.warning(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}")
def on_stock_position(self, position): def on_stock_position(self, position):
logger.info(f"持仓变动: {position.stock_code} {position.volume}") logger.info(f"持仓变动: {position.stock_code} {position.volume}")
def on_order_error(self, order_error): def on_order_error(self, order_error):
@ -705,17 +694,3 @@ class XtTrader(BaseTrader):
except Exception as e: except Exception as e:
logger.error(f"市价单补单过程发生异常: {str(e)}", exc_info=True) logger.error(f"市价单补单过程发生异常: {str(e)}", exc_info=True)
return {"success": False, "error": f"市价单补单异常: {str(e)}"} 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)