
    5-j                     b    d dl Zd dlmc mZ d dlmZ d dlm	Z	m
Z
mZmZ d Zd Zd Zd Zd ZdS )	    N)Decimal)AntiChaseContextFillHistoryRow!build_fee_aware_anti_chase_intentevaluate_recent_fill_historyc                  $   i 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"          t          d          d#d$}|                    |            t          d%i |S )&NcoinBTCsymbolzBTC/USDC:USDCcurrent_price100recent_high101
retest_lowz99.20sma_fastz99.60sma_slowz98.90atr_pctz1.20move_15m_pct0.35move_1h_pctz1.10pullback_from_high_pctz0.99breadth_positive_candidates   relative_strength_rank   
volume_24h	100000000
spread_pctz0.01expected_slippage_pctz0.02funding_rate_hourly_pctz0.0005T)wallet_equity_usdcdata_quality_allowed )r   updater   )	overridesdatas     Y/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_v76_fee_aware_anti_chase.pybase_contextr(      sn   / 	 	wu~~	
 	gg&& 	GG$$ 	GG$$ 	76?? 	 	wv 	!'&// 	&q 	!! 	gk** 	gfoo  	 !" 	"78#4#4#$ &enn $'  D* 	KK	##d###    c            	         t          t          d          t          d          t          d          t          d          t          d                    } t          | d          }d }||u }|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104z104.1z2.80z5.60z0.10)r   r   r   r   r   z
anti-BTC-1client_order_idis)z%(py0)s is %(py3)sintentpy0py3assert %(py5)spy5r(   r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)ctxr0   @py_assert2@py_assert1@py_format4@py_format6s         r'   Ctest_fee_aware_anti_chase_rejects_entry_after_overextended_breakoutrD   %   s    
ennG$$V__FOO&v  C /sLQQQF6T>6T66Tr)   c                     t                      } t          | d          }d }||u}|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}}|j
        }d	}||k    }|st          j        d
|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|j        }d}||k    }|st          j        d
|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|j        }d}	t          |	          }
||
k    }|st          j        d|fd||
f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |	          t          j        |
          dz  }dd|iz  }t          t          j	        |                    d x}x}x}	}
|j        }| j        }	||	k     }|st          j        d|fd||	f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          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}x}}	d S )Nz
anti-BTC-2r,   )is not)z%(py0)s is not %(py3)sr0   r1   r4   r5   "candidate_v76_fee_aware_anti_chase==)z3%(py2)s
{%(py2)s = %(py0)s.strategy_id
} == %(py5)s)r2   py2r5   zassert %(py7)spy7fee_aware_breakout_retest)z.%(py2)s
{%(py2)s = %(py0)s.reason
} == %(py5)s10)>=)z\%(py2)s
{%(py2)s = %(py0)s.estimated_notional_usd
} >= %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   )r2   rJ   py4py6py8assert %(py10)spy10<)zP%(py2)s
{%(py2)s = %(py0)s.stop_loss
} < %(py6)s
{%(py6)s = %(py4)s.retest_low
}r?   )r2   rJ   rO   rP   zassert %(py8)srQ   )r(   r   r7   r8   r9   r:   r;   r<   r=   r>   strategy_idreasonestimated_notional_usdr   	stop_lossr   )r?   r0   r@   rA   rB   rC   @py_assert4@py_assert3@py_format8@py_assert5@py_assert7@py_format9@py_format11@py_format7s                 r'   =test_fee_aware_anti_chase_accepts_retest_after_breakout_holdsrb   3   s   
..C.sLQQQF6666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E6EEEEE6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=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76777776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(9D9GDMM9(M9999999999(M9999999999996999996999999(99999999999G99999G999999D9999M99999999999999999999999999999,cn,n,,,,,,,,,,n,,,,,,,,,,,,6,,,,,6,,,,,,,,,,,,,,,,,c,,,,,c,,,,,,n,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r)   c                     t          t          d          t          d          t          d                    } d}t          | |          }d }||u }|st          j        d|fd||f          d	t          j                    v st          j        t                    rt          j        t                    nd	d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j
        |                    d x}x}x}}d S )Nz0.12z0.08r   )r   r   r   z
anti-BTC-3r,   r.   )zI%(py5)s
{%(py5)s = %(py0)s(%(py1)s, client_order_id=%(py3)s)
} is %(py8)sr   r?   )r2   py1r3   r5   rQ   rR   rS   r6   )r?   r@   rZ   r^   @py_assert6r_   r`   s          r'   Htest_fee_aware_anti_chase_blocks_when_expected_edge_does_not_clear_costsrf   ?   s   
6??%foo  C COW,S,OOOWSWWOSWWWWWWWWWWWOSWWWWWWWWWWWWW,WWWWW,WWWWWWWWWWWWWSWWWWWSWWWWWW,WWWWOWWWWSWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWr)   c                  
   t          ddt          d          t          d          t          d          t          d          t          d                    t          d	dt          d
          t          d          t          d          t          d          t          d                    t          ddt          d          t          d          t          d          t          d          t          d                    t          ddt          d          t          d          t          d          t          d          t          d                    g} t          |           }|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$}t          |          }||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        |          t          j        |          d'z  }	d(d)|	iz  }
t          t          j        |
                    d x}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/         }||v }|slt          j        d0|fd1||f          t          j        |          t          j        |          dz  }dd |iz  }t          t          j        |                    d x}x}}d2}|d/         }||v }|slt          j        d0|fd1||f          t          j        |          t          j        |          dz  }dd |iz  }t          t          j        |                    d x}x}}|d3         }d4}||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 )5NSOLAz66.531z0.22z-0.1859z0.00632312)r	   sidepxsz
closed_pnlfeeminutes_heldr
   62504z0.00019z-0.15143z0.00513018LINKz7.952z1.4z0.16618z0.004809260z66.797z0.16z0.204z0.004617255statusedge_failurerH   )z%(py1)s == %(py4)s)rd   rO   zassert %(py6)srP   closed_count   win_rate_pctz50.00)z0%(py1)s == %(py7)s
{%(py7)s = %(py3)s(%(py5)s)
}r   )rd   r3   r5   rK   zassert %(py9)spy9short_hold_net_pnlr   rT   )z%(py1)s < %(py4)sshort_holds_negativeblockers)in)z%(py1)s in %(py4)ssample_too_smallrecommendationkeep_live_entries_blocked)r   r   r   r7   r8   r<   r=   r>   r9   r:   r;   )rowsreport@py_assert0r[   r@   @py_format5ra   rZ   re   r\   @py_format10s              r'   Jtest_recent_fill_history_evaluation_flags_live_edge_failure_and_bad_timingr   I   s   E0A0Agfoobijsbtbt  {B  CM  {N  {N  ]d  ei  ]j  ]j  	k  	k  	kE0@0@WYEWEWdklvdwdw  ~E  FP  ~Q  ~Q  `g  hl  `m  `m  	n  	n  	nF1A1Agennahirasas  zA  BL  zM  zM  \c  di  \j  \j  	k  	k  	kE0A0Agfoobijqbrbrx  AK  yL  yL  [b  ch  [i  [i  	j  	j  	j	D *$//F(-~-~----------~---------~---------------------------.!&Q&!Q&&&&&&&&&&!Q&&&&&!&&&&Q&&&&&&&&&&&&&&&&&&&&&&&&&&&.!5W5WW%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5W55555W555555W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&'+!+'!++++++++++'!+++++'++++!+++++++++++++++++++++++++++!7VJ%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77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3333"#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Br)   )builtinsr9   _pytest.assertion.rewrite	assertionrewriter7   decimalr   'src.strategies.v76_fee_aware_anti_chaser   r   r   r   r(   rD   rb   rf   r   r#   r)   r'   <module>r      s                                  $ $ $4  	- 	- 	-X X XC C C C Cr)   