#!/usr/bin/env python3
"""
在Docker容器内直接执行关羽的策略回测
不经过HTTP API，直接在容器内运行
"""

# ============================================
# 导入完整RPC服务代码（复用run_strategy_backtest函数）
# ============================================
import types
import sys

# 复制完整的RPC服务代码
with open("/Users/chufeng/.openclaw/workspace-jiangwei/final_rpc_correct.py", 'r', encoding='utf-8') as f:
    rpc_code = f.read()

# 执行RPC服务代码，但不启动服务
exec(rpc_code, globals())

# 不会自动启动RPC服务，因为我们已经定义了run_strategy_backtest
print("=" * 80)
print("🚀 RPC服务代码加载完成，准备执行回测")
print("=" * 80)

# ============================================
# 读取关羽的策略代码
# ============================================
risk_control_file = "/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/strategies/factors-dynamic-weight-timing-20260327/risk_control.py"
strategy_file = "/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/strategies/factors-dynamic-weight-timing-20260327/main_strategy_single_file.py"

with open(risk_control_file, 'r', encoding='utf-8') as f:
    risk_control_code = f.read()

with open(strategy_file, 'r', encoding='utf-8') as f:
    strategy_code = f.read()

# 合并代码
full_strategy_code = f"{risk_control_code}\n\n# ========== 主策略 ==========\n\n{strategy_code}"

print(f"✅ 风控代码: {len(risk_control_code)} 字符")
print(f"✅ 主策略代码: {len(strategy_code)} 字符")

# ============================================
# 执行回测
# ============================================
print("\n" + "=" * 80)
print("开始执行回测...")
print("=" * 80)

result = run_strategy_backtest(
    strategy_code=full_strategy_code,
    symbol="510300.SSE",
    interval="1d",
    start=1609459200,  # 2021-01-01
    end=1772515200,    # 2026-03-01
    capital=1000000,
    rate=3e-5,
    slippage=0.002,
    size=10000,
    pricetick=0.001,
    data_source="sqlite"
)

# ============================================
# 打印结果
# ============================================
print("\n" + "=" * 80)
print("回测结果:")
print("=" * 80)

if "error" in result:
    print(f"❌ 回测失败: {result.get('error')}")
    if "traceback" in result:
        print("\n错误堆栈:")
        print(result["traceback"])
    sys.exit(1)

if "statistics" in result:
    stats = result["statistics"]
    
    print(f"\n📊 绩效指标:")
    print(f"   总收益率: {stats.get('total_return', 0):.2%}")
    print(f"   年化收益率: {stats.get('annual_return', 0):.2%}")
    print(f"   最大回撤: {stats.get('max_drawdown', 0):.2%}")
    print(f"   夏普比率: {stats.get('sharpe_ratio', 0):.2f}")
    print(f"   总交易次数: {stats.get('total_trades', 0)}")
    print(f"   胜率: {stats.get('win_rate', 0):.2%}")
    print(f"   盈亏比: {stats.get('profit_loss_ratio', 0):.2f}")

if "trades" in result:
    trades = result["trades"]
    print(f"\n📝 交易记录: 共 {len(trades)} 笔")
    
    for idx, trade in enumerate(trades[:10], 1):
        print(f"   {idx}. {trade.get('datetime')} {trade.get('direction')} {trade.get('symbol')} @ {trade.get('price')} × {trade.get('volume')}")
    
    if len(trades) > 10:
        print(f"   ... 还有 {len(trades) - 10} 笔")

print("\n" + "=" * 80)
print("✅ 回测执行完成！")
print("=" * 80)
