o
    ‘¤iÀ  ã                   @   s  d Z ddlmZmZ ddlZddlmZ G dd„ deƒZe	dk�r 	 ddl
mZ ed	ƒ ed
ƒ ed	ƒ edddd�Zedƒ e ddd¡Zedu rNedƒ edeeƒ› d�ƒ ddddddœddddddœdd d!d"ddœd#d$d%d&ddœgZg ZeD ]lZed'd	› �ƒ ed(ed) › �ƒ ed	› ƒ ed*ed+ › �ƒ ed,d-ed.  › d/�ƒ ed0ed1 › d2ed3 › d/�ƒ eed+ ed. ed1 ed3 d4d5d6d7�Ze ede¡Zeræe ed) ejejejejejejd8œ¡ qzed9ƒ ed:ƒ ed	ƒ ejd;d<„ d=d>� ed'd?d@›dAdBdC›dAdDdE›dAdFdG›dAdHdI›dAdJdK›dAdLdG›�ƒ edMƒ e edƒD ]b\Z!Z"e!dk�r0dNne!d-k�r7dOn
e!dPk�r>dQne!dR›Z#e"dS dk�rKdTn
e"dS dUk�rTdVndWZ$ee#d@›dAe"d) dC›dAe"dS dX›dYe"dZ d[ d\›dYe"d] d^›dAe"d_ dK›dAe"d` da›dYe$› �ƒ �q%ed Z%ed'd	› �ƒ edbe%d) › �ƒ ed	› ƒ edce%dS dd›dYe%dS dk�r²dendW› �ƒ edfe%dg dh›�ƒ edie%dZ d[ dj›dk�ƒ edle%d_ › �ƒ edme%d` dh›dk�ƒ ed	› ƒ e%dS dk�rednƒ edoe%dg d dh›�ƒ dS dS dS )pu�  
VRAIE MARTINGALE - Doubler dans le MÃŠME SENS jusqu'Ã  gagner

Principe:
- Prend un signal initial (LONG ou SHORT)
- Si perd â†’ DOUBLE la position dans le MÃŠME sens
- Continue jusqu'Ã  gagner OU max level
- Reset aprÃ¨s un gain

ParamÃ¨tres clÃ©s:
- Position initiale TRÃˆS PETITE pour avoir marge de doubler
- Leverage adaptÃ© selon le niveau
- Pas de limite de casino ici, on a 1000x leverage!
é    )ÚMartingaleStrategyÚMartingaleSignalN)ÚOptionalc                       sF   e Zd ZdZ‡ fdd„Zdejdee fdd„Z	de
fd	d
„Z‡  ZS )ÚTrueMartingaleStrategyuA   Vraie martingale: garde le mÃªme cÃ´tÃ© et double jusqu'Ã  gagnerc                    s"   t ƒ jdi |¤Ž d | _d| _d S )NF© )ÚsuperÚ__init__Úcurrent_sideÚlocked_in_martingale)ÚselfÚkwargs©Ú	__class__r   úK/var/www/html/HyperOracle/crypto_trader/martingale_degen/true_martingale.pyr      s   
zTrueMartingaleStrategy.__init__ÚdfÚreturnc                 C   s  |   |¡}| jr| jr| j}d}n|  |¡}|sdS |\}}|| jk r%dS || _|jd d }|  ¡ }d| d }t| j|ƒ}|dkrS|d|  }	|d|| j	   }
n|d|  }	|d|| j	   }
|  
¡ }| j| }d}t||ƒ}t|jd d	 |||	|
||| j|d
d�
}|S )uX   
        GÃ©nÃ¨re signal martingale en GARDANT le mÃªme cÃ´tÃ© aprÃ¨s une perte
        ç      ð?NéÿÿÿÿÚcloseg      à?ÚLONGé   g      ‰@Ú	timestampÚtrue_martingale)
r   ÚsideÚentry_priceÚ	stop_lossÚtake_profitÚleverageÚposition_size_usdÚmartingale_levelÚsignal_scoreÚstrategy)Úcalculate_indicatorsr
   r	   Úgenerate_base_signalÚmin_signal_scoreÚilocÚget_leverage_for_levelÚminÚstop_loss_pctÚtake_profit_ratioÚget_martingale_multiplierÚbase_position_sizer   Úcurrent_level)r   r   r   ÚscoreÚbase_signalr   r   Ú
max_sl_pctÚsl_pctr   r   Ú
multiplierÚposition_sizeÚmax_position_sizeÚsignalr   r   r   Úgenerate_signal   sJ   




öz&TrueMartingaleStrategy.generate_signalÚwonc                 C   sL   |rd| _ d| _d| _d| _dS |  j d7  _ t| jd | jƒ| _d| _dS )uj   
        Met Ã  jour l'Ã©tat aprÃ¨s un trade

        Args:
            won: True si trade gagnÃ©
        r   NFr   T)Úconsecutive_lossesr,   r	   r
   r'   Úmax_martingale_level)r   r6   r   r   r   Úupdate_after_tradec   s   

z)TrueMartingaleStrategy.update_after_trade)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpdÚ	DataFramer   r   r5   Úboolr9   Ú__classcell__r   r   r   r   r      s
    Fr   Ú__main__)ÚMartingaleBacktesterzP================================================================================u   ðŸŽ² TEST VRAIE MARTINGALEg     @�@gü©ñÒMb@?é<   )Úinitial_capitalÚtrading_fee_pctÚtimeout_minutesu"   
ðŸ“¥ TÃ©lÃ©chargement donnÃ©es...ÚBTCUSDTÚ1miè  r   u   âœ… z	 bougies
z1. Conservative (base $1)r   é   é
   iô  )Únamer+   r8   Úbase_leverageÚmax_leveragez2. Moderate (base $2)g       @é   z3. Aggressive (base $5)g      @é   é   z4. Very Aggressive (base $10)g      $@é   é2   Ú
u   ðŸ§ª TEST: rL   zPosition de base: $r+   zMax doublement: é   r8   Úxz
Leverage: rM   u   x â†’ rN   gú~j¼t“h?g      @g333333ã?)r+   r8   rM   rN   r(   r)   r$   )rL   ÚroiÚwin_rateÚpfÚtradesÚddÚcapitalzQ
================================================================================u    ðŸ�† CLASSEMENT VRAIE MARTINGALEc                 C   s   | d S )NrW   r   )rV   r   r   r   Ú<lambda>Ø   s    r]   T)ÚkeyÚreverseÚRANGz<5Ú ÚCONFIGz<35zROI %z>10zWR %z>8ÚPFz>6ÚTradesz>7zDD %zP--------------------------------------------------------------------------------u   ðŸ¥‡u   ðŸ¥ˆé   u   ðŸ¥‰Ú2rW   u   âœ…éþÿÿÿu   âš ï¸�u   â�Œz>9.2fz% rX   éd   z>7.1frY   z>5.2frZ   r[   z>7.2fu   ðŸ�† MEILLEUR: z   ROI:     z+.2fu   âœ… PROFITABLE!z   Capital: $r\   z.2fz   WR:      z.1fú%z   Trades:  z   DD:      u#   
ðŸŽ‰ MARTINGALE GAGNANTE TROUVÃ‰E!z
   Gain: $)&r=   Úmartingale_strategyr   r   Úpandasr>   Útypingr   r   r:   Úmartingale_backtesterrC   ÚprintÚ
backtesterÚfetch_binance_datar   ÚexitÚlenÚconfigsÚresultsÚconfigr!   Úrun_backtestÚresultÚappendÚtotal_return_pctrX   Úprofit_factorÚtotal_tradesÚmax_drawdown_pctÚfinal_capitalÚsortÚ	enumerateÚrankÚresÚemojiÚstatusÚbestr   r   r   r   Ú<module>   sØ   
dýûûûûê
ù
ù€@2(2ÿÿÿÿ
,
‰u