o
     +þh8  ã                   @   sL   d Z ddlZddlZddlmZ G dd„ dƒZdd„ Ze	dkr$eƒ  dS dS )	uã   
Adaptation dynamique des paramÃ¨tres selon la volatilitÃ© (ATR)

Principe: La volatilitÃ© change tout.
- Haute volatilitÃ©: Trailing large, RSI extrÃªme, SL large
- Basse volatilitÃ©: Trailing serrÃ©, RSI resserrÃ©, SL serrÃ©
é    N)ÚDictc                   @   sn   e Zd ZdZdeeef fdd„Zddej	de
defd	d
„Zdej	deeef fdd„Zdedefdd„ZdS )ÚDynamicParameterAdapteruA   Adapte les paramÃ¨tres de trading selon la volatilitÃ© du marchÃ©Úbase_paramsc                 C   s   |  ¡ | _dS )u1  
        Args:
            base_params: ParamÃ¨tres de base Ã  adapter
                - trailing_pct: % de trailing stop de base
                - rsi_oversold: RSI oversold de base
                - rsi_overbought: RSI overbought de base
                - sl_atr_mult: Multiplicateur SL de base
        N)Úcopyr   )Úselfr   © r   úR/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/dynamic_params_adapter.pyÚ__init__   s   	z DynamicParameterAdapter.__init__é   ÚdfÚperiodÚreturnc                 C   s¬   t |ƒ|d k r
dS |d j}|d j}|d j}|| }t |t |d¡ ¡}t |t |d¡ ¡}t |t ||¡¡}	t |	¡ |¡ 	¡ j
d }
|d }|
| d }|S )uØ   
        Calcule l'ATR en % du prix

        Args:
            df: DataFrame avec colonnes high, low, close
            period: PÃ©riode ATR (dÃ©faut 14)

        Returns:
            ATR en % du prix actuel
        é   ç      ð?ÚhighÚlowÚcloseéÿÿÿÿéd   )ÚlenÚvaluesÚnpÚabsÚrollÚmaximumÚpdÚSeriesÚrollingÚmeanÚiloc)r   r   r   r   r   r   Útr1Útr2Útr3ÚtrÚatrÚcurrent_priceÚatr_pctr   r   r   Úcalculate_atr_pct   s   


z)DynamicParameterAdapter.calculate_atr_pctc              	   C   sÜ   |   |¡}| jd }| jd }| jd }| jd }|dk r$d}d}d}	n|dk r/d	}d
}d	}	n|dk r:d}d}d}	nd}d}d}	tdtd|| ƒƒtdtd|| ƒƒtdtd|| ƒƒtdtd||	 ƒƒ||  |¡dœ}
|
S )uº   
        Adapte les paramÃ¨tres selon l'ATR actuel

        Args:
            df: DataFrame avec donnÃ©es de marchÃ©

        Returns:
            Dict avec paramÃ¨tres adaptÃ©s
        Útrailing_pctÚrsi_oversoldÚrsi_overboughtÚsl_atr_multç      à?é   gš™™™™™é?ç      ø?r   r   ç      @éûÿÿÿgÍÌÌÌÌÌô?ç       @iöÿÿÿgffffffÖ?gš™™™™™©?é   é#   éA   éP   g      @)r(   r)   r*   r+   r&   Úvolatility_regime)r'   r   ÚminÚmaxÚ_get_regime_label)r   r   r&   Úbase_trailingÚbase_rsi_osÚbase_rsi_obÚbase_sl_multÚtrailing_multÚrsi_adjustmentÚsl_multÚadapted_paramsr   r   r   Úadapt_params>   s8   




ú	z$DynamicParameterAdapter.adapt_paramsr&   c                 C   s(   |dk rdS |dk rdS |dk rdS dS )u+   Retourne le label du rÃ©gime de volatilitÃ©r,   ÚVERY_LOW_VOLr.   Ú
NORMAL_VOLr/   ÚHIGH_VOLÚEXTREME_VOLr   )r   r&   r   r   r   r9      s   z)DynamicParameterAdapter._get_regime_labelN)r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚfloatr	   r   Ú	DataFrameÚintr'   rB   r9   r   r   r   r   r      s    "Ar   c               
   C   sJ  t jdddd�} tdƒ tdƒ tdƒ t  | dtj d¡d  dtj d¡d  dtj d¡d  dœ¡}d	d
dddœ}t|ƒ}| |¡}td|d d›d�ƒ td|d › �ƒ td|d d›d|d d›d�ƒ td|d d›d|d d›d|d › d|d › d�	ƒ td|d d›d|d d›d�ƒ td ƒ td!ƒ tdƒ t  | dtj d¡d"  dtj d¡d"  dtj d¡d"  dœ¡}t|ƒ}| |¡}td|d d›d�ƒ td|d › �ƒ td|d d›d|d d›d�ƒ td|d d›d|d d›d|d › d|d › d�	ƒ td|d d›d|d d›d�ƒ td ƒ d#S )$zTest de l'adaptateurz
2024-01-01r   Ú5T)ÚperiodsÚfreqzP================================================================================u   TEST 1: BASSE VOLATILITÃ‰gš™™™™™É?)Ú	timestampr   r   r   g333333Ã?é   éF   r   )r(   r)   r*   r+   zATR: r&   z.2fú%zRegime: r6   z
Trailing: r(   z.2%z (base: ú)zRSI: r)   z.0fú/r*   z	SL mult: r+   zQ
================================================================================u   TEST 2: HAUTE VOLATILITÃ‰r1   N)	r   Ú
date_rangeÚprintrM   r   ÚrandomÚrandnr   rB   )ÚdatesÚdf_lowr   ÚadapterÚadaptedÚdf_highr   r   r   Útest_adapter‹   sN   üü
"6"ü
"6"ra   Ú__main__)
rJ   Úpandasr   Únumpyr   Útypingr   r   ra   rG   r   r   r   r   Ú<module>   s   }9
ÿ