
    'ip	                     J    d dl mZmZmZmZ ddlmZmZmZm	Z	  G d de      Z
y)    )absolute_importdivisionprint_functionunicode_literals   )	IndicatorMaxMovAvMeanDevc                   \     e Zd ZdZdZdZdddej                  fddfZd	 Z	d
 Z
 fdZ xZS )CommodityChannelIndexa  
    Introduced by Donald Lambert in 1980 to measure variations of the
    "typical price" (see below) from its mean to identify extremes and
    reversals

    Formula:
      - tp = typical_price = (high + low + close) / 3
      - tpmean = MovingAverage(tp, period)
      - deviation = tp - tpmean
      - meandev = MeanDeviation(tp)
      - cci = deviation / (meandeviation * factor)

    See:
      - https://en.wikipedia.org/wiki/Commodity_channel_index
    )CCI)cci)period   )factorgQ?movav)	upperbandg      Y@)	lowerbandg      Yc                     | j                   j                  | j                   j                  g}|| j                   j                  g| j                   j	                  d      z  z  }|S )Nr   )pr   r   r   
notdefault)selfplabelss     W/var/www/app/trading-bot/venv/lib/python3.12/site-packages/backtrader/indicators/cci.py
_plotlabelz CommodityChannelIndex._plotlabel5   sI    66==$&&--0DFFLL>DFF$5$5g$>>>    c                 |    d| j                   j                  | j                   j                  g| j                  _        y )Ng        )r   r   r   plotinfoplotyhlines)r   s    r   	_plotinitzCommodityChannelIndex._plotinit:   s)    %($&&*:*:DFF<L<L$M!r   c                    | j                   j                  | j                   j                  z   | j                   j                  z   dz  }| j                  j                  || j                  j                        }||z
  }t        ||| j                  j                        }|| j                  j                  |z  z  | j                  _
        t        t        | 7          y )Ng      @)r   )datahighlowcloser   r   r   r   r   linesr   superr   __init__)r   tptpmeandevmeandev	__class__s        r   r)   zCommodityChannelIndex.__init__=   s    iinntyy}},tyy>#Eb76k"fTVV]]; 78

#T35r   )__name__
__module____qualname____doc__aliasr'   r
   Simpleparamsr   r!   r)   __classcell__)r.   s   @r   r   r      sH     EE%"#	&F
N	6 	6r   r   N)
__future__r   r   r   r    r   r	   r
   r   r    r   r   <module>r:      s#   ** * - ,+6I +6r   