
    Kj)J                    L   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZ  e
d
          Zd4dZd5d6dZd7dZd8d9dZd:dZd;d#Z d<d%Z!d=d'Z"d>d(Z#d?d*Z$ddd+d@d.Z%d5dAd2Z&e'd3k    r e( e&                      dS )B    )annotationsN)Counterdefaultdict)Decimal)Path)	BotConfigRuntimePaths)_read_journal_rows_score_strategy)OrderIntent)CopyObservationEvidenceGlobalStrategyContextMarketRegimeContextPromotionEvidenceStrategyCandidateevaluate_global_strategyzruntime/experimentsruntime_dirr   strategy_idstrreturndict[str, object]c           	     .    | dz  |z  dz  dz  }g |                                 r|                    dd                                          D ]}|                                s	 t	          j        |          }n# t          j        $ r Y >w xY wt          |                    d          p|                    d          pd	          	                                d
k    r
                    |           g }t          t                    }t                      }t                      }g }	D ]}t          |                    d          pd                                          }
t          |                    d          pd          }t          |                    d          p|                    d          pd          t          |                    d          p|                    d          pd          z   t          |                    d          p|                    d          pd          z   t          |                    d          p|                    d          pd          z   t          |                    d          p|                    d          pd          z   }t          |                    d          p|                    d          p||z
            }|
                    |           ||
xx         |z  cc<   ||
xx         dz  cc<   t          |                    d          t                     r|                    d          ni }d|v rA	 |	
                    t          |d                              n# t"          t$          f$ r Y nw xY wdD ]<}|                    |          s|                    |          r||xx         dz  cc<   =t'          d |D                       }t)          t'          d  |D                                 }|r||z  n|rd!nd}|r|                    d          d"         nd#\   }t-          t'          |          d$          }t-          t'          d% |                                D                       d$          } r;t-          t'           fd&|                                D                       d$          n|}d' d(d          D             }d) d*d          D             }d}d}d}d"}d"}|D ]H}||z  }t1          ||          }t3          |||z
            }|d"k     r|dz  }t1          ||          }Fd"}Ii d+|d,|d-|d.t!          t5          d/ |                                D                                 d0r:t!          t5          fd1|                                D                                 ni d2|rOt-          t          |                              d          d"         d         t7          |          z  d3z  d4          ndd5|rOt-          t          |                              d          d"         d         t7          |          z  d3z  d4          ndd6t-          |d7          d8t-          |d$          d9|d:|	r-t-          t'          |	          t7          |	          z  d$          ndd;d"d<d=d>|d?         d@|dA         dB|dC         dD|dE         dF|dG         iS )HNexperimentsTradeanalysetrade_journal.jsonlutf-8replaceencodingerrorsevent
event_type exitcoinUNKNOWNrealized_pnl_usd        	entry_feeentry_fee_usdexit_feeexit_fee_usdspread_costspread_cost_usdslippage_costslippage_cost_usdfunding_costfunding_cost_usdnet_pnlnet_pnl_usd   extrarisk_usd)blocked_by_costblocked_by_spreadblocked_by_depthblocked_by_coin_leakageblocked_by_data_qualityc              3  &   K   | ]}|d k    |V  dS r   N .0ps     L/home/agent/projects/CryptoTradingBot/Crypto_Agent/paper_scorecard_report.py	<genexpr>z,_net_scorecard_extensions.<locals>.<genexpr>;   s&      221AEEQEEEE22    c              3  &   K   | ]}|d k     |V  dS r>   r?   r@   s     rC   rD   z,_net_scorecard_extensions.<locals>.<genexpr><   s&      88!a%%1%%%%88rE   g     X@r   )Nr      c              3  ,   K   | ]\  }}|d k    |V  dS )WLDNr?   rA   r%   pnls      rC   rD   z,_net_scorecard_extensions.<locals>.<genexpr>@   s*      QQ9445==3====QQrE   c              3  .   K   | ]\  }}|k    |V  d S Nr?   )rA   r%   rK   top_coins      rC   rD   z,_net_scorecard_extensions.<locals>.<genexpr>A   s1      TT9448CSCS3CSCSCSCSTTrE   c                z    g | ]8}t          |                    d           pd                                          9S r%   r&   r   getupperrA   rows     rC   
<listcomp>z-_net_scorecard_extensions.<locals>.<listcomp>B   ;    OOOCc#''&//.Y//5577OOOrE   c                z    g | ]8}t          |                    d           pd                                          9S rP   rQ   rT   s     rC   rV   z-_net_scorecard_extensions.<locals>.<listcomp>C   rW   rE   pnl_total_net
pnl_ex_wldpnl_ex_top_coinpnl_by_coinc              3  @   K   | ]\  }}|t          |d           fV  dS rG   NroundrJ   s      rC   rD   z,_net_scorecard_extensions.<locals>.<genexpr>V   s3      "Z"ZYT3D%Q--#8"Z"Z"Z"Z"Z"ZrE   trade_share_by_coinc              3  h   K   | ],\  }}|t          |t                    z  d z  d          fV  -dS )d      N)rb   len)rA   r%   countexitss      rC   rD   z,_net_scorecard_extensions.<locals>.<genexpr>W   sJ      *x*xZeZ^`eD%E

8JS8PRS2T2T+U*x*x*x*x*x*xrE   top_coin_share_last_20re   rf   top_coin_share_last_30profit_factor_net   max_drawdown_netmax_consecutive_lossesaverage_risk_per_tradestops_missing_countopen_exposure_mismatchFblocked_by_cost_countr8   blocked_by_spread_countr9   blocked_by_depth_countr:   blocked_by_coin_leakage_countr;   blocked_by_data_quality_countr<   )exists	read_text
splitlinesstripjsonloadsJSONDecodeErrorr   rR   lowerappendr   floatr   rS   
isinstancedict	TypeError
ValueErrorsumabsmost_commonrb   itemsmaxminsortedrg   )!r   r   journallinerU   net_pnlsby_coincountsblocked_countsrisksr%   grosscostsnetr6   key
gross_winsgross_lossespf_net	top_countr[   r\   
pnl_ex_toplast20last30equitypeakmax_dd
max_lossescurrent_lossesrK   ri   rN   s!                                  @@rC   _net_scorecard_extensionsr      s   M)K7.HK``GE~~ 	"%%wy%IITTVV 	" 	"D::<< j&&'   3777##Bsww|'<'<BCCIIKKvUUS!!!H'25'9'9G"99FYYNE ) )3776??/i006688cgg0118S99cggk**Mcggo.F.FM#NNQVWZW^W^_iWjWj  XMnqnunu  wE  oF  oF  XM  JM  RN  RN  N  QV  WZ  W^  W^  _l  Wm  Wm  WR  qt  qx  qx  yJ  qK  qK  WR  OR  QS  QS  S  V[  \_  \c  \c  ds  \t  \t  \[  x{  x  x  @S  xT  xT  \[  X[  V\  V\  \  _d  eh  el  el  m{  e|  e|  eb  @C  @G  @G  HZ  @[  @[  eb  _b  _c  _c  cCGGI&&S#''-*@*@SUU]TTt$.swww/?/?$F$FN   BU5#4556666z*    F 	) 	)Cwws|| )uyy~~ )s###q(###	) 2222222Js88h8888899L*6YZ,&&Z=XTTUXF6<K&,,Q//22)Hi#h--++MsQQQQQQQSTUUJ\dwsTTTTTTTTTVWXXXjwJOO5;OOOFOO5;OOOFFDFJN  #4  VVd]++77aNZ88JJNNj 	: 	tF"Z"Z'--//"Z"Z"ZZZ[[	
 	  ~C   KtF*x*x*x*xioiuiuiwiw*x*x*x$x$xyyy  IK 	!hn"w%(C(CA(F(Fq(I!(LsSY{{(Z]`(`bc"d"d"dtw 	!hn"w%(C(CA(F(Fq(I!(LsSY{{(Z]`(`bc"d"d"dtw 	U61-- 	E&!,, 	!* 	!u"U%E

SZZ(?"C"C"CRU 	q 	!% 	 0A!B 	">2E#F  	!.1C"D!" 	(8Q)R#$ 	(8Q)R%  s$   (A==BB (N		NNstr | Path | Nonec                    | 3t          |                                                                           S t          j                    }t          j        |          j        S rM   )r   
expanduserresolver   	from_filer	   from_configr   )r   cfgs     rC   _runtime_rootr   h   sP    K  ++--55777



C#C((44rE   path
list[dict]c                2   g }|                                  s|S |                     dd                                          D ]T}|                                s	 |                    t          j        |                     @# t
          j        $ r Y Qw xY w|S )Nr   r   r   )rx   ry   rz   r{   r   r|   r}   r~   )r   rowsr   s      rC   _read_jsonlr   o   s    D;;== 	BBMMOO  zz|| 		KK
4(())))# 	 	 	H	Ks   'BBB0valueobjectdefaultr   c                z    	 t          t          |                     S # t          $ r t          |          cY S w xY wrM   )r   r   	Exception)r   r   s     rC   _as_decimalr   }   sJ     s5zz"""      w s    ::rootr   c                   | dz  }i }|                                 rZ	 t          j        |                    d                    }t	          |t
                    r|ni }n# t          j        $ r i }Y nw xY wt	          |                    d          t
                    r|                    d          ni }t          t          |                    dd                    t          |                    dd                    t          |                    dd	                    
          }t	          |                    d          t
                    r|                    d          ni }t          t          |                    dd          pd          t          |                    dd          pd          t          |                    dd          pd          t          |                    dd          pd          t          |                    dd                              }t          ||t          |                    dd	                    t          |                    dd	                    t          |                    dd	                    t          |                    dd	                    t          |                    dd                              S )Nzstrategy_policy_context.jsonr   r   market_regime	btc_trendbullish	eth_trendchoppyF)r   r   r   copy_observationcycles_completedr   expected_cyclesT   allowed_signalsshadow_decisionsdata_quality_okT)r   r   r   r   r   reconcile_cleanstops_confirmedalerts_confirmedkill_switch_activelive_entries_blocked)r   r   r   r   r   r   r   )rx   r|   r}   ry   r   r   r~   rR   r   r   boolr   intr   )r   r   rawloaded
market_rawmarketcopy_rawcopys           rC   _read_policy_contextr      s   00DC{{}} 	Z @ @AAF&vt44<&&"CC# 	 	 	CCC	-78P8PRV-W-W_)))]_J jnn[)<<==jnn[)<<==JNN8U3344  F
 /9AS9T9TVZ.[.[csww)***acH"X\\*<a@@EAFFHLL):B??E2FFHLL):A>>C!DDX\\*<a@@EAFFX\\*;TBBCC  D !SWW%6>>??SWW%6>>??cgg&8%@@AA(<e D DEE!#''*@$"G"GHH   s   AA A32A3journal_rowstuple[dict, ...]r   c                D   d | D             }d |D             }|r%t          |dd          t          d                    nt          d          }t          |j        t          t	          |j                            |t          t	          |j                            t          t	          |j                            t          t	          |j                            t          d          t          t	          t          |j
                                      dd
  
        S )Nc                    g | ]S}t          |                    d           p|                    d          pd                                          dk    Q|TS )r!   r"   r#   r$   )r   rR   r   rT   s     rC   rV   z(_promotion_from_rows.<locals>.<listcomp>   sZ    sssSC0@0@0_CGGLDYDY0_]_,`,`,f,f,h,hlr,r,rS,r,r,rrE   c                |    g | ]9}t          |                    d |                    dd                              :S )r4   r'   r   )r   rR   rT   s     rC   rV   z(_promotion_from_rows.<locals>.<listcomp>   s>    cccVYKsww7I3/O/OPPQQcccrE   rX   r   FT)
closed_tradestotal_net_pnllast_20_net_pnlwin_rate_pctprofit_factortop_coin_share_pctshort_scalp_share_pctmax_drawdown_usdreplay_onlysimulator_sanity_ok)r   r   r   sample_sizer   total_pnl_usdr   r   coin_leakage_pctr   r   )r   scri   pnlsr   s        rC   _promotion_from_rowsr      s    ssLsssEcc]bcccD.2DScddWS\\***Fnc""23344S1122c""23344"3r':#;#;<<%cll S)<%=%=!>!>??    rE   signal_rowsc                    d | D             }|st          d          S t          |t          d                    t          t          |                    z  S )Nc                |    g | ]9}|                     d           t          |                     d                     :S )expected_move_vs_cost)rR   r   rT   s     rC   rV   z._avg_expected_move_vs_cost.<locals>.<listcomp>   s[      D  D  DVYV]V]^uVvVv  WCk#''"9::;;  WC  WC  WCrE   r   )r   r   rg   )r   valuess     rC   _avg_expected_move_vs_costr      sa     D  D{  D  D  DF s||vws||$$ws6{{';';;;rE   r   c                    t          di d| dddddddd	d
ddddt          d          dd dd dt          d          dd dd|  dddt          d          dt          d          S )Nr   symbolzBTC/USDC:USDCr%   BTCsidebuyreduce_onlyF
order_typer   tifIocsizez0.001pricetrigger_price	stop_loss99000take_profitclient_order_idz
scorecard-reasonscorecard_policy_candidater7   z0.10estimated_notional_usd10r?   )r   r   )r   s    rC   _candidate_intentr     s       K U U	
 E 8 E W d d '""" D 3[222 ,+    't}}}! rE   c                   t          |dz  | z  dz  dz            }t          |          }d |D             }|                     d          rdnd}t          | |t	          |           t          ||          ||t          d          k    o| pd|v|t          d          k    o| pd	|vt          d
          d	  	        }t          |t          |                    }	|	j	        
                    dd          
                    dd          
                    dd          
                    dd          }
|	j        rd                    |	j                  nd}d|
 d|	j         d| S )Nr   r   signal_journal.jsonlc                V    h | ]&}t          |                    d           pd          'S )final_decisionr#   )r   rR   rT   s     rC   	<setcomp>z_policy_line.<locals>.<setcomp>   s2    OOOs377#344:;;OOOrE   r   v76_anti_chase4zblocked:anti_chasezblocked:no_retest1r5   )	r   familyintent	promotionr   anti_chase_okretest_confirmedmax_effective_leveragemax_open_positionstiny_live_preview_readyzTiny-live-preview-readyblockedBlockedresearchResearch	candidate	Candidate; zall gates greenz   global_policy=z, recommended_mode=z
, reasons=)r   r   
startswithr   r  r   r   r   r   statusr   reasonsjoinrecommended_mode)r   r   r   r   signals	avg_ratiofinal_decisionsstrategy_familyr  decisionr  r  s               rC   _policy_liner'     s   $.<~MPffggG*733IOOwOOOO + 6 6v > >TffDTO! --&|R88'73<</p[5oDX`oDo"gcll2rG8qGZbqGq&s||
 
 
I (	3G3M3MNNH_$$%>@YZZbbclnwxx  A  A  BL  NX  Y  Y  a  a  bm  oz  {  {F-5-=Tdii()))CTGhvhh(:Shh_fhhhrE   	list[str]c                    dt           dz  fdt           dz  fdt           dz  fdt           dz  fg} d	d
dt                                            g}t                      }t                      }t                      }g }d}| D ]\  }}t          |dz            }	t          |dz            }
|t	          |	          z  }d |	D             }t          d |	D                       }t          t                    }t          t                    }t                      }t          |	|          D ];\  }}|t          |	                    d          pd          
                                xx         |z  cc<   |	                    d          }t          |t                    r|ni }|	                    d          }t          |t                    r|ni }t          |	                    d          p|	                    d          pd	                                          dk    rF|rDt          |	                    d          pd          }||xx         |z  cc<   ||xx         dz  cc<   =|
D ]/}|	                    d          pg D ]}|t          |          xx         dz  cc<    t          |	                    d          t                    r|	                    d          ni }|rd|t          |	                    d          pd          xx         dz  cc<   |t          |	                    d          pd          xx         dz  cc<   	 |                    t          |	                    d          pd                     # t          t           f$ r Y -w xY w|r!|                    d          d         d         nd	d |	d d          D             }d! |	d"d          D             }|rOt%          t          |                              d          d         d         t	          |          z  d#z  d$          nd}|rOt%          t          |                              d          d         d         t	          |          z  d#z  d$          nd}|                    d%| d&t	          |	           d't	          |
           d(t'          d) |
D                        d*t%          t'          |          d+           d,t%          t'          d- t          |	|          D                       d+           d.t%          t'          fd/t          |	|          D                       d+           d0| d1| d2t          t)          d3 |                                D                                  d4t          t)          d5 |                                D                                  d6t          |                                                      |r-t%          t'          |          t	          |          z  d7          nd}|dk    rd8}n3|	                    d9d          |	                    d:d          k    rd;}nd<}|                    d=t          |                    d+                                |                    d>t          |                    d+                     d?t          |                    d@                                |                    dA|            |                    dB|	                    dCd           dD|	                    d9d           dE           |                    dF| dG           |S )HNstrict#candidate_v76_strict_live_candidater  candidate_v76_research_probe
anti_chase"candidate_v76_fee_aware_anti_chasebase)candidate_v76_hl_confirmed_squeeze_hybridr#   zv76 Learning Block	Runtime: r   r   r  c                    g | ];}t          |                    d           p|                    d          pd          <S )r4   r'   r(   )r   rR   rT   s     rC   rV   z'_v76_learning_block.<locals>.<listcomp>   sD    fffX[cggm,,R8J0K0KRsSSfffrE   c              3     K   | ]:}t          |                    d           pd                                          V  ;dS )r%   r&   NrQ   rT   s     rC   rD   z&_v76_learning_block.<locals>.<genexpr>   sF      &c&cUXs3776??+Gi'H'H'N'N'P'P&c&c&c&c&c&crE   r%   r&   r6   tradingview_impulser!   r"   r$   categoryunknownr5   block_reasonactionr   r(   c                z    g | ]8}t          |                    d           pd                                          9S rP   rQ   rT   s     rC   rV   z'_v76_learning_block.<locals>.<listcomp>  ;    TTT#cggfoo23399;;TTTrE   rX   c                z    g | ]8}t          |                    d           pd                                          9S rP   rQ   rT   s     rC   rV   z'_v76_learning_block.<locals>.<listcomp>  r:  rE   rZ   re   rf   z- v76 z	: trades=z, signals_seen=z, signals_blocked=c              3  D   K   | ]}|                     d           dV  dS )would_enterr5   N)rR   rT   s     rC   rD   z&_v76_learning_block.<locals>.<genexpr>  su        eY  eYkn  BE  BI  BI  JW  BX  BX  eYef  eY  eY  eY  eY  eY  eYrE   z, pnl_total_net=rG   , pnl_ex_wld=c              3     K   | ]A\  }}t          |                    d                                                     dk    =|V  BdS )r%   rI   NrQ   )rA   rU   rB   s      rC   rD   z&_v76_learning_block.<locals>.<genexpr>  s        IU  IUvsTUnqruryry  {A  sB  sB  oC  oC  oI  oI  oK  oK  OT  oT  oT  oT  oT  oT  oT  IU  IUrE   , pnl_ex_top_coin=c              3     K   | ]A\  }}t          |                    d                                                     k    =|V  BdS )r%   NrQ   )rA   rU   rB   rN   s      rC   rD   z&_v76_learning_block.<locals>.<genexpr>  sV      (w(wvsAcRURYRYZ`RaRaNbNbNhNhNjNjnvNvNvNvNvNvNv(w(wrE   , top_coin_share_last_20=%, top_coin_share_last_30=z%, per_coin_pnl=c              3  @   K   | ]\  }}|t          |d           fV  dS r`   ra   rJ   s      rC   rD   z&_v76_learning_block.<locals>.<genexpr>  sh        jf  jf  EN  EI  KNkoqvwz|}q~q~j  jf  jf  jf  jf  jf  jfrE   z, tv_impulse_exit_pnl=c              3  @   K   | ]\  }}|t          |d           fV  dS r`   ra   )rA   r5  rK   s      rC   rD   z&_v76_learning_block.<locals>.<genexpr>   s4      .x.x]XWZ%Q--/H.x.x.x.x.x.xrE   z, tv_impulse_exits=rm   z>continue paper; observe no_setup/cost filters before looseningcostno_setup_or_no_reclaimz@loosen specific cost/expected-move filter only in research-probezkeep strict; continue paperz- top_block_reasons=z!- tradingview_impulse_categories=z
, actions=   z - average_expected_move_vs_cost=z- data_quality_rejects=data_qualityz, cost_drag_rejects=z0, spread_depth_rejects=tracked in signal_journalz- recommendation=z&; eligible_for_manual_live_proposal=no)V76_RUNTIME_ROOTr   r   r   rg   r   r   zipr   rR   rS   r   r   r   r   r   r   r   rb   r   r   r   )variantslinesblock_reasonstv_impulse_categoriestv_impulse_actionsratiostotal_tradeslabelr   tradesr"  r   r   r^   pnl_by_tv_impulseexits_by_tv_impulserU   rK   	raw_extrar6   raw_impulseimpulser5  r  r   r   top20top30r#  recommendationrN   s                                 @rC   _v76_learning_blockr]     s"	   	#&KKL	%(FFG	'*NNO	!$OOP	H %'O3C3K3K3M3M'O'OPE")))M*1))'.yyFL )
 )
tT$99::d%;;<<F#ff_efff&&c&c\b&c&c&ccc/:5/A/A5@5G5G,3IIFD)) 		3 		3HCCGGFOO8y99??AABBBcIBBB((I'1)T'B'BJ))E))$9::K%/T%B%BJkkG3777##Bsww|'<'<BCCIIKKvUUZaUw{{:66C)DD!(+++s2+++#H---2--- 
	 
	C''.117R 0 0c&kk***a/****8B377K`CaCacg8h8hpcgg3444npG Q%c'++j*A*A*NY&O&OPPPTUUPPP"3w{{8'<'<'I	#J#JKKKqPKKKeCGG,C$D$D$KLLMMMMz*   28@6%%a((+A..bTTvcdd|TTTTTvcdd|TTTV\egfoo11!44Q7:S[[H3NPQRRRbeV\egfoo11!44Q7:S[[H3NPQRRRbexU x xS[[ x xW x xad  eY  eYry  eY  eY  eY  bY  bY x x"3t99a00x x?DS  IU  IUY\]ceiYjYj  IU  IU  IU  FU  FU  WX  @Y  @Yx x$S(w(w(w(wVT9J9J(w(w(w%w%wyz{{x x ',x x HMx x _cci  jf  jf  R]  Rc  Rc  Re  Re  jf  jf  jf  df  df  _g  _gx x $(.x.x^o^u^u^w^w.x.x.x(x(x#y#y	x x OS  Tg  Ts  Ts  Tu  Tu  Ov  Ov	x x	
 	
 	
 	
 8>Fc&kkCKK/3333IqY			61	%	%(9(9:RTU(V(V	V	V[6	LLL]-F-Fq-I-I(J(JLLMMM	LL  UT:O:[:[\]:^:^5_5_  U  Uko  qC  qO  qO  PQ  qR  qR  lS  lS  U  U  V  V  V	LL?I??@@@	LL  t=+<+<^Q+O+O  t  terevevw}  @A  fB  fB  t  t  t  u  u  u	LL[^[[[\\\Ls   7M>>NNr   max_botsr_  
int | Nonec                   t          |           }|dz  }g }|                                r"t          |                    d                    ng D ]r}|                                st          |dz  dz            }t          |ddd          }t          ||j                  }|	                    |j        |||f           s|
                    d	 d
           |
|d|         }ddd| g}	|sK|		                    d           |	                    t                                 d                    |	          S t          |d          D ]\  }
\  }}}}|		                    |
 d| d|j         d|j         d|j         d|j        dd|j        dd|j        dd|j        dd|j        dd d!                    |j                              |		                    d                    g d"|d#          d$|d%          d&|d'          d(|d)          d*|d+          d,|d-          d.|d/          d0|d1          d2|d3          d4|d5          d6|d7          d8|d9          d:|d;          d<|d=          d>|d?          d@|dA                               |		                    t1          ||||                     |	                    t                                 d                    |	          S )Ba  Fast, read-only scorecard renderer.

    This avoids `build_dashboard_snapshot()`: that path fetches live prices,
    reads report files, and probes /proc. During VM instability it can turn a
    scorecard refresh into a tar-pit. This path only reads experiment journals.
    r   *r   r   r(   r   r#   )r   open_unrealized_pnl_usdopen_position_countresearch_notec                6    | d         j         | d         j        fS )Nr5   )scorer   )items    rC   <lambda>z.build_paper_scorecard_report.<locals>.<lambda>B  s    QtAw/DE rE   T)r   reverseNzPaper Strategy ScorecardzMode: read-only-fastr1  z$No paper strategy experiments found.
r5   )startz. z	: status=z, score=z$, running=unknown-fast-mode, closed=z, win=z.1fz%, pf=z.2fz, pnl=z+.4fz	, max_dd=z, coin_leakage=z%, reasons=r  z   net_ext: pnl_total_net=r[   r>  r\   r@  r]   z, profit_factor_net=rl   rB  rj   rC  rk   z%, average_risk_per_trade=rp   z, blocked_by_cost_count=rs   z, blocked_by_spread_count=rt   z, blocked_by_depth_count=ru   z , blocked_by_coin_leakage_count=rv   z , blocked_by_data_quality_count=rw   z, stops_missing_count=rq   z, open_exposure_mismatch=rr   z, pnl_by_coin=r^   z, trade_share_by_coin=rc   )r   rx   r   globis_dirr
   r   r   namer   sortextendr]  r   	enumerater  rg  r   r   r   r   r   r   r  r'  )r   r_  r   r   r   exp_dirr   r   extrM  idxr   s               rC   build_paper_scorecard_reportrv  1  s=    %%D&KD4?4F4F4H4HP6+**3//000b ; ;~~ 	)'N*BEZ*Z[[,PSijz|}}}'gl;;W\2sL9::::IIEEtITTTIXI')?ASTASASTE  ;<<<(**+++yy5>t15M5M5M H H11k2sL X Xk X XBI X Xrx X X13X X?FX X.0.>FX X #OX X 463FOX X /W	X X AE		"*@U@U	X X	
 	
 	
 		b 	b 	b 	b 	b 	b 1	b 	b 	b 	b@CL@Q	b 	b 	b 	b"#45	b 	b 	b 	bKNObKc	b 	b 	b 	b '**B&C	b 	b 	b 	b `cc{_|	b 	b 	b 	b '**B&C		b 	b 	b 	b
 &))@%A	b 	b 	b 	b
 ^aaz]{	b 	b 	b 	b '**B&C	b 	b 	b 	b fi  jI  fJ	b 	b 	b 	b .11P-Q	b 	b 	b 	b $''<#=	b 	b 	b 	b Y\\tXu	b 	b 	b 	b }-	b 	b 	b 	b FII^E_	b 	b 	b 	b	
 	
 	
 	\+t\2FFGGGG	LL$&&'''99UrE   argvlist[str] | Noner   c                H   t          j        d          }|                    dd            |                    dd            |                    dt          d            |                    |           }t          |j        |j                  }|j        r{t          |j                  
                                                                }|j                            d	d	
           |                    |d           t          |           nt          |           dS )Nz3Render a read-only paper strategy scorecard report.)descriptionz--runtime-dir)r   z--outputz
--max-bots)typer   r^  T)parentsexist_okr   r   r   )argparseArgumentParseradd_argumentr   
parse_argsrv  r   r_  outputr   r   r   parentmkdir
write_textprint)rw  parserargsreportr  s        rC   mainr  c  s   $1fgggF
666

D111
3===T""D)d6FQUQ^___F{ dk""--//7799D4888&7333ff1rE   __main__)r   r   r   r   r   r   rM   )r   r   r   r   )r   r   r   r   )r   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r(  )r   r   r_  r`  r   r   )rw  rx  r   r   ))
__future__r   r~  r|   collectionsr   r   decimalr   pathlibr   configr   r	   	dashboardr
   r   src.execution.order_intentr   %src.strategies.global_strategy_policyr   r   r   r   r   r   rJ  r   r   r   r   r   r   r   r  r'  r]  rv  r  __name__
SystemExitr?   rE   rC   <module>r     sX   " " " " " "   , , , , , , , ,             * * * * * * * * 9 9 9 9 9 9 9 9 2 2 2 2 2 2                4-.. M M M M`5 5 5 5 5               D   $< < < <   *i i i i.C C C CL FJbf / / / / / /d    " z
*TTVV

 rE   