
    >j                      V    d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ  G d d      Zy)z#Tests for market regime classifier.    N)MarketRegime)regime_classifierc                   $    e Zd Zd Zd Zd Zd Zy)TestRegimeClassifierc                    dddddddd}t        j                  |      }|j                  }t        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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }t        |      }	d}
|	|
k(  }|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}}
y )NP     i  g?i  g      ?priceadxatrbb_width	ema_shortema_longhistorical_volatility==)zO%(py2)s
{%(py2)s = %(py0)s.regime
} == %(py6)s
{%(py6)s = %(py4)s.EXTREME_VOL
}resultr   py0py2py4py6assert %(py8)spy8r   )zW%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.active_strategies
})
} == %(py8)slen)r   py1py3py5r   zassert %(py10)spy10)r   classifyregimer   EXTREME_VOL
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationactive_strategiesr   )self
indicatorsr   @py_assert1@py_assert5@py_assert3@py_format7@py_format9@py_assert2@py_assert4@py_assert7@py_assert6@py_format11s                FC:\xampp\htdocs\tradingbinance\backend\tests\test_regime_classifier.pytest_extreme_volatilityz,TestRegimeClassifier.test_extreme_volatility
   sm   %(

 #++J7}}8 8 88} 88888} 8888888v888v888}888888888888 88888888++1s+,11,1111,111111s111s11111161116111+111,1111111111    c                    dddddddd}t        j                  |      }|j                  }t        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                  t              rt        j                  t              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}
}	y )Nr   #   i  g{Gz?i8  ih  g333333?r
   r   )zL%(py2)s
{%(py2)s = %(py0)s.regime
} == %(py6)s
{%(py6)s = %(py4)s.TREND_UP
}r   r   r   r   r   trend)in)z9%(py1)s in %(py5)s
{%(py5)s = %(py3)s.active_strategies
})r   r   r   zassert %(py7)spy7)r   r!   r"   r   TREND_UPr$   r%   r&   r'   r(   r)   r*   r+   r,   )r-   r.   r   r/   r0   r1   r2   r3   @py_assert0r5   r4   @py_format6@py_format8s                r9   test_trend_upz"TestRegimeClassifier.test_trend_up   s7   %(

 #++J7}}5 5 55} 55555} 5555555v555v555}555555555555 555555552&222w22222w2222w222222&222&22222222222r;   c           	         dddddddd}t        j                  |      }|j                  }t        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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t         j                  }|j                  }d}	 |||	      }
|
sd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                  |      t        j                  |	      t        j                  |
      dz  }t        t        j                  |            d x}x}x}	}
y )Nr      i  g{Gz?iZ  iF  g?r
   r   )zI%(py2)s
{%(py2)s = %(py0)s.regime
} == %(py6)s
{%(py6)s = %(py4)s.RANGE
}r   r   r   r   r   mean_reversionzzassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.is_strategy_allowed
}(%(py5)s
{%(py5)s = %(py3)s.regime
}, %(py7)s)
}r   )r   r   r   r   r@   py9)r   r!   r"   r   RANGEr$   r%   r&   r'   r(   r)   r*   r+   is_strategy_allowed)r-   r.   r   r/   r0   r1   r2   r3   r5   r7   @py_assert8@py_format10s               r9    test_range_allows_mean_reversionz5TestRegimeClassifier.test_range_allows_mean_reversion&   so   %(

 #++J7}}2 2 22} 22222} 2222222v222v222}222222222222 22222222 44UV]]UDTU4]DTUUUUUUUU UUU UUU4UUUUUUVUUUVUUU]UUUDTUUUUUUUUUUr;   c                 p   t        j                  ddi      }|j                  }t        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                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}y )
Nerrorinsufficient_datar   )zK%(py2)s
{%(py2)s = %(py0)s.regime
} == %(py6)s
{%(py6)s = %(py4)s.NO_DATA
}r   r   r   r   r   )r   r!   r"   r   NO_DATAr$   r%   r&   r'   r(   r)   r*   r+   )r-   r   r/   r0   r1   r2   r3   s          r9   test_no_dataz!TestRegimeClassifier.test_no_data4   s    "++W6I,JK}}4 4 44} 44444} 4444444v444v444}444444444444 44444444r;   N)__name__
__module____qualname__r:   rE   rN   rS    r;   r9   r   r   	   s    23V5r;   r   )__doc__builtinsr&   _pytest.assertion.rewrite	assertionrewriter$   pytest
app.modelsr   app.services.regime_classifierr   r   rW   r;   r9   <module>r`      s    )    # <-5 -5r;   