
    oIjog                        d dl mZ d dlZd dlmc mZ d dlZd dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ d*d	d
ddd+dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Z d# Z!d$ Z"d% Z#d& Z$d' Z%d( Z&d) Z'dS ),    )annotationsN)Path)Decimal)AntiChaseContextanti_chase_blockers)v76_paper_runtime)	_decisionBTCpaper_candidatez80.00recommendationscoreblockerstmp_pathr   coinstrr   r   r   list[str] | NonereturnNonec                   | dz  dz  dz  }|j                             dd           |                    t          j        ddd|||||pg ddd	ddd
idd          d           d S )Nruntimereportsmarket_confluence_latest.jsonTparentsexist_okF	selective0.02)buy_impact_1k_pctsell_impact_1k_pct)final_scorefinal_trade_scorer   r   
componentslive_order_allowedmainnet_signed_action)market_regimescores)r$   r%   
confluencezutf-8)encoding)parentmkdir
write_textjsondumps)r   r   r   r   r   reports         ]/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_v76_paper_runtime_and_replay.py_write_market_confluencer1      s    	!I-0OOF
Mt444
dj#!&(#().&4 (B8>V\"]"]*/-2 

 
" "  " #          c                   |                     |            t          j        t          j        g          }|t          j                 }|d         }d}||u }|slt	          j        d|fd||f          t	          j        |          t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}|d         }|j	        }d	}	 ||	          }
|
ssd
t	          j        |          t	          j        |          t	          j        |	          t	          j        |
          dz  }t          t	          j        |                    d x}x}x}	}
|d         }|j	        }d}	 ||	          }
|
ssd
t	          j        |          t	          j        |          t	          j        |	          t	          j        |
          dz  }t          t	          j        |                    d x}x}x}	}
d S )NrunningFisz%(py1)s is %(py4)spy1py4assert %(py6)spy6trade_journaltrade_journal.jsonlzJassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.endswith
}(%(py5)s)
}r9   py3py5py7signal_journalsignal_journal.jsonl)
chdirr   supervisor_status	STRICT_ID
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationendswith)r   monkeypatchstatusrow@py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert4@py_assert6@py_format8s               r0   :test_v76_runtime_supervisor_status_detects_missing_processrY   $   sG   h02C2M1NOOF
",
-Cy>"U">U"""""""""">U""""">""""U"""""""""""""""""""""""""""?(?)>?(()>????????????(????)>???????????????????????????? A )A*@A))*@AAAAAAAA AAAA)AAAA*@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr2   c                   |                     |            |                    dd            G d d          }|                    t          d|           t          j        t          j        ddg          }|d	         }d}||u }|slt          j        d
|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}t          |d                   dz  }	d |	                                                                D             }
|
sedddt          j                    v st          j        |
          rt          j        |
          ndiz  }t          t          j
        |                    h d}|j        }|
d         } ||          }|sddt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }t          t          j
        |                    d x}x}}d S )NCTB_LIVE_TRADING_ALLOWEDFraisingc                      e Zd ZddZd ZdS )Ttest_v76_shadow_signal_schema_written_with_mocked_marketdata.<locals>.FakeMarketDataenvr   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S Nmainnet==)z%(py0)s == %(py3)sr`   )py0r@   assert %(py5)srA   rH   rI   @py_builtinslocals_should_repr_global_namerJ   rK   rL   selfr`   rS   @py_assert1@py_format4@py_format6s         r0   __init__z]test_v76_shadow_signal_schema_written_with_mocked_marketdata.<locals>.FakeMarketData.__init__2       ##3)##########3)############3#####3######)###########################r2   c                    dddS )N10050)r
   ETH rm   s    r0   get_all_midszatest_v76_shadow_signal_schema_written_with_mocked_marketdata.<locals>.FakeMarketData.get_all_mids4   s     ...r2   Nr`   r   __name__
__module____qualname__rq   ry   rw   r2   r0   FakeMarketDatar_   1   s7        	$ 	$ 	$ 	$	/ 	/ 	/ 	/ 	/r2   r   HyperliquidMarketDatar
   rv   r%   r5   r7   r8   r;   r<   runtime_dirrD   c                6    g | ]}t          j        |          S rw   r-   loads.0lines     r0   
<listcomp>zPtest_v76_shadow_signal_schema_written_with_mocked_marketdata.<locals>.<listcomp>;   s"    JJJDJtJJJr2   zassert %(py0)srf   rows>   r   fundingdepth_ok	timestamp
setup_type
spread_pctstrategy_idtrend_statewould_enterblock_reasonsignal_scorebreadth_stateleakage_statefinal_decisionrisk_gate_resultexpected_move_pcttradingview_contextdata_quality_allowedexpected_move_vs_costexpected_roundtrip_cost_pctr   zJassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.issubset
}(%(py4)s)
}required)rf   py2r:   r<   )rE   delenvsetattrr   	scan_onceRESEARCH_IDrH   rI   rJ   rK   rL   r   	read_text
splitlinesri   rj   rk   issubset)r   rN   r   payloadrQ   rR   rS   rT   rU   journalr   @py_format1r   rn   @py_assert5s                  r0   <test_v76_shadow_signal_schema_written_with_mocked_marketdatar   -   s   h15AAA/ / / / / / / / )+BNSSS)*;*G%QVXXG*+4u4+u4444444444+u44444+4444u4444444444444444444444444447=)**-CCGJJ):):)<)<)G)G)I)IJJJDKKKKKKKKKKKK4KKKKK4KKKKKKKKKKKKKKKK i  i  iH%T!W%W%%%%%%%%%%%%%%%8%%%%%8%%%%%%%%%%W%%%%%%%%%%%%%%%%%%%%%%%%%%%%r2   c                    t          d2i dddddt          d          dt          d          d	t          d
          dt          d          dt          d          dt          d          dt          d          dt          d          dt          d          dddddt          d          dt          d          dt          d           d!t          d"          d#t          d$          d%d&d't          d(          } t          |           }d)}||v }|st          j        d*|fd+||f          t          j        |          d,t          j                    v st          j        |          rt          j        |          nd,d-z  }d.d/|iz  }t          t          j
        |                    d x}}d0}||v }|st          j        d*|fd+||f          t          j        |          d,t          j                    v st          j        |          rt          j        |          nd,d-z  }d.d/|iz  }t          t          j
        |                    d x}}d1}||v }|st          j        d*|fd+||f          t          j        |          d,t          j                    v st          j        |          rt          j        |          nd,d-z  }d.d/|iz  }t          t          j
        |                    d x}}d S )3Nr   r
   symbolzBTC/USDC:USDCcurrent_pricert   recent_high101
retest_lowz99.2sma_fastz99.6sma_slowz98.8atr_pctz0.30move_15m_pct-0.20move_1h_pctz-0.30pullback_from_high_pctz0.99breadth_positive_candidates   relative_strength_rank   
volume_24h50000000r   z0.03expected_slippage_pctr   funding_rate_hourly_pct0wallet_equity_usdc75market_trend_directiondownmarket_breadth_positive_pct25risk_reward_below_1_4xinz%(py1)s in %(py3)sr   r9   r@   rg   rA   market_trend_downmarket_breadth_not_supportiverw   )r   r   r   rH   rI   rJ   ri   rj   rk   rK   rL   )ctxr   rQ   rS   ro   rp   s         r0   8test_fee_aware_anti_chase_blocks_weak_rr_and_down_marketr   A   s   
   U ennn ENNN	
 6???    W%%% G$$$  'v %&A  !q :&&& 6???  &fooo!" !(#$ #4===%&  &v'( %,DMMM)C. #3''H#/#x//////////#x/////#///////////x/////x///////////////////////////*(**********(****************(*****(****************************6*h6666666666*h66666*66666666666h66666h66666666666666666666666666666r2   c                
   |                     |            |                    dd           t          | d           t          d          t          j        z  }|                    dd           |dz                      t          j	        dd	ig d
                      G d d          }|
                    t          d|           t	          j        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d |dz                                                                  D             }
|
d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|
d         d          }d!}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|
d         d"         d#         }d$}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|
d         d%         d&         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )'Nr[   Fr\   r
   runtime/experimentsTr   
state.json101.0	prev_midsrecent_trade_coinsc                      e Zd ZddZd ZdS )Utest_v76_runtime_can_run_fee_aware_anti_chase_paper_candidate.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   z^test_v76_runtime_can_run_fee_aware_anti_chase_paper_candidate.<locals>.FakeMarketData.__init__i   rr   r2   c                
    ddiS Nr
   rt   rw   rx   s    r0   ry   zbtest_v76_runtime_can_run_fee_aware_anti_chase_paper_candidate.<locals>.FakeMarketData.get_all_midsk       5>!r2   Nrz   r{   rw   r2   r0   r   r   h   7        	$ 	$ 	$ 	$	" 	" 	" 	" 	"r2   r   r   rO   okrd   z%(py1)s == %(py4)sr8   r;   r<   paper_tradingr5   r7   r%   tradesr   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zQtest_v76_runtime_can_run_fee_aware_anti_chase_paper_candidate.<locals>.<listcomp>u   "    hhhDtz$hhhr2   rD   r   fee_aware_anti_chase_retestr   paper_openedmarket_trend	directionunknownconfluence_gateallowedrE   r   r1   r   r   ANTI_CHASE_IDr+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   r   rN   r   r   r   rQ   rR   rS   rT   rU   signalss              r0   =test_v76_runtime_can_run_fee_aware_anti_chase_paper_candidater   `   s   h15AAAXu---()),=,KKGMM$M...|''
%AQik3l3l(m(mnnn" " " " " " " " )+BNSSS)*;*IE7SSG8$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?#+t+#t++++++++++#t+++++#++++t+++++++++++++++++++++++++++*+4u4+u4444444444+u44444+4444u4444444444444444444444444448!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;|$E(EE$(EEEEEEEEEEE$(EEEEEE$EEEE(EEEEEEEEEEEEEEEEEEEEEEEEEEEE2;'(:N:(N::::::::::(N:::::(::::N:::::::::::::::::::::::::::2;~&{3@y@3y@@@@@@@@@@3y@@@@@3@@@@y@@@@@@@@@@@@@@@@@@@@@@@@@@@2;())4<<4<<<<<<<<<<4<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<r2   c                   |                     |            |                    dd           t          | ddddg           t          d	          t          j        z  }|                    d
d
           |dz                      t          j	        ddig d                      G d d          }|
                    t          d|           t	          j        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d |dz                                                                  D             }
|
d         d          d!         }d}||u }|slt          j        d"|fd#||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|
d         d          d$         }d}||u }|slt          j        d"|fd#||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )%Nr[   Fr\   r
   block_new_entryz55.00weak_liquidityr   r   Tr   r   r   r   c                      e Zd ZddZd ZdS )Ntest_fee_aware_anti_chase_blocks_low_market_confluence.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zWtest_fee_aware_anti_chase_blocks_low_market_confluence.<locals>.FakeMarketData.__init__   rr   r2   c                
    ddiS r   rw   rx   s    r0   ry   z[test_fee_aware_anti_chase_blocks_low_market_confluence.<locals>.FakeMarketData.get_all_mids   r   r2   Nrz   r{   rw   r2   r0   r   r      r   r2   r   r   r   r   rd   r   r8   r;   r<   blockedconfluence_block_new_entryr   confluence_weak_liquidityc                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zJtest_fee_aware_anti_chase_blocks_low_market_confluence.<locals>.<listcomp>   r   r2   rD   r   r   r   r5   r7   r$   r   r   s              r0   6test_fee_aware_anti_chase_blocks_low_market_confluencer   |   s   h15AAAXu=NV]iyhz{{{{()),=,KKGMM$M...|''
%AQik3l3l(m(mnnn" " " " " " " " )+BNSSS)*;*IE7SSG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9:;@q@;q@@@@@@@@@@;q@@@@@;@@@@q@@@@@@@@@@@@@@@@@@@@@@@@@@@99:?a?:a??????????:a?????:????a???????????????????????????hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;())4==4==========4=====4===============================2;()*>?H5H?5HHHHHHHHHH?5HHHHH?HHHH5HHHHHHHHHHHHHHHHHHHHHHHHHHHHHr2   c           	     n   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	d
ddg d                      G d d          }|	                    t          d|           t          j
        t          j        g d          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d |dz                                                                  D             }
|
d         d         d         }d }||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d!}|
d         d"         }||v }|slt          j        d#|fd$||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )%Nr[   Fr\   r   Tr   r   r   z51.0z81.0z9.0r
   rv   SOLLINKr   c                      e Zd ZddZd ZdS )\test_fee_aware_anti_chase_blocks_new_longs_when_market_trend_is_down.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zetest_fee_aware_anti_chase_blocks_new_longs_when_market_trend_is_down.<locals>.FakeMarketData.__init__   rr   r2   c                    dddddS )Nrt   ru   808r   rw   rx   s    r0   ry   zitest_fee_aware_anti_chase_blocks_new_longs_when_market_trend_is_down.<locals>.FakeMarketData.get_all_mids   s     dCHHHr2   Nrz   r{   rw   r2   r0   r   r     s<        	$ 	$ 	$ 	$	I 	I 	I 	I 	Ir2   r   r   r   r   rd   r   r8   r;   r<   r   r   r   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zXtest_fee_aware_anti_chase_blocks_new_longs_when_market_trend_is_down.<locals>.<listcomp>   r   r2   rD   r   r   r   r   r   r   r   z%(py1)s in %(py4)s)rE   r   r   r   r   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   r   s              r0   Dtest_fee_aware_anti_chase_blocks_new_longs_when_market_trend_is_downr	     s   h15AAA()),=,KKGMM$M...|''
$VFERR 4 4 ) )   
I I I I I I I I )+BNSSS)*;*IKhKhKhiiG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9127a72a77777777772a7777727777a777777777777777777777777777hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;~&{3=v=3v==========3v=====3====v===========================*Igbk..II*.IIIIIIIIIII*.IIIIII*IIII.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIr2   c                   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig dd	d
ddt          j        ddddid                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
|
d         d         }d }||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d! |d"z                                                                  D             }d}|d#         d$         }||v }|slt          j        d%|fd&||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )'Nr[   Fr\   r   Tr   r   r
   rt   0.10992026-06-26T00:00:00+00:000.0040.001entrysize	stop_loss	opened_atr   entry_fee_usdspread_cost_usdslippage_cost_usdr   r   open_positionsc                      e Zd ZddZd ZdS )Qtest_fee_aware_anti_chase_cools_down_coin_after_stop_loss.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zZtest_fee_aware_anti_chase_cools_down_coin_after_stop_loss.<locals>.FakeMarketData.__init__   rr   r2   c                
    ddiS )Nr
   z98.9rw   rx   s    r0   ry   z^test_fee_aware_anti_chase_cools_down_coin_after_stop_loss.<locals>.FakeMarketData.get_all_mids   s    6?"r2   Nrz   r{   rw   r2   r0   r   r     s7        	$ 	$ 	$ 	$	# 	# 	# 	# 	#r2   r   r   closed_positionsr   rd   r   r8   r;   r<   r   r   r   recent_stop_cooldown	cooldowns   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zMtest_fee_aware_anti_chase_cools_down_coin_after_stop_loss.<locals>.<listcomp>   r   r2   rD   r   r   r   r  )rE   r   r   r   r   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   r   )r   rN   r   r   r   rQ   rR   rS   rT   rU   stater   s               r0   9test_fee_aware_anti_chase_cools_down_coin_after_stop_lossr$     s   h15AAA()),=,KKGMM$M...|''
U^ !80>!(#*%,	 	
4 4 ) )   "# # # # # # # # )+BNSSS)*;*IE7SSG%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!945::5::::::::::5:::::5:::::::::::::::::::::::::::::::J,.99;;<<Ee$))$))))))))))$)))))$)))))))))))))))))))))))))))))))hhW7M-M,X,X,Z,Z,e,e,g,ghhhG!@WR[%@@!%@@@@@@@@@@@!%@@@@@@!@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@r2   c                z   |                     |            |                    dd           t          | d           t          d          t          j        z  }|                    dd           |dz                      t          j	        dd	ig d
                     t          d          }|j
                            dd           |                    t          j	        ddddddddddd	gi                      G d d          } G d d          }|                    t          d|           t	          j        t          j        dg          }|d         }d}||k    }	|	slt          j        d|	fd||f          t          j        |          t          j        |          dz  }
dd |
iz  }t!          t          j        |                    d x}x}	}|d!         d"         }d#}||k    }	|	slt          j        d|	fd||f          t          j        |          t          j        |          dz  }
dd |
iz  }t!          t          j        |                    d x}x}	}|d!         d$         }d#}||k    }	|	slt          j        d|	fd||f          t          j        |          t          j        |          dz  }
dd |
iz  }t!          t          j        |                    d x}x}	}d% |d&z                                                                  D             }|d'         d(         d)         }d}||u }	|	slt          j        d*|	fd+||f          t          j        |          t          j        |          dz  }
dd |
iz  }t!          t          j        |                    d x}x}	}|d'         d(         d,         }d}||u }	|	slt          j        d*|	fd+||f          t          j        |          t          j        |          dz  }
dd |
iz  }t!          t          j        |                    d x}x}	}d S )-Nr[   Fr\   r
   r   Tr   r   r   r   z(runtime/research/tradingview_latest.jsoncoinsBTCUSDTz2026-07-04T22:00:00+00:00bearishconflictnormalz0.9tradingview_mcp)	r   r   tsbiastrend_alignmentvolume_state
confidenceresearch_onlysourcec                      e Zd ZddZd ZdS )Ttest_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   z]test_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.FakeMarketData.__init__   rr   r2   c                
    ddiS r   rw   rx   s    r0   ry   zatest_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.FakeMarketData.get_all_mids   r   r2   Nrz   r{   rw   r2   r0   r   r4     r   r2   r   c                  &    e Zd Zedd            ZdS )Stest_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.FixedDateTimeNc                R    t          d                              ddddd|          S )Ndatetimei     r      
   )tzinfo)
__import__r:  )clstzs     r0   nowzWtest_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.FixedDateTime.now   s+    j))224Ar2b2QQQr2   )N)r|   r}   r~   classmethodrB  rw   r2   r0   FixedDateTimer8     s8        		R 	R 	R 
	R 	R 	Rr2   rD  r   r   r   rd   r   r8   r;   r<   r   tv_bias_bearishr   tv_mtf_conflictc                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zPtest_fee_aware_anti_chase_blocks_tradingview_conflicted_long.<locals>.<listcomp>   r   r2   rD   r   r   	availabler5   r7   r$   )rE   r   r1   r   r   r   r+   r,   r-   r.   r*   r   r   rH   rI   rJ   rK   rL   r   r   )r   rN   r   tvr   rD  r   rQ   rR   rS   rT   rU   r   s                r0   <test_fee_aware_anti_chase_blocks_tradingview_conflicted_longrJ     sJ   h15AAAXu---()),=,KKGMM$M...|''
%AQik3l3l(m(mnnn	8	9	9BIOOD4O000MM$*g)% #
) 
) 
( 
 
	 
	 

 

 

" " " " " " " "R R R R R R R R
 )+BNSSS)*;*IE7SSG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9/05A50A55555555550A5555505555A5555555555555555555555555559/05A50A55555555550A5555505555A555555555555555555555555555hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;,-k:BdB:dBBBBBBBBBB:dBBBBB:BBBBdBBBBBBBBBBBBBBBBBBBBBBBBBBB2;,-.BCLuLCuLLLLLLLLLLCuLLLLLCLLLLuLLLLLLLLLLLLLLLLLLLLLLLLLLLLLr2   c                   |                     |            |                    dd           t          | d           t          d          t          j        z  }|                    dd           |dz                      t          j	        dd	ig d
                      G d d          }|
                    t          d|           t	          j        t          j        dg          }t	          j        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}t          j        |dz                                            }d}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}d |dz                                                                  D             }|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}d S )Nr[   Fr\   r
   r   Tr   r   r   r   c                      e Zd ZddZd ZdS )Vtest_fee_aware_anti_chase_does_not_reopen_same_coin_every_tick.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   z_test_fee_aware_anti_chase_does_not_reopen_same_coin_every_tick.<locals>.FakeMarketData.__init__  rr   r2   c                
    ddiS r   rw   rx   s    r0   ry   zctest_fee_aware_anti_chase_does_not_reopen_same_coin_every_tick.<locals>.FakeMarketData.get_all_mids  r   r2   Nrz   r{   rw   r2   r0   r   rM  
  r   r2   r   r   r   r   rd   r   r8   r;   r<   r   r  r   r  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zRtest_fee_aware_anti_chase_does_not_reopen_same_coin_every_tick.<locals>.<listcomp>  r   r2   rD   r   r   zblocked:already_open)rE   r   r1   r   r   r   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   r   )r   rN   r   r   firstsecondrQ   rR   rS   rT   rU   r#  r   s                r0   >test_fee_aware_anti_chase_does_not_reopen_same_coin_every_tickrS    s   h15AAAXu---()),=,KKGMM$M...|''
%AQik3l3l(m(mnnn" " " " " " " " )+BNSSS'(9(G%QQE():)H5'RRF?a?a?a?a( q q          q         q                           J,.99;;<<E+E*++5+++++++++++5++++++5++++++++++++++++++++++++++++++++hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;'(B,BB(,BBBBBBBBBBB(,BBBBBB(BBBB,BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBr2   c                	   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig dd	d
ddt          j        ddddid                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
d}|
j        }d}i } |||          }||v}|st          j        d|fd||f          t          j        |          dt'          j                    v st          j        |
          rt          j        |
          ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }d d!|iz  }t          t          j        |                    d x}x}x}x}x}}d" |d#z                                                                  D             }|d$         d%         }d&}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d$         d'         }d(}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d$         d)         }t/          |          }d*}||k    }|st          j        d+|fd,||f          d-t'          j                    v st          j        t.                    rt          j        t.                    nd-t          j        |          t          j        |          t          j        |          d.z  }d/d0|iz  }t          t          j        |                    d x}x}x}}d S )1Nr[   Fr\   r   Tr   r   r
   rt   r  r  r  r  r  r  r  c                      e Zd ZddZd ZdS )]test_fee_aware_anti_chase_closes_open_paper_position_on_profit_target.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zftest_fee_aware_anti_chase_closes_open_paper_position_on_profit_target.<locals>.FakeMarketData.__init__3  rr   r2   c                
    ddiS )Nr
   z101.30rw   rx   s    r0   ry   zjtest_fee_aware_anti_chase_closes_open_paper_position_on_profit_target.<locals>.FakeMarketData.get_all_mids5      8$$r2   Nrz   r{   rw   r2   r0   r   rV  2  7        	$ 	$ 	$ 	$	% 	% 	% 	% 	%r2   r   r   r  r   rd   r   r8   r;   r<   r  not inzX%(py1)s not in %(py11)s
{%(py11)s = %(py5)s
{%(py5)s = %(py3)s.get
}(%(py7)s, %(py9)s)
}r#  r9   r@   rA   rB   py9py11assert %(py13)spy13c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zYtest_fee_aware_anti_chase_closes_open_paper_position_on_profit_target.<locals>.<listcomp>>  "    fff4djfffr2   r>   r   eventexitexit_reasonprofit_targetnet_pnl_usdr   >z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sfloatrf   r   r:   rB   assert %(py9)sr_  )rE   r   r   r   r   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   getri   rj   rk   r   rm  r   rN   r   r   r   rQ   rR   rS   rT   rU   r#  rV   rW   @py_assert8@py_assert10@py_format12@py_format14r   rn   r   rX   @py_format10s                         r0   Etest_fee_aware_anti_chase_closes_open_paper_position_on_profit_targetrw    s   h15AAA()),=,KKGMM$M...|''
U^ !80>!(#*%,	 	
4 4 ) )   "% % % % % % % % )+BNSSS)*;*IE7SSG%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++J,.99;;<<E7	7"27B7		"2B777577777777777577777757777777777777777777777	7777"27777B77777777777777777777777777777777777777ffG6K,K+V+V+X+X+c+c+e+efffF":g(&(&((((((((((&(((((((((&(((((((((((((((((((((((((((":m$77$7777777777$77777$7777777777777777777777777777777M*/5*++/a/+a//////////+a////////////5/////5//////*////+////a///////////////////////////////r2   c                R
   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig d
                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
d}|
d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d |dz                                                                  D             }|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         d         }d}||u }|slt          j        d|fd ||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d!         }d}||u }|slt          j        d|fd ||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d" |d#z                                                                  D             }|d         d$         }d%}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d&         d'         }d(}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S ))Nr[   Fr\   r   Tr   r   r
   r  r   c                      e Zd ZddZd ZdS )btest_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exit.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zktest_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exit.<locals>.FakeMarketData.__init__L  rr   r2   c                
    ddiS r   rw   rx   s    r0   ry   zotest_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exit.<locals>.FakeMarketData.get_all_midsN  r   r2   Nrz   r{   rw   r2   r0   r   rz  K  r   r2   r   r   r   r   rd   r   r8   r;   r<   r  r   r  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   z^test_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exit.<locals>.<listcomp>W  rd  r2   r>   r   re  r  extrastrict_anti_chaser5   r7   r$   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   z^test_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exit.<locals>.<listcomp>[  r   r2   rD   r   paper_opened_lifecycler   depth_penalty_pctr   )rE   r   r   r   rG   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   r   )r   rN   r   r   r   rQ   rR   rS   rT   rU   r#  r   r   s                r0   Jtest_v76_runtime_strict_opens_lifecycle_position_instead_of_synthetic_exitr  D  s8   h15AAA()),=,GGGMM$M...|''
%fh3i3i(j(jkkk" " " " " " " " )+BNSSS)*;*EwOOG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J,.99;;<<E+E*++5+++++++++++5++++++5++++++++++++++++++++++++++++++++ffG6K,K+V+V+X+X+c+c+e+efffF":g)')'))))))))))')))))))))')))))))))))))))))))))))))))":g23;t;3t;;;;;;;;;;3t;;;;;3;;;;t;;;;;;;;;;;;;;;;;;;;;;;;;;;":*+4u4+u4444444444+u44444+4444u444444444444444444444444444hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;'(D,DD(,DDDDDDDDDDD(,DDDDDD(DDDD,DDDDDDDDDDDDDDDDDDDDDDDDDDDD2;()*=>H&H>&HHHHHHHHHH>&HHHHH>HHHH&HHHHHHHHHHHHHHHHHHHHHHHHHHHHHr2   c                
   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig dd	d
ddt          j        ddid                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
d}|
j        }d}i } |||          }||v}|st          j        d|fd||f          t          j        |          dt'          j                    v st          j        |
          rt          j        |
          ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd |iz  }t          t          j        |                    d x}x}x}x}x}}d! |d"z                                                                  D             }|d#         d$         }d%}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d#         d&         }d'}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d#         d(         }d}||u }|slt          j        d)|fd*||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d#         d+         }t/          |          }d,}||k    }|st          j        d-|fd.||f          d/t'          j                    v st          j        t.                    rt          j        t.                    nd/t          j        |          t          j        |          t          j        |          d0z  }d1d2|iz  }t          t          j        |                    d x}x}x}}d S )3Nr[   Fr\   r   Tr   r   r
   rt   r  98.75101.250.1875)r  r  r  take_profitr   risk_usdr  c                      e Zd ZddZd ZdS )Xtest_v76_runtime_strict_closes_lifecycle_position_on_take_profit.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zatest_v76_runtime_strict_closes_lifecycle_position_on_take_profit.<locals>.FakeMarketData.__init__u  rr   r2   c                
    ddiS )Nr
   z101.50rw   rx   s    r0   ry   zetest_v76_runtime_strict_closes_lifecycle_position_on_take_profit.<locals>.FakeMarketData.get_all_midsw  rY  r2   Nrz   r{   rw   r2   r0   r   r  t  rZ  r2   r   r   r  r   rd   r   r8   r;   r<   r  r[  r]  r#  r^  ra  rb  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zTtest_v76_runtime_strict_closes_lifecycle_position_on_take_profit.<locals>.<listcomp>  rd  r2   r>   r   re  rf  rg  r  r%   r5   r7   ri  r   rj  rl  rm  rn  ro  r_  )rE   r   r   r   rG   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   rp  ri   rj   rk   r   rm  rq  s                         r0   @test_v76_runtime_strict_closes_lifecycle_position_on_take_profitr  `  sl   h15AAA()),=,GGGMM$M...|''
U^ $'0:$ 	
4 4 ) )   % % % % % % % % )+BNSSS)*;*EwOOG%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++J,.99;;<<E7	7"27B7		"2B777577777777777577777757777777777777777777777	7777"27777B77777777777777777777777777777777777777ffG6K,K+V+V+X+X+c+c+e+efffF":g(&(&((((((((((&(((((((((&(((((((((((((((((((((((((((":m$55$5555555555$55555$5555555555555555555555555555555":-.7%7.%7777777777.%77777.7777%777777777777777777777777777M*/5*++/a/+a//////////+a////////////5/////5//////*////+////a///////////////////////////////r2   c                
   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig dd	d
ddt          j        ddddddddid                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
d}|
j        }d}i } |||          }||v}|st          j        d |fd!||f          t          j        |          d"t'          j                    v st          j        |
          rt          j        |
          nd"t          j        |          t          j        |          t          j        |          t          j        |          d#z  }d$d%|iz  }t          t          j        |                    d x}x}x}x}x}}d& |d'z                                                                  D             }|d(         d)         }d*}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d(         d+         }d,}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d(         d-         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d(         d.         }d}||u }|slt          j        d/|fd0||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )1Nr[   Fr\   r   Tr   r   WLDrt   r  r  r  r  r   r      z0.25z0.05r   )r  r  r  r  r   r  
ticks_heldmax_hold_ticksdead_fish_ticksdead_fish_min_mfe_pctmfe_pctmae_pctr  c                      e Zd ZddZd ZdS )[test_v76_runtime_strict_dead_fish_exits_before_max_hold_when_no_mfe.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zdtest_v76_runtime_strict_dead_fish_exits_before_max_hold_when_no_mfe.<locals>.FakeMarketData.__init__  rr   r2   c                
    ddiS )Nr  z100.04rw   rx   s    r0   ry   zhtest_v76_runtime_strict_dead_fish_exits_before_max_hold_when_no_mfe.<locals>.FakeMarketData.get_all_mids  rY  r2   Nrz   r{   rw   r2   r0   r   r    rZ  r2   r   r   r  rd   r   r8   r;   r<   r  r[  r]  r#  r^  ra  rb  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zWtest_v76_runtime_strict_dead_fish_exits_before_max_hold_when_no_mfe.<locals>.<listcomp>  rd  r2   r>   r   re  rf  rg  dead_fish_time_exitcandles_heldr%   r5   r7   rE   r   r   r   rG   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   rp  ri   rj   rk   r   r   rN   r   r   r   rQ   rR   rS   rT   rU   r#  rV   rW   rr  rs  rt  ru  r   s                     r0   Ctest_v76_runtime_strict_dead_fish_exits_before_max_hold_when_no_mfer    s%   h15AAA()),=,GGGMM$M...|''
U^ $'0:$"##$)/!" 
4 4 ) )   *% % % % % % % % )+BNSSS)*;*EwOOG%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++J,.99;;<<E7	7"27B7		"2B777577777777777577777757777777777777777777777	7777"27777B77777777777777777777777777777777777777ffG6K,K+V+V+X+X+c+c+e+efffF":g(&(&((((((((((&(((((((((&(((((((((((((((((((((((((((":m$=(==$(===========$(======$====(============================":n%**%**********%*****%*******************************":-.7%7.%7777777777.%77777.7777%77777777777777777777777777777r2   c                
   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig dd	d
ddt          j        dddd
dd
id                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
d}|
j        }d}i } |||          }||v}|st          j        d|fd||f          t          j        |          d t'          j                    v st          j        |
          rt          j        |
          nd t          j        |          t          j        |          t          j        |          t          j        |          d!z  }d"d#|iz  }t          t          j        |                    d x}x}x}x}x}}d$ |d%z                                                                  D             }|d&         d'         }d(}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d)         }d*}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d+         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d,         }d}||u }|slt          j        d-|fd.||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )/Nr[   Fr\   r   Tr   r   r
   rt   r  r  r  r        r   )
r  r  r  r  r   r  r  r  r  r  r  c                      e Zd ZddZd ZdS )Otest_v76_runtime_strict_time_exits_after_max_hold_ticks.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zXtest_v76_runtime_strict_time_exits_after_max_hold_ticks.<locals>.FakeMarketData.__init__  rr   r2   c                
    ddiS )Nr
   z100.20rw   rx   s    r0   ry   z\test_v76_runtime_strict_time_exits_after_max_hold_ticks.<locals>.FakeMarketData.get_all_mids  rY  r2   Nrz   r{   rw   r2   r0   r   r    rZ  r2   r   r   r  r   rd   r   r8   r;   r<   r  r[  r]  r#  r^  ra  rb  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zKtest_v76_runtime_strict_time_exits_after_max_hold_ticks.<locals>.<listcomp>  rd  r2   r>   r   re  rf  rg  	time_exitr  r%   r5   r7   r  r  s                     r0   7test_v76_runtime_strict_time_exits_after_max_hold_ticksr    s   h15AAA()),=,GGGMM$M...|''
U^ $'0:$ "$!" 
4 4 ) )   &% % % % % % % % )+BNSSS)*;*EwOOG%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++J,.99;;<<E7	7"27B7		"2B777577777777777577777757777777777777777777777	7777"27777B77777777777777777777777777777777777777ffG6K,K+V+V+X+X+c+c+e+efffF":g(&(&((((((((((&(((((((((&(((((((((((((((((((((((((((":m$33$3333333333$33333$3333333333333333333333333333333":n%++%++++++++++%+++++%+++++++++++++++++++++++++++++++":-.7%7.%7777777777.%77777.7777%77777777777777777777777777777r2   c                   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig d
                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d |dz                                                                  D             }
d}|
d         d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|
d         d         }|j        }d} ||          }|ssd t          j        |          t          j        |          t          j        |          t          j        |          d!z  }t          t          j        |                    d x}x}x}}d S )"Nr[   Fr\   r   Tr   r   r
   rt   r   c                      e Zd ZddZd ZdS )Mtest_v76_runtime_strict_blocks_overextended_no_retest.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zVtest_v76_runtime_strict_blocks_overextended_no_retest.<locals>.FakeMarketData.__init__  rr   r2   c                
    ddiS )Nr
   104rw   rx   s    r0   ry   zZtest_v76_runtime_strict_blocks_overextended_no_retest.<locals>.FakeMarketData.get_all_mids  r   r2   Nrz   r{   rw   r2   r0   r   r    r   r2   r   r   r   r   rd   r   r8   r;   r<   r   !anti_chase_overextended_no_retestr   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zItest_v76_runtime_strict_blocks_overextended_no_retest.<locals>.<listcomp>  r   r2   rD   r   r   r   r  r   zblocked:zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
}r?   )rE   r   r   r   rG   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   
startswith)r   rN   r   r   r   rQ   rR   rS   rT   rU   r   rV   rW   rX   s                 r0   5test_v76_runtime_strict_blocks_overextended_no_retestr    s   h15AAA()),=,GGGMM$M...|''
%gi3j3j(k(klll" " " " " " " " )+BNSSS)*;*EwOOG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9ABGaGBaGGGGGGGGGGBaGGGGGBGGGGaGGGGGGGGGGGGGGGGGGGGGGGGGGGhhW7M-M,X,X,Z,Z,e,e,g,ghhhG.M'"+n2MM.2MMMMMMMMMMM.2MMMMMM.MMMM2MMMMMMMMMMMMMMMMMMMMMMMMMMMM2;'(?(3?J?33J????????(????3????J??????????????????????????????r2   c           
     l
   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig d
                     t          d          }|                    dd           |dz                      t          j        dddddgdiiddd                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|d         d          }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}d! |d"z                                                                  D             }|d#         d$         d%         }d&}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|d#         d$         d'         }d}||u }|slt          j        d(|fd)||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|d#         d$         d*         }d}||u }|slt          j        d(|fd)||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}d }|d#         d+         }||v }|slt          j        d,|fd-||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}d S ).Nr[   Fr\   r   Tr   r   r
   r  r   zruntime/reportsr   r'   z72.10r   r   )r!   r   r   )r(   r$   r%   c                      e Zd ZddZd ZdS )Ytest_v76_runtime_strict_blocks_when_confluence_latest_blocks_coin.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   zbtest_v76_runtime_strict_blocks_when_confluence_latest_blocks_coin.<locals>.FakeMarketData.__init__  rr   r2   c                
    ddiS r   rw   rx   s    r0   ry   zftest_v76_runtime_strict_blocks_when_confluence_latest_blocks_coin.<locals>.FakeMarketData.get_all_mids  r   r2   Nrz   r{   rw   r2   r0   r   r  
  r   r2   r   r   r   r   rd   r   r8   r;   r<   r   r   r   r   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zUtest_v76_runtime_strict_blocks_when_confluence_latest_blocks_coin.<locals>.<listcomp>  r   r2   rD   r   r   r2  market_confluence_latestr$   r5   r7   r%   r   r   r  )rE   r   r   r   rG   r+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   )r   rN   r   r   r   r   rQ   rR   rS   rT   rU   r   s               r0   Atest_v76_runtime_strict_blocks_when_confluence_latest_blocks_coinr    s   h15AAA()),=,GGGMM$M...|''
%fh3i3i(j(jkkk$%%GMM$M.....::4:#*&7!1 2 
 $!&G G < <   " " " " " " " " )+BNSSS)*;*EwOOG8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9:;@q@;q@@@@@@@@@@;q@@@@@;@@@@q@@@@@@@@@@@@@@@@@@@@@@@@@@@99:?a?:a??????????:a?????:????a???????????????????????????hhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;()(3Q7QQ37QQQQQQQQQQQ37QQQQQQ3QQQQ7QQQQQQQQQQQQQQQQQQQQQQQQQQQQ2;()*>?H5H?5HHHHHHHHHH?5HHHHH?HHHH5HHHHHHHHHHHHHHHHHHHHHHHHHHH2;()*ABKeKBeKKKKKKKKKKBeKKKKKBKKKKeKKKKKKKKKKKKKKKKKKKKKKKKKKK&E'"+n*EE&*EEEEEEEEEEE&*EEEEEE&EEEE*EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEr2   c                |   |                     |            |                    dd            G d d          }|                    t          d|           t          j        t          j        ddg          }|d	         }d
}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}|d         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}t          |d                   }	d |	dz                                                                  D             }
d |	dz                                                                  D             }|
d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}}d |D             }t          |          }|sddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          d z  }t          t          j
        |                    d x}}d S )!Nr[   Fr\   c                      e Zd ZddZd ZdS )Wtest_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.BrokenMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   z`test_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.BrokenMarketData.__init__"  rr   r2   c                     t          d          )NzNo route to host)ConnectionErrorrx   s    r0   ry   zdtest_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.BrokenMarketData.get_all_mids$  s    !"4555r2   Nrz   r{   rw   r2   r0   BrokenMarketDatar  !  s7        	$ 	$ 	$ 	$	6 	6 	6 	6 	6r2   r  r   r
   rv   rO   degradedrd   r   r8   r;   r<   r   r   r%   r5   r7   r   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zQtest_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.<listcomp>-  s"    ggg4djgggr2   zruntime_health.jsonlc                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zQtest_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.<listcomp>.  r   r2   rD   r   re  market_data_unavailablec              3  .   K   | ]}|d          dk    V  dS )r   zblocked:api_degradedNrw   )r   rP   s     r0   	<genexpr>zPtest_v76_runtime_degraded_market_data_does_not_crash_or_trade.<locals>.<genexpr>0  s.      RR3s#$(>>RRRRRRr2   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)rf   r   r:   )rE   r   r   r   r   rG   rH   rI   rJ   rK   rL   r   r   r   r  ri   rj   rk   )r   rN   r  r   rQ   rR   rS   rT   rU   r   healthr   rn   s                r0   =test_v76_runtime_degraded_market_data_does_not_crash_or_trader    sl   h15AAA6 6 6 6 6 6 6 6 )+BDTUUU)*;*Eu~VVG8*
*
**********
*********
***************************8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*+4u4+u4444444444+u44444+4444u4444444444444444444444444447=)**GggG6L,L+W+W+Y+Y+d+d+f+fgggFhhW7M-M,X,X,Z,Z,e,e,g,ghhhG":g;";;";;;;;;;;;;;";;;;;;;;;;";;;;;;;;;;;;;;;;;;;;;;;;;;;;RR'RRRR3RRRRRRRRRRRRRRRR3RRRRR3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Rr2   c                    ddd} ddl m} t          ddd ||           d	          }d
}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }dd|iz  }t          t          j
        |                    d x}}t          ddd ||           d	          }d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }dd|iz  }t          t          j
        |                    d x}}d S )N   r   )r  r
   r   )Counterr  z1.0)r   ri  r=  blocked_by_leakager   r   reasonsr   rg   rA   r
   z-1.0blocked_by_trend)collectionsr  r	   rH   rI   rJ   ri   rj   rk   rK   rL   )countsr  r  rQ   rS   ro   rp   s          r0   6test_v76_replay_decision_blocks_wld_leakage_and_losersr  3  s   q!!F######u==wwvPRSSG*7**********7****************7*****7***************************v>>QSTTG(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((r2   c                *   |                     |            |                    dd           t          d          t          j        z  }|                    dd           |dz                      t          j        dd	ig d
                      G d d          }|	                    t          d|           t          j
        t          j        dg          }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}t          j        |dz                                            }
|
d         d         d         }t          j        }||k    }|st          j        d|fd||f          t          j        |          dt%          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }d d!|iz  }t          t          j        |                    d x}x}}|
d         d         d"         }d#}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d$ |d%z                                                                  D             }|d&         d'         }d(}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d)         }d*}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d+ |d,z                                                                  D             }|d&         d-         }d.}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d/         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d&         d0         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )1Nr[   Fr\   r   Tr   r   r
   rt   r   c                      e Zd ZddZd ZdS )Wtest_v76_runtime_swing_retest_opens_lifecycle_research_position.<locals>.FakeMarketDatar`   r   c                P   d}||k    }|st          j        d|fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    d x}}d S rb   rh   rl   s         r0   rq   z`test_v76_runtime_swing_retest_opens_lifecycle_research_position.<locals>.FakeMarketData.__init__D  rr   r2   c                
    ddiS )Nr
   r   rw   rx   s    r0   ry   zdtest_v76_runtime_swing_retest_opens_lifecycle_research_position.<locals>.FakeMarketData.get_all_midsF  r   r2   Nrz   r{   rw   r2   r0   r   r  C  r   r2   r   r   rO   r   rd   r   r8   r;   r<   r   r5   r7   r%   r   r   r  r   )z0%(py1)s == %(py5)s
{%(py5)s = %(py3)s.SWING_ID
}r   )r9   r@   rA   zassert %(py7)srB   r  `   c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zStest_v76_runtime_swing_retest_opens_lifecycle_research_position.<locals>.<listcomp>S  r   r2   rD   r   r   swing_trend_retest_reclaimr   r  c                6    g | ]}t          j        |          S rw   r   r   s     r0   r   zStest_v76_runtime_swing_retest_opens_lifecycle_research_position.<locals>.<listcomp>V  rd  r2   r>   re  r  researchr$   )rE   r   r   r   SWING_IDr+   r,   r-   r.   r   r   rH   rI   rJ   rK   rL   r   r   ri   rj   rk   r   )r   rN   r   r   r   rQ   rR   rS   rT   rU   r#  rV   rp   rX   r   r   s                   r0   ?test_v76_runtime_swing_retest_opens_lifecycle_research_positionr  <  s-	   h15AAA()),=,FFGMM$M...|''
%gi3j3j(k(klll" " " " " " " " )+BNSSS)*;*DugNNG8$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?#+t+#t++++++++++#t+++++#++++t+++++++++++++++++++++++++++*+4u4+u4444444444+u44444+4444u4444444444444444444444444448!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J,.99;;<<E!"5)-8V<M<VV8<VVVVVVVVVVV8<VVVVVV8VVVVVVVVVVV<MVVVVV<MVVVVVV<VVVVVVVVVVVVVVVVVVVVVVVVVVVV!"5)*:;ArA;rAAAAAAAAAA;rAAAAA;AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAhhW7M-M,X,X,Z,Z,e,e,g,ghhhG2;|$D(DD$(DDDDDDDDDDD$(DDDDDD$DDDD(DDDDDDDDDDDDDDDDDDDDDDDDDDDD2;'(D,DD(,DDDDDDDDDDD(,DDDDDD(DDDD,DDDDDDDDDDDDDDDDDDDDDDDDDDDDffG6K,K+V+V+X+X+c+c+e+efffF":g)')'))))))))))')))))))))')))))))))))))))))))))))))))":j!)T)!T))))))))))!T)))))!))))T)))))))))))))))))))))))))))":*+4u4+u4444444444+u44444+4444u44444444444444444444444444444r2   )r
   )r   r   r   r   r   r   r   r   r   r   r   r   )(
__future__r   builtinsri   _pytest.assertion.rewrite	assertionrewriterH   r-   pathlibr   decimalr   'src.strategies.v76_fee_aware_anti_chaser   r   	src.toolsr   "src.tools.v76_replay_from_journalsr	   r1   rY   r   r   r   r   r	  r$  rJ  rS  rw  r  r  r  r  r  r  r  r  r  rw   r2   r0   <module>r     s   " " " " " "                           Y Y Y Y Y Y Y Y ' ' ' ' ' ' 8 8 8 8 8 8Yj  zA  `d      .B B B& & &(7 7 7>= = =8I I I2J J J4%A %A %AP(M (M (MVC C C4%0 %0 %0PI I I8$0 $0 $0N*8 *8 *8Z(8 (8 (8T@ @ @,&F &F &FRS S S,) ) )5 5 5 5 5r2   