
    i              
       *   d Z ddlZddlZddlZddlmZ ej
                  j                  dej
                  j                  ej
                  j                  e	                   ddl
mZmZmZ ddlmZ ddlZer eeed      Zde_        n	 eee      Zd	 Zdd
Zd ZddZ ed        ed        ederdnd         ed ej2                         j5                  d               ed        ej6                   ed            Zej=                         D ]%  \  ZZ  edd         ede         ed       	  ee      Z!e!	 ed       9 ee      Z" e#e"      dk  r ed e#e"       d       _e d   Z$e!e$z  dz
  dz  Z%e jM                  dd      Z'e jM                  de$      Z(e jM                  d d!      Z)	  ejT                  e)      Z+ ej2                         e+z
  jY                         d"z  Z- ed#        ed$e$d%d&e!d%d'e%d(d)        ed*e(d%d+e'd,d)        ed-e-d.d/e) d0        ee"d1      Z. ee"d      Z/ ee"      Z0e.re/s
 ed2       Ce.e/z
  e/z  dz  Z1e!e"d3   z
  e"d3   z  dz  Z2e!e"d4   z
  e"d4   z  dz  Z3 ed5        ed6e.d%d7e/d%d8e1d(d)        ed9e0d:        ed;e2d(d<e3d(d)        ed=e!e.kD  rd>nd?        dZ4g Z5d@Z6e2dAk  rdZ6e4dBz  Z4e5jo                  dCe2d,d)       n%e2dDk  r e3dEk  re4dFz  Z4e5jo                  dGe2d,d)       e1dHk  rIe2dk  rDe3dk  r?e4dIz  Z4e5jo                  dJe1d,d)       e0r"e0dKk  rdZ6e4dLz  Z4e5jo                  dMe0d.d0       e!e(z
  e(z  dz  Z8e8dNk  re4dLz  Z4e5jo                  dOe8d:dP       e8dQk  re4dRz  Z4dZ6e5jo                  dSe8d:d)       e'dTkD  r8e%e'dUz  k  r0e1dk  r+e4dIz  Z4e5jo                  dVe'd:dWe%dXd)       e%dk  rdZ6e4dLz  Z4e1dYk  re4dRz  Z4e5jo                  dZe1d,d[       e!e.k  re!e/k  re4d\z  Z4e5jo                  d]        ed^        ed_e4         ed`e6        e5r edadbjs                  e5              e1dckD  xr e2dUkD  xr e3dTkD  Z:e1ddkD  xr e0xr dee0cxk  xr dfk  nc xr e!e.kD  Z; edg        edhe:         edie;        e:re6sdjZ<nGe;r
e6se4dkk  rdlZ<n;e6re4dBk\  rdmZ<n1e4dkk\  rdnZ<n)e4dok\  re%dDk  rdpZ<ne4dFk\  re%dqk  rdrZ<ne%dDkD  re4dBk  rdsZ<ndtZ< edue<        dve<v re%dk  r edwe%d,dx        edy       (  ed{        ed|        ed}        ed~        ed       y#  dZ-Y |xY w# e=$ rZ> edze>        Y dZ>[>rdZ>[>ww xY w)z>Diagnostic complet des positions - simule check_technical_exit    N)datetime)TESTNET_MODEBINANCE_API_KEYBINANCE_API_SECRET)ClientT)testnetz!https://testnet.binancefuture.comc                 Z    	 t         j                  |       }t        |d         S #  Y y xY w)N)symbolprice)clientfutures_symbol_tickerfloat)r
   tickers     ./check_positions_now.py	get_pricer      s3    --V-<VG_%%s   #& *c                     	 t         j                  | d|      }|D cg c]  }t        |d          c}S c c}w #  g cY S xY w)u!   Récupère les dernières bougies1m)r
   intervallimit   )r   futures_klinesr   )r
   r   klinesks       r   
get_klinesr      sF    &&ft5&Q%+,ad,,,	s   ; 6; ; Ac                     t        |       |k  ry d|dz   z  }t        | d |       |z  }| |d  D ]  }||z  |d|z
  z  z   } |S )N      )lensum)pricesperiod
multiplier	ema_valuer   s        r   emar$   #   si    
6{Vfqj!JF7FO$v-I JZ'IZ,HI	J    c                 n   t        |       |dz   k  ry t        dt        |             D cg c]  }| |   | |dz
     z
   }}|D cg c]  }|dkD  r|nd }}|D cg c]  }|dk  r| nd }}t        || d        |z  }t        || d        |z  }|dk(  ry||z  }	ddd|	z   z  z
  S c c}w c c}w c c}w )Nr   r   d   )r   ranger   )
r    r!   ideltasdgainslossesavg_gainavg_lossrss
             r   rsir1   ,   s    
6{VaZ/4QF/DE!fQi&1+%EFE(./1!a%QQ/E/*01QAEqbq 1F15&?#f,H66'(#$v-H1}	H	B#R.!! F/1s   B(B-B2zZ==========================================================================================zBDIAGNOSTIC COMPLET DES POSITIONS - SIMULATION check_technical_exitzMode: TESTNET
PRODUCTIONzDate: z%Y-%m-%d %H:%M:%Szpositions.json
u   📊 u      ❌ Prix non disponible   u      ❌ Pas assez de données (z	 bougies)entry_pricer   r'   max_pnl	max_price	timestampzN/A<   u   
   📍 POSITION:z      Entry: z.6fz | Current: z | PnL: z+.2f%z      Max Price: z | Max PnL: z.2fu         Âge: z.0fz
 minutes ()	   u      ❌ EMA non calculableu   
   📈 INDICATEURS:z      EMA9: z
 | EMA21: z | Gap: z      RSI: z.1fz      Mom3: z
% | Mom5: z      Prix vs EMA9: z	AU-DESSUSz
EN-DESSOUSFg         zCRASH SOUDAIN: g      g   zChute rapide: Mom3=g333333ÿ   zDeath Cross: EMA gap=(   r   z+ RSI faible (g       zChute z% depuis maxg         u   Chute sévère g      ?g333333?zRetournement: max +u   % → z+.1fg333333ӿu   EMA baissière (z%)r   zPrix sous EMA9 et EMA21u   
   🎯 ANALYSE SORTIE:z      Exit Score: z      Urgent Exit: z      Raisons: z, g?g?-   K   u   
   🛡️ PROTECTIONS:z      Strong Uptrend: z      EMA Bullish + RSI Sain: u"   🛡️ PROTÉGÉ (Strong Uptrend)
   u%   🛡️ PROTÉGÉ (EMA Bullish + RSI)u   🚨 VENDRE URGENTu   ⚡ VENDRE (score>=10)   u   ⚡ VENDRE (score>=7 + perte)g      u   ⚡ VENDRE (perte importante)u"   ⏳ GARDER (micro-perte + score<8)u,   ⏳ GARDER (aucun critère de vente atteint)u   
   📌 DÉCISION: u	   PROTÉGÉu   
   ⚠️ PROBLÈME: En perte u   % mais protégé!uD         → La protection bloque la vente alors qu'on perd de l'argentu      ❌ ERREUR: z[
==========================================================================================u   🔧 RECOMMANDATIONS:uB      - Si positions en perte protégées → ajuster les protectionsuU      - Si max_pnl=0 → le max_price n'a jamais été mis à jour (jamais eu de profit))2   )   )?__doc__jsonsysosr   pathinsertdirnameabspath__file__configr   r   r   binance.clientr   numpynpr   API_URLr   r   r$   r1   printnowstrftimeloadopen	positionsitemssymposr   prices_listr   entrypnlgetr7   r8   r9   fromisoformattstotal_secondsage_minutesema9ema21rsi_valema_gap_pct
momentum_3
momentum_5
exit_scoreexit_reasonsurgent_exitappenddrop_from_maxjoinstrong_uptrendema_bullish_with_healthy_rsidecision	Exceptione r%   r   <module>r|      s,   D  
 	  277??277??8#<= > D D ! O%7FF8FNO%78F" h J K Lyl;< = |x||~&&':;<= > hDIId+,-	! R%HC	Bvh-	E#-	&MM%#=./ o{b 23{3C2DINOM"eQ#'')Q'GGK/	GGK/		'''	2B'8<<>B.==?"DK 	#%eC[U3KxDzQRST!)CWSMKL[-Z	{!DE ;"K$k"5-.u-4{2.+b/ASH
{2.+b/ASH
&(T#Jjs8KPTCUUVWXGC=)*Z-Z
47HJK$EDL[l$STU 
 K!OJ/*S1A CD$:#4!OJ"5j5EQ GH :>j1n!OJ"7C7H JK7R<"a
##nWSM$CD  )+y8C?4!OJ&s(;< HI4!OJK/-1DA FG S=S7S=0Qa
##&9'#fSQUJVW$XY7"&K!OJ !OJ"2;s2C2 FG 4<EEM!OJ 9:)+":,/0#K=12ODIIl$;#<=> &+U
S0@UZRUEU(3c(9(lg(l"wJ[Y[J[(l`ehl`l$)+&~&678./K.LMN +;H)+*r/>HZ1_+H2/H1_t6H1_t6H4ZJN;HEH%hZ01 ("sQw4SI=NOPXZ_R%h o    J K ] ^ h}	Kl  %s#$$%sE   U7%U7:AU77U-8A$U7K#U7-U41U77V<VV