#!/usr/bin/env python3
"""
Analyse détaillée des résultats d'optimisation BULL/BEAR
"""

import json
from datetime import datetime
from pathlib import Path
from collections import Counter

def analyze_results(results_file: str = 'bull_bear_results.json'):
    """Analyse complète des résultats d'optimisation"""

    if not Path(results_file).exists():
        print(f"❌ Fichier {results_file} introuvable")
        return

    with open(results_file, 'r') as f:
        results = json.load(f)

    if not results:
        print("❌ Aucun résultat")
        return

    print("=" * 80)
    print("📊 ANALYSE OPTIMISATION BULL/BEAR")
    print("=" * 80)
    print()

    # Stats globales
    profitable = [r for r in results if r['pnl_pct'] > 0 and r['profit_factor'] > 1.0]
    print(f"Tests totaux: {len(results)}")
    print(f"Profitables: {len(profitable)} ({len(profitable)/len(results)*100:.1f}%)")
    print()

    if not profitable:
        print("❌ Aucune config profitable")
        return

    # Filtrer les configs avec au moins 3 trades pour avoir des stats significatives
    profitable_3trades = [r for r in profitable if r['trades'] >= 3]

    print(f"Configs avec ≥3 trades: {len(profitable_3trades)}")
    print()

    # TOP 10 par PnL
    print("=" * 80)
    print("🏆 TOP 10 PAR PnL")
    print("=" * 80)
    profitable.sort(key=lambda x: x['pnl_pct'], reverse=True)
    for i, r in enumerate(profitable[:10], 1):
        print(f"\n{i}. PnL: {r['pnl_pct']:+.2f}% | PF: {r['profit_factor']:.2f} | "
              f"Trades: {r['trades']} | WR: {r['win_rate']:.0f}% | "
              f"MaxDD: {r['max_dd']:.1f}%")
        print(f"   Répartition: {r['trades_by_strategy']}")

        # Afficher config
        cfg = r['config']
        print(f"   BULL: trend={cfg['bull.min_trend_strength']} "
              f"sl={cfg['bull.sl_atr_multiplier']:.2f} "
              f"tp={cfg['bull.tp_atr_multiplier']:.2f} "
              f"trail={int(cfg['bull.trailing_pct']*100)}% "
              f"lev={cfg['bull.leverage']}x")
        print(f"   BEAR: trend={cfg['bear.min_trend_strength']} "
              f"sl={cfg['bear.sl_atr_multiplier']:.2f} "
              f"tp={cfg['bear.tp_atr_multiplier']:.2f} "
              f"trail={int(cfg['bear.trailing_pct']*100)}% "
              f"lev={cfg['bear.leverage']}x")

    # TOP 10 avec au moins 3 trades
    if profitable_3trades:
        print()
        print("=" * 80)
        print("⭐ TOP 10 AVEC ≥3 TRADES (plus fiables)")
        print("=" * 80)
        profitable_3trades.sort(key=lambda x: x['pnl_pct'], reverse=True)
        for i, r in enumerate(profitable_3trades[:10], 1):
            print(f"\n{i}. PnL: {r['pnl_pct']:+.2f}% | PF: {r['profit_factor']:.2f} | "
                  f"Trades: {r['trades']} | WR: {r['win_rate']:.0f}% | "
                  f"MaxDD: {r['max_dd']:.1f}%")
            print(f"   Répartition: {r['trades_by_strategy']}")

            cfg = r['config']
            print(f"   BULL: trend={cfg['bull.min_trend_strength']} "
                  f"sl={cfg['bull.sl_atr_multiplier']:.2f} "
                  f"tp={cfg['bull.tp_atr_multiplier']:.2f} "
                  f"trail={int(cfg['bull.trailing_pct']*100)}% "
                  f"lev={cfg['bull.leverage']}x")
            print(f"   BEAR: trend={cfg['bear.min_trend_strength']} "
                  f"sl={cfg['bear.sl_atr_multiplier']:.2f} "
                  f"tp={cfg['bear.tp_atr_multiplier']:.2f} "
                  f"trail={int(cfg['bear.trailing_pct']*100)}% "
                  f"lev={cfg['bear.leverage']}x")

    # TOP 5 par Profit Factor (non-infini)
    print()
    print("=" * 80)
    print("💎 TOP 5 PAR PROFIT FACTOR (PF < inf)")
    print("=" * 80)
    profitable_finite_pf = [r for r in profitable if r['profit_factor'] != float('inf')]
    if profitable_finite_pf:
        profitable_finite_pf.sort(key=lambda x: x['profit_factor'], reverse=True)
        for i, r in enumerate(profitable_finite_pf[:5], 1):
            print(f"\n{i}. PnL: {r['pnl_pct']:+.2f}% | PF: {r['profit_factor']:.2f} | "
                  f"Trades: {r['trades']} | WR: {r['win_rate']:.0f}% | "
                  f"MaxDD: {r['max_dd']:.1f}%")
            print(f"   {r['trades_by_strategy']}")

    # Statistiques sur répartition des stratégies
    print()
    print("=" * 80)
    print("📈 STATISTIQUES PAR STRATÉGIE")
    print("=" * 80)

    all_strategies = []
    for r in profitable:
        all_strategies.extend(r['trades_by_strategy'].keys())

    strategy_counts = Counter(all_strategies)
    print("\nNombre de configs utilisant chaque stratégie:")
    for strat, count in strategy_counts.most_common():
        pct = count / len(profitable) * 100
        print(f"  {strat}: {count} configs ({pct:.1f}%)")

    # Moyennes par stratégie
    print("\nMoyennes par stratégie:")
    for strat in ['BULL', 'BEAR', 'RANGE']:
        strat_results = [r for r in profitable if strat in r['trades_by_strategy']]
        if strat_results:
            avg_pnl = sum(r['pnl_pct'] for r in strat_results) / len(strat_results)
            avg_pf = sum(r['profit_factor'] for r in strat_results if r['profit_factor'] != float('inf')) / len([r for r in strat_results if r['profit_factor'] != float('inf')])
            print(f"  {strat}: Avg PnL {avg_pnl:+.2f}% | Avg PF {avg_pf:.2f} | {len(strat_results)} configs")

    # Recommandation finale
    print()
    print("=" * 80)
    print("✅ RECOMMANDATION")
    print("=" * 80)

    # Prendre la meilleure config avec au moins 3 trades
    if profitable_3trades:
        best = profitable_3trades[0]
    else:
        best = profitable[0]

    print(f"\nMeilleure configuration globale:")
    print(f"  PnL: {best['pnl_pct']:+.2f}%")
    print(f"  Profit Factor: {best['profit_factor']:.2f}")
    print(f"  Trades: {best['trades']} {best['trades_by_strategy']}")
    print(f"  Win Rate: {best['win_rate']:.0f}%")
    print(f"  Max Drawdown: {best['max_dd']:.1f}%")
    print()

    cfg = best['config']
    print("Paramètres BULL:")
    print(f"  min_trend_strength: {cfg['bull.min_trend_strength']}")
    print(f"  rsi_pullback_max: {cfg['bull.rsi_pullback_max']}")
    print(f"  rsi_breakout_min: {cfg['bull.rsi_breakout_min']}")
    print(f"  volume_spike_threshold: {cfg['bull.volume_spike_threshold']:.2f}")
    print(f"  sl_atr_multiplier: {cfg['bull.sl_atr_multiplier']:.2f}")
    print(f"  tp_atr_multiplier: {cfg['bull.tp_atr_multiplier']:.2f}")
    print(f"  trailing_pct: {cfg['bull.trailing_pct']:.2f}")
    print(f"  min_confidence: {cfg['bull.min_confidence']}")
    print(f"  leverage: {cfg['bull.leverage']}x")
    print()

    print("Paramètres BEAR:")
    print(f"  min_trend_strength: {cfg['bear.min_trend_strength']}")
    print(f"  rsi_rally_min: {cfg['bear.rsi_rally_min']}")
    print(f"  rsi_overbought: {cfg['bear.rsi_overbought']}")
    print(f"  volume_spike_threshold: {cfg['bear.volume_spike_threshold']:.2f}")
    print(f"  sl_atr_multiplier: {cfg['bear.sl_atr_multiplier']:.2f}")
    print(f"  tp_atr_multiplier: {cfg['bear.tp_atr_multiplier']:.2f}")
    print(f"  trailing_pct: {cfg['bear.trailing_pct']:.2f}")
    print(f"  min_confidence: {cfg['bear.min_confidence']}")
    print(f"  leverage: {cfg['bear.leverage']}x")
    print()

    print("V10 Range (FIXE):")
    print(f"  rsi_oversold: 35")
    print(f"  rsi_overbought: 78")
    print(f"  range_atr_threshold: 0.32")
    print(f"  min_confidence: 60")
    print(f"  sl_atr_multiplier: 1.64")
    print(f"  trailing_pct: 0.05")
    print(f"  leverage: 250x")
    print()

    print("=" * 80)


if __name__ == '__main__':
    analyze_results()
