
    Q-j                         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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dedefdZy)    )	DataFrameSeries)DictLikeIntIntFloat)Imports)v_driftv_offsetv_pos_defaultv_seriesv_talibNhighlowclosefastmediumslowfast_wmedium_wslow_wtalibdriftoffsetkwargsreturnc                    t        |d      }t        |d      }t        |d      }t        |||      dz   }t        | |      } t        ||      }t        ||      }| ||yt        |d      }t        |d      }t        |d      }t        |	      }t	        |
      }
t        |      }t        d	   r|rd
dlm}  || |||||      }n^|j                  |
      }t        d| d|d|
 |i      }|j                  dddd|
 gf   j                  d      }|j                  dddd|
 gf   j                  d      }~||z
  }||z
  }|j                  |      j                         |j                  |      j                         z  }|j                  |      j                         |j                  |      j                         z  }|j                  |      j                         |j                  |      j                         z  }||z   |z   }||z  ||z  z   ||z  z   }d|z  |z  }|d
k7  r|j                  |      }d|v r|j                  |d   d       d| d| d| |_        d|_        |S )a  Ultimate Oscillator

    This indicator, by Larry Williams, attempts to identify momentum.

    Sources:
        * [tradingview](https://www.tradingview.com/wiki/Ultimate_Oscillator_(UO))

    Parameters:
        high (Series): ```high``` Series
        low (Series): ```low``` Series
        close (Series): ```close``` Series
        fast (int): The Fast %K period. Default: ```7```
        medium (int): The Slow %K period. Default: ```14```
        slow (int): The Slow %D period. Default: ```28```
        fast_w (float): The Fast %K period. Default: ```4.0```
        medium_w (float): The Slow %K period. Default: ```2.0```
        slow_w (float): The Slow %D period. Default: ```1.0```
        talib (bool): If installed, use TA Lib. Default: ```True```
        drift (int): Difference amount. Default: ```1```
        offset (int): Post shift. Default: ```0```

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

    Returns:
        (Series): 1 column
                Ng      @g       @g      ?r   r   )ULTOSCr   r   close_)axisd   fillnaT)inplaceUO__momentum)r   maxr   r   r	   r
   r   r   r!   shiftr   locminrollingsumr%   namecategory)r   r   r   r   r   r   r   r   r   r   r   r   r   _lengthmode_talr!   uoclose_drifttdfmax_h_or_pcmin_l_or_pcbptrfast_avg
medium_avgslow_avgtotal_weightweightss                               c/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/pandas_ta/momentum/uo.pyr4   r4      s   F q!D62&Fr"D$%)GD'"D
3
 CUG$E|s{em63'FXs+H63'Fu~HENEfF wH D#udFD9kk%(D%ug&6
  gga&F5'*:!;;<@@a@Hgga%6%)9!::;??Q?G[ ;&::d#'')BJJt,<,@,@,BBZZ'++-

60B0F0F0HH
::d#'')BJJt,<,@,@,BB(61H$J)>? "7]\) {XXf 6
		&"D	1 D66(!D6*BGBKI    )	NNNNNNNNN)pandasr   r   pandas_ta._typingr   r   r   pandas_ta.mapsr   pandas_ta.utilsr	   r
   r   r   r   boolr4    rA   r@   <module>rH      s    $ 5 5 "  7;KO%)Z
ZZ&,Z
Z!Z03Z Z (0Z AIZ 	Z  #	Z
 Z
 #+Z ZrA   