
    i&                     d   d Z ddlZddlmZmZmZmZ ddlZ	 ddl	m
Z
 dZ	 ddlmZ dZ	 dd
lmZ dZddlmZmZmZmZmZmZ  G d d      ZdadefdZy# e$ r dZ ej                  d       Y Pw xY w# e$ r dZ ej                  d	       Y fw xY w# e$ r dZ ej                  d       Y |w xY w)u~   
Enhanced Signal Engine - Intégration des nouveaux modules
Combine stratégies avancées, ML Ensemble et feature engineering
    N)ListDictOptionalTuple)AdvancedStrategiesTFu0   ⚠️ Module advanced_strategies non disponible)get_ensemble_predictoru(   ⚠️ Module ensemble_ml non disponible)FeatureEngineeru0   ⚠️ Module feature_engineering non disponible)ENABLE_ADVANCED_STRATEGIESENABLE_ENSEMBLE_MLENABLE_ADVANCED_FEATURESACTIVE_STRATEGIESSTRATEGY_CONSENSUS_THRESHOLDML_CONFIDENCE_THRESHOLDc                      e Zd ZdZd Z	 	 	 	 	 	 	 ddedee   deee      deee      deee      d	eee      d
eee      dee   dede	eee
f   fdZ	 	 ddee   d
eee      dee   fdZddefdZdefdZdefdZy)EnhancedSignalEngineuS   
    Moteur de signaux enrichi combinant toutes les nouvelles fonctionnalités
    c                 ^   d | _         t        xr t        | _        t        xr t
        | _        t        xr t        | _	        | j                  r%	 t               | _         t        j                  d       t        j                  d       t        j                  d| j                  rdnd        t        j                  d| j                  rdnd        t        j                  d	| j                  rdnd        y # t        $ r)}t        j                  d|        d| _        Y d }~d }~ww xY w)
Nu   ✅ ML Ensemble initialiséu   ❌ Erreur initialisation ML: Fu   🎯 Enhanced Signal Engine:u      - Stratégies avancées: u   ✅u   ❌z   - ML Ensemble: z   - Feature engineering: )ml_predictorr
   ADVANCED_STRATEGIES_AVAILABLEstrategies_enabledr   ENSEMBLE_ML_AVAILABLE
ml_enabledr   FEATURE_ENGINEERING_AVAILABLEfeatures_enabledr   logginginfo	Exceptionerror)selfes     ./enhanced_signal_engine.py__init__zEnhancedSignalEngine.__init__/   s     "<"^A^,F1F 8 Z=Z ??($:$<!:;
 	353T=T=TEZ_3`ab)4??%)NOP14;P;P%V[1\]^  ( >qcBC"'(s   $C: :	D,D''D,Nsymbolpriceshighslowsopensclosesvolumesbase_signalbase_confidencereturnc
           	      (   ||	dddd}
g }g }|r%|j                  |       |j                  |	dz         | j                  rt        |      dk\  r	 ||}||}||}||}t        j                  ||||||      }||
d<   |d   }|d   }t        |d	z  d
      }|dv r%|j                  |       |j                  |dz         t        j                  d| d| d| d       | j                  rt        |      dk\  r	 d}| j                  r| j                  j                  ||      }||
d<   | j                  j                  |||	      \  }}}||
d<   |t        k\  rE|j                  |       |j                  |dz         t        j                  d| d| d|dd       |sdd|
fS t        d t!        ||      D              }t        d t!        ||      D              }t        |      }|d k(  rdd|
fS ||z  }||z  }t"        dz  }||kD  r
||kD  rd!}|}n||kD  r
||kD  rd"}|}nd}d}|||d#|
d$<   |||
fS # t        $ r#}t        j                  d|        Y d}~~d}~ww xY w# t        $ r"}t        j                  d|        Y d}~d}~ww xY w)%u  
        Obtient un signal enrichi en combinant toutes les méthodes

        Returns:
            (signal, confidence, details)
            - signal: "BUY", "SELL", "HOLD"
            - confidence: 0-1
            - details: dict avec les détails de chaque méthode
        N)r)   r*   strategies_result	ml_resultfeaturesg333333?d   )r#   r$   r%   r&   r'   r(   r-   	consensusconsensus_strength
   g      ?)BUYSELLg?u      📊 u    Stratégies: z	 (force: )u"   ❌ Erreur stratégies avancées: 2   )r#   r(   r/   )indicators_signalindicators_confidencer.   u      🧠 z ML: z (conf: z.2fu   ❌ Erreur ML Ensemble: HOLD      ?c              3   2   K   | ]  \  }}|d k(  s|  yw)r4   N .0sws      r    	<genexpr>z;EnhancedSignalEngine.get_enhanced_signal.<locals>.<genexpr>   s     Ktq!U
K   c              3   2   K   | ]  \  }}|d k(  s|  yw)r5   Nr=   r>   s      r    rB   z;EnhancedSignalEngine.get_enhanced_signal.<locals>.<genexpr>   s     M1f!MrC   r   r4   r5   )buyselltotalfinal_weights)appendr   lenr   evaluate_all_strategiesminr   debugr   r   r   r   extract_featurespredictr   sumzipr   )r   r"   r#   r$   r%   r&   r'   r(   r)   r*   detailssignalsweightsstrategy_resultsr1   strengthnormalized_strengthr   r/   	ml_signalml_confidence
ml_details
buy_weightsell_weighttotal_weight	buy_ratio
sell_ratio	thresholdfinal_signalfinal_confidences                                 r    get_enhanced_signalz(EnhancedSignalEngine.get_enhanced_signalC   sL   ( '.!%
  NN;'NN?S01 ""s6{c'9$H>#F="E<!D="E#5#M#M!!#$  0@+, -[9	+,@A '*(R-&=#/NN9-NN#6#<=ykS[R\\]^_ ??s6{b0>$$#00AA% '  B  H +3GJ' <@;L;L;T;T *5.= <U <8I}j ,6GK( %(??y1}s':;i[Q^_bPccd&ef 3'' Ks7G'<KK
MGW(=MM7|13'' -	 </
 136	y Y%; L()#
Y(>!L)!L" !$
  -w66K  H B1#FGGH>  > 8<==>s2   BH7 ;B%I& 7	I# II#&	J/JJactual_outcomec                 "   | j                   r| j                  sy	 | j                  j                  ||      }|)|r&|dk(  rdnd}| j                  j                  ||       yyy# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)u   
        Met à jour l'entraînement ML avec de nouvelles données

        actual_outcome: "up" si le prix a monté, "down" sinon
        Nup   r   u   ❌ Erreur update ML: )r   r   rN   add_training_sampler   r   r   )r   r#   r(   rd   r/   labelr   s          r    update_ml_trainingz'EnhancedSignalEngine.update_ml_training   s     d&7&7	8((99&'JH#+t3!!55hF )7#  	8MM21#677	8s   AA# #	B,B		Bmin_samplesc                     | j                   r| j                  sy	 | j                  j                  |      S # t        $ r"}t	        j
                  d|        Y d}~yd}~ww xY w)uG   
        Entraîne les modèles ML si suffisamment de données
        Fu   ❌ Erreur entraînement ML: N)r   r   train_modelsr   r   r   )r   rk   r   s      r    train_ml_modelsz$EnhancedSignalEngine.train_ml_models   sY     d&7&7	$$11+>> 	MM9!=>	   6 	A!AA!filepathc                     | j                   r| j                  sy	 | j                  j                  |      S # t        $ r"}t	        j
                  d|        Y d}~yd}~ww xY w)u,   
        Sauvegarde les modèles ML
        Fu   ❌ Erreur sauvegarde ML: N)r   r   save_modelsr   r   r   r   rp   r   s      r    save_ml_modelsz#EnhancedSignalEngine.save_ml_models   Y     d&7&7	$$00:: 	MM6qc:;	ro   c                     | j                   r| j                  sy	 | j                  j                  |      S # t        $ r"}t	        j
                  d|        Y d}~yd}~ww xY w)u(   
        Charge les modèles ML
        Fu   ❌ Erreur chargement ML: N)r   r   load_modelsr   r   r   rs   s      r    load_ml_modelsz#EnhancedSignalEngine.load_ml_models   ru   ro   )NNNNNNr;   )NN)   )__name__
__module____qualname____doc__r!   strr   floatr   r   r   rc   rj   intrn   rt   rx   r=       r    r   r   *   s1   _. ;?9=:>;?<@8<47M7#&M7#';M7 #+4;"7M7 "*$u+!6	M7
 #+4;"7M7 $,DK#8M7 %-T%[$9M7 )1M7 -2M7 =B#udBR<SM7^ X\:>8e 8xU?T 8*23-8&3 s s r   r   r+   c                  .    t         
t               a t         S )u/   Récupère ou crée l'instance du signal engine)_enhanced_signal_enginer   r=   r   r    get_enhanced_signal_enginer     s     &"6"8""r   )r}   r   typingr   r   r   r   numpynpadvanced_strategiesr   r   ImportErrorwarningensemble_mlr   r   feature_engineeringr	   r   configr
   r   r   r   r   r   r   r   r   r=   r   r    <module>r      s     . . H6$(!
@2 
H3$(! ` `H  #$8 #G  H$)!GOOFGH  @!GOO>?@  H$)!GOOFGHs3   A A4 B A10A14BBB/.B/