o
    Õ¹iç  ã                   @   s8  d Z ddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ G d	d
„ d
e	ƒZeG dd„ dƒƒZG dd„ dƒZedkr˜edƒ edƒ eƒ  edƒ edƒ edƒ edƒ edƒ eƒ  edƒ edƒ edƒ eƒ  edƒ eƒ Zej ¡ D ]\ZZede› de› �ƒ q‰dS dS )uó   
MARKET DETECTOR - DÃ©tection intelligente du rÃ©gime de marchÃ©
Combine indicateurs techniques + mini LLM (Ã  venir)

Classification:
- BULL: Tendance haussiÃ¨re forte
- BEAR: Tendance baissiÃ¨re forte
- RANGE: MarchÃ© latÃ©ral/consolidation
é    N)ÚDictÚOptional)ÚEnum)Ú	dataclass)ÚBullDetector)ÚBearDetector)ÚV10RangeDetectorc                   @   s    e Zd ZdZdZdZdZdZdS )ÚMarketRegimeu   Types de rÃ©gimes de marchÃ©ÚBULLÚBEARÚRANGEÚ	UNCERTAINN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   © r   r   úK/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/market_detector.pyr	      s    r	   c                   @   sJ   e Zd ZU dZeed< eed< eed< eed< eed< eed< eed< d	S )
ÚMarketAnalysisu   Analyse complÃ¨te du marchÃ©ÚregimeÚ
confidenceÚ
bull_scoreÚ
bear_scoreÚrange_scoreÚ
volatilityÚreasonN)r   r   r   r   r	   Ú__annotations__ÚfloatÚstrr   r   r   r   r       s   
 r   c                   @   s„   e Zd ZdZddefdd„Zdejdefdd	„Z	d
e
de
de
de
dedeee
ef fdd„Zdede
dejdeee
f fdd„ZdS )ÚMarketDetectoruµ   
    DÃ©tecteur de rÃ©gime de marchÃ© hybride

    MÃ©thodes:
    1. Indicateurs techniques (bull/bear/range detectors)
    2. Mini LLM pour contexte macro (TODO: Ã  intÃ©grer)
    FÚuse_llmc                 C   s   || _ dddddœ| _d S )NéF   Té<   )Ústrong_bullÚstrong_bearÚrange_confirmedÚmin_confidence)r    Ú
thresholds)Úselfr    r   r   r   Ú__init__5   s   üzMarketDetector.__init__ÚdfÚreturnc              	   C   sn  t |ƒdk rttjddddddd�S t |¡}t |¡}t |¡}|d |d  }t	|d |d  
¡  ƒ}t	|d |d  
¡  ƒ}tj|||gdd	�jdd	�}| d
¡ ¡ jd }	|d jd }
|	|
 d }d}|rzd|d d  }tdtd|ƒƒ}|| | }|dkr”d| }||9 }||9 }||9 }|  |||||¡\}}}| jr¬|  |||¡\}}t|||||||d�S )u¯   
        DÃ©tecte le rÃ©gime de marchÃ© actuel

        Args:
            df: DataFrame avec OHLCV

        Returns:
            MarketAnalysis avec rÃ©gime dÃ©tectÃ©
        éd   r   u   DonnÃ©es insuffisantes)r   r   r   r   r   r   r   ÚhighÚlowÚcloseé   )Úaxisé   éÿÿÿÿg      à?é2   )Úlenr   r	   r   r   Úcalculate_trend_strengthr   r   Úis_range_marketÚabsÚshiftÚpdÚconcatÚmaxÚrollingÚmeanÚilocÚminÚ_classify_regimer    Ú_enhance_with_llm)r(   r*   r   r   Úis_rangeÚtr1Útr2Útr3ÚtrÚatrÚpriceÚvolatility_pctr   Útotal_scoreÚfactorr   r   r   r   r   r   Údetect@   s\   
ù




ÿÿùzMarketDetector.detectr   r   r   r   rC   c              	   C   sl  |||dœ}t ||jd�}|| }|| jd k r#tj|d|d›d�fS |dkrA|| jd krA|}	d	|d›d
|d›d�}
tj|	|
fS |dkr_|| jd kr_|}	d|d›d
|d›d�}
tj|	|
fS |dkrt|rt|}	d|d›d�}
tj|	|
fS t| 	¡ dd�}t
|ƒdkrŸ|d |d  dk rŸtj|d|d›d|d›d|d›d�fS tjtjtjdœ}|| ||› d|d›d�fS )u7   
        Classifie le rÃ©gime selon les scores
        )r
   r   r   )Úkeyr&   zScores trop faibles (max: z.0fú)r
   r#   u"   Tendance haussiÃ¨re forte (score: z, vol: z.2fz%)r   r$   u"   Tendance baissiÃ¨re forte (score: r   u   MarchÃ© latÃ©ral (volatilitÃ©: u   %, touches S/R confirmÃ©es)T)Úreverseé   r   r0   é   zScores trop proches (BULL:z BEAR:z RANGE:z dominant (score: )r<   Úgetr'   r	   r   r
   r   r   ÚsortedÚvaluesr5   )r(   r   r   r   r   rC   ÚscoresÚdominantÚdominant_scorer   r   Úscores_sortedÚ
regime_mapr   r   r   rA   ‡   s>   ý &ýýzMarketDetector._classify_regimer   r   c                 C   s   ||fS )uÿ   
        (TODO) Enrichir la dÃ©tection avec un mini LLM

        Le LLM analyserait:
        - Contexte macro (news, sentiment)
        - Patterns complexes sur graphe
        - CorrÃ©lation avec autres assets

        Pour l'instant: placeholder
        r   )r(   r   r   r*   r   r   r   rB   Ã   s   z MarketDetector._enhance_with_llmN)F)r   r   r   r   Úboolr)   r:   Ú	DataFramer   rM   r   Útupler	   r   rA   rB   r   r   r   r   r   ,   s4    Gþýüûú
ù<þýü
ûr   Ú__main__u   ðŸ”� Market Detector - TestzP================================================================================u&   DÃ©tecte le rÃ©gime de marchÃ© actuel:u%     â€¢ BULL: Tendance haussiÃ¨re forteu%     â€¢ BEAR: Tendance baissiÃ¨re forteu+     â€¢ RANGE: MarchÃ© latÃ©ral/consolidationu%     â€¢ UNCERTAIN: Pas de rÃ©gime clairu
   MÃ©thodes:u8     âœ… Indicateurs techniques (Bull/Bear/Range detectors)u+     â�³ Mini LLM (TODO - intÃ©gration future)zThresholds:z  z: )r   Úpandasr:   ÚnumpyÚnpÚtypingr   r   Úenumr   Údataclassesr   Úbull_strategyr   Úbear_strategyr   Úv10_range_strategyr   r	   r   r   r   ÚprintÚdetectorr'   ÚitemsÚkÚvr   r   r   r   Ú<module>   sD   
 5ï