
    9i.                        d Z ddlZddlZddlZddlZddlmZmZ ej                  j                  ej                  j                  e
            ZdZej                  j                  ed      Zej                  j                  ed      ZdZdZd	Zd
ZdZd ZddZd Zd Zd Zd Zd Zd Zd Zd Zdede fdZ!d Z"e#dk(  r e"        yy)uC  
simulate_signals_today.py — Simulation de l'impact des signaux macro sur les trades du jour

Récupère les funding rates + taker ratios ACTUELS comme proxy des valeurs au moment des trades.
Montre : score signal au moment hypothétique de chaque trade + ce qui aurait changé.

Usage: python3 simulate_signals_today.py
    N)datetimetimezonezhttps://fapi.binance.comzsignal_cache.jsonzespion_history.jsong{Gz?g{Gzti  i ic                 8    | j                  d      r| d d dz   S | S )NUSDCUSDT)endswith)syms    simulate_signals_today.pyusdt_symr      s$    
||F3Bx&  J    c                     	 t        j                  | |d      }|j                          |j                         S # t        $ r Y y w xY w)N   )paramstimeout)requestsgetraise_for_statusjson	Exception)urlr   rs      r   r   r   #   sB    LLVQ7	vvx s   7: 	AAc                 v    t        |       }t        t         dd|i      }|rd|v rt        |d         dz  dfS y)z!Retourne (funding_pct, has_perp).z/fapi/v1/premiumIndexsymbollastFundingRated   T)NF)r   r   FAPIfloat)r
   fsymds      r   fetch_fundingr!   ,   sM    C=Dtf)*Xt,<=A!#Q()*S0$66r   c                 ~   t        |       }t        t         d|ddd      }t        t         dd|i      }|rt        |t              r|syt        |d         }d	\  }}|D ]D  }|t        |j                  d
d            |z  z  }|t        |j                  dd            |z  z  }F ||z   }|dk(  ry||z
  ||z  dfS )z-Retourne (net_flow_usd, buy_ratio, has_data).z!/futures/data/takerlongshortRatio15m   )r   periodlimitz/fapi/v1/ticker/pricer   )r         ?Fprice)        r)   buyVolr   sellVolT)r   r   r   
isinstancelistr   )	r
   r   dataprice_dr(   buy_volsell_volbartotals	            r   fetch_taker_ratior4   5   s    C=D$89dV[fg;hiDTF/08T2BCGz$-W''"#E GX 9E#''(Q/0588E#'')Q/05889 hEzXw44r   c                 |    | t         k\  ry| t        k  ry| t        z
  t         t        z
  z  }t        dd|z  z
  d      S )Ng       @g       @g      @   )FUNDING_BULLFUNDING_BEARround)avg_fundingts     r   funding_scorer<   H   sA    l"		$	|	#|(CDAsQw""r   c                     | t         k\  rd}n"| t        k\  rd}n| dk\  rd}n| t        k\  rd}nd}|dk\  rt        d|d	z         }n|d
k  rt	        d|d	z
        }t        |d      S )Ng      "@g      @r   g      @g      @g      ?g333333?
         ?g?r6   )NETFLOW_HIGHNETFLOW_MEDNETFLOW_WARNminmaxr9   )net_flow	buy_ratioss      r   netflow_scorerH   Q   su    <	[	 	Q	\	!DAG	d	1s7OA;r   c                 (    | dk\  ry| dk\  ry| dk\  ryy)N   r?   r>   g333333?   gffffff?r'    r3   s    r   size_mod_from_scorerN   c   s#    {	"	!r   c                     | dk  S )uQ   En observation mode, jamais de veto réel — mais on note si ça l'aurait été.   rL   rM   s    r   
would_vetorQ   n   s    19r   c                  ,   t        t              5 } t        j                  |       }d d d        t	        j
                  t        j                        j                  d      }D cg c]  }||j                  dd      v s| c}S # 1 sw Y   `xY wc c}w )N%Y-%m-%d
entry_time )
openHISTORY_FILEr   loadr   nowr   utcstrftimer   )fr.   todayr;   s       r   load_today_tradesr^   u   ss    	l	 qyy|LL&//
;E@!ulB(??A@@  As   B$B>BBc           	         i }t        t        |             }|D ]e  }t        dt        |       ddd       t	        |      \  }}t        |      \  }}}|||||d||<   |rdnd}	t        |r|	 d	|d
d|ddn|	       g |S )zERetourne un dict {sym: {funding_pct, net_flow, buy_ratio, has_perp}}.z  Fetching z... T)endflush)funding_pctrE   rF   has_perp	has_taker   ✅   ❌ no perpz	 funding=+.5fz
% netflow=z+.0f$)r-   setprintr   r!   r4   )
symbolsresultsuniquer
   fundingrd   rE   rF   re   statuss
             r   fetch_signals_per_coinrq   ~   s    G#g,F dHSM?#.CtD)#.):3)?&)Y" " "
 #h	'$z(4J\bcd Nr   signalsreturnc                    g g }}| j                         D ]O  \  }}|d   s|d   }t        |      }t        |d   |d         }|j                  |       |j                  |       Q |syt	        |      t        |      z  }t	        |      t        |      z  }	||	z   }
|
dk\  rd}n|
dk\  rd	}n|
d
k\  rd}n
|
dk\  rd}nd}t        |d      t        |	d      t        |
d      |fS )zERetourne (funding_score_avg, netflow_score_avg, total_score, interp).rd   rc   rE   rF   )      @ru         $@NEUTRAL   BULLISH_STRONG   BULLISH	   rw      BEARISHBEARISH_STRONGr6   )itemsr<   rH   appendsumlenr9   )rr   fundingsnetflowsr
   rG   r\   fsnsavg_favg_nr3   interps               r   compute_global_scorer      s    RhH--/ Q}m11Z=!K.9 (MCM)EMCM)EEME{!	"	!	!!?E%OU5!_fDDr   c                     t        d       t        dt        j                         j                  d      z          t        d       t                t	               } | st        d       y t        dt        |        d       t        t        d | D                    }t        dt        |       d	       t        |      }t        |      \  }}}}t        |      }t        |      }t                t        d
       t        d|dd| d       t        d|dd|dd       t        d|dd|rdnd        t        d
       t                t        ddddddddddddd d!dd"d#d$d%d&d$d'        t        d(       d)}	d)}
g }t        | d*      D ]u  \  }}|d+   }|d,   }|d-   }|j                  d.d/      d d0 }|j                  d1d2      d d3 j                  d4      d*   d d5 }|	|z  }	|j                  |i       }|j                  d6d7      }|sd8}d }d9}d9}d:}n-|d;   }t        |      }t!        |d<   |d=         }||z   }|dd>}|rt        |      nd?}|rt        |      nd7}||z  }d2}|r|d@k  r
dA|dBdC}d)}n+|r
dD|dBdE}d)}n|d?k  r||z  |z
  }dF|ddG|dBdH|dBdE}ndI}|
|z  }
|dJk  s|r|j#                  |||||||r|nd dK       |d@k\  rdLnd2}t        |dd|dd|dd| |dMdN|dMdN|d#d$|d&d$|        x t        d(       |
|	z
  }t        d2ddd2dddOdd|	dPdQd2d&dR|
dBdH|dBdE       t                t        d
       t        dS       t        d
       t        dTdddUdddVdWddXd&ddYdddZddd[ddd\d       t%        |j'                               D ]  }||   } | d6   st        |ddd]d        t        | d;         }!t!        | d<   | d=         }"|!|"z   }#t        |#      rd^nd2}$t        |ddd_dd| d;   d`dN| d<   dad| d=   dbd|!dcd|"dcd|#dc|$         t                t        d
       t        dd       t        d
       t        de|dd| d       t        df|	dBdg       t        dh|
dBdg       t        di|dBdg       t                |st        dj       nat        d$t        |       dk       |D ]D  }%|%dl   rdmndF|%dn   d}&t        do|%dp   ddq|%dr   dBds|%dt   dBdu|& dv|%dw   dd|%dx   dydz       F t                t(        j*                  j-                  t.              rr	 t1        t.              5 }'t3        j4                  |'      }(d d d        (j                  d{d/      d d3 })|(j                  d|d/      }*t        d}|) d~|* d>       t                y t        d       t                y # 1 sw Y   cxY w# t6        $ r Y t                y w xY w)NzF======================================================================u&     SIMULATION IMPACT SIGNAUX MACRO — rS   u    Aucun trade trouvé aujourd'hui.u   📋 u    trades trouvés aujourd'hui
c              3   &   K   | ]	  }|d      yw)r   NrL   ).0r;   s     r   	<genexpr>zmain.<locals>.<genexpr>   s     3qq{3s   u%   📡 Récupération des signaux pour z	 coins...u   ──────────────────────────────────────────────────────────────────────z  SCORE GLOBAL ACTUEL : z.1fz/20 ()z  Composantes : funding_score=z.2fz/10  netflow_score=z/10u     Size modulator : ×u     |  Veto (si activé) : u
   OUI ⚠️NON#z>2r`   Heurez>5Symbolez>15PnLz>7Maxz>6Exitz>22z  zSignal/Perpz>12u   Impact hypothétiqueuJ  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────r)      r   pnl_pctmax_pnlexit_reason?   rT   rU      TrP   rd   Frg   ru   rv   rc   rE   rF   z/20r?   r   u	   VETO → z+.3fu	   % évitéu   VETO (gain manqué z%)   ×u    → u   % (Δu   ×1.00 → identiquegGz?)r
   pnlhypomodvetofundscore+z>6.3fz% TOTALz>+7.3fz3%                                                  z  HYPO: u$     DÉTAIL PAR COIN (signaux actuels)CoinPerpzFunding%z>10zNetFlow$RatioFScoreNScoreTotalu   ❌u    ⚠️rf   z>+10.5fz>+12.0fz>7.4fz>7.2fz  CONCLUSIONz  Score global aujourd'hui : u     PnL réel    : %u%     PnL hypothétique (avec signaux) : z  Delta       : uP     ✅ Aucun trade n'aurait été modifié avec ces signaux (score global neutre)u$    trade(s) auraient été impactés :r   VETOr   z    r
   u     pnl_réel=r   z%  pnl_hypo=r   z
%  action=z  score=r   r   rh   z
% funding)	timestampscore_totalu"     📦 Cache live disponible (maj u   ) — score=u@     ℹ️  Pas de cache live (signal_aggregator.py non démarré))rk   r   rY   r[   r^   r   r-   rj   rq   r   rN   rQ   	enumerater   splitr<   rH   r   sortedkeysospathexists
CACHE_FILErV   r   rX   r   )+tradesrl   per_coinr   r   r3   r   r   r   total_real_pnltotal_hypo_pnltrades_impactedir;   r
   r   r   reasonentry_tssigrd   perp_tag	coin_fundcoin_fscoin_ns
coin_totalcoin_mod	coin_vetohypo_pnl
impact_strdelta	pnl_colorrG   fs2ns2totflagt2actionr\   cachetsscs+                                              r   mainr      s   	(O	
2X\\^5L5LZ5X
XY	(O	G F01	E#f+<
=> 33F334G	1#g,y
IJ%g.H 1:BE6
e
$CeD	G	*	$U3KuVHA
>?	*2c(2EbXS
QR	!#c*CTXL^cCd
ef	*	G 
SHAgb\9S/5*AeBZqPSTVWdehViik  mC  lD  E  F	+NNO&!$ :
1X;Y<Y<55,Sb155r*3B/55c:1=bqA#ll3#77:u-$HIGGJM*I%i0G%c*os;7GHG')J%c*#.H 8@'
3S.6Jz*E	 >
q$SJi8JH.s4j;JH^8^s*Ehs^5$uU4LPRSJ/J("d?i""3I'/T$  !8C	fAhr]!C9Ai[U2uoRs|2hs^2j\K	
o:
x 
+^+E	RG1RG1WSM>&*AAtHH^D1uTl"F G	G 
*	
01	*	VCL&Aj%5Qz#6FaPR|STU]^`Taabcklnboopqxy{p|
}~hmmo& 
SSM}SIQuRj)*Am,-AjM1[>:Ci&sOyS	5*Aa&6w%?r!J-PWAXXY;&aE{!C;aE{4&R 	S
S 
G	*	.	*	)%E&
CD	nT2!
45	1.1Fa
HI	U4L
*+	G`a3'((LMN! 	NB!&zVBuIc?/CFDE3|BuId3C D j.j Ag;s+5FD0AM N	N
 
G 
ww~~j!	j! %Q		!%;,Sb1B=#.B6rd,rd#NO
 
G 	PQ	G% %
  	 
G		s+   W" W4AW" WW" "	W87W8__main__)N)$__doc__r   r   sysr   r   r   r   dirnameabspath__file__
SCRIPT_DIRr   joinr   rW   r7   r8   r@   rA   rB   r   r   r!   r4   r<   rH   rN   rQ   r^   rq   dicttupler   r   __name__rL   r   r   <module>r      s     	 
  'wwrwwx89
)ww||J(;<
ww||J(=> 5&#$A,E$ E5 EF[| zF r   