update get_trader

This commit is contained in:
zhiyong 2025-05-11 20:06:33 +08:00
parent a93e51f273
commit 2e094d2776
2 changed files with 67 additions and 25 deletions

View File

@ -141,6 +141,7 @@ class BaseTrader(ABC):
""" """
pass pass
@staticmethod
def is_trading_time(self): def is_trading_time(self):
"""判断当前是否为交易时间 """判断当前是否为交易时间
@ -171,7 +172,8 @@ class BaseTrader(ABC):
self.logger.error(f"判断交易时间发生错误: {str(e)}") self.logger.error(f"判断交易时间发生错误: {str(e)}")
return False return False
def is_trading_date(self, date=None): @staticmethod
def is_trading_date(date=None):
"""判断指定日期是否为交易日 """判断指定日期是否为交易日
Args: Args:
@ -189,7 +191,8 @@ class BaseTrader(ABC):
return is_workday(date) return is_workday(date)
except Exception as e: except Exception as e:
self.logger.error(f"判断交易日期发生错误: {str(e)}") logger = get_logger("BaseTrader")
logger.error(f"判断交易日期发生错误: {str(e)}")
return False return False
def get_position_manager(self, strategy_name) -> PositionManager: def get_position_manager(self, strategy_name) -> PositionManager:

View File

@ -8,6 +8,7 @@ from simulation.simulation_trader import SimulationTrader
from logger_config import get_logger from logger_config import get_logger
from real.real_trader_manager import RealTraderManager from real.real_trader_manager import RealTraderManager
from trade_constants import * from trade_constants import *
from base_trader import BaseTrader
# 获取日志记录器 # 获取日志记录器
logger = get_logger("server") logger = get_logger("server")
@ -43,9 +44,25 @@ def get_real_trader_manager():
def get_trader(): def get_trader():
global _trader_instance global _trader_instance
if _trader_instance is None: # 实盘模式下
_trader_instance = SimulationTrader() if Config.SIMULATION_MODE else XtTrader(connect_failed_callback=on_connect_failed) if is_real_mode() and _trader_instance is None:
# 检查是否为交易日
if not BaseTrader.is_trading_date():
# 非交易日创建临时实例提供错误信息
temp_trader = XtTrader(connect_failed_callback=on_connect_failed)
temp_trader.connection_failed = True
temp_trader.connection_error_message = "当前为非交易日,交易系统未连接"
return temp_trader
# 交易日但非交易时间
if not BaseTrader.is_trading_time():
# 非交易时间创建临时实例提供错误信息
temp_trader = XtTrader(connect_failed_callback=on_connect_failed)
temp_trader.connection_failed = True
temp_trader.connection_error_message = "当前为非交易时间,交易系统未连接"
return temp_trader
# 返回已存在的实例
return _trader_instance return _trader_instance
def login(): def login():
@ -109,25 +126,6 @@ def logout():
logger.info("XtTrader实例已销毁") logger.info("XtTrader实例已销毁")
def setup_scheduler():
# 设置每日任务
schedule.every().day.at(Config.MARKET_OPEN_TIME).do(login)
schedule.every().day.at(Config.MARKET_CLOSE_TIME).do(logout)
# 启动调度线程
scheduler_thread = threading.Thread(target=_run_scheduler, daemon=True)
scheduler_thread.start()
logger.info("定时任务调度器已启动")
# 启动重连检查线程(仅在实盘模式下)
if is_real_mode():
reconnect_thread = threading.Thread(target=_check_reconnect, daemon=True)
reconnect_thread.start()
logger.info("重连检查线程已启动")
return scheduler_thread
def _run_scheduler(): def _run_scheduler():
"""定时任务执行线程""" """定时任务执行线程"""
while True: while True:
@ -149,6 +147,47 @@ def _check_reconnect():
logger.error(f"重连检查错误: {str(e)}") logger.error(f"重连检查错误: {str(e)}")
# 定时任务:检查是否为交易日,并在交易日执行登录操作
def login_on_trading_day():
"""仅在交易日执行登录操作"""
# 使用BaseTrader中的静态方法检查是否为交易日
if BaseTrader.is_trading_date():
logger.info("今天是交易日,执行登录操作")
login()
else:
logger.info("今天不是交易日,跳过登录操作")
# 定时任务:检查是否为交易日,并在交易日执行登出操作
def logout_on_trading_day():
"""仅在交易日执行登出操作"""
# 使用BaseTrader中的静态方法检查是否为交易日
if BaseTrader.is_trading_date():
logger.info("今天是交易日,执行登出操作")
logout()
else:
logger.info("今天不是交易日,跳过登出操作")
def setup_scheduler():
# 设置每日任务,仅在交易日执行
schedule.every().day.at(Config.MARKET_OPEN_TIME).do(login_on_trading_day)
schedule.every().day.at(Config.MARKET_CLOSE_TIME).do(logout_on_trading_day)
# 启动调度线程
scheduler_thread = threading.Thread(target=_run_scheduler, daemon=True)
scheduler_thread.start()
logger.info("定时任务调度器已启动")
# 启动重连检查线程(仅在实盘模式下)
if is_real_mode():
reconnect_thread = threading.Thread(target=_check_reconnect, daemon=True)
reconnect_thread.start()
logger.info("重连检查线程已启动")
return scheduler_thread
# 初始化交易系统 # 初始化交易系统
try: try:
# 程序启动时初始化交易实例 - 尝试登录,但即使失败也继续启动服务 # 程序启动时初始化交易实例 - 尝试登录,但即使失败也继续启动服务