#!/usr/bin/env python3
"""
Lance le backtest avec la configuration optimisée
"""

import sys
from martingale_backtester import MartingaleBacktester
from martingale_strategy import MartingaleStrategy
import config_optimized as cfg

print("="*80)
print("🎯 BACKTEST AVEC CONFIGURATION OPTIMISÉE")
print("="*80)
print("\n📊 PARAMÈTRES OPTIMISÉS:")
print(f"   Base Leverage:    {cfg.BASE_LEVERAGE}x (était 100x)")
print(f"   Max Leverage:     {cfg.MAX_LEVERAGE}x (était 1000x)")
print(f"   Stop-Loss:        {cfg.STOP_LOSS_PCT*100:.2f}% (était 0.30%)")
print(f"   TP Ratio:         {cfg.TAKE_PROFIT_RATIO}:1 (était 3:1)")
print(f"   Min Score:        {cfg.MIN_SIGNAL_SCORE*100:.0f}% (était 60%)")
print(f"   Timeout:          {cfg.TIMEOUT_MINUTES}min (gardé)")
print("\n" + "="*80 + "\n")

# Créer backtester
backtester = MartingaleBacktester(
    initial_capital=cfg.INITIAL_CAPITAL,
    trading_fee_pct=cfg.TRADING_FEE_PCT,
    timeout_minutes=cfg.TIMEOUT_MINUTES
)

# Télécharger données
print("📥 Téléchargement des données...")
df = backtester.fetch_binance_data(
    symbol=cfg.SYMBOL,
    interval=cfg.BACKTEST_INTERVAL,
    limit=cfg.BACKTEST_LIMIT
)

if df is not None:
    # Créer stratégie OPTIMISÉE
    strategy = MartingaleStrategy(
        base_position_size=cfg.BASE_POSITION_SIZE,
        max_martingale_level=cfg.MAX_MARTINGALE_LEVEL,
        base_leverage=cfg.BASE_LEVERAGE,
        max_leverage=cfg.MAX_LEVERAGE,
        stop_loss_pct=cfg.STOP_LOSS_PCT,
        take_profit_ratio=cfg.TAKE_PROFIT_RATIO,
        min_signal_score=cfg.MIN_SIGNAL_SCORE
    )

    # Backtest
    results = backtester.run_backtest(df, cfg.SYMBOL, strategy)

    if results:
        # Sauvegarder résultats optimisés
        backtester.save_results(results, 'martingale_results_optimized.json')

        print("\n" + "="*80)
        print("📊 COMPARAISON AVANT/APRÈS")
        print("="*80)

        # Charger anciens résultats
        import json
        try:
            with open('martingale_results.json', 'r') as f:
                old_results = json.load(f)

            print(f"\n{'MÉTRIQUE':<25} {'AVANT':>15} {'APRÈS':>15} {'DIFF':>15}")
            print("-"*80)

            metrics = [
                ('ROI %', old_results['total_return_pct'], results.total_return_pct),
                ('Win Rate %', old_results['win_rate']*100, results.win_rate*100),
                ('Profit Factor', old_results['profit_factor'], results.profit_factor),
                ('Max Drawdown %', old_results['max_drawdown_pct'], results.max_drawdown_pct),
                ('Avg Win %', old_results['avg_win_pct'], results.avg_win_pct),
                ('Avg Loss %', old_results['avg_loss_pct'], results.avg_loss_pct),
                ('Total Trades', old_results['total_trades'], results.total_trades),
            ]

            for name, before, after in metrics:
                diff = after - before
                diff_str = f"{diff:+.2f}"
                emoji = "✅" if diff > 0 else "❌" if diff < 0 else "➡️"
                print(f"{name:<25} {before:>15.2f} {after:>15.2f} {diff_str:>14} {emoji}")

        except FileNotFoundError:
            print("⚠️  Pas d'anciens résultats pour comparer")

        print("\n" + "="*80)
        print("✅ Résultats sauvegardés dans: martingale_results_optimized.json")
        print("="*80)

else:
    print("❌ Erreur de téléchargement des données")
    sys.exit(1)
