
    Ѩ\jm.                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	  ed          Z
 ed           G d	 d
                      Zd;d<dZd=dZd>dZd?dZd@dAd"Zd@dBd$ZdCdDd'ZdEdAd)Zd@dAd*Ze
e
e
e
e
d+dFd:ZdS )G    )annotationsN)	dataclass)Decimal)Any0T)frozenc                     e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   ded!<   d"Zded#<   d"Zded$<   eZded%<   d&Zd'ed(<   d)Z	d*ed+<   d,Z
d'ed-<   eZded.<   eZded/<   eZded0<   eZded1<   eZded2<   eZded3<   eZded4<   eZded5<   eZded6<   d7S )8TrendRetestFeaturesstrcoinr   current_priceint	candle_tsdata_window_idopen_15mhigh_15mlow_15m	close_15mmove_15m_pctmove_1h_pctsma_1h_fastsma_1h_slowsma_4h_fastsma_4h_slowatr_pctrsi_15m
volume_24hvolume_ratiorecent_high
recent_lowpullback_from_high_pctrebound_from_low_pct
spread_pctbid_depth_notional_5ask_depth_notional_5buy_impact_1k_pctsell_impact_1k_pctfunding_rate_hourly_pctopen_interestpremium_pcti  strength_rankweakness_rankbreadth_positive_pctTbooldata_quality_allowed ztuple[str, ...]data_quality_reasonsFcontinuation_closes_confirmedvwap_15mbb_upper_15mbb_lower_15mbb_width_pctadx_15msma_1h_spread_pctsma_4h_spread_pctbest_bidbest_askN)__name__
__module____qualname____annotations__r+   r,   D0r-   r/   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r0       V/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/market/trend_retest_features.pyr
   r
      sy        IIINNN####!!!!!!!!!!!!$$$$MM$&&&&&!%%%%%,.....*/!////HLLLG!#####!#####HHrA   r
   valuer   defaultr   returnr   c                z    	 t          t          |                     S # t          $ r t          |          cY S w xY wN)r   r   	Exception)rC   rD   s     rB   _drI   >   sJ     s5zz"""      w s    ::rawdict[str, Any]dict[str, Decimal | int]c                2   t          |                     d          p|                     d          pd          t          |                     d          p|                     d          pd          t          |                     d                    t          |                     d                    t          |                     d                    t          |                     d                    t          |                     d                    d	S )
NtTr   ohlcvrN   rO   rP   rQ   rR   rS   rT   )r   getrI   )rJ   s    rB   _rowrW   E   s    22332233  rA   rowslist[dict[str, Any]]now_msr   list[dict[str, Decimal | int]]c               \    d | D             }fd|D             }t          |d           S )Nc                V    g | ]&}t          |t                    t          |          'S r0   )
isinstancedictrW   .0rows     rB   
<listcomp>z,normalize_closed_candles.<locals>.<listcomp>R   s-    AAAC:c4+@+@Ad3iiAAArA   c                    g | ]M}|d          dk    |d         dk    |d         dk    &|d         dk    2t          |d                   k    K|NS )rP   r   rQ   rR   rS   rO   r   )ra   rb   rZ   s     rB   rc   z,normalize_closed_candles.<locals>.<listcomp>S   s      C  C  CSc#hlls3x!||CSTY\]`YadeYeYejmnqrunvjwjw  |B  kB  kBS  kB  kB  kBrA   c                ,    t          | d                   S )NrN   re   )rb   s    rB   <lambda>z*normalize_closed_candles.<locals>.<lambda>T   s    SX rA   )key)sorted)rX   rZ   parsedvalids    `  rB   normalize_closed_candlesrl   Q   s[    AA4AAAF C  C  C  CF  C  C  CE%667777rA   valueslist[Decimal]lengthc                    t          |           |k     rt          S t          | | d          t                    t          |          z  S rG   )lenr@   sumr   )rm   ro   s     rB   _smars   W   s>    
6{{V	vvghh$$wv66rA      candlesc                   t          |           |dz   k     rt          S g }t          t          |           |z
  t          |                     D ]}| |         }t          | |dz
           d                   }t          |d                   }t          |d                   }|                    t          ||z
  t          ||z
            t          ||z
                                 t          | d         d                   }|dk    r8t          |t                    t          |          z  |z  t          d          z  nt          S )N   rS   rQ   rR   r   100	rq   r@   rangerI   appendmaxabsrr   r   )	ru   ro   rangesidxrb   
prev_closehighlowcloses	            rB   _atr_pctr   ]   s   
7||fqj  	FS\\F*CLL99 V Vcla(-..
#c(||Sllc$*c$*;&<&<c#
BR>S>STTUUUUwr{3  EKPST99COOgfoo-5FFZ\\rA   closesc                >    t                     |dz   k     rt          d          S  fdt          t                     |z
  t                               D             }t          d |D             t                    t          |          z  }t          d |D             t                    t          |          z  }|dk    r$|dk    rt          d          nt          d          S ||z  }t          d          t          d          t          d          |z   z  z
  S )	Nrw   50c                8    g | ]}|         |d z
           z
  S )rw   r0   )ra   r   r   s     rB   rc   z_rsi.<locals>.<listcomp>n   s*    aaavc{VC!G_,aaarA   c              3  @   K   | ]}t          |t                    V  d S rG   r}   r@   ra   changes     rB   	<genexpr>z_rsi.<locals>.<genexpr>o   s*      77VVR777777rA   c              3  B   K   | ]}t          | t                    V  d S rG   r   r   s     rB   r   z_rsi.<locals>.<genexpr>p   s.      99v#vgr""999999rA   r   ry   1)rq   r   r{   rr   r@   )r   ro   changesgainslossesrss   `     rB   _rsir   k   s   
6{{VaZt}}aaaac&kkF>RTWX^T_T_8`8`aaaG77w777<<wvNE999992>>PF{{!&wu~~~=	B5>>GENNgcllR.?@@@rA       tuple[Decimal, Decimal, Decimal]c                   t          |           |k     rt          t          t          fS | | d          }t          |t                    t          |          z  t          fd|D             t                    t          |          z  }|                                }t          d          |z  z   t          d          |z  z
  }}dk    r||z
  z  t          d          z  nt          }|||fS )Nc              3  (   K   | ]}|z
  d z  V  dS )   Nr0   )ra   rC   means     rB   r   z_bollinger.<locals>.<genexpr>|   s,      <<EUT\a'<<<<<<rA   2r   ry   )rq   r@   rr   r   sqrt)	r   ro   rm   variance	deviationupperlowerwidthr   s	           @rB   
_bollingerr   w   s    
6{{V2rzVGHHFvr??WV__,D<<<<V<<<bAAGFOOSHI'#,,22D73<<);S4S5E7;axxUU]d"WU^^33RE%rA   `   c                    | | d          }t          d |D             t                    }|dk    rt          S t          d |D             t                    }||z  S )Nc              3  @   K   | ]}t          |d                    V  dS )rT   NrI   r`   s     rB   r   z_vwap.<locals>.<genexpr>   s,      //3"SX,,//////rA   r   c              3     K   | ]k}t          |d                    t          |d                   z   t          |d                   z   t          d          z  t          |d                   z  V  ldS )rQ   rR   rS   3rT   N)rI   r   r`   s     rB   r   z_vwap.<locals>.<genexpr>   sk      nnbe2c#h<<"SX,,.CH=MQSTWX[T\Q]Q]]nnnnnnrA   )rr   r@   )ru   ro   rX   volumequotes        rB   _vwapr      sh    F788D//$///44F{{	nnimnnnprssE6>rA   c                .   t          |           |dz  dz   k     rt          S g }g }g }t          dt          |                     D ]d}| |         | |dz
           }}t          |d                   t          |d                   z
  }t          |d                   t          |d                   z
  }	|                    ||	k    r|dk    r|nt                     |                    |	|k    r|	dk    r|	nt                     t          |d                   }
|                    t          t          |d                   t          |d                   z
  t          t          |d                   |
z
            t          t          |d                   |
z
                                 ft          |d |         t                    }t          |d |         t                    }t          |d |         t                    }g }t          |dz
  t          |                    D ]}||k    rZ||t          |          z  z
  ||         z   }||t          |          z  z
  ||         z   }||t          |          z  z
  ||         z   }|dk    r|                    t                     ||z  t          d          z  }||z  t          d          z  }||z   }|                    |dk    r%t          ||z
            |z  t          d          z  nt                     |st          S |d |         }t          |t                    t          t          |                    z  }||d          D ]*}|t          |dz
            z  |z   t          |          z  }+|S )Nr   rw   rQ   rR   r   rS   ry   rz   )ru   ro   true_ranges
plus_movesminus_movesr   rb   previousupdownprevious_closesmoothed_trsmoothed_plussmoothed_minus	dx_valuesplus_diminus_didenominatorseedadxdxs                        rB   _adxr      s   
7||vzQ&&&	!#K "J!#KQG%% E EgcAg&6XC\\Bx}---(3-  2c#h<</T		b1ff"""===4"9944rBBBHSM**3r#c(||bSll:C3s8~@]<^<^`cdfgjkngodpdp  tB  eB  aC  aC  D  D  	E  	E  	E  	Ek'6'*B//K
7F7+R00MWfW-r22N!IVaZ[!1!122 l l&==%gfoo(EETWHXXK)MGFOO,KKjY\o]M+nwv.NNQ\]`QaaN!R   +->!K/'%..@(S^abSbSbWx/00;>OOhjkkkk 	WfWD
dB--'#d)),,
,C  A AWVaZ(((2-@JrA   )r(   r)   r*   r:   r;   r   candles_15m
candles_1h
candles_4hr#   r$   r%   r&   r'   r(   r)   r*   r:   r;   c           
       4 t          ||          }t          ||          }t          ||          }g }t          |          dk     r|                    d           t          |          dk     r|                    d           t          |          dk     r|                    d           |r"t          d                    |                    |d         }|d         }t          |d                   }d	 |D             }d
 |D             }d |D             }d |dd         D             }|r2t          |t                    t          t          |                    z  nt          }|dk    rt          |d                   |z  nt          }|dd         p	|dd          }t          d |D             |          }t          d |D             |          }|dk    r||z
  |z  t          d          z  nt          }|dk    r||z
  |z  t          d          z  nt          } |t          |d                   z  t          d          z
  t          d          z  }!t          |d                   t          |d                   z  t          d          z
  t          d          z  }"t          d |dd          D             t                    }#|d         }$t          |$d                   t          |$d                   k    o1|t          |d                   k    o|t          |$d                   k    }%t          |          \  }&}'}(t          |d          t          |d          }*})t          |d          t          |d          },}+|                                 d |dd          D             d |dd          D             d |dd          D             d }-t          j        |-d!d"#          }.t!          j        |.                    d$                                                    d d%         }/g }0d&|d'fd(|d)fd*|d+ffD ]\  }1}24d, |2dd          D             }3t          t)          |3                    t          |3          k    r|0                    d-|1 d.           t+          4fd/t-          |3|3d0d                    D                       r|0                    d1|1 d.           |dk    r|0                    d2           |dk    s|dk    r|0                    d3           |dk     s|	dk     r|0                    d4           |#dk    r|0                    d5           t/          dci d6|                                 d7|d8t1          |d9                   d:|/d;t          |d                   d<t          |d=                   d>t          |d?                   d@|dA|!dB|"dC|)dD|*dE|+dF|,dGt3          |          dHt5          |          dI|#dJ|dK|dL|dM|dN| dO|dP|dQ|dR|dS|	dT|
dU|dV|dW|0 dXt7          |0          dY|%dZt9          |          d[|&d\|'d]|(d^t;          |          d_|dk    r|)|*z
  |z  t          d          z  nt          d`|dk    r|+|,z
  |z  t          d          z  nt          da|db|S )dN)rZ   2   insufficient_15m_candlesinsufficient_1h_candlesinsufficient_4h_candles+rx   rS   c                8    g | ]}t          |d                    S rS   r   r`   s     rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   s"    ...3"SX,,...rA   c                8    g | ]}t          |d                    S r   r   r`   s     rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   "    ---#CH---rA   c                8    g | ]}t          |d                    S r   r   r`   s     rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   r   rA   c                8    g | ]}t          |d                    S )rT   r   r`   s     rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   s"    <<<3s8<<<rA   ir   rT   iic              3  @   K   | ]}t          |d                    V  dS )rQ   Nr   r`   s     rB   r   z.build_trend_retest_features.<locals>.<genexpr>   s,      66r#c(||666666rA   )rD   c              3  @   K   | ]}t          |d                    V  dS )rR   Nr   r`   s     rB   r   z.build_trend_retest_features.<locals>.<genexpr>   s,      55sbSll555555rA   ry   rP   r   c              3  l   K   | ]/}t          |d                    t          |d                   z  V  0dS )rT   rS   Nr   r`   s     rB   r   z.build_trend_retest_features.<locals>.<genexpr>   s;      GGcbSllRC\\1GGGGGGrA   ir   c                ,    g | ]fd dD             S )c                <    i | ]}|t          |                   S r0   r   ra   rh   rb   s     rB   
<dictcomp>z:build_trend_retest_features.<locals>.<listcomp>.<dictcomp>   s%    SSSc#c(mmSSSrA   rU   r0   r`   s    @rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   s0    iiiX[SSSS/RSSSiiirA   ic                ,    g | ]fd dD             S )c                <    i | ]}|t          |                   S r0   r   r   s     rB   r   z:build_trend_retest_features.<locals>.<listcomp>.<dictcomp>   %    RRRsSS]]RRRrA   rU   r0   r`   s    @rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   0    hhhWZRRRR.QRRRhhhrA   c                ,    g | ]fd dD             S )c                <    i | ]}|t          |                   S r0   r   r   s     rB   r   z:build_trend_retest_features.<locals>.<listcomp>.<dictcomp>   r   rA   rU   r0   r`   s    @rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   r   rA   )r   15m1h4hT),:)	sort_keys
separatorszutf-8   r   i r   i6 r   i  c                8    g | ]}t          |d                    S )rN   re   r`   s     rB   rc   z/build_trend_retest_features.<locals>.<listcomp>   s"    666C#c#h--666rA   
duplicate__candlesc              3  0   K   | ]\  }}||z
  k    V  d S rG   r0   )ra   r   currentinterval_mss      rB   r   z.build_trend_retest_features.<locals>.<genexpr>   s2      bb5FXww![0bbbbbbrA   rw   gapped_spread_unavailablel2_depth_unavailablel2_impact_invalidvolume_unavailabler   r   r   rO   r   r   r   rQ   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r/   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r0   )rl   rq   r|   
ValueErrorjoinrI   rr   r@   r   r}   minr   rs   r   jsondumpshashlibsha256encode	hexdigestsetanyzipr
   r   r   r   tupler   r   )5r   r   r   r   rZ   r#   r$   r%   r&   r'   r(   r)   r*   r:   r;   c15c1hc4hreasonslatestlast_1hr   
closes_15m	closes_1h	closes_4hprevious_volumes
avg_volumer   recentr   r    pullbackreboundmove_15mmove_1hr   r   r2   bb_upperbb_lowerbb_widthr   r   r   r   window_payloadwindow_text	window_id
dq_reasonslabelrX   startsr   s5                                                       @rB   build_trend_retest_featuresr     s   $ #;v
>
>
>C
":f
=
=
=C
":f
=
=
=CG
3xx"}}1222
3xx"}}0111
3xx"}}0111 ,'**+++WF"gGvc{OOE..#...J-----I-----I<<CF<<<O_g%r**WS9I5J5J-K-KKKegJ3=>>2fSk??Z//rLR[%CIF66v666FFFK55f555uEEEJGRUVe#{2WU^^CC\^HDNQRNNuz!Z/'%..@@XZG6#;''#,,6'%..HH'#,"WS\"2"22WS\\AWU^^SGGGSYGGGLLJ2wH
8C=Bx}--- 	&Bvc{OO#	&Bx}%%% "
 $.j#9#9 Hh#Ir22DB4G4GK#Ir22DB4G4GK 

ii_bcfcgcg_hiiihh^abebfbf^ghhhhh^abebfbf^ghhh	 N *^t
SSSK{11'::;;EEGGLIJ&+S'%:T3	<RUY[^`jTk$l 9 9 t[664:666s6{{s6{{**:5:::;;;bbbb#fV\]^]_]_V`JaJabbbbb 	97777888Q.///q  $8A$=$=01111 2Q 6 6-...Q./// + + +ZZ\\\+e+ fSk"""+ !y	+
 F3K+ F3K+ 6#;+ %+ X+ G+  K+  K+  K+  K+ +  Z   !+" :#+$ "\%+&  K'+( :)+*  (x++, %W-+. :/+0 211+2 213+4 ,+5+6 .-7+8 !8 79+: $m;+<  K=+> ",^^?+@ #:...A+B 'D&CC+D sE+F XG+H XI+J XK+L S			M+N SXZ[R[R[;4=NNacO+P SXZ[R[R[;4=NNacQ+R S+T U+ +rA   )r   )rC   r   rD   r   rE   r   )rJ   rK   rE   rL   )rX   rY   rZ   r   rE   r[   )rm   rn   ro   r   rE   r   )rt   )ru   r[   ro   r   rE   r   )r   rn   ro   r   rE   r   )r   )r   rn   ro   r   rE   r   )r   ) r   r   r   rY   r   rY   r   rY   rZ   r   r#   r   r$   r   r%   r   r&   r   r'   r   r(   r   r)   r   r*   r   r:   r   r;   r   rE   r
   )
__future__r   r   r   dataclassesr   decimalr   typingr   r@   r
   rI   rW   rl   rs   r   r   r   r   r   r  r0   rA   rB   <module>r     s   " " " " " "   ! ! ! ! ! !             WS\\ $- - - - - - - -`         	 	 	 	8 8 8 87 7 7 7] ] ] ] ]	A 	A 	A 	A 	A	 	 	 	 	    $ $ $ $ $f (*!} } } } } } } }rA   