
    'ia                     b    d dl mZmZmZmZ d dlZd dlmZm	Z	m
Z
  G d dej                        Zy)    )absolute_importdivisionprint_functionunicode_literalsN)SumNTrueLow	TrueRangec                   0     e Zd ZdZdZdZd Z fdZ xZS )UltimateOscillatoray  
    Formula:
      # Buying Pressure = Close - TrueLow
      BP = Close - Minimum(Low or Prior Close)

      # TrueRange = TrueHigh - TrueLow
      TR = Maximum(High or Prior Close)  -  Minimum(Low or Prior Close)

      Average7 = (7-period BP Sum) / (7-period TR Sum)
      Average14 = (14-period BP Sum) / (14-period TR Sum)
      Average28 = (28-period BP Sum) / (28-period TR Sum)

      UO = 100 x [(4 x Average7)+(2 x Average14)+Average28]/(4+2+1)

    See:

      - https://en.wikipedia.org/wiki/Ultimate_oscillator
      - http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:ultimate_oscillator
    )uo))p1   )p2   )p3   )	upperbandg     Q@)	lowerbandg      >@c                     g d}| j                   j                  | j                   j                  g}|| j                  _        ||z   | j                  _        y )N)g      $@g      I@g     V@)pr   r   plotinfoplotyhlines
plotyticks)self	basetickshliness      f/var/www/app/trading-bot/venv/lib/python3.12/site-packages/backtrader/indicators/ultimateoscillator.py	_plotinitzUltimateOscillator._plotinit;   sD    &	&&""DFF$4$45 %+!#,v#5     c                    | j                   j                  t        | j                         z
  }t        | j                         }t	        || j
                  j                        t	        || j
                  j                        z  }t	        || j
                  j                        t	        || j
                  j                        z  }t	        || j
                  j                        t	        || j
                  j                        z  }d}d|z  |z  d|z  |z  z   ||z  z   }|| j                  _
        t        t        | 7          y )N)periodg%I$I,@g      @g       @)datacloser   r	   r   r   r   r   r   linesr   superr   __init__)	r   bptrav7av14av28factorr   	__class__s	           r   r&   zUltimateOscillator.__init__D   s    YY__wtyy11tyy!2dffii(446699+EEBtvvyy)DDFFII,FFBtvvyy)DDFFII,FF +Flc!S6\T$99FTMI

 $02r   )	__name__
__module____qualname____doc__r$   paramsr   r&   __classcell__)r-   s   @r   r   r      s%    & EF63 3r   r   )
__future__r   r   r   r   
backtraderbtbacktrader.indicatorsr   r   r	   	Indicatorr    r   r   <module>r:      s*   ** *  : :43 43r   