o
    ?Bi}                     @   sT  d Z ddlZddlZddlmZ G dd deZG dd deZG dd	 d	eZ	G d
d deZ
G dd deZd>ddZd?ddZd@ddZd@ddZd@ddZd@ddZd@ddZd@d d!Z	#dAd$d%Z	#dAd&d'Z	#dAd(d)Z	#dAd*d+Z	#dAd,d-Z	#dAd.d/Z	#dAd0d1ZdBd2d3ZdBd4d5ZdCd6d7ZdCd8d9ZdCd:d;Zd>d<d=Z dS )Dzq
.. module:: volatility
   :synopsis: Volatility Indicators.

.. moduleauthor:: Dario Lopez Padial (Bukosabino)

    N)IndicatorMixinc                   @   sR   e Zd ZdZ		ddejdejdejdedef
d	d
Zdd Z	dejfddZ
dS )AverageTrueRangea/  Average True Range (ATR)

    The indicator provide an indication of the degree of price volatility.
    Strong moves, in either direction, are often accompanied by large ranges,
    or large True Ranges.

    http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:average_true_range_atr

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.
       Fhighlowclosewindowfillnac                 C   s*   || _ || _|| _|| _|| _|   d S N)_high_low_close_window_fillna_run)selfr   r   r   r   r	    r   M/var/www/html/Trade-python/venv/lib/python3.10/site-packages/ta/volatility.py__init__   s   zAverageTrueRange.__init__c                 C   s   | j d}| | j| j|}tt| j }|d| j 	 || jd < t
| jt|D ]}||d  | jd  |j|  t| j ||< q-tj||jd| _d S )N   r   )dataindex)r   shift_true_ranger   r   npzeroslenr   meanrangeilocfloatpdSeriesr   _atr)r   close_shift
true_rangeatrir   r   r   r   .   s    zAverageTrueRange._runreturnc                 C      | j | jdd}tj|ddS )zeAverage True Range (ATR)

        Returns:
            pandas.Series: New feature generated.
        r   valuer&   name)_check_fillnar#   r!   r"   )r   r&   r   r   r   average_true_range9      z#AverageTrueRange.average_true_rangeNr   F)__name__
__module____qualname____doc__r!   r"   intboolr   r   r/   r   r   r   r   r      s"    
r   c                	   @   s   e Zd ZdZ			ddejdededefd	d
Zdd Z	dejfddZ
dejfddZdejfddZdejfddZdejfddZdejfddZdejfddZdS )BollingerBandsa.  Bollinger Bands

    https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.
          Fr   r   
window_devr	   c                 C   s$   || _ || _|| _|| _|   d S r
   )r   r   _window_devr   r   )r   r   r   r;   r	   r   r   r   r   O   s
   zBollingerBands.__init__c                 C   sp   | j rdn| j}| jj| j|d | _| jj| j|djdd| _| j| j| j  | _	| j| j| j  | _
d S )Nr   min_periods)ddof)r   r   r   rollingr   _mavgstd_mstdr<   _hband_lband)r   r>   r   r   r   r   \   s   zBollingerBands._runr(   c                 C   r)   )zjBollinger Channel Middle Band

        Returns:
            pandas.Series: New feature generated.
        r*   mavgr,   )r.   rA   r!   r"   )r   rG   r   r   r   bollinger_mavge   r0   zBollingerBands.bollinger_mavgc                 C   r)   )zhBollinger Channel High Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   hbandr,   )r.   rD   r!   r"   r   rI   r   r   r   bollinger_hbandn   r0   zBollingerBands.bollinger_hbandc                 C   r)   )zgBollinger Channel Low Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   lbandr,   )r.   rE   r!   r"   r   rL   r   r   r   bollinger_lbandw   r0   zBollingerBands.bollinger_lbandc                 C   2   | j | j | j d }| j|dd}tj|ddS )zBollinger Channel Band Width

        From: https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_band_width

        Returns:
            pandas.Series: New feature generated.
        d   r   r*   bbiwbandr,   )rD   rE   rA   r.   r!   r"   r   wbandr   r   r   bollinger_wband   s   zBollingerBands.bollinger_wbandc                 C   sF   | j | j | j| j | j| jktj }| j|dd}tj|ddS )zBollinger Channel Percentage Band

        From: https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_band_perce

        Returns:
            pandas.Series: New feature generated.
        r   r*   bbipbandr,   )	r   rE   rD   wherer   nanr.   r!   r"   r   pbandr   r   r   bollinger_pband   s
   zBollingerBands.bollinger_pbandc                 C   sF   t jt| j| jkdd| jjd}| j|dd}t j|| jjddS )zBollinger Channel Indicator Crossing High Band (binary).

        It returns 1, if close is higher than bollinger_hband. Else, it returns 0.

        Returns:
            pandas.Series: New feature generated.
              ?        r   r   r*   bbihband)r   r-   )r!   r"   r   rV   r   rD   r   r.   rJ   r   r   r   bollinger_hband_indicator   s
   z(BollingerBands.bollinger_hband_indicatorc                 C   @   t jt| j| jk dd| jjd}| j|dd}t j|ddS )zBollinger Channel Indicator Crossing Low Band (binary).

        It returns 1, if close is lower than bollinger_lband. Else, it returns 0.

        Returns:
            pandas.Series: New feature generated.
        r[   r\   r]   r   r*   bbilbandr,   )r!   r"   r   rV   r   rE   r   r.   rM   r   r   r   bollinger_lband_indicator   
   z(BollingerBands.bollinger_lband_indicatorNr9   r:   F)r2   r3   r4   r5   r!   r"   r6   r7   r   r   rH   rK   rN   rT   rZ   r_   rb   r   r   r   r   r8   C   s,    
				r8   c                   @   s   e Zd ZdZ					d#dejdejd	ejd
ededededefddZdd Z	dejfddZ
dejfddZdejfddZdejfddZdejfddZdejfddZdejfd d!Zd"S )$KeltnerChannela  KeltnerChannel

    Keltner Channels are a trend following indicator used to identify reversals with channel breakouts and
    channel direction. Channels can also be used to identify overbought and oversold levels when the trend
    is flat.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels
        multiplier(int): The multiplier has the most effect on the channel width. default is 2
    r9   
   FTr:   r   r   r   r   
window_atrr	   original_version
multiplierc	           	      C   s<   || _ || _|| _|| _|| _|| _|| _|| _|   d S r
   )	r   r   r   r   _window_atrr   _original_version_multiplierr   )	r   r   r   r   r   rg   r	   rh   ri   r   r   r   r      s   zKeltnerChannel.__init__c                 C   s  | j rdn| j}| jrQ| j| j | j d j| j|d | _d| j d| j  | j d j| jdd | _	d| j d| j  | j d j| jdd | _
d S | jj| j|dd	 | _t| j| j| j| j| j d
 }| j| j|  | _	| j| j|  | _
d S )Nr   g      @r=      r:   r   F)spanr>   adjust)r   r   r   r   r	   )r   r   rk   r   r   r   r@   r   _tp_tp_high_tp_lowewmr   rj   r/   rl   )r   r>   r&   r   r   r   r      sB   zKeltnerChannel._runr(   c                 C   r)   )zhKeltner Channel Middle Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   rG   r,   )r.   rq   r!   r"   )r   	tp_middler   r   r   keltner_channel_mband  r0   z$KeltnerChannel.keltner_channel_mbandc                 C   r)   )zfKeltner Channel High Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   kc_hbandr,   )r.   rr   r!   r"   )r   tp_highr   r   r   keltner_channel_hband  r0   z$KeltnerChannel.keltner_channel_hbandc                 C   r)   )zeKeltner Channel Low Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   kc_lbandr,   )r.   rs   r!   r"   )r   tp_lowr   r   r   keltner_channel_lband  r0   z$KeltnerChannel.keltner_channel_lbandc                 C   rO   )zgKeltner Channel Band Width

        Returns:
            pandas.Series: New feature generated.
        rP   r   r*   rQ   r,   )rr   rs   rq   r.   r!   r"   rR   r   r   r   keltner_channel_wband  s   z$KeltnerChannel.keltner_channel_wbandc                 C   s4   | j | j | j| j  }| j|dd}tj|ddS )zlKeltner Channel Percentage Band

        Returns:
            pandas.Series: New feature generated.
        r   r*   rU   r,   )r   rs   rr   r.   r!   r"   rX   r   r   r   keltner_channel_pband'  s   z$KeltnerChannel.keltner_channel_pbandc                 C   s@   t jt| j| jkdd| jjd}| j|dd}t j|ddS )zKeltner Channel Indicator Crossing High Band (binary)

        It returns 1, if close is higher than keltner_channel_hband. Else, it returns 0.

        Returns:
            pandas.Series: New feature generated.
        r[   r\   r]   r   r*   dcihbandr,   )r!   r"   r   rV   r   rr   r   r.   rJ   r   r   r   keltner_channel_hband_indicator1  rc   z.KeltnerChannel.keltner_channel_hband_indicatorc                 C   r`   )zKeltner Channel Indicator Crossing Low Band (binary)

        It returns 1, if close is lower than keltner_channel_lband. Else, it returns 0.

        Returns:
            pandas.Series: New feature generated.
        r[   r\   r]   r   r*   dcilbandr,   )r!   r"   r   rV   r   rs   r   r.   rM   r   r   r   keltner_channel_lband_indicator?  rc   z.KeltnerChannel.keltner_channel_lband_indicatorN)r9   rf   FTr:   )r2   r3   r4   r5   r!   r"   r6   r7   r   r   rv   ry   r|   r}   r~   r   r   r   r   r   r   re      s@    	
 			

re   c                   @   s   e Zd ZdZ			ddejdejdejded	ed
efddZdd Z	dejfddZ
dejfddZdejfddZdejfddZdejfddZdS )DonchianChannelaJ  Donchian Channel

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.
    r9   r   Fr   r   r   r   offsetr	   c                 C   s0   || _ || _|| _|| _|| _|| _|   d S r
   )_offsetr   r   r   r   r   r   )r   r   r   r   r   r   r	   r   r   r   r   [  s   	zDonchianChannel.__init__c                 C   sJ   | j rdn| j| _| jj| j| jd | _| jj| j| jd | _	d S )Nr   r=   )
r   r   _min_periodsr   r@   maxrD   r   minrE   r   r   r   r   r   l  s   zDonchianChannel._runr(   c                 C   4   | j | jdd}| jdkr|| j}tj|ddS )zgDonchian Channel High Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   r   dchbandr,   )r.   rD   r   r   r!   r"   rJ   r   r   r   donchian_channel_hbandu     
z&DonchianChannel.donchian_channel_hbandc                 C   r   )zfDonchian Channel Low Band

        Returns:
            pandas.Series: New feature generated.
        rF   r*   r   dclbandr,   )r.   rE   r   r   r!   r"   rM   r   r   r   donchian_channel_lband  r   z&DonchianChannel.donchian_channel_lbandc                 C   sH   | j | j d | j }| j|dd}| jdkr|| j}tj|ddS )ziDonchian Channel Middle Band

        Returns:
            pandas.Series: New feature generated.
        g       @rF   r*   r   dcmbandr,   )rD   rE   r.   r   r   r!   r"   )r   mbandr   r   r   donchian_channel_mband  s
   
z&DonchianChannel.donchian_channel_mbandc                 C   s^   | j j| j| jd }| j| j | d }| j|dd}| jdkr(|	| j}t
j|ddS )zhDonchian Channel Band Width

        Returns:
            pandas.Series: New feature generated.
        r=   rP   r   r*   dcwbandr,   )r   r@   r   r   r   rD   rE   r.   r   r   r!   r"   )r   rG   rS   r   r   r   donchian_channel_wband  s   
z&DonchianChannel.donchian_channel_wbandc                 C   sJ   | j | j | j| j  }| j|dd}| jdkr|| j}tj|ddS )zmDonchian Channel Percentage Band

        Returns:
            pandas.Series: New feature generated.
        r   r*   dcpbandr,   )r   rE   rD   r.   r   r   r!   r"   rX   r   r   r   donchian_channel_pband  s
   
z&DonchianChannel.donchian_channel_pbandNr9   r   F)r2   r3   r4   r5   r!   r"   r6   r7   r   r   r   r   r   r   r   r   r   r   r   r   N  s0    
	r   c                   @   sB   e Zd ZdZddejdedefddZd	d
 Z	dejfddZ
dS )
UlcerIndexzUlcer Index

    https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:ulcer_index

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.
    r   Fr   r   r	   c                 C   s   || _ || _|| _|   d S r
   )r   r   r   r   )r   r   r   r	   r   r   r   r     s   zUlcerIndex.__init__c                    sR    j j jdd }d j |  | } fdd}| jj| dd _d S )Nr   r=   rP   c                     s    fdd} | S )Nc                    s   t | d  j  S )Nr:   )r   sqrtr   sum)xr   r   r   _ui_function  s   z:UlcerIndex._run.<locals>.ui_function.<locals>._ui_functionr   )r   r   r   r   ui_function  s   z$UlcerIndex._run.<locals>.ui_functionT)raw)r   r@   r   r   apply
_ulcer_idx)r   _ui_max_r_ir   r   r   r   r     s   zUlcerIndex._runr(   c                 C   s   |  | j}tj|ddS )z]Ulcer Index (UI)

        Returns:
            pandas.Series: New feature generated.
        uir,   )r.   r   r!   r"   )r   	ulcer_idxr   r   r   ulcer_index  s   zUlcerIndex.ulcer_indexNr1   )r2   r3   r4   r5   r!   r"   r6   r7   r   r   r   r   r   r   r   r     s
    
r   r   Fc                 C   s   t | ||||d}| S )ak  Average True Range (ATR)

    The indicator provide an indication of the degree of price volatility.
    Strong moves, in either direction, are often accompanied by large ranges,
    or large True Ranges.

    http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:average_true_range_atr

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    )r   r   r   r   r	   )r   r/   )r   r   r   r   r	   	indicatorr   r   r   r/     s   
r/   r9   c                 C      t | ||d}| S )aB  Bollinger Bands (BB)

    N-period simple moving average (MA).

    https://en.wikipedia.org/wiki/Bollinger_Bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   r   r	   )r8   rH   r   r   r	   r   r   r   r   rH     s   rH   r:   c                 C      t | |||d}| S )a  Bollinger Bands (BB)

    Upper band at K times an N-period standard deviation above the moving
    average (MA + Kdeviation).

    https://en.wikipedia.org/wiki/Bollinger_Bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   r   r;   r	   )r8   rK   r   r   r;   r	   r   r   r   r   rK        rK   c                 C   r   )u  Bollinger Bands (BB)

    Lower band at K times an N-period standard deviation below the moving
    average (MA − Kdeviation).

    https://en.wikipedia.org/wiki/Bollinger_Bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r8   rN   r   r   r   r   rN     r   rN   c                 C   r   )a  Bollinger Channel Band Width

    From: https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_band_width

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r8   rT   r   r   r   r   rT   2     rT   c                 C   r   )a  Bollinger Channel Percentage Band

    From: https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_band_perce

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r8   rZ   r   r   r   r   rZ   F  r   rZ   c                 C   r   )a  Bollinger High Band Indicator

    Returns 1, if close is higher than bollinger high band. Else, return 0.

    https://en.wikipedia.org/wiki/Bollinger_Bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r8   r_   r   r   r   r   r_   Z     r_   c                 C   r   )a  Bollinger Low Band Indicator

    Returns 1, if close is lower than bollinger low band. Else, return 0.

    https://en.wikipedia.org/wiki/Bollinger_Bands

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_dev(int): n factor standard deviation
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r8   rb   r   r   r   r   rb   p  r   rb   rf   Tc              	   C      t | ||||||d}| S )aF  Keltner channel (KC)

    Showing a simple moving average line (central) of typical price.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   r   r   r   rg   r	   rh   )re   rv   r   r   r   r   rg   r	   rh   r   r   r   r   rv        	rv   c              	   C   r   )aC  Keltner channel (KC)

    Showing a simple moving average line (high) of typical price.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   ry   r   r   r   r   ry     r   ry   c              	   C   r   )aB  Keltner channel (KC)

    Showing a simple moving average line (low) of typical price.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   r|   r   r   r   r   r|     r   r|   c              	   C   r   )a  Keltner Channel Band Width

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   r}   r   r   r   r   r}        	r}   c              	   C   r   )a  Keltner Channel Percentage Band

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   r~   r   r   r   r   r~     r   r~   c              	   C   r   )ak  Keltner Channel High Band Indicator (KC)

    Returns 1, if close is higher than keltner high band channel. Else,
    return 0.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   r   r   r   r   r   r   1  s   	r   c              	   C   r   )ad  Keltner Channel Low Band Indicator (KC)

    Returns 1, if close is lower than keltner low band channel. Else, return 0.

    https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        window_atr(int): n atr period. Only valid if original_version param is False.
        fillna(bool): if True, fill nan values.
        original_version(bool): if True, use original version as the centerline (SMA of typical price)
            if False, use EMA of close as the centerline. More info:
            https://school.stockcharts.com/doku.php?id=technical_indicators:keltner_channels

    Returns:
        pandas.Series: New feature generated.
    r   )re   r   r   r   r   r   r   U  r   r   c                 C      t | |||||d}| S )a  Donchian Channel High Band (DC)

    The upper band marks the highest price of an issue for n periods.

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   r   r   r   r   r	   )r   r   r   r   r   r   r   r	   r   r   r   r   r   x     r   c                 C   r   )a  Donchian Channel Low Band (DC)

    The lower band marks the lowest price for n periods.

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r   r   r   r   r   r   r     r   r   c                 C   r   )a  Donchian Channel Middle Band (DC)

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r   r   r   r   r   r   r        r   c                 C   r   )a  Donchian Channel Band Width (DC)

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r   r   r   r   r   r   r     r   r   c                 C   r   )a  Donchian Channel Percentage Band (DC)

    https://www.investopedia.com/terms/d/donchianchannels.asp

    Args:
        high(pandas.Series): dataset 'High' column.
        low(pandas.Series): dataset 'Low' column.
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
        pandas.Series: New feature generated.
    r   )r   r   r   r   r   r   r     r   r   c                 C   r   )a>  Ulcer Index

    https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:ulcer_index

    Args:
        close(pandas.Series): dataset 'Close' column.
        window(int): n period.
        fillna(bool): if True, fill nan values.

    Returns:
            pandas.Series: New feature generated.
    r   )r   r   r   r   r   r   r     s   r   r1   )r9   Frd   )r9   rf   FTr   )rf   r   F)!r5   numpyr   pandasr!   ta.utilsr   r   r8   re   r   r   r/   rH   rK   rN   rT   rZ   r_   rb   rv   ry   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sL    5t c
'







$
$
$
"
"
%

#



