"""
Analyse comparative BCH vs ANIM - Détection CREUX_REBOUND
"""
import json
from datetime import datetime

print("=" * 100)
print("ANALYSE BCH 14h30-14h55 vs ANIM 14h02-14h51")
print("=" * 100)

# === CAS BCH 14h30 ===
print("\n[BCH] Graphique 14h30-14h55:")
print("-" * 100)
print("14h30: Creux ~503.46€ (RSI probable: 25-30)")
print("14h55: Peak ~506.84€ → +0.67% depuis creux")
print("Durée: 25 minutes")
print("")

# Analyse actuelle (15h09 - 39 min après creux)
bch_data_15h09 = {
    'symbol': 'BCHUSDT',
    'timestamp': '15h09 (39 min après creux)',
    'opportunity_score': 46.4,
    'rank': 53,
    'selected': False,
    'scores': {
        'volatility': 85.4,  # Excellent
        'momentum': 2.3,     # CATASTROPHIQUE
        'pattern': 20.0,     # Aucun pattern
        'trend': 60.0,
        'entry_timing': 50.0,
        'risk_reward': 46.3
    },
    'predictions': {
        'volatility_6h': 4.66,
        'direction': 'DOWN'
    }
}

print("\n[BCH] Snapshot actuel (15h09 - 39 min APRÈS creux):")
print("-" * 100)
print(f"Opportunity score: {bch_data_15h09['opportunity_score']}")
print(f"Rank: {bch_data_15h09['rank']} → NON SÉLECTIONNÉ")
print("")
print("Scores détaillés:")
for key, value in bch_data_15h09['scores'].items():
    status = "✅" if value > 60 else ("⚠️" if value > 40 else "❌")
    print(f"  {status} {key:15s}: {value:.1f}")

print("\n⚠️ PROBLÈME: Momentum = 2.3 (catastrophique!)")
print("   → 39 minutes après creux, momentum probablement retourné négatif")
print("   → Pattern CREUX_REBOUND non détecté car momentum < 0.08%")

# === CAS ANIM 14h02 ===
print("\n" + "=" * 100)
print("[ANIM] Graphique 14h02-14h51:")
print("-" * 100)
print("14h02: Début montée après creux 13h51")
print("14h51: Peak → +3.0% depuis creux")
print("Durée: 49 minutes")
print("")

anim_data_15h03 = {
    'symbol': 'ANIMEUSDT',
    'timestamp': '15h03 (12 min après peak)',
    'opportunity_score': 53.5,
    'rank': 47,
    'selected': False,
    'scores': {
        'volatility': 83.5,
        'momentum': 50.7,    # Encore positif
        'pattern': 20.0,
        'trend': 60.0,
        'entry_timing': 30.0,
        'risk_reward': 46.4
    },
    'predictions': {
        'volatility_6h': 5.12,
        'direction': 'DOWN'
    }
}

print("\n[ANIM] Snapshot actuel (15h03 - 12 min APRÈS peak):")
print("-" * 100)
print(f"Opportunity score: {anim_data_15h03['opportunity_score']}")
print(f"Rank: {anim_data_15h03['rank']} → NON SÉLECTIONNÉ")
print("")
print("Scores détaillés:")
for key, value in anim_data_15h03['scores'].items():
    status = "✅" if value > 60 else ("⚠️" if value > 40 else "❌")
    print(f"  {status} {key:15s}: {value:.1f}")

print("\n⚠️ PROBLÈME SIMILAIRE: Momentum = 50.7 (moyen)")
print("   → 12 minutes après peak, momentum en baisse")
print("   → Mais encore >0 donc meilleur que BCH")

# === ANALYSE ROOT CAUSE ===
print("\n" + "=" * 100)
print("🔍 ANALYSE ROOT CAUSE - Pourquoi CREUX_REBOUND pas détecté?")
print("=" * 100)

print("\n1. TIMING DE L'ANALYSE")
print("-" * 100)
print("ai_opportunity_selector.py s'exécute toutes les 5 minutes")
print("")
print("BCH:")
print("  14h30: CREUX (RSI ~27, momentum probablement +0.15%)")
print("  14h35: Cycle IA #1 → momentum encore positif (+0.10%?)")
print("  14h40: Cycle IA #2 → momentum en baisse (+0.05%?)")
print("  14h45: Cycle IA #3 → momentum faible (+0.02%?)")
print("  14h50: Cycle IA #4 → momentum quasi-nul")
print("  14h55: Peak → trop tard")
print("  15h00: Cycle IA #5 → momentum négatif (-0.05%)")
print("  15h05: Cycle IA #6 → momentum négatif (-0.10%)")
print("  15h09: Snapshot JSON → momentum = 2.3 (négatif normalisé)")
print("")
print("⚠️ Le creux 14h30 était détectable uniquement dans les cycles 14h30-14h40")
print("   Après 14h40, momentum trop faible pour CREUX_REBOUND")

print("\n2. VÉRIFICATION CONDITIONS CREUX_REBOUND")
print("-" * 100)
print("Conditions requises (ai_opportunity_selector.py ligne 470):")
print("  is_creux_rebound = (")
print("      15 <= rsi <= 35 and          # ✅ BCH RSI ~27")
print("      momentum_3 > 0.0008 and      # ❌ BCH momentum 15h09 << 0.08%")
print("      volume_ratio > 0.20          # ? À vérifier")
print("  )")
print("")
print("BCH 15h09:")
print("  RSI: ~27 (graphique actuel) → ✅ VALIDÉ")
print("  Momentum: 2.3 normalisé = ~-0.10% → ❌ BLOQUÉ")
print("  Volume: Non vérifié")
print("")
print("Conclusion: CREUX_REBOUND non détecté car momentum négatif au moment snapshot")

print("\n3. FENÊTRE DE DÉTECTION")
print("-" * 100)
print("PROBLÈME: Cycle 5 minutes trop lent pour capter creux rapides!")
print("")
print("BCH mouvement:")
print("  14h30-14h40: +0.34% (10 min) → Momentum fort (+0.15-0.20%)")
print("  14h40-14h50: +0.20% (10 min) → Momentum moyen (+0.08-0.10%)")
print("  14h50-14h55: +0.13% (5 min)  → Momentum faible (+0.05%)")
print("  14h55-15h05: -0.50% (10 min) → Momentum négatif (-0.15%)")
print("")
print("Fenêtre détection CREUX_REBOUND: 14h30-14h45 (15 minutes seulement!)")
print("Cycles IA pendant fenêtre: 14h35, 14h40 (2 chances seulement)")
print("")
print("Si cycles IA ratés ou momentum juste en dessous 0.08%:")
print("  → CREUX_REBOUND jamais détecté")
print("  → Opportunité manquée")

# === SOLUTIONS ===
print("\n" + "=" * 100)
print("💡 SOLUTIONS POUR CAPTER BCH-LIKE PATTERNS")
print("=" * 100)

print("\n1. RÉDUIRE SEUIL MOMENTUM CREUX_REBOUND")
print("-" * 100)
print("ACTUEL: momentum_3 > 0.0008 (0.08%)")
print("PROPOSÉ: momentum_3 > 0.0005 (0.05%)")
print("")
print("Avantage:")
print("  ✅ Capter creux avec momentum faible mais positif")
print("  ✅ Fenêtre détection élargie: 14h30-14h50 (+10 min)")
print("  ✅ +2-3 cycles IA supplémentaires")
print("")
print("Risque:")
print("  ⚠️ Faux positifs si momentum trop faible (rebond pas confirmé)")
print("  ⚠️ Win rate potentiellement 60% → 55%")
print("")
print("Recommandation: TESTER 0.05% pendant 24-48h")

print("\n2. RÉDUIRE INTERVAL MISE À JOUR")
print("-" * 100)
print("ACTUEL: UPDATE_INTERVAL_MINUTES = 5")
print("PROPOSÉ: UPDATE_INTERVAL_MINUTES = 2-3")
print("")
print("Avantage:")
print("  ✅ Plus de cycles pendant fenêtre détection")
print("  ✅ 14h30-14h50: 6-10 cycles au lieu de 4")
print("  ✅ Meilleure réactivité temps réel")
print("")
print("Risque:")
print("  ⚠️ Charge GPU augmentée")
print("  ⚠️ Potentiellement faux signaux sur noise court-terme")
print("")
print("Recommandation: TESTER 3 minutes d'abord")

print("\n3. AJOUTER PATTERN CREUX_DELAYED (NOUVEAU)")
print("-" * 100)
print("Détecter creux APRÈS qu'il soit passé (RSI bas + momentum faible mais positif)")
print("")
print("Conditions:")
print("  is_creux_delayed = (")
print("      15 <= rsi <= 35 and          # RSI encore bas")
print("      0.0002 < momentum_3 < 0.0008 and  # Momentum faible mais positif")
print("      volume_ratio > 0.15 and      # Volume modéré")
print("      trend_short > 0              # Tendance courte positive")
print("  )")
print("  Bonus: +40 points (vs +60 pour CREUX_REBOUND)")
print("")
print("Avantage:")
print("  ✅ Capter creux 5-15 min après (BCH 14h45-14h55)")
print("  ✅ Gain partiel possible (50% du mouvement)")
print("  ✅ Meilleure couverture temporelle")
print("")
print("Recommandation: AJOUTER comme pattern secondaire")

print("\n4. VÉRIFIER CYCLES IA RÉELS")
print("-" * 100)
print("Vérifier si auto_updater_service exécute bien cycles toutes les 5 min")
print("")
print("Actions:")
print("  1. Vérifier logs auto_updater_service")
print("  2. Confirmer dernières exécutions: 14h35, 14h40, 14h45, 14h50, etc.")
print("  3. Si cycles manquants → redémarrer service")
print("  4. Si cycles OK mais momentum trop faible → réduire seuil 0.08% → 0.05%")

# === RECOMMANDATIONS PRIORITAIRES ===
print("\n" + "=" * 100)
print("✅ RECOMMANDATIONS PRIORITAIRES")
print("=" * 100)

print("\n1. 🔴 URGENT: Réduire seuil momentum CREUX_REBOUND")
print("   Modifier ai_opportunity_selector.py ligne 470:")
print("   momentum_3 > 0.0008  →  momentum_3 > 0.0005")
print("")
print("2. 🟠 IMPORTANT: Réduire interval update 5min → 3min")
print("   Modifier ai_opportunity_selector.py ligne 63:")
print("   UPDATE_INTERVAL_MINUTES = 5  →  UPDATE_INTERVAL_MINUTES = 3")
print("")
print("3. 🟡 OPTIONNEL: Ajouter pattern CREUX_DELAYED")
print("   Pour capter creux tardifs (momentum 0.02-0.08%)")
print("")
print("4. ⚠️ VÉRIFIER: Logs auto_updater pour confirmer cycles")
print("   Vérifier si cycles 14h35, 14h40, 14h45 exécutés")

print("\n" + "=" * 100)
print("📊 COMPARAISON FINALE BCH vs ANIM")
print("=" * 100)

comparison = [
    ["Métrique", "BCH 14h30", "ANIM 14h02", "Différence"],
    ["-" * 20] * 4,
    ["Creux → Peak", "+0.67%", "+3.0%", "ANIM x4.5"],
    ["Durée mouvement", "25 min", "49 min", "ANIM x2"],
    ["Momentum snapshot", "2.3 (négatif)", "50.7 (moyen)", "ANIM x22"],
    ["Pattern score", "20", "20", "Identique"],
    ["Opportunity score", "46.4", "53.5", "ANIM +7.1"],
    ["Rank", "53", "47", "ANIM mieux"],
    ["Fenêtre détection", "15 min", "30 min", "ANIM x2"],
    ["Détectable avec fix?", "OUI (si mom 0.05%)", "OUI", "Les 2 OK"],
]

for row in comparison:
    print(f"{row[0]:25s} {row[1]:20s} {row[2]:20s} {row[3]:20s}")

print("\n" + "=" * 100)
print("CONCLUSION:")
print("  - ANIM: Plus facile à détecter (mouvement long, momentum maintenu)")
print("  - BCH: Plus difficile (mouvement court, momentum chute vite)")
print("  - FIX: Réduire seuil momentum 0.08% → 0.05% captera les 2 cas")
print("  - BONUS: Réduire interval 5min → 3min améliore réactivité")
print("=" * 100)
