
    iE.                         S SK Jr  S SKJrJrJrJrJr  S SKJ	r	J
r
  S SKJrJrJr  S SKJrJrJrJr  \" SS9S 5       r\" SS9S	 5       r\" SS9S
 5       r\" SS9S 5       r   SS\	S\	S\	S\S\S\S\S\4S jjrg)    )njit)floornanzeros
zeros_likeroll)Series	DataFrame)DictLikeIntIntFloat)v_boolv_offsetv_pos_defaultv_seriesT)cachec                    [        U 5      n[        U 5      n[        U 5      nSn[        [        US-  5      5      nUS-   nU R                  n	[	        XyU-
  5       Ho  n
X   nX
   nXU-
  X-    nX
U-
  X-    nX:*  R                  5       (       a  XU'   SXF'   XU'   US-  nX:  R                  5       (       d  M^  XU'   SXF'   XU'   US-  nMq     US U US U US U 4$ )Nr         )r   intr   sizerangeall)np_highnp_lowwindow_sizeidxswingvalueextremesleftrightmi
low_centerhigh_center
low_windowhigh_windows                  Q/var/www/html/trading/venv/lib/python3.13/site-packages/pandas_ta/trend/zigzag.pynb_rolling_hlr+      s   
W
CwEwEHu[1_%&D1HE 	A4U#Y
jHai0
$h	2$))++M EO((OMH&++--MEO)(OMH! $$ y>5(+U9H-===    c                 D   [        U 5      n[        U5      n[        U5      n[        U 5      nSnSn	U S   XH'   US   XX'   US   Xh'   SXx'   U R                  n
[        SU
5       GH$  nXh   nX+   U-
  U-  nXXU	-
     S:X  a  X   S:X  a@  X+   Xh   :  a4  XHU	-
     X   :X  a  M>  US-  nU	S-  n	X   XH'   X   XX'   X+   Xh'   SU-  Xx'   Mc  Me  USU-  :  a1  XHU	-
     X   :X  a  M}  US-  nX   XH'   X   XX'   X+   Xh'   SU-  Xx'   Sn	M  M  X   S:X  a@  X+   Xh   :  a4  XHU	-
     X   :X  a  M  US-  nU	S-  n	X   XH'   X   XX'   X+   Xh'   SU-  Xx'   M  M  USU-  :  d  M  XHU	-
     X   :X  a  GM  US-  nX   XH'   X   XX'   X+   Xh'   SU-  Xx'   Sn	GM'     US-   nUS U US U US U US U 4$ )Nr   r   r   d   {Gz?g{Gzr   r   r   )r   r   r    	deviationzz_idxzz_swingzz_valuezz_devzigzagschangesr$   r%   last_zz_valuecurrent_dev_ns                  r*   nb_zz_backtestr;   1   sl   _F% H% H_FGG!fFOaHaHFO 	A1a[ )x-/=@ GO$*x2~ 8h///0CF: qLGqLG&)fFO(-H%(-H%&)K&7FO 0 	!11/0CF: qLG&)fFO(-H%(-H%&)K&7FOG 2 x1} 8h///0CF: qLGqLG&)fFO(-H%(-H%&)K&7FO 0 !22/0CF: qLG&)fFO(-H%(-H%&)K&7FOG B 
1B#2;"x}fSbkAAr,   c                 d   [        U 5      n[        U5      n[        U5      n[        U 5      nSnU S   XH'   US   XX'   US   Xh'   SXx'   U R                  n	[        U	S-
  SS5       GH2  n
XX   S:X  a  X   S:X  aC  X*   Xh   :  a7  US:  a/  XhS-
     X*   -
  X*   -  nX
   XH'   X   XX'   X*   Xh'   SU-  XxS-
  '   MS  MU  MW  X*   Xh   -
  X*   -  nUSU-  :  a/  XH   X
   :X  a  Mz  US-  nX
   XH'   X   XX'   X*   Xh'   SU-  XxS-
  '   M  M  X   S:X  aC  X*   Xh   :  a7  US:  a/  X*   XhS-
     -
  X*   -  nX
   XH'   X   XX'   X*   Xh'   SU-  XxS-
  '   M  M  M  Xh   X*   -
  X*   -  nUSU-  :  d  GM  XH   X
   :X  a  GM  US-  nX
   XH'   X   XX'   X*   Xh'   SU-  XxS-
  '   GM5     US-   nUS U US U US U US U 4$ )Nr   r   r   r   r.   r/   r0   )r   r   r    r1   r2   r3   r4   r5   r6   r$   r%   r9   r:   s                r*   
nb_find_zzr=      sq   _F% H% H_FG"gFOb	Hb	HFOA1q5"b!"x2~ 8h//GaK#+aK#858#Cux"OK&)fFO(-H%(-H%*-*;FQ;' 5@/  %x(*;;uxG	!11#&0 qLG&)fFO(-H%(-H%*-*;FQ;' 2 x1} 8h//GaK#(8h{.C#Cux"OK&)fFO(-H%(-H%*-*;FQ;' 5@/  (058;uxG	!11#&0 qLG&)fFO(-H%(-H%*-*;FQ;'c "f 
1B#2;"x}fSbkAAr,   c                    [        U5      n[        U5      n[        U5      n[        U 5       H"  u  p[        U	5      n	X   XY'   X(   Xi'   X8   Xy'   M$     [        U5       H%  n	XY   S:X  d  M  [        XY'   [        Xi'   [        Xy'   M'     XVU4$ )Nr   )r   	enumerater   r   r   )
r   r   r    r1   n	swing_map	value_mapdev_mapjr%   s
             r*   	nb_map_zzrE      s    aIaIAhG#Fx	x	\
	  1X<1ILILGJ	  ((r,   Nhighlowcloselegsr1   backtestoffsetkwargsc                    [        US5      nUS-   n[        X5      n [        X5      nU b  Uc  gUb  [        X(5      nUR                  n	Uc  g[        US5      n[        U5      n[	        US5      nU(       a  U[        [        US-  5      5      -  nU R                  5       UR                  5       p[        XU5      u  pnU(       a  [        XX5      u  nnnnO[        XX5      u  nnnn[        UUUUU
R                  5      u  nnnUS:w  a?  [        UU5      n[        UU5      n[        UU5      n[        USU& [        USU& [        USU& SU;   a9  UR                  US   S	S
9  UR                  US   S	S
9  UR                  US   S	S
9  SU SU 3nSU 3USU 3USU 3U0n[!        UU R"                  S9nSU 3Ul        SUl        U$ )a  Zigzag

This indicator attempts to filter out smaller movements while identifying
trend direction. It does not predict future trends, but it does identify
swing highs and lows.

Sources:
    * [stockcharts](https://school.stockcharts.com/doku.php?id=technical_indicators:zigzag)
    * [tradingview](https://www.tradingview.com/support/solutions/43000591664-zig-zag/#:~:text=Definition,trader%20visual%20the%20price%20action.)

Parameters:
    high (Series): ```high``` Series
    low (Series): ```low``` Series
    close (Series): ```close``` Series. Default: ```None```
    legs (int): Number of legs (> 2). Default: ```10```
    deviation (float): Reversal deviation percentage. Default: ```5```
    backtest (bool): Default: ```False```
    offset (int): Post shift. Default: ```0```

Other Parameters:
    fillna (value): ```pd.DataFrame.fillna(value)```

Returns:
    (DataFrame): 2 columns

Note: Deviation
    When ```deviation=10```, it shows movements greater than ```10%```.

Note: Backtest Mode
    Ensures the DataFrame is safe for backtesting. By default, swing
    points are returned on the pivot index. Intermediate swings are
    not returned at all. This mode swing detection is placed on the bar
    that would have been detected. Furthermore, changes in swing levels
    are also included instead of only the final value.

    * Use the following formula to get the true index of a pivot:
      ```p_i = i - int(floor(legs / 2))```

Warning:
    A Series reversal will create a new line.

   r   Ng      @Fr   r   fillnaT)inplace_z%_ZIGZAGsZIGZAGvZIGZAGd)indexZIGZAGtrend)r   r   valuesr   r   r   r   to_numpyr+   r;   r=   rE   r   r   r   rO   r
   rU   namecategory)rF   rG   rH   rI   r1   rJ   rK   rL   _lengthnp_closer   r   hlihlshlvzzizzszzvzzdr   r    dev_propsdatadfs                            r*   zigzagri      s   ^ r"DQhGD"D
3
 C|s{'<<=i-IfFh&HE$q&M"" mmos||~V!'48MCc+CcES#s'#AS#s!#sCgllCE5# {UF#UF#3gvgvGV 6VH%t4VH%t4

6(#T
2 2dV$F
&E
&E
&CD
 
4tzz	*BvhBGBKIr,   )NNNNN)numbar   numpyr   r   r   r   r   pandasr	   r
   pandas_ta._typingr   r   r   pandas_ta.utilsr   r   r   r   r+   r;   r=   rE   r   boolri    r,   r*   <module>rq      s     5 5 $ 5 5  D> >B DRB RBl DAB ABL D) ), 04CGj
jj&,j
j!)j<@j j #+jr,   