
    i%E                        d Z ddlZddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlZ ej                  e      Z G d d      ZdadefdZd0d	ee   d
edee   fdZedk(  r ej*                  ej,                         ddddddddddddZ e       Zej3                  de      Z edd         eded            ed         eded    d ed!    d"ed#    d$        ed%ed&    d'ed(            ed)       ed*   j9                         D ]  \  ZZ ed+e d,e d-         ed.       ed/   D ]  Z ed+e         yy)1u  
═══════════════════════════════════════════════════════════════════════════════
🧠 AI COMPATIBILITY SCORER - Pré-analyse des valeurs pour l'IA
═══════════════════════════════════════════════════════════════════════════════

Ce module analyse chaque crypto et calcule un score de compatibilité avec les
stratégies IA du bot. Les valeurs sont ensuite triées par ordre d'efficacité.

Critères d'analyse:
1. VOLATILITÉ - La crypto bouge-t-elle suffisamment pour générer des profits ?
2. PATTERNS EMA - Les croisements EMA sont-ils clairs et exploitables ?
3. RÉACTIVITÉ MOMENTUM - La crypto réagit-elle bien aux changements de momentum ?
4. BOLLINGER QUALITY - Les bandes BB sont-elles exploitables ?
5. VOLUME/LIQUIDITÉ - Suffisant pour exécuter les ordres ?
6. TENDANCE CLAIRE - Éviter les sideways permanents

Auteur: Trading IA Bot
Date: Décembre 2024
═══════════════════════════════════════════════════════════════════════════════
    N)datetime	timedelta)DictListTupleOptionalc            
           e Zd ZdZd Z	 ddededee   defdZd	ee   dee   fd
Z		 	 dd	ee   dede
dee   fdZdefdZdefdZy)AICompatibilityScoreruS   
    Analyse et classe les cryptos par compatibilité avec les stratégies IA.
    c                     i | _         t        d      | _        d | _        g | _        dddddd| _        ddd	d
dddd| _        y )N   )hours         )
volatilityema_qualitymomentum_reactivity
bb_qualitytrend_clarity      ?g      @      ?333333?g?P   )bb_bandwidth_minbb_bandwidth_maxbb_bandwidth_idealema_diff_rangemomentum_range_minrsi_range_minrsi_range_max)compatibility_cacher   cache_durationlast_updateranked_symbolsweightsoptimal_rangesselfs    ./ai_compatibility_scorer.py__init__zAICompatibilityScorer.__init__$   sb    #% 'a0  #%
 !$ #"%!"%
    Nsymbolfeatureshistorical_featuresreturnc           
      ,   i }g }|j                  dd      }|| j                  d   k  rd|d<   |j                  d|dd       n|| j                  d	   kD  rd
|d<   |j                  d|dd       nU| j                  d   }t        ||z
        |z  }t	        dd|dz  z
  z        |d<   |d   dk\  r|j                  d|dd       |j                  dd      }	|j                  dd      }
|j                  dd      }|j                  dd      }t        |	      t        |
      d
z  z   }|dk  rd|d<   |j                  d       nm|dkD  rd|d<   |j                  d       nQt        dt	        |dz              }|
dkD  r|dkD  s
|
dk  r%|dk  r t        d|dz         }|j                  d       ||d<   |j                  dd      }|j                  d d      }t        |      t        |      z   }|d!k  rd|d"<   |j                  d#       nU|d$kD  rd%|d"<   |j                  d&|d'd       n4t        dt	        |dz              |d"<   |d"   dk\  r|j                  d(       |j                  d)d      }|d!k  s|d*kD  rd+|d,<   |j                  d-|dd.       n*d/|cxk  rd0k  rn nd|d,<   |j                  d1       nd%|d,<   |j                  d2d      }|j                  d3d      }|j                  d4d      }d5|cxk  rd6k  rn nd
}nd|cxk  rd7k  rn nd8}nd}|dk(  r|dk(  rd
}|j                  d9       n1|dk(  r|dk(  rd
}|j                  d:       nd}|j                  d;       ||z   |d<<   t        |j                               }t        | j                  j                               }|d7k\  rd=}d>}n"|d?k\  rd@}dA}n|dk\  rdB}dC}n|dDk\  rdE}dF}ndG}dH}|||t        ||z  dIz  d      ||||t        j                         j                         dJ	S )Kui  
        Calcule le score de compatibilité IA pour une crypto.
        
        Args:
            symbol: Symbole de la crypto (ex: BTCUSDT)
            features: Features actuelles de la crypto
            historical_features: Historique des features (optionnel)
            
        Returns:
            Dict avec score total et détail par critère
        bb_bandwidthg      ?r      r   u   ⚠️ Faible volatilité (z.2f%)r   
   u   ⚠️ Très volatile (r   r   r   r   r   u   ✅ Volatilité optimale (ema_diffr   	ema_slopeema_slope_longema21_slopeg?r   u   ❌ EMA trop plate (sideways)g       @u   ⚠️ EMA très volatiler   2   u   ✅ Tendance EMA cohérente
momentum_3
momentum_5g?r   u   ❌ Momentum platg      @   u   ⚠️ Momentum excessif (z.1fu   ✅ Bonne réactivité momentumbb_positiong?   r   u   ⚠️ Prix aux extrêmes BB ()r   gffffff?u   ✅ Position BB idéalersiema_trend_bullishema_trend_bearish   F   r      u   📈 Tendance haussière claireu   📉 Tendance baissière claireu   ⚠️ Tendance confuser   A	EXCELLENTA   BBONCMOYEN#   DFAIBLEFINCOMPATIBLEd   )	r,   total_score	max_score
percentagegradecompatibilityscoresreasons	timestamp)getr&   appendabsintminsumvaluesr%   roundr   now	isoformat)r(   r,   r-   r.   rX   rY   r1   idealdistancer5   r6   r7   r8   ema_movement	ema_scorer:   r;   momentum_activityr=   r@   rA   rB   	rsi_scoretrend_scorerS   rT   rV   rW   s                               r)   calculate_compatibility_scorez3AICompatibilityScorer.calculate_compatibility_score>   s    
  ||NC8$--.@AA#$F< NN8c8J"MND//0BCC#%F< NN4\#4FbIJ ''(<=E<%/058H#&rQC-?'@#AF< l#r)!;L;MRPQ
 <<
A.LLa0	!&6:ll=!4 8}s9~'::$$%F=!NN:;C$&F=!NN68 BL2$5 67I A+/y1}WXIM2	<=$-F=!
 \\,2
\\,2

Oc*o=s",-F()NN./$,.F()NN78I#7NbQR,/C8IB8N4O,PF()+,2!@B
 ll=#6 c 1#$F< NN;K;LANOK&3&#%F< NN45#%F< 
 ll5"%$LL)<a@$LL)<a@ ??I3_"_II !&71&<KNN<=!#(9Q(>KNN<=KNN45"+k"9
 &--/*++-.	 "E'MBE!MBE#MBE$ME*M &"i 7# =qA*!113

 
	
r+   	watchlistc                    g }|D ]|  }|j                  dd      }|j                  di       }|s*	 | j                  ||      }||d<   |j                  dd      |d<   |j                  dd      |d<   |j                  |       ~ |j                  d d       || _        t        j                         | _
        t        j                  dt        |       d       |S # t        $ r&}t        j                  d	| d
|        Y d}~d}~ww xY w)u  
        Analyse toutes les cryptos et retourne la liste triée par compatibilité.
        
        Args:
            watchlist: Liste des items avec features
            
        Returns:
            Liste triée par score de compatibilité (meilleurs en premier)
        r,    r-   original_itemsmart_signalHOLDsmart_scorer   u   Erreur analyse compatibilité : Nc                     | d   S )NrS    )xs    r)   <lambda>z;AICompatibilityScorer.analyze_all_symbols.<locals>.<lambda>  s    1]#3 r+   T)keyreverseu   ✅ Analyse compatibilité IA: u    symboles classés)r[   rl   r\   	Exceptionloggerwarningsortr$   r   rc   r#   infolen)r(   rm   resultsitemr,   r-   score_resultes           r)   analyze_all_symbolsz)AICompatibilityScorer.analyze_all_symbols   s     	DXXh+Fxx
B/H#AA&(S 15_-/3xx/O^,.2hh}a.H]+|,	, 	3TB &#<<>5c'l^CUVW  !?xr!MNs   AC	D%DD	min_gradelimitc                    | j                   r| j                         r| j                  |       dddddd}|j                  |d      }| j                   D cg c]  }|j                  |d   d      |k\  r| }}|d	| S c c}w )
uB  
        Retourne les symboles prioritaires pour le traitement IA.
        
        Args:
            watchlist: Liste complète
            min_grade: Grade minimum (A, B, C, D, F)
            limit: Nombre max de symboles
            
        Returns:
            Liste des symboles prioritaires avec leur score
        r2            r   rF   rI   rK   rN   rP   rV   r   N)r$   _cache_expiredr   r[   )r(   rm   r   r   grade_ordermin_grade_valuerprioritys           r)   get_priority_symbolsz*AICompatibilityScorer.get_priority_symbols  s     ""d&9&9&;$$Y/ AAAA>%//)Q7 **
qz1-@ 
 

 
s   !A>c                 x    | j                   syt        j                         | j                   z
  | j                  kD  S )u   Vérifie si le cache a expiré.T)r#   r   rc   r"   r'   s    r)   r   z$AICompatibilityScorer._cache_expired*  s0    ||~ 0 0043F3FFFr+   c                 D   | j                   sddiS dddddd}| j                   D ]   }|j                  |d   d      dz   ||d   <   " t        d | j                   D              t        | j                         z  }t        | j                         t	        |d      || j                   dd	 D cg c]  }|d
   |d   |d   d c}| j                   dd D cg c]  }|d
   |d   |d   d c}| j
                  r| j
                  j                         dS ddS c c}w c c}w )u2   Retourne un résumé de la compatibilité globale.errorzAucune analyse disponibler   r   rV   r   c              3   &   K   | ]	  }|d      yw)rS   Nrv   ).0r   s     r)   	<genexpr>zBAICompatibilityScorer.get_compatibility_summary.<locals>.<genexpr>9  s     FQ-(Fs   Nr2   r,   rS   )r,   scorerV   )total_analyzedaverage_scoregradestop_5bottom_5r#   )r$   r[   r`   r   rb   r#   rd   )r(   r   r   	avg_scores       r)   get_compatibility_summaryz/AICompatibilityScorer.get_compatibility_summary0  sW   ""899qqqq9$$ 	?A!'AgJ!:Q!>F1W:	? F$2E2EFFTM`M`Iaa	 "$"5"56"9a0 ,,Ra0 X;=1AAgJW ,,RS1 X;=1AAgJW <@;K;K4++557
 	
 RV
 	
s   +D
D)N)rK   rC   )__name__
__module____qualname____doc__r*   strr   r   rl   r   r^   r   boolr   r   rv   r+   r)   r
   r
      s    
6 JNa
C a
4 a
<@Ja
RVa
F*T$Z *DJ *Z /2*, d4j  (+ $' 15d :G G
4 
r+   r
   r/   c                  .    t         
t               a t         S )z&Retourne l'instance globale du scorer.)_compatibility_scorerr
   rv   r+   r)   get_compatibility_scorerr   N  s     $ 5 7  r+   rm   r   c                     t               }|j                  |       }g }|D ]@  }|d   j                         }|d   |d   |d   |d   |d   d|d<   |j                  |       B |S )	u  
    Fonction utilitaire pour trier une watchlist par compatibilité IA.
    
    Args:
        watchlist: Liste des items avec features
        min_grade: Grade minimum requis
        
    Returns:
        Watchlist triée avec scores de compatibilité ajoutés
    rp   rS   rU   rV   rW   rY   )r   rU   rV   rW   rY   ai_compatibility)r   r   copyr\   )rm   r   scorerrankedresultr   r   s          r)   prioritize_watchlistr   V  s     &'F''	2F F 	!&&(}%L/wZ/|$
  	d	 Mr+   __main__)levelr   g333333ÿgg333333ӿgɿr   r   g?rM   r   )r1   r5   r6   r7   r8   r:   r;   r=   r@   rA   rB   BTCUSDT
z<============================================================u    🧠 Analyse Compatibilité IA: r,   zScore: rS   /rT   z (rU   r3   zGrade: rV   z - rW   u	   
Détail:rX   z  rt   z ptsz	
Raisons:rY   )rK   ) r   jsonloggingosr   r   typingr   r   r   r   numpynp	getLoggerr   r|   r
   r   r   r   r   basicConfigINFOtest_featuresr   rl   r   printitemscriteriar   reasonrv   r+   r)   <module>r      s  *   	 ( . . 			8	$i
 i
Z	  !"7 !DJ 3 d < zGgll+ M #$F11)]KF	Bvh-	,VH-=,>
?@	VH	GF=)*!F;,?+@6,CWBXXZ
[\	GF7O$C(?'@
AB	J!(+113 ,%8*BugT*+,	J# 6(m= r+   