
    9j                         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 i 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gd d!d"d#d$gZ G d% d&      Zy)'zUnit tests for strategy engine.    N)SignalAction)strategy_enginepriceiP  	ema_shorti  ema_longi  ema_crossoverbullishrsi7   adx   relative_volumeg333333?atri  price_vs_bbwithin_bands	bb_middlebb_lowerih  bb_upperi8  sma_longi  resistancesi\  historical_volatilityg333333?supportsi  it  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestStrategyEnginec                    t        j                  dt              }|j                  }t        j
                  t        j                  t        j                  g}||v }|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                   }||k  }	d	}
||
k  }|	r|st        j                  d
|	|fd|||
f      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}}
|j"                  }|syddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            d }y )Ntrend)in)z.%(py2)s
{%(py2)s = %(py0)s.action
} in %(py5)ssignalpy0py2py5assert %(py7)spy7r   d   <=r'   )z2%(py1)s <= %(py6)s
{%(py6)s = %(py4)s.confidence
}z2%(py6)s
{%(py6)s = %(py4)s.confidence
} <= %(py8)spy1py4py6py8assert %(py10)spy10z*assert %(py2)s
{%(py2)s = %(py0)s.reason
})r    r!   )r   evaluateBASE_INDICATORSactionr   BUYHOLDSELL
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
confidencereason)selfr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert5@py_assert2@py_assert7@py_format9@py_format11@py_format3s                 ?C:\xampp\htdocs\tradingbinance\backend\tests\test_strategies.pytest_trend_following_buyz+TestStrategyEngine.test_trend_following_buy   st    ))'?C}}X!1!1<3D3DlFWFW XX} XXXXX} XXXXXXXvXXXvXXX}XXX XXXXXXXX,F%%,q%,,,%,,,,,q%,,,q,,,,,,F,,,F,,,%,,,,,,,,,,}}}vv}    c                    i t         ddd}t        j                  d|      }|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                  }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}}y )N   below_lower)r
   r   mean_reversion==)zG%(py2)s
{%(py2)s = %(py0)s.action
} == %(py6)s
{%(py6)s = %(py4)s.BUY
}r   r   r    r!   r*   r+   assert %(py8)sr,   K   )>=)z2%(py2)s
{%(py2)s = %(py0)s.confidence
} >= %(py5)sr   r#   r$   )r0   r   r/   r1   r   r2   r5   r6   r7   r8   r9   r:   r;   r<   r=   )r?   
indicatorsr   r@   rF   rB   @py_format7rI   rA   rC   rD   s              rL   test_mean_reversion_oversoldz/TestStrategyEngine.test_mean_reversion_oversold$   s-   QQ=Q
 ))*:JG}}0 0 00} 00000} 0000000v000v000}000000000000 00000000  &B& B&&&& B&&&&&&v&&&v&&& &&&B&&&&&&&rN   c                    t        j                  dt        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}}|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}}y )Nscalping
spread_pctg?rS   zH%(py2)s
{%(py2)s = %(py0)s.action
} == %(py6)s
{%(py6)s = %(py4)s.HOLD
}r   r   rU   rV   r,   r   )z2%(py2)s
{%(py2)s = %(py0)s.confidence
} == %(py5)sr   r#   r$   )r   r/   r0   r1   r   r3   r5   r6   r7   r8   r9   r:   r;   r<   r=   )
r?   r   r@   rF   rB   rZ   rI   rA   rC   rD   s
             rL    test_scalping_blocks_high_spreadz3TestStrategyEngine.test_scalping_blocks_high_spread*   s#    ))*oVYGZ[}}1 1 11} 11111} 1111111v111v111}111111111111 11111111  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%rN   c                    t        j                  dt              }d}|j                  }||k  }d}||k  }|r|st	        j
                  d||fd|||f      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}}y )
Nensembler   r%   r&   )z-%(py1)s <= %(py6)s
{%(py6)s = %(py4)s.score
}z-%(py6)s
{%(py6)s = %(py4)s.score
} <= %(py8)sr   r(   r-   r.   )r   r/   r0   scorer5   r6   r:   r7   r8   r9   r;   r<   )	r?   r   rE   rF   rG   rH   rB   rI   rJ   s	            rL   test_ensemble_returns_scorez.TestStrategyEngine.test_ensemble_returns_score/   s     ))*oF'FLL'qL''C'LC'''''qLC'''q''''''F'''F'''L'''C''''''''rN   c                 v   t        j                  dt              }|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unknownrS   r_   r   r   rU   rV   r,   )r   r/   r0   r1   r   r3   r5   r6   r7   r8   r9   r:   r;   r<   )r?   r   r@   rF   rB   rZ   rI   s          rL   test_unknown_strategyz(TestStrategyEngine.test_unknown_strategy3   s     )))_E}}1 1 11} 11111} 1111111v111v111}111111111111 11111111rN   N)__name__
__module____qualname__rM   r[   r`   rd   rg    rN   rL   r   r      s    '&
(2rN   r   )__doc__builtinsr7   _pytest.assertion.rewrite	assertionrewriter5   pytest
app.modelsr   app.services.strategy_enginer   r0   r   rk   rN   rL   <module>rt      s    %    # 8U  Y	
 
2 
2 s 
3 >     E5> S  !(2 2rN   