#!/usr/bin/env python3
"""
Test de la stratégie Degen Scalping avec données réelles
"""

from degen_scalping_strategy import DegenScalpingStrategy
from price_feed import BinancePriceFeed
import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(levelname)s:%(name)s:%(message)s'
)
logger = logging.getLogger(__name__)

logger.info("="*80)
logger.info("🎯 TEST DEGEN SCALPING - DONNÉES RÉELLES")
logger.info("="*80)

# Init
strategy = DegenScalpingStrategy()
feed = BinancePriceFeed()

# Récupérer données 1m (100 bougies = ~1h40)
logger.info("\n📊 Récupération données BTC 1m...")
df = feed.get_klines("BTCUSDT", "1m", 100)

if df is None:
    logger.error("❌ Impossible de récupérer les données")
    exit(1)

logger.info(f"   ✅ {len(df)} bougies récupérées")
logger.info(f"   Prix actuel: ${df['close'].iloc[-1]:,.2f}")

# Calculer volatilité actuelle
recent_volatility = (df['high'].tail(5).max() - df['low'].tail(5).min()) / df['close'].iloc[-1]
logger.info(f"   Volatilité (5 bougies): {recent_volatility*100:.2f}%")

# Analyser
logger.info("\n🔍 Analyse en cours...")
signal = strategy.analyze('BTCUSD_DEGEN', df)

if signal:
    logger.info(f"\n🎯 ✅ SIGNAL TROUVÉ!")
    logger.info(f"="*80)
    logger.info(f"   Direction: {signal.side}")
    logger.info(f"   Confiance: {signal.confidence:.1f}%")
    logger.info(f"   Entry: ${signal.entry_price:,.2f}")
    logger.info(f"   TP: ${signal.take_profit:,.2f} (+{abs(signal.take_profit - signal.entry_price)/signal.entry_price*100:.2f}%)")
    logger.info(f"   SL: ${signal.stop_loss:,.2f} (-{abs(signal.stop_loss - signal.entry_price)/signal.entry_price*100:.3f}%)")
    logger.info(f"   Leverage: {signal.leverage}x")
    logger.info(f"   Profit potentiel: +{abs(signal.take_profit - signal.entry_price)/signal.entry_price*signal.leverage*100:.1f}%")
    logger.info(f"   Perte max: -{abs(signal.stop_loss - signal.entry_price)/signal.entry_price*signal.leverage*100:.1f}%")
    logger.info(f"   Raison: {signal.reason}")
    logger.info(f"="*80)

    # Afficher indicateurs
    logger.info(f"\n📊 Indicateurs:")
    for key, value in signal.indicators.items():
        if key not in ['price', 'bb_upper', 'bb_lower']:
            logger.info(f"   {key}: {value:.2f}")
else:
    logger.info(f"\n⚠️  Aucun signal - Conditions non remplies")
    logger.info(f"   Raisons possibles:")
    logger.info(f"   - Volatilité trop élevée (>{strategy.max_volatility_5m*100:.1f}%)")
    logger.info(f"   - Pas de breakout clair")
    logger.info(f"   - Volume insuffisant")
    logger.info(f"   - Confiance < {strategy.min_confidence}%")

logger.info("\n" + "="*80)
logger.info("✅ Test terminé")
logger.info("="*80)
