
    id                     r    d Z ddlZddlmZ ddlmZ ddlZ ej                  d      Z G d d      Zda	d Z
y)u|  
Module d'ajustement automatique des scores IA basé sur les performances
=======================================================================

Ce module est appelé par ai_predictor.py pour ajuster les scores selon 
les performances récentes. Les cryptos avec mauvaises perfs ont des scores
réduits, mais peuvent être réintégrées automatiquement si elles s'améliorent.
    N)Path)datetimeAIScoreAdjusterc                   @    e Zd ZdZd Zd ZdedefdZdededefdZ	y	)
r   u5   Ajuste les scores IA selon les performances récentesc                 @    t        d      | _        i | _        d | _        y )Nzdynamic_blacklist.json)r   
stats_filemonitored_cachelast_update)selfs    ./ai_score_adjuster.py__init__zAIScoreAdjuster.__init__   s    78!    c                    	 | j                   j                         si S t        | j                   dd      5 }t        j                  |      }ddd       j                  di       | _        t        j                         | _	        | j                  S # 1 sw Y   ExY w# t        $ r$}t        j                  d|        i cY d}~S d}~ww xY w)u)   Charge les stats des cryptos surveilléesrzutf-8)encodingNdetailszErreur chargement stats: )r   existsopenjsonloadgetr	   r   nowr
   	Exceptionloggerwarning)r   fdataes       r   load_monitored_statsz$AIScoreAdjuster.load_monitored_stats   s    	??))+	doosW= $yy|$ $(88Ir#:D '||~D'''$ $  	NN6qc:;I	s:   B B BAB BB 	C	%C>C	C	symbolreturnc                    | j                   r2t        j                         | j                   z
  j                         dkD  r| j	                          || j
                  vry| j
                  |   }|j                  dd      }|j                  dd      }|j                  dd      }d}|dk  rd}n|d	k  rd
}n|dk  rd}n|dk  rd}|dk  r|dz  }|dk  r|dz  }|S )u  
        Calcule la pénalité de score pour une crypto surveillée
        
        Returns:
            int: Pénalité de score (0 à -25)
                 0 = aucune pénalité
                 -5 = win rate 30-40% (léger)
                 -10 = win rate 20-30% (modéré)
                 -15 = win rate 10-20% (sévère)
                 -25 = win rate 0-10% (critique)
        i,  r   win_rate2   tradespnl
   i   i   i(            )r
   r   r   total_secondsr   r	   r   )r   r    statsr#   total_tradesr&   penaltys          r   get_score_penaltyz!AIScoreAdjuster.get_score_penalty+   s     HLLNT5E5E$E#T#T#VY\#\%%' ---$$V,99Z,yy1-iiq! b=G]G]G]G 8qLG !lGr   
base_scorec                 Z    | j                  |      }t        dt        d||z               }|S )u  
        Ajuste le score de base selon les performances récentes
        
        Args:
            symbol: Symbole crypto
            base_score: Score de base calculé par l'IA (0-100)
        
        Returns:
            int: Score ajusté (0-100)
        r   d   )r4   maxmin)r   r    r5   r3   adjusted_scores        r   adjust_scorezAIScoreAdjuster.adjust_score[   s2     ((0QCg)= >?r   N)
__name__
__module____qualname____doc__r   r   strintr4   r;    r   r   r   r      s=    ? 
$. . .`3 C C r   c                  .    t         
t               a t         S )u/   Récupère l'instance globale du score adjuster)_score_adjusterr   rB   r   r   get_score_adjusterrE   o   s     )+r   )r?   r   pathlibr   r   logging	getLoggerr   r   rD   rE   rB   r   r   <module>rI      sD       			,	-X Xx r   