
    \j)                        d dl mZ d dlZd dlmc mZ d dlm	Z	 d dl
mZ d dlZd dlmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d	 Z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S )    )annotationsN)replace)Decimal)externalfeature)_adx)STRATEGY_IDSTRATEGY_VERSIONclassify_true_rangeconfirmed_range_reversionbuild_maker_intent)v78_2_range_runtimec            	        g } g }t          d          D ]}t          d          t          |          z   }|                     |dz   |dz
  |t          d          z   t          d          d           t          d          |dz  rt          d          nt          d          z   }|                    |dz   |dz
  |t          d          d           t          |           }d	}t          |          }||k    }|sMt	          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	        |          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}}t          |          }d}t          |          }||k     }|sMt	          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	        |          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 S )N2   100   z0.51)hlcv   z-0.540>)zM%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py9)s
{%(py9)s = %(py5)s(%(py7)s)
}r   trendr   )py0py1py3py5py7py9zassert %(py11)spy1122<)zM%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} < %(py9)s
{%(py9)s = %(py5)s(%(py7)s)
}choppy)ranger   appendr   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r   r'   idxpricecenter@py_assert2@py_assert6@py_assert8@py_assert4@py_format10@py_format12s              `/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_confirmed_range_reversion_v78_2.py:test_adx_distinguishes_directional_trend_from_choppy_ranger<      s   EFRyy Z Z-519519575>>;QX_`cXdXdeefffS1W#Q75>>>'&//RFQJVaZf7SV<<XXYYYY;;&&&;&&&&&&&&&&;&&&&&&&&&&&&4&&&&&4&&&&&&&&&&&&&&&&&&&&&&&&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<<'$''$--'<-''''''''''<-''''''''''''4'''''4''''''''''''''''''''''''<''''''''''''''''''''''''$''''-'''''''''''''''''''''''''''''''    ETHc                   t          t          |           fi 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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"t          d#          d$t          d%          S )&Ncurrent_price99.4	close_15mlow_15mz98.8high_15mz100.1rsi_15m38vwap_15mr   bb_lower_15m99bb_upper_15m101bb_width_pct2adx_15m17sma_1h_fastsma_1h_slowz99.8sma_4h_fastsma_4h_slowz99.7sma_1h_spread_pctz0.2sma_4h_spread_pctz0.3volume_ratioz1.1
spread_pctz0.02best_bidz99.39best_askz99.41)r   r   r   )coins    r;   _range_featurer[       s     fooo18JQRX///dklsdtdtdt  )0 FMT]]] biinaoaoao S\\\	 ,34===	 GNennn	 cjjpbqbqbq	
 ENNN
 18
 T[[`SaSaSa
 v}  ~C  vD  vD  vD U^^^ 18 KRRYJZJZJZ fmmteueueu r=   c                    t          d          t          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}}|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}}t          |           }t          | d         t          d          t          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 S )NBTCr>   )r]   r>   Tis)z/%(py2)s
{%(py2)s = %(py0)s.allowed
} is %(py5)sdecisionr   py2r    assert %(py7)sr!   confirmed_range==)z.%(py2)s
{%(py2)s = %(py0)s.regime
} == %(py5)s27z1.5)rN   rT   Fprimary_adx_not_rangeinz0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.blockers
}r   r   r    )r[   r   allowedr*   r+   r,   r-   r.   r/   r0   r1   regimedictr   r   blockers)
rowsr`   @py_assert1r8   @py_assert3@py_format6@py_format8bad@py_assert0r5   s
             r;   8test_true_range_requires_low_adx_and_flat_primary_trendsrx   +   s   !%((1F1FGGD"4((H#t#t##########t############8#####8##########t###########################?///?///////////?/////////////8/////8//////?////////////////////////////////
t**CegdmmwW\~~^^^CJ"3''H$u$u$$$$$$$$$$u$$$$$$$$$$$$8$$$$$8$$$$$$$$$$u$$$$$$$$$$$$$$$$$$$$$$$$$$$"7h&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7h77777h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7r=   c            
        t                      } t          | dt                                }|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}}t          t          | t          d                    dt                                }|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}	}t          t          | t          d          t          d          t          d                    dt                                }
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}	}t          t          | t          d          t          d                    dt                                }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 )NTrange_allowedr   paper_candidatere   z.%(py2)s
{%(py2)s = %(py0)s.action
} == %(py5)sr`   ra   rc   r!   longz,%(py2)s
{%(py2)s = %(py0)s.side
} == %(py5)s99.2)rC   no_trade
no_reentrylower_band_reentry_missingri   rk   rl   97r   z-3rR   rS   rU   $higher_timeframe_bearish_blocks_longbearishz100.02)rX   rY   %live_mid_dislocated_from_signal_close
dislocated)r[   r   r   actionr*   r+   r,   r-   r.   r/   r0   r1   sider   r   rp   )fr`   rr   r8   rs   rt   ru   r   rw   r5   r   r   s               r;   Itest_long_requires_lower_band_reentry_and_blocks_bearish_higher_timeframer   7   sn   A($TTTH?///?///////////?/////////////8/////8//////?////////////////////////////////="F"=F""""""""""=F""""""""""""8"""""8""""""=""""F"""""""""""""""""""""""""""*71gfoo+N+N+N^bmumwmwxxxJ*
*
**********
************:*****:**********
***************************'>:+>>'+>>>>>>>>>>>'+>>>>>>'>>>>>>>>>>>:>>>>>:>>>>>>+>>>>>>>>>>>>>>>>>>>>>>>>>>>>'wt}}ZabgZhZh  }D  EI  }J  }J  )K  )K  )K  [_  jr  jt  jt  u  u  uG1EW5EE15EEEEEEEEEEE15EEEEEE1EEEEEEEEEEEWEEEEEWEEEEEE5E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*71wu~~X_`hXiXi+j+j+jz~  JR  JT  JT  U  U  UJ2Ij6II26IIIIIIIIIII26IIIIII2IIIIIIIIIIIjIIIIIjIIIIII6I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Ir=   c                 l   t          t                      t          d          t          d          t          d          t          d          t          d          t          d          t          d                    } t          | dt	                      	          }|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}}t          t          | t          d          t          d          t          d                    dt	                      	          }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 )Nz100.6z101.2z99.962z100.59z100.61)r@   rB   rD   rC   rE   rX   rY   Trz   r|   re   r}   r`   ra   rc   r!   shortr   103r   3r   %higher_timeframe_bullish_blocks_shortri   rk   bullishrl   )r   r[   r   r   r   r   r*   r+   r,   r-   r.   r/   r0   r1   r   rp   )
r   r`   rr   r8   rs   rt   ru   r   rw   r5   s
             r;   Jtest_short_requires_upper_band_reentry_and_blocks_bullish_higher_timeframer   E   s     0@0@GT[L\L\gnovgwgw  BI  JP  BQ  BQ  [b  cg  [h  [h  sz  {C  sD  sD  OV  W_  O`  O`  	a  	a  	aA($TTTH?///?///////////?/////////////8/////8//////?////////////////////////////////=#G#=G##########=G############8#####8######=####G###########################'wu~~[bch[i[i  ~E  FI  ~J  ~J  )K  )K  )K  [_  jr  jt  jt  u  u  uG2Fg6FF26FFFFFFFFFFF26FFFFFF2FFFFFFFFFFFgFFFFFgFFFFFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFr=   c                    t                      } ddd| d         d         d         d<   t          t          d          d| 	          }|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        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 |j        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 )N	100000000
1000000000)total_volume_usdmarket_cap_usdsources	coingeckodataHYPETrz   r|   re   r}   r`   ra   rc   r!   c              3     K   | ]}d |vV  	dS )binanceN .0sources     r;   	<genexpr>z_test_hype_uses_coingecko_and_native_market_data_without_fake_binance_context.<locals>.<genexpr>S   s'      QQ6y&QQQQQQr=   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr   rb   py4c              3     K   | ]}d |v V  	dS )r   Nr   r   s     r;   r   z_test_hype_uses_coingecko_and_native_market_data_without_fake_binance_context.<locals>.<genexpr>T   s'      OO{f$OOOOOOr=   any)r   r   r[   r   r*   r+   r,   r-   r.   r/   r0   r1   source_attributionr   r   )contextr`   rr   r8   rs   rt   ru   @py_format5s           r;   Ltest_hype_uses_coingecko_and_native_market_data_without_fake_binance_contextr   N   s   jjGKVjv6w6wGI{#F+F3()?)?t^efffH?///?///////////?/////////////8/////8//////?////////////////////////////////QQX5PQQQQ3QQQQQQQQQQQQQQQQ3QQQQQ3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QQQQOO83NOOOO3OOOOOOOOOOOOOOOO3OOOOO3OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOr=   c                    t                      } t          | dt                                }t          | |          }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        }|t          k    }|st	          j        d	|fd
|t          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dz  }dd|iz  }	t          t	          j        |	                    d x}}d}t          |k    }|st	          j        d	|fdt          |f          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}}|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        }| 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}}|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        }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}}d S )'NTrz   )is not)z%(py0)s is not %(py3)sintent)r   r   zassert %(py5)sr    re   )z3%(py2)s
{%(py2)s = %(py0)s.strategy_id
} == %(py4)sr	   r   assert %(py6)spy6zv78.2.0)z%(py0)s == %(py3)sr
   limit)z2%(py2)s
{%(py2)s = %(py0)s.order_type
} == %(py5)sra   rc   r!   Alo)z+%(py2)s
{%(py2)s = %(py0)s.tif
} == %(py5)s)zQ%(py2)s
{%(py2)s = %(py0)s.take_profit
} == %(py6)s
{%(py6)s = %(py4)s.vwap_15m
}r   )r   rb   r   r   zassert %(py8)spy810)<=)z\%(py2)s
{%(py2)s = %(py0)s.estimated_notional_usd
} <= %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   )r   rb   r   r   r   zassert %(py10)spy100.075)zN%(py2)s
{%(py2)s = %(py0)s.risk_usd
} <= %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
})r[   r   r   r   r*   r+   r,   r-   r.   r/   r0   r1   strategy_idr	   r
   
order_typetiftake_profitrG   estimated_notional_usdr   risk_usd)r   r`   r   r5   rr   @py_format4rt   rs   r   @py_format7r8   ru   @py_assert5@py_format9@py_assert7@py_format11s                   r;   Ftest_v78_2_intent_is_passive_alo_targets_vwap_and_respects_risk_budgetr   W   s   A($TTTH8,,F6666,,,,,,,,,,,,,,,,,,,,,,,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,((y((((((((((y(((((((((((((((((((((((y(((((((((((((((((((((((((''''''''''''''''''''''''6'''''6''''''''''''''''''''''''''''''''''''':::66:++++++++++++++++++++++++6+++++6+++++++++++++++++++++++++++++++++++++++++++++++++++++++(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?.g.gg...?...........?.............6.....6......?...........g.....g......g....................................r=   c                l   |                      dd           t          j        t                    5  t	          j        dgt                                 d d d            n# 1 swxY w Y   |                     dt                     |                     dd           |                     dd	           |                     d
d           |                     dd	           t          j        t                    5  t	          j        dgt                                 d d d            d S # 1 swxY w Y   d S )NCTB_PAPER_TRADINGF)raisingr]   )mdCTB_STRATEGY_IDtrueCTB_LIVE_TRADING_ALLOWEDfalseCTB_LIVE_ORDER_ALLOWEDHL_MAINNET_SIGNED_ACTION)	delenvpytestraisesPermissionErrorruntime	scan_onceobjectsetenvr	   )monkeypatchs    r;   ?test_v78_2_runtime_requires_explicit_paper_and_false_live_flagsr   e   s   *E:::		'	' 0 05'fhh////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(+666*F33317;;;/88817;;;		'	' 0 05'fhh////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s#   $A!!A%(A%8$D))D-0D-c           
     8   t                      }di dt          dt          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ii d}t          j        }d|i} ||||           }d}||k    }|sVt          j        d|fd ||f          d!t          j                    v st          j	        t                    rt          j
        t                    nd!t          j
        |          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
        |          t          j
        |          d$z  }d%d&|iz  }	t          t          j        |	                    d x}x}x}x}}t          |d't          d(          )          }
t          j        }d|
i} ||||           }d}||k    }|sVt          j        d|fd ||f          d!t          j                    v st          j	        t                    rt          j
        t                    nd!t          j
        |          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
        |          t          j
        |          d$z  }d%d&|iz  }	t          t          j        |	                    d x}x}x}x}}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}}t          |d0t          d1          t          d2          t          d          3          }t          j        }d|i} ||||           }d}||k    }|sVt          j        d|fd4||f          d!t          j                    v st          j	        t                    rt          j
        t                    nd!t          j
        |          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
        |          t          j
        |          d$z  }d%d&|iz  }	t          t          j        |	                    d x}x}x}x}}dd lfd5| d6z                                                                  D             }d7 |D             }d8d9g}||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dA||f          t          j
        |          t          j
        |          d-z  }d.d/|iz  }t          t          j        |                    d x}x}}d S )BNr>   r   strategy_versionrun_idrdata_window_idwrZ   r   r~   entry_price99.3size0.1r   9.93r   0.07	stop_loss98.5r   r   funding_rate_hourly_pct0submitted_candle_tsr   last_candle_ts	wait_barsr   pending_ordersopen_positionsre   zh%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s._manage_pending
}(%(py3)s, %(py5)s, %(py6)s)
} == %(py11)sr   statetmp_pathr   rb   r   r    r   r   r#   assert %(py13)spy13r   r   )	candle_tsrC   r   ri   )z%(py1)s in %(py4)sr   r   r   r      z100.299.5)r   rD   rC   rB   ze%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s._manage_open
}(%(py3)s, %(py5)s, %(py6)s)
} == %(py11)sc                :    g | ]}                     |          S r   loadsr   linejsons     r;   
<listcomp>zJtest_pending_maker_fill_and_vwap_exit_are_forward_only.<locals>.<listcomp>   %    eeeDJJteeer=   trade_journal.jsonlc                    g | ]
}|d          S eventr   r   rows     r;   r  zJtest_pending_maker_fill_and_vwap_exit_are_forward_only.<locals>.<listcomp>       )))SCL)))r=   entryexitz%(py1)s == %(py4)sexit_reasonvwap_take_profitlive_order_allowedFr^   )z%(py1)s is %(py4)s)r[   r	   r
   r   _manage_pendingr*   r+   r,   r-   r.   r/   r0   r1   r   r   _manage_openr  	read_text
splitlines)r   r   r   rr   r8   r   @py_assert10@py_assert9r:   @py_format14touchedrw   rs   r5   r   r   targetrq   r  s                     @r;   6test_pending_maker_fill_and_vwap_exit_are_forward_onlyr  r   s	   A % ({($68H(JRTW(Yikn((v('4f(>De(Megm( 	F( (( 2?( Habe( 	q	( #3A	( 8CA	(  
  E "D5!*D""5*h??D1D?1DDDDDDDDDD?1DDDDDDDDDDDD7DDDDD7DDDDDD"DDDDDDDDDDD5DDDDD5DDDDDD*DDDDDDDDDDDhDDDDDhDDDDDD?DDDD1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a1gfoo>>>G"J5'*:J""5*:HEEJJEJJJJJJJJJJEJJJJJJJJJJJJ7JJJJJ7JJJJJJ"JJJJJJJJJJJ5JJJJJ5JJJJJJ*:JJJJJJJJJJJHJJJJJHJJJJJJEJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ+E*++5+++++++++++5++++++5++++++++++++++++++++++++++++++++Q!gg.>.>PVcjkpcqcqrrrFFvFAAFQFAQFFFFFFFFFFAQFFFFFFFFFFFF7FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFQFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFKKKeeee(5J*J)U)U)W)W)b)b)d)deeeD))D)))>gv->>)->>>>>>>>>>>)->>>>>>)>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>8M"8&88"&88888888888"&888888"8888&88888888888888888888888888888()2U2)U2222222222)U22222)2222U22222222222222222222222222222r=   c                   t          t                      d          }i dt          dt          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
|ii d }t          j        }d
|i}d!} |||| |"          }d}||k    }	|	sit          j        d#|	fd$||f          d%t          j	                    v st          j
        t                    rt          j        t                    nd%t          j        |          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        |          t          j        |          t          j        |          d(z  }
d)d*|
iz  }t          t          j        |                    d x}x}x}x}x}	}|d+         }i }||k    }|slt          j        d#|fd,||f          t          j        |          t          j        |          d-z  }d.d/|iz  }t          t          j        |                    d x}x}}t          d0                              | d1z                                                                            }|d2         }d3}||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 )4Nr   )r   r   r   r   r   r   r   rZ   r>   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   F)r{   re   )z%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s._manage_pending
}(%(py3)s, %(py5)s, %(py6)s, range_allowed=%(py8)s)
} == %(py13)sr   r   r   )r   rb   r   r    r   r   r   r   zassert %(py15)spy15r   r  r   r   r   r  zorder_journal.jsonlreason!range_or_data_quality_invalidated)r   r[   r	   r
   r   r  r*   r+   r,   r-   r.   r/   r0   r1   
__import__r   r  strip)r   r   orderr   rr   r8   r   r  @py_assert12@py_assert11r  @py_format16rw   rs   r5   r   r   r
  s                     r;   >test_pending_maker_order_cancels_when_range_regime_invalidatesr'     s:     A...A{$68HJRTWYiknv'4f>DeMegm 	F ( 2? Habe 	q	 #3A	 8CA	E !&u~DDE"Y5!*YeY""5*heTTTYXYYTXYYYYYYYYYYYTXYYYYYYYYYYYYY7YYYYY7YYYYYY"YYYYYYYYYYY5YYYYY5YYYYYY*YYYYYYYYYYYhYYYYYhYYYYYYeYYYYTYYYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY!"(b("b(((((((((("b((((("((((b(((((((((((((((((((((((((((
V


"
"H/D$D#O#O#Q#Q#W#W#Y#Y
Z
ZCx=???=???????????=??????=??????????????????????????????????r=   c           
     	   t          t                      dt          d          t          d          t          d                    }i dt          dt          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|ii d#}t
          j        }d|i} ||||           }d}||k    }|sVt          j        d$|fd%||f          d&t          j
                    v st          j        t
                    rt          j        t
                    nd&t          j        |          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        |          t          j        |          d)z  }	d*d+|	iz  }
t          t          j        |
                    d x}x}x}x}}|d,         }i }||k    }|slt          j        d$|fd-||f          t          j        |          t          j        |          d.z  }d/d0|iz  }t          t          j        |                    d x}x}}d"d lfd1| d2z                                                                  D             }d3 |D             }d4d5g}||k    }|slt          j        d$|fd-||f          t          j        |          t          j        |          d.z  }d/d0|iz  }t          t          j        |                    d x}x}}|d6         d7         }d8}||k    }|slt          j        d$|fd-||f          t          j        |          t          j        |          d.z  }d/d0|iz  }t          t          j        |                    d x}x}}|d6         d9         }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>d?|iz  }t          t          j        |                    d x}x}x}}d S )@Nr   r   z98.0z100.5)r   open_15mrC   rD   r   r   r   r   r   r   rZ   r>   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   re   r   r   r   r   r   r   r   r   r  r   r   r   c                :    g | ]}                     |          S r   r   r   s     r;   r  zDtest_same_fill_bar_stop_is_closed_conservatively.<locals>.<listcomp>   r  r=   r  c                    g | ]
}|d          S r  r   r	  s     r;   r  zDtest_same_fill_bar_stop_is_closed_conservatively.<locals>.<listcomp>   r  r=   r  r  r  r  same_bar_stop_lossnet_pnl_usdr%   )z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} < %(py7)sr   r   rb   r   r!   assert %(py9)sr"   )r   r[   r   r	   r
   r   r  r*   r+   r,   r-   r.   r/   r0   r1   r  r  r  )r   r   r#  r   rr   r8   r   r  r  r:   r  rw   rs   r5   r   r   rq   r6   r   ru   r9   r  s                        @r;   0test_same_fill_bar_stop_is_closed_conservativelyr0     s     AQXY_Q`Q`krszk{k{|||A{$68HJRTWYiknv'4f>DeMegm 	G )& 3@ Ibcf 	q	 #3A	 8CA	E !&u~DDE"D5!*D""5*h??D1D?1DDDDDDDDDD?1DDDDDDDDDDDD7DDDDD7DDDDDD"DDDDDDDDDDD5DDDDD5DDDDDD*DDDDDDDDDDDhDDDDDhDDDDDD?DDDD1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!"(b("b(((((((((("b((((("((((b(((((((((((((((((((((((((((KKKeeee(5J*J)U)U)W)W)b)b)d)deeeD))D)))>gv->>)->>>>>>>>>>>)->>>>>>)>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>8M":&::"&:::::::::::"&::::::"::::&::::::::::::::::::::::::::::8M*/7*++/a/+a//////////+a////////////7/////7//////*////+////a///////////////////////////////r=   c           
        ddi dt           dt          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ii}t          t                      dt	          d          t	          d           t	          d!          t	          d"          #          }t
          j        }d|i} ||||           }d}||k    }|sVt          j        d$|fd%||f          d&t          j
                    v st          j        t
                    rt          j        t
                    nd&t          j        |          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        |          t          j        |          d)z  }d*d+|iz  }	t          t          j        |	                    d x}x}x}x}}dd l}
|
                    | d,z                                                                            }|d-         }t	          |          }d}t	          |          }||k     }|s"t          j        d.|fd/||f          d0t          j
                    v st          j        t                    rt          j        t                    nd0t          j        |          t          j        |          d0t          j
                    v st          j        t                    rt          j        t                    nd0t          j        |          t          j        |          d1z  }d2d3|iz  }t          t          j        |                    d x}x}x}x}}|d4         }d}||k    }|slt          j        d$|fd5||f          t          j        |          t          j        |          d6z  }d7d8|iz  }t          t          j        |                    d x}x}}d S )9Nr   r>   r   r   r   r   r   r   rZ   r   r~   r   r   r   r   r   r   r   r   entry_fee_usd0.0015r   r   	bars_heldr   mfe_pctmae_pctr   r   r   z97.8z97.5z98.298)r   r)  rC   rD   rB   re   r   r   r   r   r   r   r   r  
exit_pricer%   )zO%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} < %(py10)s
{%(py10)s = %(py6)s(%(py8)s)
}r   )r   rb   r   r   r   r   zassert %(py12)spy12r  r  r   r   r   )r	   r
   r   r[   r   r   r  r*   r+   r,   r-   r.   r/   r0   r1   r  r   r  r"  )r   r   gaprr   r8   r   r  r  r:   r  r  r
  rs   r   r   @py_format13rw   r5   r   r   s                       r;   .test_gap_through_stop_uses_adverse_candle_openr<     s    ({($68H(JRTW(Yikn((v('4f(>De(MXZ`( 	u( .x( :STW( Zefg( 	3	( "3	( )9!	(   E .""a'&//SZ[aSbSbmtu{m|m|  IP  QU  IV  IV  W  W  WCCs|C|X>>C!C>!CCCCCCCCCC>!CCCCCCCCCCCC7CCCCC7CCCCCCCCCCCCCCCCCCCCCCCCCCCC|CCCCCCCCCCCXCCCCCXCCCCCC>CCCC!CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCKKK
**h!66AACCIIKK
L
LC|$77$%%777%7777777777%7777777777777777777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7777777777777777},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r=   c                `   ddi dt           dt          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ii}t          t                      dt	          d          t	          d           t	          d          t	          d!          t	          d"          #          }t
          j        }d|i} ||||           }d}||k    }|sVt          j        d$|fd%||f          d&t          j
                    v st          j        t
                    rt          j        t
                    nd&t          j        |          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        |          t          j        |          d)z  }d*d+|iz  }	t          t          j        |	                    d x}x}x}x}}|d         d         }
|
d         }d,}||k    }|slt          j        d$|fd-||f          t          j        |          t          j        |          d.z  }d/d0|iz  }t          t          j        |                    d x}x}}|
d         }t	          |          }d}||k    }|st          j        d1|fd2||f          d3t          j
                    v st          j        t                    rt          j        t                    nd3t          j        |          t          j        |          t          j        |          d4z  }d5d6|iz  }t          t          j        |                    d x}x}x}}d S )7Nr   r>   r   r   r   r   r   r   rZ   r   r~   r   r   r   r   r   90r   200r2  r3  accrued_funding_usdr   r4  r   r5  r6  r   r   i2) rA   rI   r   z0.01)r   r)  rC   rD   rB   r   re   r   r   r   r   r   r   r   r   r  r   r   r   r   )z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr   r.  r/  r"   )r	   r
   r   r[   r   r   r  r*   r+   r,   r-   r.   r/   r0   r1   )r   r   feature_after_gaprr   r8   r   r  r  r:   r  positionrw   rs   r5   r   r   r6   r   ru   r9   s                       r;   :test_skipped_candles_advance_hold_time_and_current_fundingrC     s    ({($68H(JRTW(Yikn((v('4e(=CU(LWY]( 	u( .x( :OPS( Vabc( 	3	( "3	( )9!	(   E   0 0OV]^dVeVeovw{o|o|  HO  PU  HV  HV  bi  jp  bq  bq  KR  SY  KZ  KZ  [  [  [Q/@'AQ'A8LLQPQQLPQQQQQQQQQQQLPQQQQQQQQQQQQQ7QQQQQ7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Q'AQQQQQQQQQQQ8QQQQQ8QQQQQQLQQQQPQ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QQQQ%&u-HK %A% A%%%%%%%%%% A%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%12772337a73a77777777773a7777777777777777777777777277773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7777r=   )r>   )(
__future__r   builtinsr,   _pytest.assertion.rewrite	assertionrewriter*   dataclassesr   decimalr   r   "tests.test_v78_research_archetypesr   r    src.market.trend_retest_featuresr   .src.strategies.confirmed_range_reversion_v78_2r	   r
   r   r   r   	src.toolsr   r   r<   r[   rx   r   r   r   r   r   r  r'  r0  r<  rC  r   r=   r;   <module>rO     s   " " " " " "                            @ @ @ @ @ @ @ @ 1 1 1 1 1 1              5 4 4 4 4 4	( 	( 	(   	8 	8 	8J J JG G GP P P/ / /
0 
0 
03 3 3*@ @ @0 0 0$- - -8 8 8 8 8r=   