
    =%j="                     x    S r SSKrSSKrSSKJrJrJrJrJrJ	r	  SSK
Jr  SSKJrJrJrJrJr  Sr " S S	5      rg)
u  
V16 — Executor: GTC limit al ask + bump, espera 4s si queda live.

  - status=matched/filled → fill confirmado al precio límite
  - status=live/open      → esperar LIVE_ORDER_WAIT segundos, luego intentar cancelar:
      · si se cancela  → no hubo fill → no entrar
      · si ya no existe → ya se llenó durante la espera → entrar
  - Error                 → no entrar

Sin verify_fill, sin market orders, sin phantoms.
    N   )ConfigHOSTCHAIN_ID
MIN_SHARESPAPER_SLIPPAGE
snap_price)
ClobClient)ApiCredsOrderArgsV2BalanceAllowanceParams	AssetTypeOrderPayload   c                       \ rS rSrS\4S jrSS\S\4S jjrS\	S\S	\S
\	S\
\\	\\	4   4
S jrS\	S\4S jrS\	S\4S jrS\4S jrSrg)Executor   cfgc           	         Xl         S U l        SU l        SU l        UR                  (       Ga  [
        R                  " SS5      R                  5       R                  SS5      n[
        R                  " SS5      R                  5       n[        [
        R                  " SS5      5      n[        [
        R                  " S5      [
        R                  " S	5      [
        R                  " S
5      S9n[        [        [        UXTUS9U l        U R                  5       n[        SUR                   R#                  5        SU SUS 35        g [        SUR                   R#                  5        S35        g )N        PK 0x
POLY_PROXYPOLY_SIG_TYPE2POLY_API_KEYPOLY_API_SECRETPOLY_API_PASSPHRASE)api_key
api_secretapi_passphrase)hostchain_idkeycredssignature_typefunderz[*] Executor TAKER LIVE [z
] | proxy=z | balance=$.4fz[*] Executor TAKER PAPER [])r   client_balance_cache_balance_tsliveosgetenvstripreplaceintr   r
   r   r   get_balanceprintassetupper)selfr   pkproxysig_typer&   bals          &/var/www/html/Poly/V16/v16/executor.py__init__Executor.__init__   s(   !!888yyr*002::4DByyr288:E299_c:;H		.199%67!yy)>?E
 %H"UDK ""$C-ciioo.?-@ A 'c#Y8 9 .syy/@.ACD    	use_cachereturnc                    U R                   R                  (       a  U R                  (       d  gU(       a2  [        R                  " 5       U R                  -
  S:  a  U R
                  $  U R                  R                  [        [        R                  S95      n[        UR                  SS5      5      S-  nX0l        [        R                  " 5       U l        U$ ! [         a    U R
                  n N:f = f)Ng    @   )
asset_typebalancer   g    .A)r   r.   r+   timer-   r,   get_balance_allowancer   r   
COLLATERALr3   get	Exception)r8   rA   rr<   s       r=   r4   Executor.get_balance4   s    xx}}DKK$))+(8(88B>&&&	&11&)2F2FGA aeeIq)*S0C "99;
	  	&%%C	&s   (AC C10C1token_idpricesizelabelc                    [        U5      n[        [        US5      [        5      nU R                  R
                  (       a  U R                  (       d[  [        U[        -   5      nS[        [        R                  " 5       5       SU 3n[        SU SUS SUS SUS	 S
XS-  S 3
5        SXeS4$ [        X R                  R                  -   5      nXs-  nU R                  SS9n	XS-  :  a  [        SU SU	S SUS 35        g [        UUUSS9n
U R                  R                  U
SS9n[        U[         5      (       a  SUS.nUR#                  S5      =(       d    UR#                  S5      =(       d    SnUR#                  S5      =(       d    SR%                  5       nUR#                  S5      =(       d    UR#                  S5      =(       d    SnUS;   ab  ['        UR#                  S5      =(       d    U5      nUS :  a  UOUn[        S!U SUS S"US	 S#[!        U5      S S$  S%3	5        S[!        U5      US4$ US&;   a  U R                  5       n[        S'U SUS S"US	 S([(         S)[!        U5      S S$  S%35        [        R*                  " [(        5        U R-                  U5        U R                  5       n[        UU-
  S*5      nUUS+-  :  a@  US :  a  [        UU-  5      OUn[        S,U S-US S"US	 S.US S/3	5        S[!        U5      US4$ [        S0U S1[(         S2US3 S435        g[        S5U S6U=(       d    U=(       d    U 35        g! [.         a'  n[        S7U S6[!        U5      S S8  35         S nAgS nAff = f)9N   paper__z  [PAPER TAKE] z @ z.2fz (ask=z) x z.1fz sh = $Tmatched)rA   g?z  [TAKE SKIP] z: balance $z	 < cost $)Fr   r   r   BUY)rN   rO   rP   sideGTC)
order_args
order_type)successorderIDr]   order_idr   statuserrorMsg	error_msg)rV   filledtakingAmountr   z  [TAKE FILLED] z x z
 sh | oid=   z...)r.   openpendingz  [TAKE WAITING] u    sh — esperando zs fill... oid=r   g      ?z  [TAKE DELAYED] z @ ~z sh (balance -z$ confirma fill)z  [TAKE TIMEOUT] z: sin fill en zs (balance delta=r)   z$)z  [TAKE FAIL] : z  [TAKE ERR] x   )r	   maxroundr   r   r.   r+   r   r3   rG   r5   aggressive_bumpr4   r   create_and_post_order
isinstancestrrJ   lowerfloatLIVE_ORDER_WAITsleep_cancel_checkrK   )r8   rN   rO   rP   rQ   
fill_priceoidaggressive_pricecostr<   argsrespr_   errtakingactual_size
bal_before	bal_afterspentactual_pricees                        r=   place_taker_orderExecutor.place_taker_orderF   s   5!E$NJ/xx}}DKK#EN$:;J3tyy{+,AeW5COE7#j-=VE#; OCj
(9#'>@ A)33%ehh.F.F&FG&.N5'SIYtCjQR%:	&!&	D ;;44  5 D
 $$$#'D9XXi(FDHHZ,@FBChhx(.B557FXXj)HTXXk-BHbC..txx7?4@(.
f(s3CC2H I&s+:c#hsm_CI JSX'7BB66!--/
)%4DS3I J*$66G H Xcr]O30 1 

?+
 ""3' ,,.	j94a8D3J&?Cax:edl#;M]L-eWDc8J K#CjuSkAQS TS<BB-eWN?BS T,,1#;b: ;- ugR0Ev0E/FGH) 	&M%3q6$3<.9:%	&s,   D3M
 5CM
 M
 &#M
 

M;M66M;r^   c           	         U(       d  g U R                   R                  [        US95      n[        U[        5      (       a"  UR                  S/ 5      =(       d    / nX;   a  ggg! [         aZ  n[        U5      R                  5       nSU;   d  SU;   d  SU;   a   SnAg[        S	USS
  S[        U5      SS  35         SnAgSnAff = f)u   Intenta cancelar la orden. Devuelve True si ya estaba filled (no se pudo cancelar),
False si se canceló exitosamente (no hubo fill).Fr]   canceledT	not foundalreadyrV   Nz  [CANCEL CHECK ERR] rd   rg   <   )
r+   cancel_orderr   rm   dictrJ   rK   rn   ro   r5   )r8   r^   ry   	cancelledr   rz   s         r=   rs   Executor._cancel_check   s     	;;++L,JKD$%% HHZ4:	(  	a&,,.Cc!Y#%5c9I)(3B-3q6#2;-HI	s   AA$ $
C.+C CCc           	      X   U R                   R                  (       a  U R                  (       d  g U R                  R                  [	        US95      n[        U[        5      (       aO  UR                  S/ 5      nX=(       d    / ;   a  gUR                  S0 5      nS[        U5      R                  5       ;   $ g! [         ai  nS[        U5      R                  5       ;   d  S[        U5      R                  5       ;   a   S nAg[        SUS S  S	[        U5      S S
  35         S nAgS nAff = f)NTr   r   not_canceledr   r   z  [CANCEL ERR] rd   rg   r   F)r   r.   r+   r   r   rm   r   rJ   rn   ro   rK   r5   )r8   r^   ry   r   ncr   s         r=   r   Executor.cancel_order   s    xx}}DKK	;;++L,JKD$%% HHZ4	R0XXnb1"c"gmmo55 	c!flln,	SV\\^0KOHSbM?"SVCR[MBC		s$   AB6 -B6 6
D) :D$? D$$D)c                    U R                   R                  (       a  U R                  (       d  g U R                  R                  5       n[	        U[
        5      (       a  UR                  S/ 5      O/ n[	        U[        5      (       a  [        U5      OSnU(       a  [        SU S35        U$ ! [         a$  n[        S[        U5      S S  35         S nAgS nAff = f)Nr   r   z  [CANCEL ALL] z ordenes canceladasz  [CANCEL ALL ERR] r   )r   r.   r+   
cancel_allrm   r   rJ   listlenr5   rK   rn   )r8   ry   r   nr   s        r=   r   Executor.cancel_all   s    xx}}DKK		;;))+D4>tT4J4JR0PRI",Y"="=I1As*=>?H 	'As}56	s   A<B, ,
C6CC)r,   r-   r   r+   N)F)__name__
__module____qualname____firstlineno__r   r>   boolrp   r4   rn   tupler   rs   r   r3   r   __static_attributes__ r@   r=   r   r      s    EF E6T e $N&# N&e N&5 N&!$N&).tS%/D)EN&`c d 2S T $C r@   r   )__doc__r/   rG   configr   r   r   r   r   r	   py_clob_client_v2r
   py_clob_client_v2.clob_typesr   r   r   r   r   rq   r   r   r@   r=   <module>r      s5   
  R R ( 
 u ur@   