
    CUjp                     @   S SK rS SKrSSSSSSS.r SS\R
                  S	\R                  S
\R                  S\S-  S\R
                  4
S jjrSS\R
                  S\	S\R
                  4S jjr
 SS\R
                  S\R
                  S\S\4S jjrSS\S\4S jjrg)    Ng?g      ?g      @g{Gz?   )long_prob_thresholdshort_prob_thresholdatr_mult_slatr_mult_tprisk_per_tradeperiods_per_yeardf
long_probsshort_probsconfigreturnc                    0 [         EU=(       d    0 EnUS   nUS   nUS   nUS   nU R                  5       n XS'   X S'   SU S'   S	U S
'   [        [        U 5      5       GH  n	X   U:  a  X   X)   :  a  SU R                  U R
                  U	   S4'   U R                  U R
                  U	   S4   S:X  a@  X`R                  U R
                  U	   S4   -  U R                  U R
                  U	   S4   -  n
OAU* U R                  U R
                  U	   S4   -  U R                  U R
                  U	   S4   -  n
XR                  U R
                  U	   S
4'   M  X)   U:  d  GM  X)   X   :  d  GM  SU R                  U R
                  U	   S4'   U R                  U R
                  U	   S4   S:X  a@  X`R                  U R
                  U	   S4   -  U R                  U R
                  U	   S4   -  n
OAU* U R                  U R
                  U	   S4   -  U R                  U R
                  U	   S4   -  n
XR                  U R
                  U	   S
4'   GM     U $ )Nr   r   r   r   	long_prob
short_probr   trade_direction        trade_return   outcome_longatrCloseoutcome_short)BACKTEST_CONFIGcopyrangelenlocindex)r
   r   r   r   cfg	thresholdr   r   risk_pctirets              4/home/ai/projects/AI_Strategy/backtest/backtester.pysimulate_tradesr'      sM    0_
/2
/C)*Im$Km$K#$H	B {O"|BB~3r7^=I%*-+.*H56BFF288A; 112vvbhhqk>12a7!FF288A;+=$>>QRU\H\A]]"lRVVBHHQK,>%??"&&RSV]I]B^^25FF288A;./^y([^jm-K57BFF288A; 112vvbhhqk?23q8!FF288A;+=$>>QRU\H\A]]"lRVVBHHQK,>%??"&&RSV]I]B^^25FF288A;./# & I    tradesinitial_capitalc                    [         R                  " U R                  S9nXS'   SUS'   Un[        [	        U 5      5       H  nU S   R
                  U   nUS:w  a  USU-   -  nX2R                  U R                  U   S4'   US:  d  MH  US   R
                  US-
     nUS:  a  X6-
  U-  OSUR                  U R                  U   S4'   M     US   R                  5       US'   US   US   -
  US   -  US	'   U$ )
N)r    equityr   daily_returnr   r   r   peakdrawdown)pd	DataFramer    r   r   ilocr   cummax)r)   r*   
cfg_equitycapitalr$   r%   prevs          r&   compute_returnsr7   ;   s   FLL1J*x!$J~G3v;^$))!,!8C G4;v||A01q5h',,QU3DY]`aYaw~QU>UghJNN6<<?N:;   $H-446Jv(2Z5GG:V\K]]Jzr(   equity_curver	   c                 B   X S   S:g     n[        U5      nUS:X  a  SSS.$ X3S   S:     nX3S   S:     n[        U5      U-  nUS   R                  S   US   R                  S   -  S-
  nUS	   R                  5       n	US
   n
[        R                  nU
R                  5       S:  a8  U
R                  5       U
R                  5       -  [        R                  " U5      -  n[        U5      S:  a  US   R                  5       OSn[        U5      S:  a  US   R                  5       OSn[        U5      S:  aG  US   R                  5       S:w  a0  [        US   R                  5       US   R                  5       -  5      O
[        S5      nX3S   S:H     nX3S   S:H     nUUUU	UUUU[        U5      [        U5      S:  a"  US   R                  S5      R                  5       OS[        U5      [        U5      S:  a$  US   R                  S5      R                  5       S.$ SS.$ )u  
Вычисляет метрики производительности стратегии.

Args:
    trades: DataFrame с колонками trade_direction, trade_return, ...
    equity_curve: DataFrame с колонками equity, daily_return, drawdown
    periods_per_year: число периодов в году для аннуализации Sharpe Ratio.
                     252 = D1, 2016 = H1 (MOEX), 52 = W1.
r   r   z	no trades)n_tradeserrorr   r,   r   r   r/   r-   inf)r:   win_ratetotal_returnmax_drawdownsharpe_ratioavg_winavg_lossprofit_factorn_longlong_win_raten_shortshort_win_rate)r   r2   minnpnanstdmeansqrtsumabsfloatgt)r)   r8   r	   
trade_rowsr:   winnerslosersr=   r>   max_ddbar_returnssharperA   rB   rC   long_tradesshort_tradess                    r&   compute_metricsrZ   O   st    01Q67J:H1}44N3a78G>2Q67F7|h&H *//3l86L6Q6QRS6TTXYYL*%))+F~.KVVF1!!#koo&77"''BR:SS03Gq0@gn%**,aG03Favn%**,QHY\]cYdghYhms  uC  nD  nH  nH  nJ  NO  nOC/335~8N8R8R8TTU  UZ  [`  UaM(9:a?@K):;rABL $&k"EHEUXYEY^477:??A_`|$GJ<GX[\G\,~699!<AAC  cd r(   metricslabelc           	         [        SS 35        [        SU 35        [        S 5        [        SU R                  SS5       35        [        SU R                  SS	5      S
 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5      S 35        [        SU R                  SS	5       SU R                  SS	5      S
 S35        [        SU R                  S S	5       SU R                  S!S	5      S
 S35        g )"N
z2==================================================zBACKTEST RESULTS z  Trades:          r:   zN/Az  Win Rate:        r=   r   z.1%z  Total Return:    r>   z.2%z  Max Drawdown:    r?   z  Sharpe Ratio:    r@   z.2fz  Profit Factor:   rC   z  Avg Win:         rA   z.4fz  Avg Loss:        rB   z  Long Trades:     rD   z (WR: rE   )z  Short Trades:    rF   rG   )printget)r[   r\   s     r&   print_metricsrb      s   	Bvh-	eW
%&	VH	J >?
@A	J :3?
@A	NA >sC
DE	NA >sC
DE	NA >sC
DE	OQ ?D
EF	Iq 9#>
?@	J :3?
@A	Ha 89O]^@_`c?dde
fg	Iq 9:&M]_`Aabe@ffg
hir(   )N)g     j@)r   ) )numpyrI   pandasr0   r   r1   ndarraydictr'   rP   r7   intrZ   strrb    r(   r&   <module>rk      s        
 $ 	%
%

% % 4K	%
 \\%PBLL 5 PRP\P\ * -01BLL 1 1&)1481hj4 j jr(   