
    i4              
           d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddede	e   fdZd	e	e   defd
Zdededededef
dZd	e	e   dedefdZdede	e   fdZd Zedk(  r e        yy)u   
Analyseur de corrélation Pattern-Performance pour optimiser les signaux IA
Analyse les trades historiques pour identifier les paramètres optimaux
    N)datetime)defaultdict)DictListTuple	file_pathreturnc                     	 t        | d      5 }t        j                  |      cddd       S # 1 sw Y   yxY w# t        $ r}t	        d|        g cY d}~S d}~ww xY w)zCharge l'historique des tradesrNu"   ❌ Erreur lecture trade_history: )openjsonload	Exceptionprint)r   fes       ./analyze_pattern_performance.pyload_trade_historyr      sW    )S! 	 Q99Q<	  	  	  21#67	s/   9 -	9 69 9 	AAAAtradesc                    t        d       }| D ]  }|j                  dd      }|j                  dd      }|j                  dd      }d}d|v rKd	|v rG	 t        j                  |d         }t        j                  |d	         }||z
  j	                         d
z  }||   }	|	dxx   dz  cc<   |	d   j                  |       |	d   j                  |       |	d   |xx   dz  cc<   |dkD  r"|	dxx   dz  cc<   |	d   j                  |       |	dxx   dz  cc<   |	d   j                  |        i }
|j                         D ]s  \  }}	|	d   dk(  r|	d   |	d   z  dz  }t        j                  |	d         }|	d   rt        j                  |	d         nd}|	d   rt        j                  |	d         nd}|	d   rt        j                  |	d         nd}|	d   rt        |	d         nd}|	d   rt        t        |	d               nd}|dkD  r||z  n
t        d      }|	d   j                  dd      }||	d   z  dz  }|	d   |	d   |	d   t        |d      t        |d      t        |d      t        |d      t        |d      t        |d      t        |d      t        |	d         t        ||||      d|
|<   v t        t        |
j                         d d            S #  Y IxY w)u0   Analyse détaillée des performances par patternc            
      2    dddg g g g t        t              dS )Nr   )totalwinslossespnl_listwin_pnlloss_pnl	durationsby_exit_reason)r   int     r   <lambda>z-analyze_pattern_performance.<locals>.<lambda>   s&    %c*	) r"   patternUNKNOWNpnl_pctr   reasonunknown
entry_time	exit_time<   r      r   r   r   r   r   r   r   d   infz
quick-exit      )total_tradesr   r   win_rateavg_pnlavg_winavg_lossprofit_factoravg_duration_minquick_exit_rateexit_reasonsquality_scorec                     | d   d   S )Nr,   r:   r!   )xs    r   r#   z-analyze_pattern_performance.<locals>.<lambda>d   s    ad?6K r"   T)keyreverse)r   getr   fromisoformattotal_secondsappenditemsnpmeansumabsfloatrounddictcalculate_quality_scoresorted)r   pattern_statstrader$   r&   r'   duration_minentryexitstatsresultsr2   r3   r4   r5   avg_duration
total_winstotal_lossesr6   quick_exitsr8   s                        r   analyze_pattern_performancerX      s+      	! 	M  .))Iy1))Iq)8Y/ 5 [E%9 ..u\/BC--eK.@A $u;;=B g&g!j  )k!!,/'1,'Q;&MQM)##G,(Oq O*$$W-5.: G'--/  
>Q&ME'N2c9''%
+,/4Y/?"''%	*+Q16z1B2775,-6;K6Hrwwu[12a /4I.>Sy)*A
6;J6Gs3uZ012Q5AA5E
\15QV< ,-11,B&w73> "'N&MHoh*Wa(Wa(h*"=!4 %lA 6$_a8 '7!894XwWfg
' 
D w}},KUYZ[[is   AKK#r2   r3   r6   r8   c                     t        | dz  dz  d      }t        t        |d      dz  dz  d      }t        |dz  dz  d      }|dz  d	z  }t        d||z   |z   |z
        S )
u#   Score de qualité composite (0-100)2   (   r   g      ?   r0      r-   
   )minmax)r2   r3   r6   r8   wr_score	pnl_scorepf_score
qe_penaltys           r   rK   rK   f   s|     8b=2%r*H COc)B.3I =1$r)2.H "C'2-Jq(Y&1J>??r"   rM   c                 *   |j                         D cg c]  \  }}|d   dk\  s| }}}|j                         D cg c]  \  }}|d   dk  s|d   dk\  s| }}}|j                         D cg c]  \  }}|d   dkD  s| }}}|||g d}|j                         D ]  \  }}	|	d   dk  rg }
|dk(  r'|	d   d	k  r|
j                  |d
|	d    dddddd       |dk(  r'|	d   dk  r|
j                  |d|	d    dddddd       |	d   dkD  r"|
j                  |d|	d    ddddd| d       |	d   dk\  r+|	d   dk\  r#|
j                  |d|	d    d d!d"dd#| d$d       |
s|d%   j                  |
        |S c c}}w c c}}w c c}}w )&u:   Identifie les paramètres optimaux basés sur les donnéesr2   r+   r[   r1   r0   r8   )excellent_patternsproblematic_patternshigh_quick_exit_patternsparameter_adjustmentsEARLY_BREAKOUTr]   zWin rate catastrophique: %u'   Achète APRÈS la remontée (trop tard)u0   DÉSACTIVER ou remplacer par CREUX_REBOUND_EARLYHIGHu1   Bloquer pattern ou augmenter score minimum à 80+)r$   issuecurrent_problemsolutionimpactcode_changePOSSIBLEzWin rate faible: z% (trop permissif)u1   Critères trop larges, accepte signaux médiocresu#   Augmenter score minimum de 65 à 75MEDIUMu1   ai_predictor.py: score_threshold POSSIBLE 65→75F   zQuick-exit: z% (mauvais timing)u,   Entre trop tôt ou dans mauvaises conditionsu5   Renforcer critères momentum ou attendre confirmationzAugmenter momentum_min pour r/   zEXCELLENT pattern: z% win rate!u=   Pas assez utilisé (seulement {stats["total_trades"]} trades)u7   AUGMENTER priorité et assouplir légèrement critèreszBonus score +5 pour z, assouplir seuils 5-10%ri   )rC   rB   extend)r   rM   psgood_patternsbad_patternsquick_exit_patternsrecommendationsr$   rR   adjustmentss              r   identify_optimal_parametersr}   v   sS    $1#6#6#8P41aAjMR<OQPMP"/"5"5"7i$!Q1Z=2;MRSTbRcghRhAiLi *7)<)<)>\A!DUBVY[B[1\\ , ,$7!#	O (--/ 3I 1$ &&5+<r+A"4U:5F4GqI#LN R   j U:%6%;",U:->,??QR#VA"R   "#b("'.?(@'AAST#QS !=gYG   "u^'<'A".uZ/@.AM#bU !5gY>VW   34;;KHg3Ij G Qi ]s'   FFF	F	F	3FFr{   c                 :   g }|j                  d       |j                  d       |j                  d       d| d   v r3|j                  d       |j                  d       |j                  d       t        d	 | d
   D              r3|j                  d       |j                  d       |j                  d       | d   D ]9  }|j                  d| d       |j                  d       |j                  d       ; |j                  d       |j                  d       |j                  d       | d
   D ]g  }|d   dk(  s|j                  d|d    d|d           |j                  d|d           |j                  d|d           |j                  d       i |S )u/   Génère les changements de config à appliquerz.# ============================================u&   # CHANGEMENTS RECOMMANDÉS - config.pyz/# ============================================
rj   rg   u0   # 🔴 EARLY_BREAKOUT: Win rate 0% - DÉSACTIVERuN   PATTERN_MIN_SCORE_EARLY_BREAKOUT = 85  # Augmenté de 65 à 85 (quasi-bloqué) c              3   *   K   | ]  }d |d   v   yw)rr   r$   Nr!   ).0adjs     r   	<genexpr>z*generate_config_changes.<locals>.<genexpr>   s     
\C:Y'
\s   ri   u.   # ⚠️ POSSIBLE: Win rate faible - RENFORCERu8   PATTERN_MIN_SCORE_POSSIBLE = 75  # Augmenté de 65 à 75rf   u   # ✅ z : Excellent win rate - FAVORISERu%   # Bonus score +5, critères assouplisz/
# ============================================u,   # CHANGEMENTS RECOMMANDÉS - ai_predictor.pyrp   rl   z# r$   : rm   z# Solution: ro   z# Code: rq   )rB   any)r{   changesr$   r   s       r   generate_config_changesr      s    G NNCDNN;<NNEF ?+ABBIJghr 
\?CZ3[
\\GHQRr ##78 y(HIJ>@r NNEFNNABNNEF67 x=F"NNRI/r#g,@ANN\#j/):;<NNXc-&8%9:;NN2 Nr"   c                     t        d       t        d       t        d       t               } | st        d       y t        dt        |        d       t        |       }t        d       t        d       t        d       |j	                         D ]  \  }}|d   d	k\  rd
n|d   dk  rdnd}d}t        d| d| | d|d   dd       t        d|d    d|d    d|d           t        d|d    d       t        d|d   dd |d!   dd"|d#   dd       t        d$|d%   d&       t        d'|d(   d)d*       t        d+|d,    d       t        d-|d.            t        | |      }t        d       t        d/       t        d       |d0   rAt        d1       |d0   D ].  }||   }t        d2| d3|d    d4|d   dd5       t        d6       0 |d7   rAt        d8       |d7   D ].  }||   }t        d2| d3|d    d4|d   dd5       t        d9       0 |d:   r:t        d;       |d:   D ]'  }||   }t        d2| d3|d,    d<       t        d=       ) t        d       t        d>       t        d       |d?   D ]f  }	|	d@   dAk(  rdBndC}
t        d|
 dD|	dE           t        dF|	dG           t        dH|	dI           t        dJ|	dK           t        dL|	dM           h t        j                         j                         t        |       ||dN}t        dOdP      5 }t        j                  ||dQR       d d d        t        |      }t        dSdPdTU      5 }|j                  dj                  |             d d d        t        d       t        dV       t        d       t        dW       t        dX       t        d       y # 1 sw Y   xY w# 1 sw Y   XxY w)YNzP================================================================================u-   🔍 ANALYSE CORRÉLATION PATTERN-PERFORMANCEu   ❌ Aucun trade trouvéu   
📊 u    trades analysés
zQ
================================================================================u3   📈 PERFORMANCES PAR PATTERN (triés par qualité)r2   r+   z[92mr[   z[91mz[93mz[0m
u   ▶ z (Quality Score: r:   z.1fz/100)z
  Trades: r1   z	 | Wins: r   z | Losses: r   z  Win Rate: rk   z  P&L Moyen: r3   z+.2fz% | Gains: r4   z% | Pertes: r5   z  Profit Factor: r6   z.2fu     Durée Moy: r7   z.0fz minz  Quick-Exit: r8   z  Sorties: r9   u   🎯 RECOMMANDATIONSrf   u+   
✅ PATTERNS EXCELLENTS (≥60% win rate):u     • r   z% win rate, z% avgu;       → FAVORISER: Augmenter priorité, assouplir critèresrg   u/   
🔴 PATTERNS PROBLÉMATIQUES (<40% win rate):u8       → DÉSACTIVER ou RENFORCER critères drastiquementrh   u1   
⚠️ PATTERNS AVEC TROP DE QUICK-EXITS (>60%):z% quick-exit rateuA       → Mauvais timing d'entrée, renforcer momentum/confirmationu   🔧 AJUSTEMENTS DÉTAILLÉSri   rp   rl   u   🔴u   ⚠️ r$   u     Problème: rm   z	  Cause: rn   z  Solution: ro   z  Code: rq   )	timestampr1   rM   r{   z!pattern_performance_analysis.jsonwr/   )indentz(PATTERN_OPTIMIZATION_RECOMMENDATIONS.txtzutf-8)encodingu   ✅ ANALYSE TERMINÉEu>   📄 Résultats détaillés: pattern_performance_analysis.jsonuE   📄 Recommandations config: PATTERN_OPTIMIZATION_RECOMMENDATIONS.txt)r   r   lenrX   rC   r}   r   now	isoformatr   r   dumpr   writejoin)r   rM   r$   rR   colorresetr{   rv   rw   r   iconoutputr   config_changess                 r   mainr      s   	(O	
9:	(O  !F'(	GCK= 3
45 07M	/	
?@	(O'--/ 5#J/25
zIZ]_I_:eo5'gYug->u_?UVY>ZZ_`a
5015=/UZ[cUdTefgU:./q12eI.t4Ki@PQU?VVbchisctuybzz{|}!%"8!=>?u%78=TBCu%678:;E.12345 2&-HO	/	
 !	(O+,<> !56 	RAa AF1#R*l1Y<:MUSTOQ	R
 -.@B !78 	OAa AF1#R*l1Y<:MUSTLN	O
 12BD !;< 	XAa AF1#R"3 455FGHUW	X
 
/	
()	(O67 /X&0vh4&#i.)*+c'l^,-	#/0123S_-./]+,-./ \\^--/F&*	F 
13	7 '1		&!A&' -_=N	8#	P +TU			.)*+ 
/	
!"	(O	JL	QS	(O' '+ +s   $O
!O
OO__main__)ztrade_history.json)__doc__r   numpyrD   r   collectionsr   typingr   r   r   strr   rX   rH   rK   r}   r   r   __name__r!   r"   r   <module>r      s   
    # $ $# d N\T
 N\t N\`@e @e @E @di @ns @ GT
 G4 GD GR(T (d3i (T_B zF r"   