
    2[Fi                         d dl Zd dlmZ d dlmZ d dlmZ d dlm	Z	 dej                  deeej                  f   fdZd	 Zdej                  dej                  fd
Zy)    N)Dict)ema)rsi)atrdfreturnc                 Z   i }|D ]  }|j                    d|j                   }||v r#|j                   dk(  rt        | d   |j                        ||<   O|j                   dk(  rt        | d   |j                        ||<   {|j                   dk(  st	        | |j                        ||<    |S )N_r   closer   r   )	indicatorperiodr   r   r   )r   specsoutckeys        1/var/www/html/strategy_lab/app/engine/backtest.pyapply_indicatorsr      s    
C 	)Qqxxj)#:;;%2g;1CH[[E!2g;1CH[[E!2qxx(CH	) J    c                 <   ||j                    d|j                      }|j                  dv r|j                  sy||j                  j                    d|j                  j                      }| dk(  ry|j                  dk(  rF|j                  | dz
     |j                  | dz
     k  xr |j                  |    |j                  |    kD  S |j                  | dz
     |j                  | dz
     k\  xr |j                  |    |j                  |    k  S |j
                  }|j                  dk(  r|j                  |    |kD  S |j                  dk(  r|j                  |    |k  S |j                  d	k(  r|j                  |    |k\  S |j                  d
k(  r|j                  |    |k  S y)Nr
   )cross_abovecross_belowFr   r      ><z>=z<=)r   r   opcompareilocvalue)row_idxcondindsabvals         r   eval_conditionr%      s|   q./Aww00||DLL**+1T\\-@-@,ABCa<77m#66'!)$wqy(99_affWoPQPVPVW^P_>__vvgai AFF719$55[!&&/AFFSZO:[[jj77c>166'?S#8877c>166'?S#8877d?166'?c#9977d?166'?c#99r   c                    |j                   j                  |j                   j                  z   }t        | |      g }d }t	        t        |             D ]`  | j                  df   }| j                  df   }|et        fd|j                   j                  D              }t        fd|j                   j                  D              }|rd||d}|sd||d}|j                  j                  }	|j                  j                  }
|d   dk(  rP||d	   |	z
  k  r|j                  i |||d
d       d }||d	   |
z   k\  s|j                  i |||dd       d }||d	   |	z   k\  r|j                  i |||d
d       d }9||d	   |
z
  k  sF|j                  i |||dd       d }c t        j                  |      S )Nr   timec              3   8   K   | ]  }t        |        y wNr%   .0r   ir!   s     r   	<genexpr>zbacktest.<locals>.<genexpr>4   s     R.At4R   c              3   8   K   | ]  }t        |        y wr)   r*   r+   s     r   r.   zbacktest.<locals>.<genexpr>5   s     T!>!Q5Tr/   buy)sideentry_price
entry_timesellr2   r3   SL)
exit_price	exit_timeresultTP)entrylongshortr   rangelenlocallexit	sl_points	tp_pointsappendpd	DataFrame)r   strategycondstradespositionpricer'   long_okshort_oksltpr-   r!   s              @@r   backtestrQ   (   s   NN(.."6"66EB&DFH3r7^ %$q'z"vvai Rhnn>Q>QRRGTx~~?S?STTH!#("&
 "#("& ((B((B5(H]3b88MM"fX"fUQUae"fg#Hh}5::MM"fX"fUQUae"fg#HH]3b88MM"fX"fUQUae"fg#Hh}5::MM"fX"fUQUae"fg#HK%$N <<r   )pandasrF   typingr   app.indicators.emar   app.indicators.rsir   app.indicators.atrr   rG   strSeriesr   r%   rQ    r   r   <module>rZ      sX      " " " c299n1E &.  . BLL . r   