From 64c88dcc24975848efc934e36d8197651d801521 Mon Sep 17 00:00:00 2001 From: zhiyong Date: Thu, 22 May 2025 22:53:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A7=E5=88=B6=E9=99=90?= =?UTF-8?q?=E4=BB=B7=E5=8D=95=E8=B6=85=E6=97=B6=E5=90=8E=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=92=A4=E5=8D=95=E5=B9=B6=E6=8C=82=E5=B8=82=E4=BB=B7=E5=8D=95?= =?UTF-8?q?=E8=A1=A5=E5=8D=95=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.py | 1 + src/real/real_trader_manager.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) 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: # 市价单未完成,更新状态