添加控制限价单超时后是否撤单并挂市价单补单的功能

This commit is contained in:
zhiyong 2025-05-22 22:53:07 +08:00
parent 65f91c56b2
commit 64c88dcc24
2 changed files with 8 additions and 3 deletions

View File

@ -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

View File

@ -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:
# 市价单未完成,更新状态