
    ?jL                    *   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
m
Z
mZ  e	d          ZdZedz  ez  Z e	d	          Zed
z  Zedz  Zd#dZd$dZd%d&dZd#dZd#dZd'dZd(dZd)d Zd*d!Zed"k    r e e                      dS )+    )annotationsN)Decimal)Path)datetimetimezonez2/home/agent/projects/CryptoTradingBot/Crypto_Agent"candidate_v76_fee_aware_anti_chasezruntime/experimentsz)/home/agent/.local/state/CryptoTradingBotz,research_live_decision_watchdog_markers.jsonzanti_chase_paper_watchdog.logreturndictc                     	 t                                           r+t          j        t                                                     ni S # t
          $ r i cY S w xY w)N)MARKERexistsjsonloads	read_text	Exception     B/home/agent/.hermes/scripts/ctb_research_live_decision_watchdog.pyload_markersr      sY    17Htz&**,,---bH   			s   AA AAmarkersNonec                    t           j                            dd           t                               t	          j        | dd          d           d S )NTparentsexist_ok   )indent	sort_keysutf-8encoding)r   parentmkdir
write_textr   dumps)r   s    r   save_markersr&      sM    
Mt444
djdCCCgVVVVVr   <   cmd	list[str]timeoutintsubprocess.CompletedProcessc                >    t          j        | t          dd|          S )NTcwdtextcapture_outputr*   )
subprocessrunREPO)r(   r*   s     r   r3   r3       s    >#4d4QXYYYYr   c                    t          t          j        ddddg          } | j        dk    r d| j        dd          p| j        dd          iS 	 t          j        | j                  S # t          $ r}dd| icY d }~S d }~ww xY w)	N-msrc.tools.v76_paper_runtimez--status--jsonr   errorizbad supervisor json: )	r3   sys
executable
returncodestderrstdoutr   r   r   )cpexcs     r   
supervisorrA   $   s    	cnd$A:xX	Y	YB	}455)=RYtuu-=>>8z")$$$ 8 8 866677777778s   A$ $
A?.A:4A?:A?c                    t           dz  } g }|                                 r~|                     dd                                          D ]T}|                                r>	 |                    t          j        |                     ?# t          j        $ r Y Pw xY wUd |D             }d |D             }d |D             }d |D             }d	 |D             }t          |t          d
                    }|r%t          |dd          t          d
                    nt          d
          }	|r|st          d          nX|rHt          |t          d
                    t          t          |t          d
                              z  nt          d
          }
i }t           dz  }|                                r<	 t          j        |                    d                    }n# t          $ r i }Y nw xY wt          |          t          |          ||	t          |          t          |          |rIt          t          |                    t          t          |                    z  t          d          z  nt          d
          |
t          |                    di           pi           t          |                    di           pi                                           d
S )Nztrade_journal.jsonlr   replace)r!   errorsc                D    g | ]}|                     d           dk    |S )evententryget.0rs     r   
<listcomp>ztrade_stats.<locals>.<listcomp>8   s,    <<<Q!%%..G";";q";";";r   c                D    g | ]}|                     d           dk    |S )rF   exitrH   rJ   s     r   rM   ztrade_stats.<locals>.<listcomp>9   s,    9991g& 8 8Q 8 8 8r   c           	         g | ]H}t          t          |                    d           p|                    d          pd                    IS )net_pnl_usdrealized_pnl_usd0)r   strrI   rJ   s     r   rM   ztrade_stats.<locals>.<listcomp>:   sL    bbbWXGCm,,P6H0I0IPSQQRRbbbr   c                    g | ]
}|d k    |S r   r   rK   ps     r   rM   ztrade_stats.<locals>.<listcomp>;   s    %%%!q1uuAuuur   c                    g | ]
}|d k     |S rV   r   rW   s     r   rM   ztrade_stats.<locals>.<listcomp><   s    '''AQar   rS   i999z
state.jsonr    100open_positions)
entriesclosednetlast20winslosseswinratepfopen
open_coins)RUNTIMEr   r   
splitlinesstripappendr   r   JSONDecodeErrorsumr   absr   lenrI   sortedkeys)rX   rowsliner]   exitspnlsra   rb   totalr`   rd   statesps                r   trade_statsrx   .   s   ''ADxxzz KKKCCNNPP 	 	Dzz|| KK
4 0 01111+   D
 =<$<<<G99999Ebb\abbbD%%t%%%D'''''Fgcll##E.2DScddWS\\***F  
K  
Kqw  6JSws||5L5LsSVW]_fgj_k_kSlSlOmOm5m5m  ~E  FI  ~J  ~JBE	<	B	yy{{ 	Jr||W|==>>EE 	 	 	EEE	 w<<e**D		f++RWiGCII&&U)<)<<wu~~MM]deh]i]iEII.339r::eii(8"==CIIKKLL  s$   !'B		BB;(G$ $G32G3rT   c                     t          j        t          j        dgt          ddd          } | j        dk    r| j                                        ndS )Nz:/home/agent/.hermes/scripts/ctb_copy_observation_status.pyTr'   r.   r    )r2   r3   r:   r;   r4   r<   r>   ri   )r?   s    r   copy_status_textr{   U   s\    	)eflpw{  MQ  []  
^  
^  
^B " 2 229??:r   c                 x   t           j                                        } |                     t          ddd           t
          j                            dd           t
                              d          }t          j
        t          j        ddd	t          d
ddddg
t          | |t          j        d           d S )Ntruefalse)CTB_STRATEGY_IDCTB_PAPER_TRADINGCTB_DRY_RUNTr   abr6   r7   --strategy-idz--iterations360z--interval-seconds60r8   )r/   envr>   r=   start_new_session)osenvironcopyupdateSTRATEGYLOGr"   r#   re   r2   Popenr:   r;   r4   STDOUT)r   logs     r   start_paper_runr   Z   s    
*//

CJJ8&Y`aabbbJTD111
((4..C	<oxYgin  qE  GK  MU  	V      r   statstuple[bool, list[str]]c                d   g }| d         dk     r|                     d           | d         dk    r|                     d           | d         dk    r|                     d           | d	         t          d
          k    s.| d         t          d          k    s|                     d           | |fS )Nr^      sample_too_smallr_   r   net_pnl_not_positiver`   last20_not_positiverc   45rd   z1.25winrate_pf_below_gate)rj   r   )r   reasonss     r   	live_gater   i   s    GX)***U|q-...X!,---)--t1O1O.///;r   c                 b   t                      } g }t                      }t          |t                    r1|                    d          pi                     t
                    pi ni }t          |                    d          o|                    d                    }|s#t                       |                    d           t                      }t          |          \  }}t          t          j        dddt
          dd	gd
           t          t          j        dddddgd
           |d         dz  dz  }|r|                     d          s{|                    d|d          d|d         dd|d         dd|d         dd|d         dd           t          j        t           j                                                  | d<   n|d         d k    r|sd!| }	|d k    r|                     |	          s|                    d"|d          d|d         dd|d         dd|d         dd|d         dd#d$                    |           d%           t          j        t           j                                                  | |	<   t)                      }
d&|
v rad'|
v r]|                     d(          sH|                    d)           t          j        t           j                                                  | d(<   t+          |            |r"t-          d*                    |                     d+S ),NrA   runningenv_okum   ⚙️ Anti-Chase Paper-Run war gestoppt und wurde read-only/paper neu gestartet. Keine Orders, kein Signing.r6   zsrc.tools.analyze_trade_timingr   z--outputz/runtime/reports/trade_timing_analysis_latest.md   )r*   zpaper_scorecard_report.pyz)runtime/reports/paper_scorecard_latest.mdz
--max-bots10r^   
   live_ready_alerteduY   🟢 Entscheidung nötig: Anti-Chase Paper erfüllt die quantitativen Live-Gates. closed=z, net=r_   z.4fz	, last20=r`   z, PF=rd   z.2fz
, winrate=rc   z.1fuR   %. Nächster Schritt: Live-Preflight/Reconcile/Stops/Alerts und explizites Sir-GO.r   negative_milestone_uU   🔴 Genug Paper-Info für eine Research-Entscheidung, aber NICHT live-ready: closed=z%, Blocker=z, uI   . Empfehlung: Strategie/Entry/Exit-Regeln überarbeiten statt live gehen.zFortschritt: 84/84z	allowed 0copy_84_zero_allowedu   📌 Copy Observation 7d ist vollständig und bleibt bei allowed=0. Entscheidung: Copy nicht live; Watchlist/Copy-Shadow-v2 statt Executor.
r   )r   rA   
isinstancer
   rI   r   boolr   rj   rx   r   r3   r:   r;   r   nowr   utc	isoformatjoinr{   r&   print)r   messagessupstrategy_supr   r   readyr   	milestonekey	copy_texts              r   mainr   v   s   nnGH
,,CJTUXZ^J_J_gSWW\**0b55h??E2egL<##I..M<3C3CH3M3MNNG I  H  	I  	I  	IMMEu%%NE7 ?RZ\f  iZ  	[  eh  i  i  i  i4jBmo{  ~B  	C  MP  Q  Q  Q  QxB&",I BW[[!566 BVHoV V-25\_V VHMh_V V+  VV V-29-=  VV V V	
 	
 	

 )1X\(B(B(L(L(N(N$%%	xB		u	/I//??7;;s#3#3?OOZ/Z Z16ucZ ZLQRZOcZ ZDkhZ Z16y1AhZ ZRVR[R[\cRdRdZ Z Z   $<55??AAGCL !""Iy(([I-E-EgkkZpNqNq-E  f  	g  	g  	g*2,x|*D*D*N*N*P*P&' #dii!!"""1r   __main__)r	   r
   )r   r
   r	   r   )r'   )r(   r)   r*   r+   r	   r,   )r	   rT   )r	   r   )r   r
   r	   r   )r	   r+   )
__future__r   r   r   r2   r:   decimalr   pathlibr   r   r   r4   r   rg   	STATE_DIRr   r   r   r&   r3   rA   rx   r{   r   r   r   __name__
SystemExitr   r   r   <module>r      s   " " " " " "  				     



             ' ' ' ' ' ' ' 't@AA/
&
&
1D<==		C	C11   W W W W
Z Z Z Z Z8 8 8 8$ $ $ $N; ; ; ;
   
  
  
  
 0 0 0 0f z
*TTVV

 r   