
    Q-j                         d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZmZmZmZ dededed	efd
Z	 	 	 ddedededed	edededefdZy)    )nan)	DataFrameSeries)DictLikeIntIntFloat)ema)non_zero_rangev_offsetv_pos_defaultv_seriescloseseed	tc_lengthfactorc           	         |j                  |      j                         }t        |j                  |      j                         |      }t	        |      }dg|z  dg|z  }}dg|z  dg|z  }
}	t        d|      D ]+  }|j                  |   dkD  r6d|j                  |   |j                  |   z
  |j                  |   z  z  ||<   n||dz
     ||<   t        ||dz
     |||   ||dz
     z
  z  z   d      ||<   ||k  r#t        |d |dz          }t        |d |dz          }n.t        |||z
  dz   |dz          }t        |||z
  dz   |dz          }||z
  dkD  r||z
  nd}|dkD  rd||   |z
  |z  z  |	|<   n|	|dz
     |	|<   t        |
|dz
     ||	|   |
|dz
     z
  z  z   d      |
|<   . t        || j                        }t        |
| j                        }||fS )Nr      d      index)
rollingminr
   maxlenrangeilocroundr   r   )r   r   r   r   lowest_xmacdxmacd_rangemstoch1pfstoch2pffi	lowest_pf
highest_pfpf_range	pf_series
pff_seriess                    d/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/pandas_ta/momentum/stc.py	schaff_tcr-      s'   <<	*..0L i!8!<!<!>MKD	A q1#'BF#'A37CF1a[Q!#		!|/@/@/C C{GWGWXYGZZ[F1Iq1uF1IbQi6VAYAE-B#CDaH1 y= Bt!HIR1XJBq9}q0Q78IRI 1!a%89J .8)-Ca-G:	)Q a<1	 1X=>F1Iq1uF1Is1q5zVvay3q1u:/E%FGKA7 : r-I5;;/Jy      Nfastslowoffsetkwargsreturnc                 \   t        |d      }t        |d      }t        |d      }||k  r||}}t        |||      }t        | |      } | yt        |d      }t        |      }|j	                  dd      }|j	                  dd      }	|j	                  d	d      }
t        |t              r5t        |	t              r%|
s#t        ||      }t        |	|      }	||	y||	z
  }nAt        |
t              rt        |
|      }
|
y|
}nt        | |
      }t        | |
      }||z
  }t        | |||      \  }}t        |d|dz
   t        || j                        }t        || j                        }t        || j                        }t        |j                  d|dz
   |dk7  r3|j                  |      }|j                  |      }|j                  |      }d|v rB|j                  |d   d       |j                  |d   d       |j                  |d   d       d| d| d| d| }d| |_        d| |_        d| |_        dx|_        x|_        |_        |j                  ||j                  ||j                  |i}t!        || j                        }d| |_        |j                  |_        |S )a  Schaff Trend Cycle

    This indicator is an evolved MACD with additional smoothing.

    Sources:
        * [rengel8](https://github.com/rengel8)
        * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/schaff-trend-cycle2/)

    Parameters:
        close (Series): ```close``` Series
        tc_length (int): TC period. (Adjust to the half of cycle)
            Default: ```10```
        fast (int): Fast MA period. Default: ```12```
        slow (int): Slow MA period. Default: ```26```
        factor (float): Smoothing factor for last stoch. calculation.
            Default: ```0.5```
        offset (int): How many bars to shift the results. Default: ```0``

    Other Parameters:
        ma1 (Series): User chosen MA. Default: ```False```
        ma2 (Series): User chosen MA. Default: ```False```
        osc (Series): User chosen oscillator. Default: ```False```
        fillna (value): ```pd.DataFrame.fillna(value)```

    Returns:
        (DataFrame): 3 columns

    Note:
        Can also seed STC with two MAs, ```ma1``` and ```ma2```, or an oscillator ```osc```.

        * ```ma1``` and ```ma2``` are **both** required if this option is used.
          
   Ng      ?ma1Fma2osc)lengthr   r   r   fillnaT)inplace_STCSTCmacdSTCstochmomentum)r   r   r   r   pop
isinstancer   r	   r-   r   r   r   shiftr<   namecategoryr   )r   r   r/   r0   r   r1   r2   _lengthr8   r9   r:   r   fastmaslowmar%   r#   stcmacdstoch_propsdatadfs                         r,   rK   rK   ;   s   L r"Dr"Di,Id{4d)T4(GUG$E}63'FfF **UE
"C
**UE
"C
**UE
"C#v:c6#:3sG$sG$;#+Sy	C	 sG$; U4(U4(tY7GCB|!
EKK
(C$ekk*D2U[[)E CHH\gk {iizz&!F# 6

6(#T
2F8$d3VH%t4 1TF!D66(3FVH~CH&"DIF8$EJ4>>CL>4=5> 	#		4

ED
 
4u{{	+BF8nBG,,BKIr.   )NNNNN)numpyr   pandasr   r   pandas_ta._typingr   r   r   pandas_ta.overlapr	   pandas_ta.utilsr
   r   r   r   intr-   rK    r.   r,   <module>rX      s     $ 5 5 ! )!V )!6 )!c )!8 )!Z %);?tt!t
tt08t t #+t 	tr.   