#!/usr/bin/env python3
"""
Backtest optimisé V2 - Score ajusté à 0.65
"""

from martingale_backtester import MartingaleBacktester
from martingale_strategy import MartingaleStrategy

print("="*80)
print("🎯 BACKTEST OPTIMISÉ V2")
print("="*80)
print("\n📊 OPTIMISATIONS:")
print("   • Leverage réduit: 50x → 500x (vs 100x → 1000x)")
print("   • SL plus large: 0.5% (vs 0.3%)")
print("   • TP augmenté: 5:1 (vs 3:1)")
print("   • Score: 0.65 (vs 0.6) - AJUSTÉ!")
print("\n" + "="*80 + "\n")

backtester = MartingaleBacktester(
    initial_capital=1000.0,
    trading_fee_pct=0.0005,
    timeout_minutes=60
)

df = backtester.fetch_binance_data('BTCUSDT', '1m', 1000)

if df is not None:
    strategy = MartingaleStrategy(
        base_position_size=10.0,
        max_martingale_level=5,
        base_leverage=50,           # ✅ Réduit de 100
        max_leverage=500,           # ✅ Réduit de 1000
        stop_loss_pct=0.005,        # ✅ Augmenté de 0.003
        take_profit_ratio=5.0,      # ✅ Augmenté de 3.0
        min_signal_score=0.65       # ✅ Augmenté de 0.6 (mais pas trop!)
    )

    results = backtester.run_backtest(df, 'BTCUSDT', strategy)

    if results:
        backtester.save_results(results, 'martingale_results_optimized.json')

        # Comparaison
        import json
        with open('martingale_results.json', 'r') as f:
            old = json.load(f)

        print("\n" + "="*80)
        print("📊 COMPARAISON AVANT/APRÈS")
        print("="*80)
        print(f"\n{'MÉTRIQUE':<25} {'AVANT':>15} {'APRÈS':>15} {'AMÉLIORATION':>15}")
        print("-"*80)

        def compare(name, old_val, new_val, reverse=False):
            diff = new_val - old_val
            if reverse:
                diff = -diff
            emoji = "✅" if diff > 0 else "❌" if diff < 0 else "➡️"
            pct_change = (diff / abs(old_val) * 100) if old_val != 0 else 0
            print(f"{name:<25} {old_val:>15.2f} {new_val:>15.2f} {pct_change:>13.1f}% {emoji}")

        compare('ROI %', old['total_return_pct'], results.total_return_pct)
        compare('Win Rate %', old['win_rate']*100, results.win_rate*100)
        compare('Profit Factor', old['profit_factor'], results.profit_factor)
        compare('Max DD %', old['max_drawdown_pct'], results.max_drawdown_pct, reverse=True)
        compare('Avg Win %', old['avg_win_pct'], results.avg_win_pct)
        compare('Avg Loss %', old['avg_loss_pct'], results.avg_loss_pct, reverse=True)

        print(f"\n{'Total Trades':<25} {old['total_trades']:>15} {results.total_trades:>15}")

        print("\n" + "="*80)
        if results.total_return_pct > old['total_return_pct']:
            print("✅ OPTIMISATION RÉUSSIE!")
        else:
            print("⚠️  Résultats mitigés - Ajustements supplémentaires nécessaires")
        print("="*80)
