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	 ddl
mZ e	G dd„ dƒƒZG dd	„ d	ƒZed
kr^edƒ eƒ  edƒ edƒ edƒ edƒ eƒ  edƒ edƒ edƒ edƒ dS dS )u~   
StratÃ©gie Probabiliste FINALE - OptimisÃ©e pour BNB 1m
Corrections: Calibration ajustÃ©e pour gÃ©nÃ©rer des signaux valides
é    N)ÚOptionalÚDict)Ú	dataclass)Ústatsc                   @   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 )ÚFinalProbabilisticSignalzSignal probabiliste finalÚsymbolÚsideÚentry_priceÚ	stop_lossÚtake_profitÚleverageÚ
confidenceÚprobabilityÚexpected_valueÚreasonÚtrend_contextN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__ÚfloatÚint© r   r   úX/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/final_probabilistic_strategy.pyr      s   
 r   c                   @   s2  e Zd ZdZ										d2d
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fd'd(„Zded)ed ed!edef
d*d+„Zd,edefd-d.„Zdefd/d0„Zd1S )3ÚFinalProbabilisticStrategyu  
    StratÃ©gie Probabiliste Finale OptimisÃ©e

    CALIBRATION FIXÃ‰E:
    - calibration_factor augmentÃ© Ã  0.80 (au lieu de 0.60)
    - min_probability rÃ©duit Ã  0.50 (rÃ©aliste pour 50%+ win rate)
    - Z-threshold ajustÃ© Ã  1.8 (plus de signaux)
    éd   çš™™™™™©?çš™™™™™¹?çš™™™™™ù?ç¸…ëQ¸Þ?ç¸…ëQ¸ž?Tçš™™™™™é?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#FinalProbabilisticStrategy.__init__r   ÚdfÚreturnc                 C   sà   t |ƒ| jd k rdS |d jd }|  |¡}| jr|  |¡nd}||d  |d  }|| j k rN| jr:|dkr:dS |  |||||¡}|rL|  |¡rL|S dS || jkrn| jr\|d	kr\dS |  	|||||¡}|rn|  |¡rn|S dS )
u   Analyse probabiliste optimisÃ©eé2   NÚcloseéÿÿÿÿÚNEUTRALÚmeanÚstdÚSTRONG_DOWNÚ	STRONG_UP)
Úlenr&   ÚilocÚ_calculate_statisticsr*   Ú_detect_trendr'   Ú_create_long_signalÚ_validate_signalÚ_create_short_signal)r,   r   r.   Úcurrent_pricer   ÚtrendÚz_scoreÚsignalr   r   r   Úanalyze>   s(   

÷z"FinalProbabilisticStrategy.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 tendance forter1   é   F)ÚspanÚadjustr2   r0   iìÿÿÿNr   r   gÕxé&1ð?ç      à?r7   gV-²�ïï?g      à¿r6   r3   )Úewmr4   r9   Úvalues)r,   r.   Úema_20Úema_50Úrecent_pricesÚ	trend_pctr   r   r   r;   d   s   z(FinalProbabilisticStrategy._detect_trendc                 C   sH   |d j | j d… j}t |¡t |¡t |¡t |¡ t |¡dœS )zCalcule statsr1   N)r4   r5   ÚcvÚkurtosis)r9   r&   rI   Únpr4   r5   Úscipy_statsrO   )r,   r.   Úwindowr   r   r   r:   s   s   üz0FinalProbabilisticStrategy._calculate_statisticsr?   rA   r   r@   c                 C   s,  t j t|ƒ¡}|| j }|dkrt|d dƒ}n|dkr$t|d dƒ}tdt|dƒƒ}|  |d ¡}|d	 }	|d
|  }
|d
|	  }|	| j }|| j }|| d
| |  }|  	||||¡}|dkredn|dkrkdnd}d|d›dt|ƒd›d|d d›d|d›d|› �
}t
|d||
|| j|||||d�S )u   CrÃ©e signal LONGr7   çffffffò?ç      è?r3   çÍÌÌÌÌÌð?çffffffæ?çÍÌÌÌÌÌÜ?rN   ç       @é   Ú
WITH_TRENDÚAGAINST_TRENDzMR LONG | Z:ú.2fú (ú.1fõ   Ïƒ) | P:r   ú.0fú% | EV:ú% | ÚLONG©r   r   r	   r
   r   r   r   r   r   r   r   )rQ   ÚnormÚcdfÚabsr+   ÚminÚmaxÚ_adjust_sl_for_volatilityr   Ú_calculate_confidencer   ©r,   r   r?   rA   r   r@   Úraw_probÚcalibrated_probr$   r%   Úsl_priceÚtp_priceÚ
win_amountÚloss_amountÚevr   Ú	trend_ctxr   r   r   r   r<   ~   sJ   


ÿÿÿÿõz.FinalProbabilisticStrategy._create_long_signalc                 C   s$  t j |¡}|| j }|dkrt|d dƒ}n|dkr"t|d dƒ}tdt|dƒƒ}|  |d ¡}|d	 }	|d
|  }
|d
|	  }|	| j }|| j }|| d
| |  }|  ||||¡}|dkrcdn|dkridnd}d|d›d|d›d|d d›d|d›d|› �
}t	|d||
|| j|||||d�S )u   CrÃ©e signal SHORTr6   rS   rT   r3   rU   rV   rW   rN   rX   rY   rZ   r[   zMR SHORT | Z:r\   r]   r^   r_   r   r`   ra   rb   ÚSHORTrd   )
rQ   re   rf   r+   rh   ri   rj   r   rk   r   rl   r   r   r   r>   ¶   sJ   


ÿÿÿÿõz/FinalProbabilisticStrategy._create_short_signalrN   c                 C   s:   | j }|dkr|d S |dkr|d S |dk r|d S |S )u   Ajuste SL selon volatilitÃ©ç{®Gáz¤?ç      ø?r"   g333333ó?ç¸…ëQ¸Ž?r#   )r$   )r,   rN   Úbase_slr   r   r   rj   æ   s   z4FinalProbabilisticStrategy._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 }n|dkrE|d7 }d|d   k rQdk rWn n|d7 }t |d ƒdk rc|d7 }|dksk|dkrp|d7 }n|dkrx|d7 }tdt|dƒƒS )zCalcule confidencer   g      @é   rX   é   gÍÌÌÌÌÌü?rD   gÍÌÌÌÌÌä?ç333333ã?gš™™™™™á?é   rG   é
   rx   rN   rv   rO   é   r7   r6   r3   é   r   )rg   ri   rh   )r,   rA   r   r   r@   r   r   r   r   rk   ó   s0   





z0FinalProbabilisticStrategy._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 signalFé(   T)r   r(   r   r)   r   )r,   rB   r   r   r   r=     s   
z+FinalProbabilisticStrategy._validate_signalc              	   C   s   dddddddddœS )	u   ParamÃ¨tres optimisables)r0   é–   )rv   ç{®Gáz´?)rƒ   g{®GázÄ?)rw   gš™™™™™@)rW   r|   )r   g      Ð?)rT   gÍÌÌÌÌÌì?)r   r$   r%   r&   r'   r(   r)   r+   r   )r,   r   r   r   Úget_optimizable_params&  s   øz1FinalProbabilisticStrategy.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>   rj   rk   r=   r„   r   r   r   r   r      s~    öþýüûúùø	÷

ö&ÿÿÿÿÿ
þ8ÿÿÿÿÿ
þ0&r   Ú__main__u0   ðŸŽ¯ STRATÃ‰GIE PROBABILISTE FINALE - OPTIMISÃ‰Eu   âœ… CALIBRATION FIXÃ‰E:u1      â€¢ calibration_factor: 0.80 (au lieu de 0.60)u(      â€¢ min_probability: 0.50 (rÃ©aliste)u)      â€¢ Z-threshold: 1.8 (plus de signaux)u   ðŸŽ² PROBABILITÃ‰S ATTENDUES:u      â€¢ ThÃ©orique: 98-99%u$      â€¢ CalibrÃ©e: 50-70% (rÃ©aliste)u      â€¢ Win rate cible: 55-65%)r   Úpandasr†   ÚnumpyrP   Útypingr   r   Údataclassesr   Úscipyr   rQ   r   r   r   Úprintr   r   r   r   Ú<module>   s0     õ