fix get_trader每次都返回新的实例
This commit is contained in:
parent
738bae5a4d
commit
c616f9c5d9
@ -22,9 +22,13 @@ strategy_positions = {} # 存储各策略持仓
|
|||||||
strategy_trades = {} # 存储各策略交易记录
|
strategy_trades = {} # 存储各策略交易记录
|
||||||
pending_orders = {} # 存储未完成委托
|
pending_orders = {} # 存储未完成委托
|
||||||
|
|
||||||
|
# 全局交易实例(采用单例模式)
|
||||||
|
_sim_trader_instance = None # 模拟交易实例(单例)
|
||||||
|
_real_trader_instance = None # 实盘交易实例(单例)
|
||||||
|
|
||||||
# 获取交易实例
|
# 获取交易实例
|
||||||
def get_trader(use_sim_trader=False):
|
def get_trader(use_sim_trader=False):
|
||||||
"""获取交易实例
|
"""获取交易实例 - 采用单例模式
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
use_sim_trader (bool): 是否强制使用模拟交易,True表示必定返回模拟交易实例
|
use_sim_trader (bool): 是否强制使用模拟交易,True表示必定返回模拟交易实例
|
||||||
@ -32,13 +36,21 @@ def get_trader(use_sim_trader=False):
|
|||||||
Returns:
|
Returns:
|
||||||
返回交易实例,根据参数和配置决定是模拟交易还是实盘交易
|
返回交易实例,根据参数和配置决定是模拟交易还是实盘交易
|
||||||
"""
|
"""
|
||||||
# 如果强制使用模拟交易,直接返回
|
global _sim_trader_instance, _real_trader_instance
|
||||||
if use_sim_trader:
|
|
||||||
return SimulationTrader()
|
|
||||||
|
|
||||||
# 如果配置为仅模拟交易,直接返回模拟交易实例
|
# 如果强制使用模拟交易,返回模拟交易单例
|
||||||
|
if use_sim_trader:
|
||||||
|
# 如果模拟交易实例不存在,创建一个
|
||||||
|
if _sim_trader_instance is None:
|
||||||
|
_sim_trader_instance = SimulationTrader()
|
||||||
|
return _sim_trader_instance
|
||||||
|
|
||||||
|
# 如果配置为仅模拟交易,返回模拟交易单例
|
||||||
if Config.SIMULATION_ONLY:
|
if Config.SIMULATION_ONLY:
|
||||||
return SimulationTrader()
|
# 如果模拟交易实例不存在,创建一个
|
||||||
|
if _sim_trader_instance is None:
|
||||||
|
_sim_trader_instance = SimulationTrader()
|
||||||
|
return _sim_trader_instance
|
||||||
|
|
||||||
# 判断当前是否为交易时间
|
# 判断当前是否为交易时间
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
@ -60,20 +72,23 @@ def get_trader(use_sim_trader=False):
|
|||||||
# 如果无法导入chinese_calendar,则简单地用工作日判断
|
# 如果无法导入chinese_calendar,则简单地用工作日判断
|
||||||
is_trading_day = now.weekday() < 5 # 0-4 为周一至周五
|
is_trading_day = now.weekday() < 5 # 0-4 为周一至周五
|
||||||
|
|
||||||
# 如果不是交易日或不在交易时间内,返回模拟交易实例
|
# 如果不是交易日或不在交易时间内,返回模拟交易单例
|
||||||
if not is_trading_day or not is_trading_hour:
|
if not is_trading_day or not is_trading_hour:
|
||||||
logger.info(f"当前非交易时段 - 日期: {now.date()}, 时间: {current_time}, 使用模拟交易")
|
logger.info(f"当前非交易时段 - 日期: {now.date()}, 时间: {current_time}, 使用模拟交易")
|
||||||
return SimulationTrader()
|
# 如果模拟交易实例不存在,创建一个
|
||||||
|
if _sim_trader_instance is None:
|
||||||
# 否则返回真实交易实例
|
_sim_trader_instance = SimulationTrader()
|
||||||
trader = XtTrader()
|
return _sim_trader_instance
|
||||||
|
|
||||||
|
# 否则返回真实交易单例(如果存在)或创建一个新的
|
||||||
|
if _real_trader_instance is None:
|
||||||
|
_real_trader_instance = XtTrader()
|
||||||
# 检查交易实例是否已登录,如果未登录则进行登录
|
# 检查交易实例是否已登录,如果未登录则进行登录
|
||||||
if not trader.is_logged_in():
|
if not _real_trader_instance.is_logged_in():
|
||||||
logger.info("创建新的XtTrader实例并登录")
|
logger.info("创建新的XtTrader实例并登录")
|
||||||
trader.login()
|
_real_trader_instance.login()
|
||||||
|
|
||||||
return trader
|
return _real_trader_instance
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
def setup_logger():
|
def setup_logger():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user