o
    5Di"  ã                   @   s˜  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
Z
ddlmZmZ ddlmZmZ ddlmZmZ ddlmZ e
je
jd	� e
 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ƒ  edƒ edƒ edƒ edƒ eƒ  edƒ edƒ edƒ edƒ eƒ  edd�Zedee  ¡ ƒ› �ƒ eƒ  edƒ e!e  ¡  "¡ ƒdd… D ]\Z#Z$ede#› d e$› �ƒ qµed!ƒ dS dS )"uo  
HYBRID STRATEGY - StratÃ©gie Adaptative Intelligente
Switch automatique entre 3 stratÃ©gies selon le rÃ©gime de marchÃ©

StratÃ©gies:
1. BULL: bull_strategy.py (zones haussiÃ¨res)
2. BEAR: bear_strategy.py (zones baissiÃ¨res)
3. RANGE: v10_range_strategy.py (marchÃ© latÃ©ral)

Le market_detector dÃ©termine le rÃ©gime, puis la stratÃ©gie appropriÃ©e est utilisÃ©e.
é    N)ÚOptionalÚDict)Ú	dataclass)ÚMarketDetectorÚMarketRegime)ÚBullStrategyÚ
BullSignal)ÚBearStrategyÚ
BearSignal)ÚV10RangeStrategy)Úlevelc                   @   sb   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< eed	< eed
< eed< dS )ÚHybridSignalu'   Signal unifiÃ© de la stratÃ©gie hybrideÚsymbolÚsideÚentry_priceÚ	stop_lossÚtake_profitÚleverageÚ
confidenceÚreasonÚstrategy_usedÚmarket_regimeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__ÚfloatÚint© r    r    úK/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/hybrid_strategy.pyr      s   
 r   c                   @   sš   e Zd ZdZddedefdd„Zded	ej	d
e
e fdd„Zdeded
efdd„Zdeded
efdd„Zded
efdd„Zd
efdd„Zd
efdd„ZdS )ÚHybridStrategyu’   
    StratÃ©gie hybride adaptative

    DÃ©tecte automatiquement le rÃ©gime de marchÃ© et utilise
    la stratÃ©gie optimale pour ce rÃ©gime.
    éÈ   Fr   Úuse_llmc                 C   sR   || _ t|d�| _t|d�| _t|d�| _t|d�| _ddddddœ| _	d| _
dS )u‚   
        Args:
            leverage: Leverage par dÃ©faut
            use_llm: Utiliser mini LLM pour dÃ©tection (future)
        )r$   ©r   r   )Útotal_signalsÚbull_signalsÚbear_signalsÚrange_signalsÚregime_switchesN)r   r   Údetectorr   Úbull_strategyr	   Úbear_strategyr   Úrange_strategyÚstatsÚlast_regime)Úselfr   r$   r    r    r!   Ú__init__4   s   û
zHybridStrategy.__init__r   ÚdfÚreturnc           	      C   sp  t |ƒdk rdS | j |¡}|j}| jr0| j|kr0| jd  d7  < t d| jj› d|j› �¡ || _t d|j› d|j	d	›d
|j
› �¡ d}|tjkrf| j ||¡}|re|  |||¡}| jd  d7  < nE|tjkr…| j ||¡}|r„|  |||¡}| jd  d7  < n&|tjkr¤| j ||¡}|r£|  |||¡}| jd  d7  < nt d¡ dS |r¶| jd  d7  < |S )uÐ   
        Analyse le marchÃ© et gÃ©nÃ¨re un signal adaptatif

        Args:
            symbol: Symbole du token
            df: DataFrame avec OHLCV

        Returns:
            HybridSignal ou None
        éd   Nr*   é   u   ðŸ”„ Changement rÃ©gime: u    â†’ u   ðŸ“Š RÃ©gime: z | Confidence: z.0fz% | r'   r(   r)   u(   âš ï¸�  RÃ©gime incertain, pas de signalr&   )Úlenr+   ÚdetectÚregimer0   r/   ÚloggerÚdebugÚvaluer   r   r   ÚBULLr,   ÚanalyzeÚ_convert_bull_signalÚBEARr-   Ú_convert_bear_signalÚRANGEr.   Ú_convert_range_signal)	r1   r   r3   Úmarket_analysisr9   ÚsignalÚbull_signalÚbear_signalÚrange_signalr    r    r!   r>   N   sB   $
€
€
€
zHybridStrategy.analyzerF   c                 C   ó4   t ||j|j|j|j|j|jd|j› �d|jj	d�
S )z$Convertit BullSignal en HybridSignalz[BULL] r=   ©
r   r   r   r   r   r   r   r   r   r   ©
r   r   r   r   r   r   r   r   r9   r<   )r1   rF   r   rD   r    r    r!   r?   Š   ó   
öz#HybridStrategy._convert_bull_signalrG   c                 C   rI   )z$Convertit BearSignal en HybridSignalz[BEAR] r@   rJ   rK   )r1   rG   r   rD   r    r    r!   rA   ž   rL   z#HybridStrategy._convert_bear_signalc                 C   sP   t ||d |d |d |d | d| j¡| dd¡d| d	d
¡› �d|jjd�
S )z*Convertit signal V10 Range en HybridSignalr   r   r   r   r   r   éF   z[RANGE] r   zV10 Range signalrB   rJ   )r   Úgetr   r9   r<   )r1   rH   r   rD   r    r    r!   rC   ²   s   
öz$HybridStrategy._convert_range_signalc                 C   sh   | j d }|dkr| j S | j  ¡ }| j d | d |d< | j d | d |d< | j d | d |d	< |S )
z#Retourne statistiques d'utilisationr&   r   r'   r5   Úbull_pctr(   Úbear_pctr)   Ú	range_pct)r/   Úcopy)r1   ÚtotalÚstats_with_pctr    r    r!   Ú	get_statsÆ   s   

zHybridStrategy.get_statsc                 C   sŒ   i }| j  ¡ }| ¡ D ]\}}||d|› �< q| j ¡ }| ¡ D ]\}}||d|› �< q d|d< d|d< d|d< d|d	< d
|d< d|d< |S )uˆ   
        Retourne tous les paramÃ¨tres optimisables des 3 stratÃ©gies

        Format: {'strategy_name.param_name': (min, max)}
        zbull.zbear.)é   é(   zrange.rsi_oversold)é<   éP   zrange.rsi_overbought)çš™™™™™É?ç      à?zrange.range_atr_thresholdzrange.min_confidence)r[   g      @zrange.sl_atr_multiplier)g¸…ëQ¸ž?rZ   zrange.trailing_pct)r,   Úget_optimizable_paramsÚitemsr-   )r1   ÚparamsÚbull_paramsÚkÚvÚbear_paramsr    r    r!   r\   Ó   s   

z%HybridStrategy.get_optimizable_paramsN)r#   F)r   r   r   r   r   Úboolr2   r   ÚpdÚ	DataFramer   r   r>   r   r?   r
   rA   rC   r   rU   r\   r    r    r    r!   r"   ,   s2    <þý
ûþý
ûý
ûr"   Ú__main__u   ðŸŽ¯ Hybrid Strategy - TestzP================================================================================u"   StratÃ©gie adaptative intelligenteu/   DÃ©tecte automatiquement le rÃ©gime de marchÃ©:u     â€¢ BULL â†’ bull_strategy.pyu     â€¢ BEAR â†’ bear_strategy.pyu%     â€¢ RANGE â†’ v10_range_strategy.pyz
Avantages:u+     âœ… Adaptation automatique aux conditionsu.     âœ… Performance optimale pour chaque rÃ©gimeu$     âœ… Une seule stratÃ©gie Ã  gÃ©rerr#   r%   u   ParamÃ¨tres optimisables: zExemple params:é   z  z: z  ...)%r   Úpandasrd   ÚnumpyÚnpÚtypingr   r   Údataclassesr   ÚloggingÚmarket_detectorr   r   r,   r   r   r-   r	   r
   Úv10_range_strategyr   ÚbasicConfigÚINFOÚ	getLoggerr   r:   r   r"   ÚprintÚstrategyr7   r\   Úlistr]   r`   ra   r    r    r    r!   Ú<module>   sP   
 F
 é