from datetime import timedelta
from src.analysis.result_analyzer import ResultAnalyzer

# 导入 TqsdkEngine，而不是原来的 BacktestEngine
from src.tqsdk_real_engine import TqsdkEngine

# 导入你的策略类
from src.strategies.OpenTwoFactorStrategy import SimpleLimitBuyStrategyLong, SimpleLimitBuyStrategyShort, SimpleLimitBuyStrategy

from tqsdk import TqApi, TqBacktest, TqAuth, TqKq


# --- 配置参数 ---
# Tqsdk 的本地数据文件路径，注意 Tqsdk 要求文件名为 KQ_m@交易所_品种名_周期.csv
# 例如: KQ_m@SHFE_rb_min60.csv
initial_capital = 100000.0
slippage_rate = 0.000  # 在 Tqsdk 模拟中，滑点通常由 TqSim 处理或在策略中手动模拟
commission_rate = 0.0001  # 同上
# 主力合约的 symbol
main_symbol = "KQ.m@CZCE.MA"
strategy_parameters = {
    'symbol': main_symbol,  # 根据您的数据文件中的品种名称调整
    'trade_volume': 1,
    'range_factor': 1.8,  # 示例值，需要通过网格搜索优化
    'profit_factor': 2.8,  # 示例值
    # 'range_factor': 0.7,  # 示例值，需要通过网格搜索优化
    # 'profit_factor': 71,  # 示例值
    # 'range_factor_l': 2,  # 示例值，需要通过网格搜索优化
    # 'profit_factor_l': 3,  # 示例值
    # 'range_factor_s': 1.6,  # 示例值，需要通过网格搜索优化
    # 'profit_factor_s': 5.6,  # 示例值
    'max_position': 10,
    'enable_log': True,
    'stop_loss_points': 20,
    'use_indicator': True
}

api = TqApi(TqKq(), auth=TqAuth("emanresu", "dfgvfgdfgg"))
# --- 1. 初始化回测引擎并运行 ---
print("\n初始化 Tqsdk 回测引擎...")
engine = TqsdkEngine(
    strategy_class=SimpleLimitBuyStrategyLong,
    strategy_params=strategy_parameters,
    api=api,
    symbol=main_symbol,
    duration_seconds=60 * 60,
    roll_over_mode=True,  # 启用换月模式检测
    history_length=50,
    close_bar_delta=timedelta(minutes=58)
)
engine.run()  # 这是一个同步方法，内部会运行 asyncio 循环
