
    Q-j                         d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZ 	 	 	 dded	ed
edededededededededefdZy)    )isnan)	DataFrameSeries)DictLikeInt)ma)hlc3)signed_seriesv_driftv_mamodev_offsetv_pos_defaultv_seriesNhighlowclosevolumefastslowsignalmamodedriftoffsetkwargsreturnc
                 \   t        |d      }t        |d      }t        |d      }t        ||      |z   }t        | |      } t        ||      }t        ||      }t        ||      }| |||yt        |d      }t	        |      }t        |	      }	|t        t        | ||      d      z  }|j                  |j                         df   }t        |||      t        |||      z
  }|"t        t        |j                                     ryt        ||j                  |j                         df   |      }|"t        t        |j                                     ry|	dk7  r"|j                  |	      }|j                  |	      }d	|
v r,|j                  |
d	   d
       |j                  |
d	   d
       d| d| d| }d| |_        d| |_        dx|_        |_        |j                   ||j                   |i}t%        ||j&                        }d| |_        |j"                  |_        |S )ar  Klinger Volume Oscillator

    This indicator, by Stephen J. Klinger., attempts to predict
    price reversals.

    Sources:
        * [daytrading](https://www.daytrading.com/klinger-volume-oscillator)
        * [investopedia](https://www.investopedia.com/terms/k/klingeroscillator.asp)

    Parameters:
        high (Series): ```high``` Series
        low (Series): ```low``` Series
        close (Series): ```close``` Series
        volume (Series): ```volume``` Series
        fast (int): Fast MA period. Default: ```34```
        slow (int): Slow MA period. Default: ```55```
        signal (int): Signal period. Default: ```13```
        mamode (str): See ```help(ta.ma)```. Default: ```"ema"```
        offset (int): Post shift. Default: ```0```

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

    Returns:
        (DataFrame): 2 columns
    "   7      Nema)lengthr   fillnaT)inplace_KVOKVOsr   )index)r   maxr   r   r   r   r
   r	   locfirst_valid_indexr   allr   to_numpyshiftr#   namecategoryr   r(   )r   r   r   r   r   r   r   r   r   r   r   _lengthsigned_volumesvkvo
kvo_signal_propsdatadfs                      b/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/pandas_ta/volume/kvo.pyr4   r4      s5   B r"Dr"D62&F$o&GD'"D
3
 CUG$Efg&F|s{emv~fe$FENEfF ]4c5+A2FFM			=::<=>	@B
VR
%62d(C
CC
{c%/0FCGGC$9$9$;$<$=?OJSz':':'<!=> {ii%%f-
 6

6(#T
2&*D9 avQvh'FVH~CHVHoJO)11CL:&HHc:??J7D	4u{{	+BF8nBG,,BKI    )NNNNNN)numpyr   pandasr   r   pandas_ta._typingr   r   pandas_ta.mar   pandas_ta.overlapr	   pandas_ta.utilsr
   r   r   r   r   r   strr4    r:   r9   <module>rC      s     $ +  "  7;%)	R
RR&,R6<R
RR03R R  #R 	R #+	R
 Rr:   