o
    Æ†i�0  ã                   @   sL  d Z ddlZddlZej ej ej ej e¡¡¡¡ ddlZ	ddl
ZddlmZmZ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	jdddd�ZdZe ddd¡Zej  !d¡d Z"ee e" Z#e	 $ee#ej  !d¡d  e#e%ej  !d¡ƒd  e#e%ej  !d¡ƒd  e#ej  &ddd¡dœ¡Z'eddddd�Z(e( )e'¡Z*e*�re d¡ e de( +¡ › �¡ e d¡ e d¡ e d¡ e,d ƒD ]%Z-e d!e-d" › d#�¡ e( )e'¡Z*e*�re(j.d$d%� e d&e( +¡ › �¡ qçne d'¡ e d¡ e d(¡ e d¡ dS dS ))u  
Martingale Strategy - Ultra Degen Mode
StratÃ©gie de trading martingale avec leverage jusqu'Ã  1000x

AVERTISSEMENT: SystÃ¨me extrÃªmement risquÃ©!
- La martingale double la mise aprÃ¨s chaque perte
- Avec 1000x leverage, le risque de liquidation est Ã©norme
- Utilisez uniquement avec du capital que vous pouvez perdre

Principe:
1. EntrÃ©e avec signal de base (RSI, MACD, EMA)
2. Si perte: doubler la position size au prochain signal
3. Si gain: retour Ã  la position size de base
4. Leverage adaptatif selon le niveau de martingale
é    N)ÚDictÚOptionalÚTuple)Ú	dataclass)Úlevelc                   @   sd   e Zd ZU dZej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 )ÚMartingaleSignalzSignal de trading martingaleÚ	timestampÚsideÚentry_priceÚ	stop_lossÚtake_profitÚleverageÚposition_size_usdÚmartingale_levelÚsignal_scoreÚstrategyN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpdÚ	TimestampÚ__annotations__ÚstrÚfloatÚint© r   r   úO/var/www/html/HyperOracle/crypto_trader/martingale_degen/martingale_strategy.pyr       s   
 
r   c                   @   sÒ   e Zd ZdZ									d&d
edededededededefdd„Zdej	dej	fdd„Z
dej	deeeef  fdd„Zdefdd„Zdefdd„Zdej	dee fdd„Zd efd!d"„Zdefd#d$„Zd%S )'ÚMartingaleStrategyut  
    StratÃ©gie Martingale avec signals techniques

    ParamÃ¨tres clÃ©s:
    - base_position_size: Taille de position initiale en USD
    - max_martingale_level: Niveau max de martingale (ex: 5 = jusqu'Ã  x32)
    - base_leverage: Leverage de base (ex: 100x)
    - max_leverage: Leverage maximum (ex: 1000x)
    - reset_on_win: Si True, reset Ã  base aprÃ¨s un gain
    ç      $@é   éd   éè  Tçú~j¼t“h?ç      @ç333333ã?Úbase_position_sizeÚmax_martingale_levelÚbase_leverageÚmax_leverageÚreset_on_winÚstop_loss_pctÚtake_profit_ratioÚmin_signal_scorec	           	      C   sŽ   || _ || _|| _|| _|| _|| _|| _|| _d| _d| _	t
 d¡ t
 d|› �¡ t
 d|› dd| › d�¡ t
 d|› d	|› d
�¡ d S )Nr   u$   âœ… Martingale Strategy initialisÃ©ez   Base position: $z   Max level: ú (xé   ú)ú   Leverage: u   x â†’ Úx)r&   r'   r(   r)   r*   r+   r,   r-   Úcurrent_levelÚconsecutive_lossesÚloggerÚinfo)	Úselfr&   r'   r(   r)   r*   r+   r,   r-   r   r   r   Ú__init__;   s   
zMartingaleStrategy.__init__ÚdfÚreturnc                 C   s4  |  ¡ }|d  ¡ }| |dkd¡jdd� ¡ }| |dk d¡ jdd� ¡ }|| }ddd|   |d< |d jdd	d
� ¡ |d< |d jdd	d
� ¡ |d< |d jdd	d
� ¡ }|d jdd	d
� ¡ }|| |d< |d jdd	d
� ¡ |d< |d |d  |d< |d jdd� ¡ |d< |d |d  |d< |S )z"Calcule les indicateurs techniquesÚcloser   é   )Úwindowr!   é   Úrsié   F)ÚspanÚadjustÚema_fasté   Úema_slowé   é   Úmacdé	   Úmacd_signalÚ	macd_histÚvolumeé   Ú	volume_maÚvolume_spike)ÚcopyÚdiffÚwhereÚrollingÚmeanÚewm)r7   r9   ÚdeltaÚgainÚlossÚrsÚexp1Úexp2r   r   r   Úcalculate_indicatorsX   s    z'MartingaleStrategy.calculate_indicatorsc                 C   sº  t |ƒdk rdS |jd }|jd }d}d}d}|d dk r#|d	7 }n
|d d
kr-|d	7 }|d |d krB|d |d krB|d	7 }n|d |d k rV|d |d krV|d	7 }|d |d krk|d |d krk|d	7 }n|d |d k r|d |d kr|d	7 }|d dkr’|d |d kr’|d	7 }n|d dk r¤|d |d k r¤|d	7 }|d dkr»||kr³|d	7 }n||kr»|d	7 }||krË|dkrË|| }d|fS ||krÛ|dkrÛ|| }d|fS dS )u~   
        GÃ©nÃ¨re un signal de base (LONG/SHORT) avec score

        Returns:
            Tuple (side, score) ou None
        é2   Néÿÿÿÿéþÿÿÿr   r    r?   é   r>   éF   rC   rE   rH   rJ   rK   rO   g      ø?r/   ÚLONGÚSHORT)ÚlenÚiloc)r7   r9   ÚlastÚprevÚlong_signalsÚshort_signalsÚmax_signalsÚscorer   r   r   Úgenerate_base_signalt   sF   


 
  
 

z'MartingaleStrategy.generate_base_signalc                 C   s
   d| j  S )z8Retourne le multiplicateur selon le niveau de martingaler/   )r3   ©r7   r   r   r   Úget_martingale_multiplier°   s   
z,MartingaleStrategy.get_martingale_multiplierc                 C   sF   | j dkr| jS | j| j }| j | j }| jt|| ƒ }t|| jƒS )u4   Retourne le leverage adaptÃ© au niveau de martingaler   )r3   r(   r)   r'   r   Úmin)r7   Úleverage_rangeÚ	level_pctr   r   r   r   Úget_leverage_for_level´   s   
z)MartingaleStrategy.get_leverage_for_levelc                 C   sº  |   |¡}|  |¡}|sdS |\}}|| jk rdS |jd d }|  ¡ }d| d }t| j|ƒ}|dkrD|d|  }	|d|| j   }
n|d|  }	|d|| j   }
|  ¡ }| j	| }d}t||ƒ}t
|jd d	 |||	|
||| j|d
| j› �d�
}t d¡ t d|› d|d›�¡ t d|d›�¡ t d|	d›d|d d›d�¡ t d|
d›d|| j d d›d�¡ t d|› d�¡ t d|d›d|› d�¡ t d| j› d| j› �¡ |S )u¥   
        GÃ©nÃ¨re un signal de trading martingale

        Args:
            df: DataFrame avec OHLCV

        Returns:
            MartingaleSignal ou None
        Nr^   r;   g      ð?g      à?rb   r>   g     @@r   ÚMARTINGALE_L)
r   r	   r
   r   r   r   r   r   r   r   u   
ðŸ“Š SIGNAL MARTINGALE:z	   Side: z
 | Score: z.2fz   Entry: $z   SL: $z (r!   z.3fz%)z   TP: $r1   r2   z   Position: $r.   r0   z
   Level: ú/)r\   rl   r-   re   rr   ro   r+   r,   rn   r&   r   r3   r5   r6   r'   )r7   r9   Úbase_signalr	   rk   r
   r   Ú
max_sl_pctÚsl_pctr   r   Ú
multiplierÚposition_sizeÚmax_position_sizeÚsignalr   r   r   Úgenerate_signalÄ   sR   





ö
 &z"MartingaleStrategy.generate_signalÚwonc                 C   s’   |rt  d| j› d�¡ | jrd| _d| _dS dS t  d| j› d| jd › �¡ |  jd7  _| j| jk r>|  jd7  _dS t  d| j› �¡ dS )	u|   
        Met Ã  jour l'Ã©tat de la martingale aprÃ¨s un trade

        Args:
            won: True si trade gagnant
        u!   âœ… WIN! Reset martingale level: u    â†’ 0r   u#   â�Œ LOSS! Augmentation martingale: u    â†’ r>   u5   âš ï¸�  MAX MARTINGALE LEVEL ATTEINT! Level reste Ã  N)r5   r6   r3   r*   r4   r'   Úwarning)r7   r}   r   r   r   Úupdate_after_trade  s   
þz%MartingaleStrategy.update_after_tradec                 C   s&   | j | j|  ¡ |  ¡ | j|  ¡  dœS )u*   Retourne les statistiques de la stratÃ©gie)r3   r4   Úcurrent_multiplierÚcurrent_leverageÚnext_position_size)r3   r4   rn   rr   r&   rm   r   r   r   Ú	get_stats%  s   ûzMartingaleStrategy.get_statsN)r   r    r!   r"   Tr#   r$   r%   )r   r   r   r   r   r   Úboolr8   r   Ú	DataFramer\   r   r   r   rl   rn   rr   r   r|   r   r   rƒ   r   r   r   r   r   /   sD    ÷þýüûúùø	
÷ <Lr   Ú__main__zP================================================================================u   ðŸ§ª TEST MARTINGALE STRATEGYz
2025-01-01éÈ   Ú1min)ÚperiodsÚfreqiPÃ  iô  r!   é
   rM   r"   i'  )r   ÚopenÚhighÚlowr;   rL   r   r    )r&   r'   r(   r)   u#   
âœ… Signal gÃ©nÃ©rÃ© avec succÃ¨s!z
Stats: zQ
================================================================================u(   ðŸ“‰ Simulation de pertes consÃ©cutives:é   z
--- Trade r>   z ---F)r}   zStats: u   âš ï¸�  Aucun signal gÃ©nÃ©rÃ©u   âœ… Test terminÃ©)/r   ÚsysÚosÚpathÚappendÚdirnameÚabspathÚ__file__Úpandasr   ÚnumpyÚnpÚtypingr   r   r   Údataclassesr   ÚloggingÚbasicConfigÚINFOÚ	getLoggerr   r5   r   r   r6   Ú
date_rangeÚdatesÚ
base_priceÚlinspaceÚtrendÚrandomÚrandnÚnoiseÚclosesr…   ÚabsÚrandintr9   r   r|   r{   rƒ   ÚrangeÚir   r   r   r   r   Ú<module>   sv   $
  



ú
ü





€ú


É