
    Rhj                          S SK rS SKrS\R                  S\R                  4S jrS\R                  S\R                  4S jr/ SQr/ SQrg)    Ndfreturnc                   ^ ^^ T R                  5       m [        R                  " ST S   -
  S-  SS5      T S'   [        R                  " SST S   -  -
  SS5      T S'   T S	   R                  S5      R	                  5       R                  S
[        R                  5      n[        R                  " T S	   U-  SS5      T S'   T S   R                  S
5      T S'   T R                   Vs/ s H  o"R                  S5      (       d  M  UPM     nnU(       a  SSSSS.nUR                  5        VVs0 s H  u  pVUT R                  ;   d  M  XV_M     nnnU(       aA  [        UR                  5       5      m[        U U4S jUR                  5        5       5      T S'   OST S'   OST S'   [        R                  " T S   S-  SS5      T S'   T S   R                  S
5      R                  nT S   R                  S5      R                  n	[        R                  " [        T 5      5      n
[        [        T 5      5       H>  nX   S:  a!  [        R                  " X   S-  SS5      X'   M,  X   S:  a  SX'   M:  SX'   M@     U
T S'   / SQnSSSSSSS.mU Vs/ s H  oT R                  ;   d  M  UPM     nn[        U4S jU 5       5      m[        U UU4S  jU 5       5      T S!'   T S!   R!                  5       T S"'   T $ s  snf s  snnf s  snf )#N2   rsi   
rsi_signal   bb_position	bb_signal	macd_histr   macd_signalclose_to_sma_333333?g?)close_to_sma_5close_to_sma_10close_to_sma_20close_to_sma_50c              3   p   >#    U  H+  u  p[         R                  " TU   S -  SS5      UT-  -  v   M-     g7f)
   r   r	   N)npclip).0kvr   w_sums      5/home/ai/projects/AI_Strategy/features/directional.py	<genexpr>*add_directional_signals.<locals>.<genexpr>   s8      %5DA 1
B*a%i85s   36trend_signal        return_5   momentum_signalvolume_ratiog      ?g      ?g      volume_signal)r
   r   r   r!   r%   r'   g      ?g333333?g?c              3   .   >#    U  H
  nTU   v   M     g 7fN )r   sweights_sigs     r   r   r    9   s     .1As   c              3   @   >#    U  H  nTU   TU   T-  -  v   M     g 7fr)   r*   )r   r+   r   r   r,   s     r   r   r    ;   s&      !27Q1Q%'(%s   directional_biassignal_strength)copyr   r   rollingstdreplacenanfillnacolumns
startswithitemssumvalueszeroslenrangeabs)r   macd_stdcsma_colsweightsr   r   available_weightstrendvr
vol_signalisignalsr+   availr   r,   s   `              @@r   add_directional_signalsrJ      s   	B wwRY"4b!<B|gga!b&7"77Q?B{O+&&r*..088BFFCH;( :BBB}=)003B}::G:ao)F:HG%(SUXmpq.5mmoQodabjjTQToQ)0023E!$ %-335% "B~
 "%B~ >GGBzNR$7Q?B
 ~%%a(//E	N		"	"1	%	,	,B#b'"J3r7^53;GGEHsND#>JMUS[JMJM  %BlG!%D^avy  MP  QK31

?QE3...E  !27! B 12668BI] H RF 4s$   "K,?K,(K1K1K7K7c                 L	   U R                  5       n [        U 5      nUS:  a  S H  nSX'   M	     U $ U S   R                  R                  [        R
                  5      nU S   R                  R                  [        R
                  5      nU S   R                  R                  [        R
                  5      nU S   R                  R                  [        R
                  5      nSU R                  ;   a-  U S   R                  R                  [        R
                  5      nOS	n[        R                  " U[        R
                  S
9nUb  [        SU5       H  n	XIS-
  U	S-    n
XyS-
  U	S-    n[        R                  " U
5      n[        R                  " U5      nX   nX   nXIS-
  U	 R                  5       nX   U:  d  Mj  X:  d  Mq  X-
  n[        R                  " US-  SS5      X'   M     [        R                  " USS5      U S'   [        R                  " U[        R
                  S
9n[        R                  " U[        R
                  S
9n[        SU5       HK  n	XiS-
  U	S-    nUR                  5       nUR                  5       nUS:  a  Xi   U-
  U-  UU	'   OSUU	'   UUU	'   MM     [        R                  " U[        R
                  S
9n[        R                  " U[        R
                  S
9n[        SU5       H  n	XIS-
  U	S-    R                  5       nXYS-
  U	S-    R                  5       nUU-
  nUS:  d  M@  X9   U-
  U-  nUU	   S:  d  MU  US:  a&  [        R                  " UU	   S-
  S-  SS5      UU	'   M  US:  d  M  [        R                  " UU	   S-
  S-  SS5      UU	'   M     UU S'   UU S'   [        R                  " U[        R
                  S
9n[        SU5       H  n	XIS-
  U	 nUR                  5       nUS::  a  M"  S	n[        [        SU	S-
  5      U	5       H  n UU    US-  :  d  M  U n  O   Uc  MY  X9   U:  d  Mc  UU   U-
  U-  n![        R                  " U!S-  SS5      UU	'   M     UU S'   S H)  nX R                  ;   d  M  X   R                  S5      X'   M+     U $ ) u  Short/long-specific паттерн-признаки для улучшения precision recall.

Добавляет:
  short_div_signal  [0, +1]  — Bearish RSI-price divergence
  short_vol_climax  [0, +1]  — Volume climax at price peaks (short)
  short_fail_break  [0, +1]  — Failed breakout above resistance
  long_vol_climax   [0, +1]  — Volume climax at price lows (long)
r$   short_div_signalshort_vol_climaxshort_fail_breaklong_vol_climaxr"   CloseHighLowVolumer   N)dtype      r	   g      4@r   rM      g:0yE>r   	   g       @gffffff?g      @r   rN   rP         gGz?d   rO   )r0   r<   r:   astyper   float64r6   r;   r=   argmaxmaxr   meanr2   minr5   )"r   ncolclosehighlowvolumer   divrG   window_high
window_rsiph_idxrsi_max_idx	rsi_at_phrsi_peak	prev_highrsi_diff
vol_zscorevol_ma
vol_windowvol_meanvol_stdvol_climax_shortvol_climax_longwindow_high_10window_low_10range_10price_position
fail_break
resistancebreakout_barr   	rejections"                                     r   add_short_specific_featuresr   C   s`    
BBA2vbCBG c	wK%%bjj1Ef:##BJJ/D
U)


!
!"**
-C\  ''

3F
 

i%%bjj1
((1BJJ
'C
r1AtAaC.KrT!A#JYY{+F))J/K"*I!.H rT!((*I"Y.93G#/D!Q7  "$a!3 !2::.JXXarzz*F2q\bD1%
??$.."T>#Y1W<JqMJqMq	  xx4hhq

3O2q\c!A#**,aC!((*!M1d?#h6(BN!}s"!C'*,'':a=33F#2MqRS*T$Q'#c))+*Q-#2E1LaQR)SOA&  .B+B !2::.J2q\d1#'')
?s2q1u~q)AQx*u,,  * # x*$"<0:=K	 "	CA >
1! $ (B _**gnnS)BG _ I    )r
   r   r   r!   r%   r'   r.   r/   rL   )	numpyr   pandaspd	DataFramerJ   r   DIRECTIONAL_COLSSHORT_SPECIFIC_COLSr*   r   r   <module>r      sV     ; ; ;|oBLL oR\\ od  r   