
    >jR                         d dl Zd dlmc mZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZ dde	d	         fd
Zd Zd Zd Zd Zd Zd Zd ZdS )    N)Decimal)Literal)OrderIntent)CopyObservationEvidenceGlobalStrategyContextMarketRegimeContextPromotionEvidenceStrategyCandidateevaluate_global_strategybuy#candidate_v76_strict_live_candidateside)r   sellc                     t          di d|ddddd| ddd	d
dddt          d          dd dd dt          d          dd dddddt          d          dt          d          S )Nstrategy_idsymbolzBTC/USDC:USDCcoinBTCr   reduce_onlyF
order_typemarkettifIocsizez0.001pricetrigger_price	stop_loss99000take_profitclient_order_idztest-1reasonconfirmed_retestrisk_usdz0.10estimated_notional_usd10 )r   r   )r   r   s     W/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_global_strategy_policy.pymake_intentr(      s       K U T	
 E 8 E W d d '""" D ! "!    't}}}!     c                  ,   t          dt          d          t          d          t          d          t          d          t          d          t          d          t          d          d	d

  
        }|                    |            t          di |S )N#   z4.2z1.148z1.3125r%   z1.2FT)
closed_tradestotal_net_pnllast_20_net_pnlwin_rate_pctprofit_factortop_coin_share_pctshort_scalp_share_pctmax_drawdown_usdreplay_onlysimulator_sanity_okr&   )dictr   updater	   	overridesdatas     r'   passing_promotionr=   $   s    ennT]]foo"4==%dmm    D 	KK	$$t$$$r)   c            
          t          t          ddd          t          ddddd	          ddddd
          }|                    |            t	          di |S )NbullishF	btc_trend	eth_trendchoppyE   T   r   im  T)cycles_completedexpected_cyclesallowed_signalsshadow_decisionsdata_quality_ok)market_regimecopy_observationreconcile_cleanstops_confirmedalerts_confirmedkill_switch_activelive_entries_blockedr&   )r8   r   r   r9   r   r:   s     r'   base_contextrR   5   s    )I[`aaa0"VXjk  C  UY  Z  Z  Z !  D 	KK	 ((4(((r)   c                     t          ddt          d          t                                } t          | t	                                }|j        }d}||u }|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}}d}|j        }||v }|st          j        d|fd||f          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}}|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}}d S )Ncopy_direct_executorcopy)r   r   familyintent	promotionFisz/%(py2)s
{%(py2)s = %(py0)s.allowed
} is %(py5)sdecisionpy0py2py5assert %(py7)spy7research==z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)s'copy_observation_has_no_allowed_signalsinz/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reasons
}py1py3ra   copy_research_onlyz8%(py2)s
{%(py2)s = %(py0)s.recommended_mode
} == %(py5)s)r
   r(   r=   r   rR   allowed
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationstatusreasonsrecommended_mode		candidater]   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2s	            r'   Qtest_global_policy_blocks_copy_executor_when_observation_has_zero_allowed_signalsr   C   s   !*'=>>>#%%	  I (	<>>BBH$u$u$$$$$$$$$$u$$$$$$$$$$$$8$$$$$8$$$$$$$$$$u$$$$$$$$$$$$$$$$$$$$$$$$$$$?(j(?j((((((((((?j((((((((((((8(((((8((((((?((((j(((((((((((((((((((((((((((4H8HH48HHHHHHHHHHH48HHHHHH4HHHHHHHHHHHHHHHHHHHHHH8H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$<(<<$(<<<<<<<<<<<$(<<<<<<<<<<<<<8<<<<<8<<<<<<$<<<<(<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<r)   c            	         t          ddt          d          t                                } t          t	          ddd          	          }t          t	          d
dd          	          }d}t          | |          }|j        }||v }|sCt          j        d|fd||f          t          j	        |          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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}x}}d}t          | |          }|j        }||v }|sCt          j        d|fd||f          t          j	        |          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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}x}}d S )Nr   v76_anti_chaser   )r   rV   bearishFr@   )rK   mixedr?   Tmarket_regime_blocks_longri   )zV%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py3)s(%(py4)s, %(py5)s)
}.reasons
}r   r~   )rm   rn   py4ra   rc   py9zassert %(py11)spy11market_regime_choppy_no_traderC   )r
   r(   r=   rR   r   r   r{   rr   rs   rw   rt   ru   rv   rx   ry   )	r~   r   rC   r   @py_assert6@py_assert8r   @py_format10@py_format12s	            r'   @test_global_policy_blocks_long_trade_in_bearish_or_choppy_regimer   S   s   !9&&&#%%	  I )<y\ens)t)t)tuuuG(;gYbko(p(p(pqqqF&^*B9g*V*V^*V*^^&*^^^^^^^^^^^&*^^^^^^&^^^^^^^^^^^*B^^^^^*B^^^^^^^^^^^^^9^^^^^9^^^^^^^^^^^^^g^^^^^g^^^^^^*V^^^^*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*a.FyRX.Y.Ya.Y.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.Faaaaa.FaaaaaaaaaaaaayaaaaayaaaaaaaaaaaaaRXaaaaaRXaaaaaa.Y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ar)   c            	         t          ddt                      t                      t          d          dd          } t	          | t                                }|j        }d}||u }|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}}d}|j        }||v }|st          j        d|fd||f          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}|j        }||v }|st          j        d|fd||f          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}|j        }||v }|st          j        d|fd||f          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 )Nr   r   z2.9Fr   rW   rX   rY   expected_move_vs_costanti_chase_okretest_confirmedrZ   r\   r]   r^   rb   rc   expected_move_below_cost_hurdleri   rk   rl   anti_chase_not_confirmedretest_not_confirmed)r
   r(   r=   r   r   rR   rq   rr   rs   rt   ru   rv   rw   rx   ry   r{   r}   s	            r'   Ctest_global_policy_requires_cost_hurdle_and_anti_chase_confirmationr   b   s   !9}}#%%%enn  I (	<>>BBH$u$u$$$$$$$$$$u$$$$$$$$$$$$8$$$$$8$$$$$$$$$$u$$$$$$$$$$$$$$$$$$$$$$$$$$$,@0@@,0@@@@@@@@@@@,0@@@@@@,@@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@%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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999999999999!5X%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5X55555X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5r)   c                  T   t          ddt                      t          dt          d          d          t          d          dd          } t	          d	d	d	
          }t          | |          }|j        }d	}||u }|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}}d}|j        }||v }	|	st          j        d|	fd||f          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}|j        }||v }	|	st          j        d|	fd||f          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}|j        }||v }	|	st          j        d|	fd||f          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}|j        }||v }	|	st          j        d|	fd||f          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}|j        }||v }	|	st          j        d|	fd||f          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}|j        }||v }	|	st          j        d|	fd||f          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 )Nr   r      z-0.1T)r.   r/   r6   4.5r   F)rM   rN   rO   rZ   r\   r]   r^   rb   rc   sample_too_smallri   rk   rl   paper_total_pnl_not_positivereplay_only_not_promotablereconcile_not_cleanstops_not_confirmedalerts_not_confirmed)r
   r(   r=   r   rR   r   rq   rr   rs   rt   ru   rv   rw   rx   ry   r{   )
r~   contextr]   r   r   r   r   r   r   r   s
             r'   Itest_global_policy_blocks_live_until_promotion_and_safety_gates_are_greenr   u   s   !9}}#"GFOOaefff%enn  I 5%Z_```G'	7;;H$u$u$$$$$$$$$$u$$$$$$$$$$$$8$$$$$8$$$$$$$$$$u$$$$$$$$$$$$$$$$$$$$$$$$$$$1!11!11111111111!1111111111111111111111111111!1111111111111111111111111111)=X-==)-===========)-======)===========X=====X======-============================';8+;;'+;;;;;;;;;;;'+;;;;;;';;;;;;;;;;;8;;;;;8;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;; 4H$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44H44444H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444444 4H$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44H44444H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444444!5X%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5X55555X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5r)   c                  x   t          ddt                      t                      t          d          ddt          d          d	  	        } t	          | t                                }|j        }d}||u }|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}||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         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}}|j        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   r   r   T1   )	r   rW   rX   rY   r   r   r   max_effective_leveragemax_open_positionsrZ   r\   r]   r^   rb   rc   tiny_live_preview_readyre   rg   tiny_live_previewrp   r   )z%(py1)s == %(py4)s)rm   r   zassert %(py6)spy6r   )r
   r(   r=   r   r   rR   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r|   risk_limits)r~   r]   r   r   r   r   r   r   r   @py_format5@py_format7s              r'   Itest_global_policy_allows_tiny_live_preview_only_when_every_gate_is_greenr      sc   !9}}#%%%enn&s||
 
 
I (	<>>BBH#t#t##########t############8#####8##########t###########################?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78777778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$;(;;$(;;;;;;;;;;;$(;;;;;;;;;;;;;8;;;;;8;;;;;;$;;;;(;;;;;;;;;;;;;;;;;;;;;;;;;;;; 89@S@9S@@@@@@@@@@9S@@@@@9@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@ 45::5::::::::::5:::::5:::::::::::::::::::::::::::::::::r)   )r   r   )builtinsrt   _pytest.assertion.rewrite	assertionrewriterr   decimalr   typingr   src.execution.order_intentr   %src.strategies.global_strategy_policyr   r   r   r	   r
   r   r(   r=   rR   r   r   r   r   r   r&   r)   r'   <module>r      sA                             2 2 2 2 2 2                gm,    *% % %") ) )= = = b b b6 6 6&6 6 6.; ; ; ; ;r)   