diff --git a/src/config.py b/src/config.py index b7ebccc..0042faf 100644 --- a/src/config.py +++ b/src/config.py @@ -55,6 +55,7 @@ class Config: # RealTraderManager配置 RTM_ORDER_TIMEOUT = 10 # 订单超时时间(秒) RTM_USE_MARKET_ORDER = True # 是否使用市价单进行补单 + RTM_AUTO_MARKET_ORDER = True # 限价单超时后是否撤单并挂市价单补单 # 撤销订单超时时间(秒) RTM_CANCEL_TIMEOUT = 10 diff --git a/src/real/real_trader_manager.py b/src/real/real_trader_manager.py index 2e4434e..2d043ca 100644 --- a/src/real/real_trader_manager.py +++ b/src/real/real_trader_manager.py @@ -188,6 +188,7 @@ class RealTraderManager: strategy_name: 策略名称 duration: 订单持续时间(秒) """ + self.trader.cancel(order_id) # 使用轮询等待撤销完成,并设置超时 @@ -206,7 +207,7 @@ class RealTraderManager: 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}") + logger.error(f"限价单撤销超时或失败: ID={order_id}, 策略={strategy_name}") self.trader.handle_order_update(order_id, strategy_name) # 即使撤销失败,也更新一下状态 @@ -226,12 +227,15 @@ class RealTraderManager: # 如果订单类型为限价单,则检查是否超时 if order_info.order_type == ORDER_TYPE_LIMIT: + # 检查是否配置为自动撤单并挂市价单补单 + if not Config.RTM_AUTO_MARKET_ORDER: + return + now = datetime.now() duration = (now - order_info.created_time).total_seconds() if duration > Config.RTM_ORDER_TIMEOUT: # 将处理超时限价单的逻辑委托给新的私有方法 - logger.info(f'订单创建时间: {order_info.created_time} 当前时间: {now}') - logger.info(f"限价单超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}秒") + logger.warning(f"限价单超时: ID={order_id}, 策略={strategy_name}, 持续时间={duration}秒, 订单创建时间: {order_info.created_time} 当前时间: {now}") self._handle_timed_out_limit_order(order_id, order_info, strategy_name, duration) else: # 市价单未完成,更新状态