#!/usr/bin/env python3
"""
Test du calcul ATR - Comparer les deux méthodes
"""
import pandas as pd
import numpy as np
import requests

# Récupérer les données réelles
resp = requests.get('https://api.binance.com/api/v3/klines', params={
    'symbol': 'BTCUSDT',
    'interval': '1m',
    'limit': 200
})

data = resp.json()
df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume',
                                  'close_time', 'quote_volume', 'trades', 'taker_buy_base',
                                  'taker_buy_quote', 'ignore'])

for col in ['open', 'high', 'low', 'close']:
    df[col] = df[col].astype(float)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

print("="*80)
print("COMPARAISON CALCULS ATR")
print("="*80)
print(f"Prix actuel: ${df['close'].iloc[-1]:,.2f}")
print()

# MÉTHODE 1: V10 Strategy (BONNE)
def calculate_atr_v10(high, low, close, period=14):
    """Méthode V10 - celle de la stratégie"""
    tr1 = high - low
    tr2 = abs(high - close.shift())
    tr3 = abs(low - close.shift())
    tr = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1)
    atr = tr.rolling(window=period).mean()
    return atr

atr_v10 = calculate_atr_v10(df['high'], df['low'], df['close'], period=14)
avg_atr_v10 = atr_v10.iloc[-20:].mean()  # Moyenne des 20 dernières comme dans V10
atr_pct_v10 = (avg_atr_v10 / df['close'].iloc[-1]) * 100

print("MÉTHODE 1: V10 Strategy (utilisée par is_range_market)")
print(f"  ATR: ${avg_atr_v10:.2f}")
print(f"  ATR %: {atr_pct_v10:.3f}%")
print()

# MÉTHODE 2: Dynamic Adapter (celle qu'on a ajoutée)
def calculate_atr_adapter(df, period=14):
    """Méthode Dynamic Adapter"""
    high = df['high'].values
    low = df['low'].values
    close = df['close'].values

    tr1 = high - low
    tr2 = np.abs(high - np.roll(close, 1))
    tr3 = np.abs(low - np.roll(close, 1))

    tr = np.maximum(tr1, np.maximum(tr2, tr3))
    atr = pd.Series(tr).rolling(period).mean().iloc[-1]

    current_price = close[-1]
    atr_pct = (atr / current_price) * 100

    return atr_pct

atr_pct_adapter = calculate_atr_adapter(df)

print("MÉTHODE 2: Dynamic Adapter (celle ajoutée hier)")
print(f"  ATR %: {atr_pct_adapter:.3f}%")
print()

# MÉTHODE 3: Correcte avec moyenne des 20 dernières
atr_adapter_series = calculate_atr_v10(df['high'], df['low'], df['close'], period=14)
atr_adapter_last = atr_adapter_series.iloc[-1]
atr_pct_adapter_last = (atr_adapter_last / df['close'].iloc[-1]) * 100

print("MÉTHODE 3: Dernière valeur ATR seule (sans moyenne)")
print(f"  ATR %: {atr_pct_adapter_last:.3f}%")
print()

print("="*80)
print("DIAGNOSTIC")
print("="*80)

if abs(atr_pct_v10 - atr_pct_adapter) > 0.1:
    print("❌ PROBLÈME DÉTECTÉ!")
    print(f"   Différence: {abs(atr_pct_v10 - atr_pct_adapter):.3f}%")
    print()
    print("CAUSE:")
    if atr_pct_adapter < atr_pct_v10:
        print("   🔴 Dynamic Adapter SOUS-ESTIME l'ATR")
        print("   → Le bot pense que la volatilité est plus basse qu'elle n'est")
        print("   → Ça explique pourquoi on n'entre pas en position!")
    else:
        print("   🔴 Dynamic Adapter SUR-ESTIME l'ATR")
else:
    print("✅ Les calculs correspondent")

print()
print("SEUIL STRATÉGIE V10:")
print(f"  ATR doit être < 0.32% pour trader")
print(f"  ATR réel (V10): {atr_pct_v10:.3f}% → {'✅ OK' if atr_pct_v10 < 0.32 else '❌ Trop haut'}")
print(f"  ATR vu par bot (Adapter): {atr_pct_adapter:.3f}% → {'✅ OK' if atr_pct_adapter < 0.32 else '❌ Trop haut'}")
