o
    ¤¹iÉ$  ã                   @   sè   d Z ddlZddlZddlmZmZ ddlm	Z	 e	G dd„ dƒƒZ
G dd„ dƒZG d	d
„ d
ƒZedkrpedƒ edƒ edƒ eƒ  edƒ edƒ edƒ edƒ eƒ  edƒ eƒ Zej ¡ D ]\ZZede› de› �ƒ qadS dS )uT  
STRATÃ‰GIE BEAR - Zones BaissiÃ¨res
OptimisÃ©e pour tendances baissiÃ¨res fortes

Logique:
1. DÃ©tecte tendance baissiÃ¨re (prix < MAs dÃ©croissantes)
2. Entre SHORT sur rallies techniques (dead cat bounces)
3. Short les rejets de rÃ©sistances
4. Stop loss serrÃ© (rallies baissiers = courts)
5. Take profit rapide (tendance reprend vite)
é    N)ÚOptionalÚDict)Ú	dataclassc                   @   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 )
Ú
BearSignalzSignal de trading baissierÚsideÚentry_priceÚ	stop_lossÚtake_profitÚ
confidenceÚreasonÚleverageN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__ÚfloatÚint© r   r   úI/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/bear_strategy.pyr      s   
 r   c                   @   sF   e Zd ZdZeddejdedefdd„ƒZ	edejde
fdd	„ƒZd
S )ÚBearDetectoru$   DÃ©tecteur de conditions baissiÃ¨resé2   ÚdfÚlookbackÚreturnc                 C   s´  t | ƒ|k rdS | j| d… }|d j}t t |ƒ¡}t ||d¡d }tdtd| |d  d ƒƒ}|d  d	¡ 	¡ jd }t |ƒd
krR|d  d
¡ 	¡ jd n|}|d }	|	|k r^dnd}
|	|k rfdnd}||k rndnd}|
| | d }|d j}|d j}t|dd… ƒ}t |ƒdkr˜t|dd… ƒn|}t|dd… ƒ}t |ƒdkr°t|dd… ƒn|}||k r¸d
nd}||k rÀd
nd}|| }|d |d  |d  }tdtd|ƒƒS )u‚   
        Calcule force de la tendance baissiÃ¨re

        Returns:
            Score 0-100 (plus Ã©levÃ© = plus baissier)
        g        NÚcloseé   r   éd   éÿÿÿÿi'  é   r   g
×£p=ª@@ÚhighÚlowéöÿÿÿé   iâÿÿÿgš™™™™™Ù?g333333Ó?)
ÚlenÚilocÚvaluesÚnpÚarangeÚpolyfitÚminÚmaxÚrollingÚmean)r   r   ÚwindowÚclosesÚxÚslopeÚslope_scoreÚma20Úma50ÚpriceÚ
below_ma20Ú
below_ma50Úma_descendingÚma_scoreÚhighsÚlowsÚrecent_highÚ	prev_highÚ
recent_lowÚprev_lowÚlh_scoreÚll_scoreÚstructure_scoreÚtotalr   r   r   Úcalculate_trend_strength#   s2   
(

  z%BearDetector.calculate_trend_strengthc                 C   s   t  | ¡}|dkS )u:   
        DÃ©termine si on est en marchÃ© baissier
        ç      N@)r   rE   )r   Ústrengthr   r   r   Úis_bear_marketU   s   
zBearDetector.is_bear_marketN)r   )r   r   r   r   ÚstaticmethodÚpdÚ	DataFramer   r   rE   ÚboolrH   r   r   r   r   r       s    1r   c                   @   sJ   e Zd ZdZddefdd„Zdedejde	e
 fd	d
„Zdefdd„ZdS )ÚBearStrategyuW   
    StratÃ©gie pour zones baissiÃ¨res
    SHORT uniquement, sur rallies et rejets
    éÈ   r   c              	   C   s"   || _ ddddddddd	œ| _d S )
NrF   é7   éF   gÍÌÌÌÌÌô?g      ø?g      @g{®Gáz´?éA   ©Úmin_trend_strengthÚrsi_rally_minÚrsi_overboughtÚvolume_spike_thresholdÚsl_atr_multiplierÚtp_atr_multiplierÚtrailing_pctÚmin_confidence)r   Úparams)Úselfr   r   r   r   Ú__init__d   s   øzBearStrategy.__init__Úsymbolr   r   c              	   C   sº  t |ƒdk rdS t |¡}|| jd k rdS |d jd }|d  ¡ }| |dkd¡ d¡ ¡ }| |dk d¡ d¡ ¡  }|| }ddd|   }	|	jd }
|d	 |d
  }t	|d	 |d  
¡  ƒ}t	|d
 |d  
¡  ƒ}tj|||gdd�jdd�}| d¡ ¡ jd }|d  d¡ ¡ jd }|d jd }|dkr¢|| nd}|d  d¡ ¡ jd }|d  d¡ ¡ jd }d}d}d}|
| jd k�rt	|| ƒ| }||k �r|dk �rd|
d›d�}d|
d  }|}||| jd   }||| jd   }td|||td|ƒ|| jd�}|�s||
| jd k�r||d	 jdd…  ¡ }|d	 jd }t	|| ƒ| }|dk �r|||d jd k �r||| jd k�r|d |d!›d"|d#›d�}d$td|
d$ d% ƒ }|}|d& }||| jd   }td|||td|ƒ|| jd�}|�sÍd'|
  k �r‹dk �rÍn n@|d(k�rÍ||  k �rž|k �rÍn n-d)|d›d�}d*|d( d%  }|}|d+ }||| jd   }td|||td|ƒ|| jd�}|�rÛ|j| jd, k �rÛdS |S )-uÖ   
        Analyse et gÃ©nÃ¨re signal SHORT si conditions baissiÃ¨res

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

        Returns:
            BearSignal ou None
        r   NrS   r   r   r   é   r   r!   r"   )ÚaxisÚvolumer    ç      ð?r   Ú rT   g¸…ëQ¸Ž?zRALLY SHORT vers MA20 (RSI z.0fú)é<   rW   rX   ÚSHORT)r   r   r   r	   r
   r   r   rU   r#   g{®Gáz„?ÚopenrV   u   REJET rÃ©sistance $z.2fz (Vol xz.1frP   é   g)\�Âõ(ð?r$   éK   zBREAKDOWN continuation (Trend rQ   gR¸…ëQð?rZ   )r%   r   rE   r[   r&   ÚdiffÚwherer-   r.   ÚabsÚshiftrJ   Úconcatr,   r   r+   r   r
   )r\   r^   r   Útrend_strengthr   ÚdeltaÚgainÚlossÚrsÚrsiÚcurrent_rsiÚtr1Útr2Útr3ÚtrÚatrÚ
avg_volumeÚcurrent_volumeÚvolume_ratior4   r5   Úsignalr   r
   Údistance_to_ma20ÚentryÚslÚtpÚrecent_resistanceÚcurrent_highÚdistance_to_resistancer   r   r   Úanalyzes   s¢   

ùù,ùzBearStrategy.analyzec              	   C   s   ddddddddd	œS )
u%   Retourne les paramÃ¨tres optimisables)r   éP   )r   rQ   )rQ   r‡   )g333333ó?g       @)rb   ç      @)rˆ   g      @)gš™™™™™©?g333333Ã?)re   ri   rR   r   )r\   r   r   r   Úget_optimizable_paramsõ   s   øz#BearStrategy.get_optimizable_paramsN)rN   )r   r   r   r   r   r]   r   rJ   rK   r   r   r†   r   r‰   r   r   r   r   rM   ^   s     rM   Ú__main__u   ðŸ�» Bear Strategy - TestzP================================================================================u/   StratÃ©gie spÃ©cialisÃ©e pour zones BAISSIÃˆRESu	   EntrÃ©es:u-     â€¢ RALLY SHORT (dead cat bounce vers MA20)u#     â€¢ REJET de rÃ©sistance + volumeu     â€¢ BREAKDOWN continuationu   ParamÃ¨tres par dÃ©faut:z  z: )r   ÚpandasrJ   Únumpyr(   Útypingr   r   Údataclassesr   r   r   rM   r   ÚprintÚstrategyr[   ÚitemsÚkÚvr   r   r   r   Ú<module>   s4   > &ò