
    DBjK                    |    d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZ ddZddZddZddZd ZdS )    )annotationsN)Path)format_v76_anti_chase_impactformat_v76_lifecycle_reportformat_v76_lifecycle_scorecardformat_market_confluence_linesummarize_v76_anti_chase_impactsummarize_v76_lifecycle!summarize_v76_lifecycle_scorecard)	STRICT_IDpathr   rowdictreturnNonec                    | j                             dd           |                     dd          5 }|                    t	          j        |          dz              d d d            d S # 1 swxY w Y   d S )NT)parentsexist_okazutf-8)encoding
)parentmkdiropenwritejsondumps)r   r   fhs      "tests/test_v76_lifecycle_report.py_appendr       s    KdT222	3	)	) )R
C4'((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   +A,,A03A0tmp_pathc                f   | dz  t           z  }t          |dz  ddddd           t          |dz  dddd	d
dddd           t          |dz  ddddddddd           |dz                      t          j        ddddiii                     t          t           |           }|d         dk    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ |d         ddik    sJ |d         dddk    sJ |d         d k    sJ |d!         d	dd"k    sJ |d#         dd	d$k    sJ |d%         dk    sJ |d&         dk    sJ |d'         d	k    sJ |d(         dk    sJ |d)         d*k    sJ |d+         d,k    sJ |d-         dk    sJ t          |          }d.|v sJ d/|v sJ d0|v sJ t          |          }|d1         d2k    sJ |d3         dk    sJ |d4         d5k    sJ |d6         d7k    sJ |d8         d k    sJ d9|d:         v sJ t          |          }d;|v sJ d<|v sJ d=|v sJ d S )>Nexperimentstrade_journal.jsonlentryBTCF)eventcoinlive_order_allowedmainnet_signed_actionexittake_profit0.25z1.50z-0.40)r'   r(   exit_reasonnet_pnl_usdmfe_pctmae_pctr)   r*   ETH	stop_lossz-0.10z0.30z-1.20z
state.jsonopen_positionsSOL100entries   exits   legacy_synthetic_exitsr   open_by_coinexit_reasons)r,   r3   closed_net_pnl_usdz0.15pnl_by_coin)r&   r2   pnl_by_exit_reason)r3   r,   winning_exitslosing_exitsgross_wins_usdgross_losses_usdavg_mfe_pctz0.90avg_mae_pctz-0.80live_order_allowed_countz)v76 Lifecycle: entries=1, exits=2, open=1zavg_mfe=0.90%zlive_flags=0evidence_sourcetrue_lifecycle_exits_onlyclosed_tradeswinrate_pct50.00profit_factorz2.50r/   lifecycle_sample_too_smallblockerszv76 Lifecycle Scorecard:z source=true_lifecycle_exits_only	live=nein)	r   r    
write_textr   r   r
   r   r   r   )r!   rootsummaryline	scorecardscorecard_lines         r   @test_summarize_v76_lifecycle_counts_entries_exits_open_positionsrW      s   m#i/DD((#!&	+ +    D(($#!&	+ 	+ 	 	 	 D(("#!&	+ 	+ 	 	 	 
L$$TZ1AEGUZK[C\0]%^%^___%i::G9""""7q    +,1111#$))))>"uaj0000>"aa&H&HHHHH'(F2222=!VG%D%DDDDD'('RX,Y,YYYYY?#q((((>"a''''#$....%&'1111=!V++++=!W,,,,-.!3333&w//D6$>>>>d""""T!!!!1'::I&'+FFFFF_%****]#w...._%////]#v----'9Z+@@@@@3I>>N%7777-????.((((((    c           	         | dz  t           z  }t          |dz  dddddd           t          t           |           }|d	         d
k    sJ d S )Nr#   r$   r+   r&   r,   r-   T)r'   r(   r.   r/   r)   rG   r8   )r   r    r
   )r!   rR   rS   s      r   0test_summarize_v76_lifecycle_warns_on_live_flagsrZ   [   sr    m#i/DD(($"+ +    &i::G-.!333333rX   c           	        | dz  t           z  }t          |dz  dddg d           t          |dz  ddd	d
gd           t          |dz  ddddgd           t          |dz  dddddd           t          |dz  dddddd           t          |dz  dddddd           t          t           |           }|d         dk    sJ |d         dk    sJ |d         dk    sJ |d          d!k    sJ |d"         ddd#k    sJ |d$         d!k    sJ |d%         d&k    sJ |d'         d(k    sJ |d)         ddd*k    sJ t          |          }d+|v sJ d,|v sJ d-|v sJ d S ).Nr#   zsignal_journal.jsonlz2026-06-29T10:00:00+00:00r&   paper_opened_lifecycle)	timestampr(   final_decisionblock_reasonz2026-06-29T11:00:00+00:00r2   z)blocked:anti_chase_overextended_no_retest!anti_chase_overextended_no_retestz2026-06-29T11:05:00+00:00r5   z$blocked:anti_chase_no_retest_reclaimanti_chase_no_retest_reclaimr$   z2026-06-29T10:30:00+00:00r+   r,   z0.50)r]   r'   r(   r.   r/   z2026-06-29T11:30:00+00:00r3   z-0.20z2026-06-29T11:45:00+00:00trailing_stopz0.40status
collectingsignals_seen   r8   anti_chase_blocked_totalr:   anti_chase_blockers)r`   ra   post_filter_exitspost_filter_net_pnl_usdz0.20post_filter_winrate_pctrL   post_filter_exit_reasons)r3   rb   zv76 Anti-Chase Impact:zblocked_total=2rP   )r   r    r	   r   )r!   rR   impactrT   s       r   Htest_summarize_v76_anti_chase_impact_counts_blocks_and_post_filter_exitsrn   j   s   m#i/DD))02	, ,    D))0E<=	, ,    D))0@78	, ,    D((0$+ +    D((0"+ +    D((0&+ +    -YAAF(|++++.!Q&&&&*+q0000,-2222'(RSuv,w,wwwww%&!+++++,6666+,7777,-qST1U1UUUUU'//D#t++++$$$$$rX   c                     ddddddddddd	dd
di} t          |           }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d S )N
confluencerisk_onr:   z82.50paper_candidate)final_scorerecommendationz77.00z42.00block_new_entry)r&   r2   WLD)market_regimeeligible_countscoreszMarket Confluence Light:zregime=risk_onz
eligible=2r&   rP   )r   )payloadrT   s     r   :test_format_market_confluence_line_renders_latest_snapshotr{      s    &'.BSTT'.BSTT'.BSTT 
 

G )11D%----t####4D====$rX   )r   r   r   r   r   r   )r!   r   r   r   )
__future__r   r   pathlibr   "src.tools.hyperliquid_daily_reportr   r   r   r   r	   r
   r   src.tools.v76_paper_runtimer   r    rW   rZ   rn   r{    rX   r   <module>r      s   " " " " " "                         2 1 1 1 1 1) ) ) )@) @) @) @)F4 4 4 48 8 8 8v    rX   