o
    ^Ui,;  ã                   @   sf  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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dƒ eƒ  edƒ eƒ  edƒ edƒ edƒ eƒ  edƒ edƒ edƒ eƒ  edƒ edƒ edƒ edƒ eƒ  edƒ edƒ edƒ edƒ eƒ  edƒ edƒ edƒ eƒ  edƒ dS dS ) ua   
StratÃ©gie Probabiliste AmÃ©liorÃ©e
Corrections des problÃ¨mes identifiÃ©s dans le backtest BNB
é    N)ÚOptionalÚDict)Ú	dataclass)Ústats)Úlevelc                   @   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< eed	< eed
< eed< eed< dS )ÚImprovedProbabilisticSignalu   Signal probabiliste amÃ©liorÃ©ÚsymbolÚsideÚentry_priceÚ	stop_lossÚtake_profitÚleverageÚ
confidenceÚprobabilityÚexpected_valueÚreasonÚtrend_filterN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__ÚfloatÚint© r   r   ú[/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/improved_probabilistic_strategy.pyr      s   
 r   c                   @   sP  e Zd ZdZ										d6d
ededededededededefdd„Zdede	j
dee fdd„Zde	j
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 fd"d#„Zdededed ed!edee fd$d%„Zd&ed!ed'edefd(d)„Zd*edefd+d,„Zded-ed ed!ed'edefd.d/„Zd0edefd1d2„Zdefd3d4„Zd5S )7ÚImprovedProbabilisticStrategyuB  
    StratÃ©gie Probabiliste AmÃ©liorÃ©e

    CORRECTIONS MAJEURES:
    1. Leverage raisonnable (50-150x au lieu de 500-1000x)
    2. Filtre de tendance (ne pas trader contre tendance forte)
    3. Calibration rÃ©aliste (ajustement des probabilitÃ©s)
    4. Z-score adaptatif selon volatilitÃ©
    5. TP/SL dynamiques
    éd   çš™™™™™©?çš™™™™™¹?ç       @çš™™™™™á?çš™™™™™É?Tç333333ã?r   Úsl_pctÚtp_pctÚlookback_windowÚz_thresholdÚmin_probabilityÚmin_evÚtrend_filter_enabledÚcalibration_factorc
           
      C   sB   || _ |d | _|d | _|| _|| _|| _|| _|| _|	| _d S )Nr   )	r   r%   r&   r'   r(   r)   r*   r+   r,   )
Úselfr   r%   r&   r'   r(   r)   r*   r+   r,   r   r   r   Ú__init__.   s   


z&ImprovedProbabilisticStrategy.__init__r   ÚdfÚreturnc                 C   sÖ   t |ƒ| jd k rdS |d jd }|  |¡}|  |¡}||d  |d  }|| j k rI| jr5|dkr5dS |  |||||¡}|rG|  |¡rG|S dS || jkri| jrW|dkrWdS |  	|||||¡}|ri|  |¡ri|S dS )	u    Analyse probabiliste amÃ©liorÃ©eé2   NÚcloseéÿÿÿÿÚmeanÚstdÚSTRONG_DOWNÚ	STRONG_UP)
Úlenr'   ÚilocÚ_calculate_statisticsÚ_detect_trendr(   r+   Ú_create_long_signalÚ_validate_signalÚ_create_short_signal)r-   r   r/   Úcurrent_pricer   ÚtrendÚz_scoreÚsignalr   r   r   ÚanalyzeH   s0   


ÿ
õ
ÿz%ImprovedProbabilisticStrategy.analyzec                 C   sœ   |d j ddd� ¡ jd }|d j ddd� ¡ jd }|d jdd… j}|d |d	  |d	  d
 }||d kr@|dkr@dS ||d k rL|dk rLdS dS )u’   
        DÃ©tecte la tendance pour filtrer les trades contre-tendance

        Returns:
            'STRONG_UP', 'STRONG_DOWN', 'NEUTRAL'
        r2   é   F)ÚspanÚadjustr3   r1   iìÿÿÿNr   r   gÕxé&1ð?ç      à?r7   gV-²�ïï?g      à¿r6   ÚNEUTRAL)Úewmr4   r9   Úvalues)r-   r/   Úema_20Úema_50Úrecent_pricesÚ	trend_pctr   r   r   r;   t   s   z+ImprovedProbabilisticStrategy._detect_trendc                 C   s´   |d j | j d… j}t |¡}t |¡}t |¡}t t |¡¡}t |¡}t |¡}t 	|d¡}	t 	|d¡}
|dkrA|| nd}t
 |¡}t
 |¡}||||||	|
|||dœ
S )u-   Calcule statistiques sur la fenÃªtre lookbackr2   Né   éK   r   )
r4   r5   ÚmedianÚreturns_meanÚreturns_stdÚpercentile_25Úpercentile_75ÚcvÚskewnessÚkurtosis)r9   r'   rJ   Únpr4   r5   rQ   ÚdiffÚlogÚ
percentileÚscipy_statsÚskewrX   )r-   r/   Úwindowr4   r5   rQ   ÚreturnsrR   rS   rT   rU   rV   rW   rX   r   r   r   r:   �   s.   






öz3ImprovedProbabilisticStrategy._calculate_statisticsr?   rA   r   r@   c                 C   sô   t j t|ƒ¡}|  ||d¡}|  |d ¡}|d }	|d|  }
|d|	  }|	| j }|| j }|| d| |  }|  ||||d¡}|dkrIdn|dkrOdnd}d	|d
›dt|ƒd›d|d d›d|d›d|› �
}t|d||
|| j|||||d�S )u.   CrÃ©e signal LONG avec calibration amÃ©liorÃ©eÚLONGrV   r!   é   r7   Ú
WITH_TRENDrH   ÚAGAINST_TRENDzMean Reversion LONG | Z: ú.2fú (ú.1fõ   Ïƒ) | P(calibrated): r   ú% | EV: ú% | Trend: ©r   r	   r
   r   r   r   r   r   r   r   r   )	r]   ÚnormÚcdfÚabsÚ_calibrate_probabilityÚ_adjust_sl_for_volatilityr   Ú_calculate_confidencer   ©r-   r   r?   rA   r   r@   Úraw_probabilityÚcalibrated_probabilityr%   r&   Úsl_priceÚtp_priceÚ
win_amountÚloss_amountr   r   r   r   r   r   r   r<   ²   s@   

ÿþþÿõz1ImprovedProbabilisticStrategy._create_long_signalc                 C   sì   t j |¡}|  ||d¡}|  |d ¡}|d }	|d|  }
|d|	  }|	| j }|| j }|| d| |  }|  ||||d¡}|dkrGdn|dkrMdnd}d	|d
›d|d›d|d d›d|d›d|› �
}t|d||
|| j|||||d�S )u/   CrÃ©e signal SHORT avec calibration amÃ©liorÃ©eÚSHORTrV   r!   rb   r6   rc   rH   rd   zMean Reversion SHORT | Z: re   rf   rg   rh   r   ri   rj   rk   )r]   rl   rm   ro   rp   r   rq   r   rr   r   r   r   r>   ê   s@   


ÿþþÿõz2ImprovedProbabilisticStrategy._create_short_signalÚraw_probr	   c                 C   sŒ   || j  }|dkr|dkrt|d dƒ}n)|dkr%|dkr%t|d dƒ}n|dkr2|dkr2|d9 }n|dkr>|dkr>|d9 }tdt|dƒƒS )	uÏ   
        Calibre la probabilitÃ© thÃ©orique vers la rÃ©alitÃ©

        ProblÃ¨me: scipy_stats.norm.cdf donne 99%+ mais rÃ©alitÃ© est 50-60%
        Solution: Ajuster avec calibration_factor et trend
        ra   r7   gš™™™™™ñ?g      è?ry   r6   çš™™™™™é?gÍÌÌÌÌÌÜ?)r,   ÚminÚmax)r-   rz   r@   r	   Ú
calibratedr   r   r   ro     s   

z4ImprovedProbabilisticStrategy._calibrate_probabilityrV   c                 C   s:   | j }|dkr|d S |dkr|d S |dk r|d S |S )uœ   
        Ajuste le SL selon la volatilitÃ© du marchÃ©

        VolatilitÃ© Ã©levÃ©e â†’ SL plus large
        VolatilitÃ© faible â†’ SL plus serrÃ©
        ç{®Gáz¤?g      ø?g¸…ëQ¸ž?g333333ó?ç¸…ëQ¸Ž?r{   )r%   )r-   rV   Úbase_slr   r   r   rp   2  s   z7ImprovedProbabilisticStrategy._adjust_sl_for_volatilityr   c                 C   s„  d}t |ƒdkr|d7 }nt |ƒdkr|d7 }n
t |ƒdkr"|d7 }|dkr+|d7 }n|d	kr4|d7 }n|d
kr<|d7 }|d }d|  k rJdk rQn n|d7 }nd|  k r[dk ran n|d7 }t |d ƒdk rm|d7 }|dkrz|dkrz|d7 }n@|dkr‡|dkr‡|d7 }n3|dkr”|dkr”|d7 }n&|dkr¡|dkr¡|d7 }n|dkr®|dkr®|d8 }n|dkrº|dkrº|d8 }tdt|dƒƒS )zCalcule score de confiancer   g      @é   ç      @rO   r!   rD   çÍÌÌÌÌÌä?r$   r"   é   rV   r€   r   g{®Gáz„?r   é
   rX   é   ra   r7   ry   r6   rH   r   )rn   r}   r|   )r-   rA   r   r   r@   r	   r   rV   r   r   r   rq   E  sB   	









z3ImprovedProbabilisticStrategy._calculate_confidencerB   c                 C   s2   |j | jk rdS |j| jk rdS |jdk rdS dS )zValide le signalFé-   T)r   r)   r   r*   r   )r-   rB   r   r   r   r=   |  s   
z.ImprovedProbabilisticStrategy._validate_signalc              	   C   s   dddddddddœS )	u   ParamÃ¨tres optimisables)r1   é–   )r   ç{®Gáz´?)rŠ   g{®GázÄ?)gÍÌÌÌÌÌü?rƒ   )rG   r„   )g333333Ã?g333333Ó?)rG   gffffffæ?)r   r%   r&   r'   r(   r)   r*   r,   r   )r-   r   r   r   Úget_optimizable_paramsŒ  s   øz4ImprovedProbabilisticStrategy.get_optimizable_paramsN)	r   r   r    r   r!   r"   r#   Tr$   )r   r   r   r   r   r   Úboolr.   r   ÚpdÚ	DataFramer   r   rC   r;   r   r:   r<   r>   ro   rp   rq   r=   r‹   r   r   r   r   r   "   s˜    öþýüûúùø	÷

ö,%þýüûú
ù8þýüûú
ù0þýüûú
ù7r   Ú__main__zP================================================================================u(   ðŸŽ¯ STRATÃ‰GIE PROBABILISTE AMÃ‰LIORÃ‰Eu)   ðŸ”§ AMÃ‰LIORATIONS vs VERSION ORIGINALE:z1. LEVERAGE RAISONNABLEu'      Avant: 500-1000x â†’ AprÃ¨s: 50-150xu2      Raison: Ã‰viter pertes/gains de >200% par tradez2. FILTRE DE TENDANCEz/   Nouveau: Ne pas trader contre tendance forteu,      MÃ©thode: EMA 20/50 + momentum 20 bougiesu   3. CALIBRATION PROBABILITÃ‰Su5      Avant: 99.6% thÃ©orique â†’ 52% rÃ©el (erreur 47%)u4      AprÃ¨s: 60% calibrÃ© â†’ 60% attendu (erreur <5%)u0      MÃ©thode: calibration_factor * bonus_tendancez4. SL/TP DYNAMIQUESz   Avant: SL fixe 0.02%u4      AprÃ¨s: SL ajustÃ© selon volatilitÃ© (0.04-0.08%)u%      Ratio: Toujours 2:1 (TP = 2 Ã— SL)u   5. CONFIDENCE AMÃ‰LIORÃ‰z$   Ajout: Bonus/malus selon tendanceu4      Ã‰vite: Trades contre-tendance Ã  haute confiance)r   Úpandasr�   ÚnumpyrY   Útypingr   r   Údataclassesr   Úscipyr   r]   ÚloggingÚbasicConfigÚINFOÚ	getLoggerr   Úloggerr   r   Úprintr   r   r   r   Ú<module>   sZ   
  zã