§
    Åj
  ã                   óP   — d dl Zd dlmc mZ d dlmZ d dlm	Z	 d„ Z
d„ Zd„ Zd„ ZdS )é    N)Ú	BotConfig)ÚCandlec                  ó	  — ddl m} m} t          dddddi¬¦  «        }d	} |||¦  «        }d
}||k    }|sût	          j        d|fd||f¦  «        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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}}d	} | ||¦  «        }d}||k    }|sût	          j        d|fd||f¦  «        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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}}d} |||¦  «        }d}||k    }|sût	          j        d|fd||f¦  «        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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}}d} | ||¦  «        }d}||k    }|sût	          j        d|fd||f¦  «        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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr   )Úeffective_required_drop_pctÚroe_crash_required_drop_pctç      @ç      .@é   ÚHYPEé   )Úflash_crash_trigger_pctÚcrash_roe_trigger_pctÚdefault_leverageÚleverage_by_coinÚBTCg      @©ú==)z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == %(py8)sr   Úcfg)Úpy0Úpy1Úpy3Úpy5Úpy8zassert %(py10)sÚpy10r   ç      @)Ú	near_missr   r   r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)	r   r   r   Ú@py_assert2Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11s	            úZ/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_near_miss_crash_frequency.pyÚFtest_leverage_normalized_threshold_gets_stricter_for_low_leverage_coinr,      sB  € ØRÐRÐRÐRÐRÐRÐRÐRå
¨CÀtÐ^_ÐsyÐ{|Ðr}Ð
~Ñ
~Ô
~€Cà,1Ð9Ð&Ð& s¨EÑ2Ô2Ð9°cÐ9Ð2°cÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð2°cÐ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 sÑ9Ô9Ð9Õ9Ô9 sÑ9Ô9Ð9Ð9Õ9Ô9¨EÑ9Ô9Õ9Ô9Ð2Ñ9Ô9Õ9Ô9°cÑ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Ø,1Ð9Ð&Ð& s¨EÑ2Ô2Ð9°cÐ9Ð2°cÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð2°cÐ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 sÑ9Ô9Ð9Õ9Ô9 sÑ9Ô9Ð9Ð9Õ9Ô9¨EÑ9Ô9Õ9Ô9Ð2Ñ9Ô9Õ9Ô9°cÑ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Ø,2Ð:Ð&Ð& s¨FÑ3Ô3Ð:°sÐ:Ð3°sÒ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð3°sÐ:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:Ð&Ñ:Ô:Ð:Õ:Ô:Ð&Ñ:Ô:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô: sÑ:Ô:Ð:Õ:Ô: sÑ:Ô:Ð:Ð:Õ:Ô:¨FÑ:Ô:Õ:Ô:Ð3Ñ:Ô:Õ:Ô:°sÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø,2Ð:Ð&Ð& s¨FÑ3Ô3Ð:°sÐ:Ð3°sÒ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð3°sÐ:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:Ð&Ñ:Ô:Ð:Õ:Ô:Ð&Ñ:Ô:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô: sÑ:Ô:Ð:Õ:Ô: sÑ:Ô:Ð:Ð:Õ:Ô:¨FÑ:Ô:Õ:Ô:Ð3Ñ:Ô:Õ:Ô:°sÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ó    c                  óŠ  — ddl m}  t          dddddid¬	¦  «        }d
dg} | d|dddt          ¦   «         i d|¬¦	  «	        }|j        }d}||u }|sªt          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    }|sªt          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    }|sªt          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    }|sªt          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 )Nr   )Úshould_enter_flash_crashr   r	   r
   r   r   é   )r   r   r   r   Úmin_volume_24h©g      ð?ç      Y@)ç       @çÍÌÌÌÌÌW@r5   é
   r3   g      $@)	ÚcoinÚhistoryÚcurrent_priceÚ
volume_24hÚbaseline_priceÚopen_positionsÚ	cooldownsÚnow_tsr   F)Úis)z-%(py2)s
{%(py2)s = %(py0)s.enter
} is %(py5)sÚdecision©r   Úpy2r   úassert %(py7)sÚpy7Úno_flash_crashr   )z.%(py2)s
{%(py2)s = %(py0)s.reason
} == %(py5)s)z0%(py2)s
{%(py2)s = %(py0)s.leverage
} == %(py5)sr   ©z9%(py2)s
{%(py2)s = %(py0)s.required_drop_pct
} == %(py5)s)Ústrategyr/   r   ÚsetÚenterr   r   r   r    r!   r"   r#   r$   ÚreasonÚleverageÚrequired_drop_pct)	r/   r   r8   r@   Ú@py_assert1r&   Ú@py_assert3Ú@py_format6Ú@py_format8s	            r+   Ú<test_flash_crash_entry_uses_coin_specific_leverage_thresholdrQ      s
  € Ø1Ð1Ð1Ð1Ð1Ð1å
¨CÀtÐ^_ÐsyÐ{|Ðr}ð  OPð  Qñ  Qô  Q€CØ˜[Ð)€Gà'Ð'ØØØØØÝ‘u”uØØØð
ñ 
ô 
€Hð Œ>Ð"˜UÐ"ˆ>˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ>˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ8Ñ"Ô"Ð"Õ"Ô"ˆ8Ñ"Ô"Ð"Ð"Õ"Ô"ˆ>Ñ"Ô"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒ?Ð.Ð.Ð.ˆ?Ð.Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ?Ð.Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ8Ñ.Ô.Ð.Õ.Ô.ˆ8Ñ.Ô.Ð.Ð.Õ.Ô.ˆ?Ñ.Ô.Õ.Ô.Ð.Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÔÐ! Ð!Ð Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!Ð Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ8Ñ!Ô!Ð!Õ!Ô!ˆ8Ñ!Ô!Ð!Ð!Õ!Ô!ÐÑ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔ%Ð,¨Ð,Ð%¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð%¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ8Ñ,Ô,Ð,Õ,Ô,ˆ8Ñ,Ô,Ð,Ð,Õ,Ô,Ð%Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r-   c            	      óÀ  — ddl m}  t          ddd¬¦  «        } | ddd	d
gdd|d¬¦  «        }d }||u}|s—t          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    }	|	sªt          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}	x}}|j        }d}| }||k    }	|	sªt          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}	x}}|j        }d}||k    }	|	sªt          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    }	|	sªt          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 )"Nr   )Úbuild_near_miss_eventr   r	   r
   ©r   r   r   Útestr   r2   )r4   ç      X@rV   rE   r4   )Ústrategy_idr7   r8   r9   rJ   r   r>   )úis not)z%(py0)s is not %(py3)sÚevent)r   r   zassert %(py5)sr   g      @r   )z1%(py2)s
{%(py2)s = %(py0)s.drop_pct
} == -%(py5)srA   úassert %(py8)sr   g      4@)z5%(py2)s
{%(py2)s = %(py0)s.roe_drop_pct
} == -%(py5)srF   rC   rD   g      à?)z4%(py2)s
{%(py2)s = %(py0)s.distance_pct
} == %(py5)s)r   rS   r   r   r   r   r    r!   r"   r#   r$   Údrop_pctÚroe_drop_pctrL   Údistance_pct)rS   r   rY   r%   rM   Ú@py_format4rO   r&   r(   rN   Ú@py_format7r)   rP   s                r+   Ú)test_near_miss_event_records_roe_distancer`   (   sÉ  € Ø/Ð/Ð/Ð/Ð/Ð/å
¨CÀtÐ^_Ð
`Ñ
`Ô
`€CØ!Ð!¨f¸5È<ÐYdÐJeÐuyð  CSð  Y\ð  ehð  iñ  iô  i€EàÐˆ5˜ÐÐÐÐÕÔÐÐÐÐˆ5˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ>Ð!˜cÐ!˜c˜TÐ!ˆ>˜TÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ>˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ5Ñ!Ô!Ð!Õ!Ô!ˆ5Ñ!Ô!Ð!Ð!Õ!Ô!ˆ>Ñ!Ô!Õ!Ô!˜cÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔÐ& $Ð& $ Ð&Ð Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ5Ñ&Ô&Ð&Õ&Ô&ˆ5Ñ&Ô&Ð&Ð&Õ&Ô&ÐÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐ$ Ð$Ð Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ5Ñ$Ô$Ð$Õ$Ô$ˆ5Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$r-   c                  ó&  — ddl m}  t          ddd¬¦  «        }t          ddddd¬¦  «        t          d	ddd
d
¬¦  «        t          dd
dd
d¬¦  «        t          ddddd¬¦  «        t          ddddd¬¦  «        g} | d||dd¬¦  «        }|j        }d}||k    }|sªt          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    }|sªt          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}x}}	d S ) Nr   )Úcount_crash_eventsr   r	   r
   rT   éd   )ÚtsÚopenÚhighÚlowÚclosei,  é_   iX  é`   g     àW@i„  ée   i°  r   é   )r   Úwindow_minutesÚinterval_minutesé   r   )z.%(py2)s
{%(py2)s = %(py0)s.events
} == %(py5)sÚresultrA   rC   rD   r   )ú<=)z7%(py2)s
{%(py2)s = %(py0)s.worst_drop_pct
} <= -%(py5)srZ   r   )Úcrash_frequencyrb   r   r   Úeventsr   r   r   r    r!   r"   r#   r$   Úworst_drop_pct)rb   r   Úcandlesrp   rM   r&   rN   rO   rP   r(   r_   r)   s               r+   Ú+test_crash_frequency_counts_distinct_eventsrv   5   s  € Ø2Ð2Ð2Ð2Ð2Ð2å
¨CÀtÐ^_Ð
`Ñ
`Ô
`€Cå!˜# C¨S¸Ð<Ñ<Ô<Ý#˜C c¨r¸Ð<Ñ<Ô<Ý#˜B R¨R°tÐ<Ñ<Ô<Ý#˜D s°¸3Ð?Ñ?Ô?Ý$˜S s°¸"Ð=Ñ=Ô=ð€Gð  Ð  w°CÈÐ]^Ð_Ñ_Ô_€FàŒ=Ð˜AÐˆ=˜AÒÐÐÐÕÔÐÐÐÐˆ=˜AÐÑÔÐÕÔÑÔÐÐÕÔˆ6ÑÔÐÕÔˆ6ÑÔÐÐÕÔˆ=ÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØÔ Ð( SÐ( S DÐ(Ð  DÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆ6Ñ(Ô(Ð(Õ(Ô(ˆ6Ñ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r-   )Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úconfigr   Úhistorical_replayr   r,   rQ   r`   rv   © r-   r+   ú<module>r~      sŠ   ðØ  € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ð;ð ;ð ;ð-ð -ð -ð0
%ð 
%ð 
%ð)ð )ð )ð )ð )r-   