
    i3                     t   d Z ddlZddlmZmZmZ ddlZddlm	Z	m
Z
  ej                  d      ZdZdZdZd	Zd
ZdZ G d d      ZdadefdZ	 	 d9dededededeeef   f
dZedk(  rP ej4                  ej6                          ed        ed        ed        e         e       Z ed       ej=                  ddddd
d      \  ZZ  ede d e  d!e ez  d"d#        e         ed$       ej=                  d%d&d'd(d)d*      \  ZZ  ede d e  d!e ez  d"d#        e         ed+       ej=                  d,d-dd.d/d0      \  ZZ  ede d e  d!e ez  d"d#        e         ed1       ej=                  d2d3d4d5d6d7      \  ZZ  ede d e  d!e ez  d"d#        e         ed        ed8       yy):u  
DYNAMIC SL/TP CALCULATOR - Ajustement intelligent basé sur l'IA
================================================================

Calcule des niveaux de Stop-Loss et Take-Profit dynamiques adaptés à :
1. La volatilité de la crypto (volatility_scorer)
2. Le régime de marché (market_regime)
3. La prédiction IA (ai_opportunity_selector)
4. L'ATR (Average True Range)

Au lieu de SL/TP fixes, chaque trade a des niveaux optimisés pour son contexte.
    N)DictTupleOptional)STOP_LOSS_PERCENTTAKE_PROFIT_PERCENTDynamicSLTP      ?      @      @g       @g?c                   p    e Zd ZdZd Z	 	 	 	 	 	 ddedededededed	ed
eeef   fdZ	 	 ddeded
efdZ	y)DynamicSLTPCalculatoruK   
    Calcule des SL/TP dynamiques adaptés au contexte de chaque trade
    c                     t         | _        t        | _        t        j                  d| j                   d| j                   d       y)zInitialise le calculateuru2   ✅ Dynamic SL/TP Calculator initialisé (Base SL=% TP=z%)N)r   base_slr   base_tploggerinfo)selfs    ./dynamic_sltp.py__init__zDynamicSLTPCalculator.__init__&   s:    (*HV[\`\h\h[iiklm    symbolvolatility_scorepredicted_volatility_6hmarket_regimeatr_percentai_confidencepatternreturnc                    | j                   }| j                  }	g }
|dkD  r~d}|dk\  rd}|
j                  d|dd       nT|dk\  rd	}|
j                  d
|dd       n6|dk\  rd}|
j                  d|dd       nd}|
j                  d|dd       ||z  }|	|z  }	|dkD  rq|dk\  r!|dz  }|	dz  }	|
j                  d|dd       nK|dk\  r!|dz  }|	d	z  }	|
j                  d|dd       n%|dk  r |dz  }|	dz  }	|
j                  d|dd       dd d!d"d#d$}||v r6||   \  }}||z  }|	|z  }	|dk7  s|dk7  r|
j                  d%| d&| d'|        |dkD  rb|d(k\  r|d	z  }|
j                  d)|dd*       nA|d+k\  r|d,z  }|
j                  d)|dd-       n |dk  r|d.z  }|
j                  d)|dd/       |dk\  r|	dz  }	|
j                  d0|dd1       n%|dk  r |	dz  }	|dz  }|
j                  d0|dd2       |d3k(  rt        }|
j                  d4| d5       nt        }t        t        t        t        |            }t        |t        t        |	            }	|	|z  }|t        k  r"|t        z  }	|
j                  d6t         d7       |	|z  }t        j                  d8| d9|d:d;|	d:d<|d:d=	       |
r|
D ]  }t        j                  d>|         t        |d?      t        |	d?      fS )@u  
        Calcule SL/TP optimaux pour ce trade spécifique
        
        Args:
            symbol: Symbole de la crypto (ex: BTCUSDT)
            volatility_score: Score volatilité (0-100) de volatility_scorer
            predicted_volatility_6h: Volatilité prédite 6h (0-10%) par AI
            market_regime: Régime marché (BULL_STRONG, BULL_WEAK, NEUTRAL, CORRECTION, BEAR)
            atr_percent: ATR en % du prix actuel
            ai_confidence: Confiance IA (0-100%)
            pattern: Pattern de trade (CREUX_REBOUND, TREND_CONTINUATION, etc.)
        
        Returns:
            (stop_loss_pct, take_profit_pct): Pourcentages ajustés
        r         ?P   r	   z
Vol HIGH (z.0fz
): SL x1.5<   g?z
Vol GOOD (z
): SL x1.3(   g?z	Vol MED (z
): SL x1.1g?z	Vol LOW (z
): SL x0.9g      @ffffff?g?z
IA Vol 6h=z.1fz%: SL x1.4, TP x1.6r
   333333?z%: SL x1.2, TP x1.3皙?ffffff?z%: SL x0.8, TP x0.7)r!   r%   )r!   r&   )r!   r!   )r'   r(   )r(   g      ?)BULL_STRONG	BULL_WEAKNEUTRAL
CORRECTIONBEARzRegime z: SL xz, TP x      @zATR=z
%: SL x1.3r   gffffff?z%: SL x1.15g333333?z%: SL x0.85zAI Conf=z
%: TP x1.2z%: SL x0.9, TP x0.8CREUX_REBOUNDzPattern CREUX_REBOUND: TP min=%u   R/R forcé à z:1u   📊 z - SL=.2fr   % (R/R=:1)u      •    )r   r   appendMIN_TAKE_PROFIT_CREUX_REBOUNDMIN_TAKE_PROFITmaxMIN_STOP_LOSSminMAX_STOP_LOSSMAX_TAKE_PROFITMIN_RISK_REWARD_RATIOr   r   debuground)r   r   r   r   r   r   r   r   sl_pcttp_pctadjustmentsvol_multiplierregime_adjustmentssl_multtp_multmin_tprisk_rewardfinal_rradjs                      r   calculate_sltpz$DynamicSLTPCalculator.calculate_sltp,   s   2  a N2%!$""Z0@/EZ#PQ!R'!$""Z0@/EZ#PQ!R'!$""Y/?.DJ#OP!$""Y/?.DJ#OPn$Fn$F #Q&&#-##""Z0G/LL_#`a(C/##""Z0G/LL_#`a(C/##""Z0G/LL_#`a &#!$
 ..1-@GWgFgF#~C""W]O6'&QXPY#Z[ ?c!#""T+c):*#EF#$""T+c):+#FG#$""T+c):+#FG BcMF-)<JGHb cMFcMF-)<<OPQ o%2F!?xqIJ$F ]Cv$>?VS&9: vo..33F0E/FbIJ F?eF86&U6#,ghWZ^[^_`" .wse_-. VQvq!111r   c                     d}|dk\  s|dk\  r|dz  }n"|dk\  s|dk\  r|dz  }n|dk  r|d	k  r|d
z  }n|}t        |d      S )u-  
        Calcule la distance du trailing stop adaptée à la volatilité
        
        Args:
            volatility_score: Score volatilité (0-100)
            predicted_volatility_6h: Volatilité prédite 6h
        
        Returns:
            trailing_stop_distance_pct: Distance en %
              @r"   r.   r	   r#   r   r&   r$          @r'   r4   )r?   )r   r   r   base_distancedistances        r    calculate_trailing_stop_distancez6DynamicSLTPCalculator.calculate_trailing_stop_distance   sk      r!%<%C$s*H#'>#'E$s*H#(?3(F$s*H$HXq!!r   N)      I@        r+   rS   rR   r+   )rR   rS   )
__name__
__module____qualname____doc__r   strfloatr   rK   rQ    r   r   r   r   !   s    n 268;,5,/.2&/E2"E2).E2 16E2 '*	E2
 %*E2 ',E2 !$E2 5:%,4GE2P DHJM";@"BG"RW"r   r   r   c                  .    t         
t               a t         S )z,Retourne l'instance singleton du calculateur)_dynamic_sltp_calculatorr   rZ   r   r   get_dynamic_sltp_calculatorr]      s      '#8#: ##r   r+   r   crypto_datar   r   c           	      2   t               }|j                  dd      }|j                  dd      }|j                  dd      }|dk(  rd|v r|j                  dd      }d}d|v r|d   j                  d	d      }n	d	|v r|d	   }|j                  | ||||||
      S )uA  
    Fonction helper pour calculer SL/TP optimaux facilement
    
    Usage dans trading_bot.py:
        from dynamic_sltp import calculate_optimal_sltp
        sl, tp = calculate_optimal_sltp(symbol, crypto_data, market_regime, pattern)
        self.open_position(symbol, "BUY", amount, sl, tp)
    
    Args:
        symbol: Symbole crypto
        crypto_data: Données crypto (de ai_predictor ou trading_bot)
        market_regime: Régime marché actuel
        pattern: Pattern de trade (CREUX_REBOUND, etc.)
    
    Returns:
        (stop_loss_pct, take_profit_pct)
    r   rR   
confidencer   rS   r+   r   ai_opportunityr   )r   r   r   r   r   r   r   )r]   getrK   )	r   r^   r   r   
calculatorr   r   r   predicted_vols	            r   calculate_optimal_sltpre      s    * -.J #'94@OOL$7M//-5K )	[ 8//)Y7 M;&#$4599:SUXY	"k	1#$=>$$) -## %  r   __main__)levelzP================================================================================zTEST DYNAMIC SL/TP CALCULATORu-   1️⃣  Crypto STABLE (BTC) - Marché NEUTREBTCUSDT-   rN   F   )r   r   r   r   r   r   u
      → SL=r   r2   r1   r3   u,   2️⃣  Crypto VOLATILE (SOL) - Bull MarketSOLUSDTU   g      @r)   g@r"   u$   3️⃣  Crypto MOYENNE - CORRECTIONADAUSDT7   r,   rM   2   u%   4️⃣  Crypto LOW VOL - Bear MarketXLMUSDT#   r&   r-   r!   r$   u   ✅ Tests terminés)r+   r+   )!rW   loggingtypingr   r   r   numpynpconfigr   r   	getLoggerr   r9   r;   r7   r<   r=   r6   r   r\   r]   rX   rY   re   rT   basicConfigINFOprintrc   rK   sltprZ   r   r   <module>r}      s    ( (  9			=	)   !$ k" k"^   $%: $ 1:*3/3 /(,/*-/ %(/ 9>eUl8K/d zGgll+	(O	
)*	(O	G,.J 

9:&& # ' FB 
Jrd%t72b5+S
9:	G 

89&& ## ' FB 
Jrd%t72b5+S
9:	G 

01&& #" ' FB 
Jrd%t72b5+S
9:	G 

12&& # ' FB 
Jrd%t72b5+S
9:	G	(O	
 A r   