
    9j_                     Z    d Z ddlZddlmc mZ ddlZddlZ	ddl
ZddlmZ  G d d      Zy)z"Unit tests for statistics service.    N)statistics_servicec                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestStatisticsServicec                    t        j                  t        j                  j	                  ddd            }t        j                  |      }t        |t              }|sd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                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }y )	NgMbP?g{Gz?im  z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancesharpefloat)py0py1py2py4)pdSeriesnprandomnormalr   sharpe_ratior   r	   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation)selfreturnsr   @py_assert3@py_format5s        ?C:\xampp\htdocs\tradingbinance\backend\tests\test_statistics.pytest_sharpe_ratioz'TestStatisticsService.test_sharpe_ratio   s    ))BII,,UD#>?#009&%((((((((z(((z((((((&(((&((((((%(((%((((((((((    c                    t        j                  g d      }t        j                  |      }d}||kD  }|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}}y )	N)d   n   i   _   r#   x   s   r   >z%(py0)s > %(py3)sddr
   py3assert %(py5)spy5)r   r   r   max_drawdownr   _call_reprcomparer   r   r   r   r   r   )r   equityr,   @py_assert2@py_assert1@py_format4@py_format6s          r   test_max_drawdownz'TestStatisticsService.test_max_drawdown   sb    =>,,V4rAvrArrAr!   c                    g 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                  |      dz  }dd|iz  }t        t        j                  |            d x}}y )	N)r#         g      N@)==)z%(py0)s == %(py3)swrr-   r/   r0   )
r   win_rater   r2   r   r   r   r   r   r   )r   pnlsr?   r4   r5   r6   r7   s          r   test_win_ratez#TestStatisticsService.test_win_rate   so    (((.rTzrTrrTr!   c                    g d}t        j                  |      }d}||kD  }|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}}y )	N)r#   r:   r;   r<      r)   r+   pfr-   r/   r0   )
r   profit_factorr   r2   r   r   r   r   r   r   )r   rA   rE   r4   r5   r6   r7   s          r   test_profit_factorz(TestStatisticsService.test_profit_factor   sX    #--d3rAvrArrAr!   c                    t        j                  dddd      }d}||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                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}x}}y )N<   r#   2   g      ?)capr   )<=rL   )z%(py1)s <= %(py4)sz%(py4)s <= %(py6)skelly)r   r   py6zassert %(py8)spy8)
r   kelly_criterionr   r2   r   r   r   r   r   r   )r   rM   @py_assert0r4   @py_assert5r   @py_format7@py_format9s           r   test_kelly_criterion_cappedz1TestStatisticsService.test_kelly_criterion_capped   s    "222sBDI!qE!!T!ET!!!!!qET!!!q!!!!!!E!!!E!!!T!!!!!!!r!   c                    t        j                  g d      }t        j                  d|      }d}||kD  }|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}}y )
N)
rD                        	   
   r_   r   r)   r+   zr-   r/   r0   )r   r   r   z_scorer   r2   r   r   r   r   r   r   )r   seriesr`   r4   r5   r6   r7   s          r   test_z_scorez"TestStatisticsService.test_z_score#   sd    :;&&r62q1uq1qq1r!   c                 ^   t        j                  g d      }t        j                  |d      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}}y )N)
rD   rW   rX   rW   rX   rW   rX   rW   rX   r#   g       @)	threshold
is_anomalyT)is)z%(py1)s is %(py4)s)r   r   zassert %(py6)srN   )	r   r   r   detect_anomaliesr   r2   r   r   r   )r   rb   resultrQ   r   r4   r   rS   s           r   test_anomaly_detectionz,TestStatisticsService.test_anomaly_detection(   su    ;<#44VsKl#+t+#t++++#t+++#+++t+++++++r!   c                    t        j                  g d      }t        j                  g d      }t        j                  ||      }d}||z
  }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}x}}y )N)rD   rW   rX   rY   rZ   )rW   rY   r[   r]   r_   g      ?g{Gz?)<)z;%(py6)s
{%(py6)s = %(py0)s((%(py1)s - %(py3)s))
} < %(py9)sabscorr)r
   r   r.   rN   py9zassert %(py11)spy11)r   r   r   correlationrm   r   r2   r   r   r   r   r   r   )r   abrn   r4   @py_assert4rR   @py_assert8@py_assert7@py_format10@py_format12s              r   test_correlationz&TestStatisticsService.test_correlation-   s    IIo&II&'!--a3%4#:%s:%%%%%%%%%%%%s%%%s%%%%%%4%%%4%%%#%%%%%%%%%%%%%%r!   N)__name__
__module____qualname__r    r8   rB   rG   rU   rc   rj   ry    r!   r   r   r   
   s*    )



"
,
&r!   r   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   pytestpandasr   numpyr   app.services.statistics_servicer   r   r}   r!   r   <module>r      s"    (      >'& '&r!   