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 )u.  
STRATÃ‰GIE BULL - Zones HaussiÃ¨res
OptimisÃ©e pour tendances haussiÃ¨res fortes

Logique:
1. DÃ©tecte tendance haussiÃ¨re (prix > MAs croissantes)
2. Entre sur pullbacks vers supports
3. Breakouts de rÃ©sistances avec volume
4. Stop loss large (laisser respirer)
5. Take profit agressif sur momentum
é    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 )
Ú
BullSignalzSignal de trading haussierÚ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/bull_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 )ÚBullDetectoru$   DÃ©tecteur de conditions haussiÃ¨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rQ|d  d
¡ 	¡ jd n|}|d }	|	|kr]dnd}
|	|krednd}||krmd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 haussiÃ¨re

        Returns:
            Score 0-100 (plus Ã©levÃ© = plus haussier)
        g        NÚcloseé   r   éd   éÿÿÿÿi'  é   r   g
×£p=ª@@ÚhighÚlowiöÿÿÿé   iâÿÿÿgš™™™™™Ù?g333333Ó?)
ÚlenÚilocÚvaluesÚnpÚarangeÚpolyfitÚminÚmaxÚrollingÚmean)r   r   ÚwindowÚclosesÚxÚslopeÚslope_scoreÚma20Úma50ÚpriceÚ
above_ma20Ú
above_ma50Úma_ascendingÚma_scoreÚhighsÚlowsÚrecent_highÚ	prev_highÚ
recent_lowÚprev_lowÚhh_scoreÚhl_scoreÚstructure_scoreÚtotalr   r   r   Úcalculate_trend_strength#   s2   
(

  z%BullDetector.calculate_trend_strengthc                 C   s   t  | ¡}|dkS )u:   
        DÃ©termine si on est en marchÃ© haussier
        ç      N@)r   rD   )r   Ústrengthr   r   r   Úis_bull_marketU   s   
zBullDetector.is_bull_marketN)r   )r   r   r   r   ÚstaticmethodÚpdÚ	DataFramer   r   rD   ÚboolrG   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 )ÚBullStrategyu[   
    StratÃ©gie pour zones haussiÃ¨res
    LONG uniquement, sur pullbacks et breakouts
    éÈ   r   c              	   C   s"   || _ ddddddddd	œ| _d S )
NrE   é-   é7   ç      ø?g       @g      @gš™™™™™¹?éA   ©Úmin_trend_strengthÚrsi_pullback_maxÚrsi_breakout_minÚvolume_spike_thresholdÚsl_atr_multiplierÚtp_atr_multiplierÚtrailing_pctÚmin_confidence)r   Úparams)Úselfr   r   r   r   Ú__init__d   s   øzBullStrategy.__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	|| ƒ| }|dk �r
d|
d›d�}d| jd |
  }|}||| jd   }||| jd   }td|||td|ƒ|| jd�}|�sa|
| jd k�ra|d	 jdd…  ¡ }||k�ra|| jd k�rad|d›d |d!›d�}d"td|
d d# ƒ }|}|d$ }||| jd   }td|||td|ƒ|| jd�}|�s²d|
  k �rpd"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 LONG si conditions haussiÃ¨res

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

        Returns:
            BullSignal ou None
        r   NrS   r   r   r   é   r   r!   r"   )ÚaxisÚvolumer    g      ð?r   Ú rT   g¸…ëQ¸Ž?u   PULLBACK Ã  MA20 (RSI z.0fú)é<   rW   rX   ÚLONG)r   r   r   r	   r
   r   r   rU   iìÿÿÿrV   u   BREAKOUT rÃ©sistance $z.2fz (Vol xz.1féF   é   g\�Âõ(\ï?éK   zMOMENTUM continuation (Trend rQ   rZ   )r$   r   rD   r[   r%   ÚdiffÚwherer,   r-   ÚabsÚshiftrI   Ú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_ratior3   r4   Úsignalr   r
   Údistance_to_ma20ÚentryÚslÚtpÚ
resistancer   r   r   Úanalyzes   sœ   


ùù,ùzBullStrategy.analyzec              	   C   s   ddddddddd	œS )
u%   Retourne les paramÃ¨tres optimisables)r   éP   )é#   r   )r   rQ   )g333333ó?g      @)rP   ç      @)r†   g      @)gš™™™™™©?gš™™™™™É?)rd   rh   rR   r   )r\   r   r   r   Úget_optimizable_paramsð   s   øz#BullStrategy.get_optimizable_paramsN)rM   )r   r   r   r   r   r]   r   rI   rJ   r   r   rƒ   r   r‡   r   r   r   r   rL   ^   s
    }rL   Ú__main__u   ðŸ�‚ Bull Strategy - TestzP================================================================================u/   StratÃ©gie spÃ©cialisÃ©e pour zones HAUSSIÃˆRESu	   EntrÃ©es:u      â€¢ PULLBACK Ã  support (MA20)u&     â€¢ BREAKOUT de rÃ©sistance + volumeu     â€¢ MOMENTUM continuationu   ParamÃ¨tres par dÃ©faut:z  z: )r   ÚpandasrI   Únumpyr'   Útypingr   r   Údataclassesr   r   r   rL   r   ÚprintÚstrategyr[   ÚitemsÚkÚvr   r   r   r   Ú<module>   s4   > !ò