
    'i(                     N    d dl mZmZmZmZ ddlmZ ddlmZm	Z	  G d de      Z
y)	    )absolute_importdivisionprint_functionunicode_literals   )range   )MovingAverageBaseAverageWeightedc                   *     e Zd ZdZdZdZ fdZ xZS )WeightedMovingAveragea~  
    A Moving Average which gives an arithmetic weighting to values with the
    newest having the more weight

    Formula:
      - weights = range(1, period + 1)
      - coef = 2 / (period * (period + 1))
      - movav = coef * Sum(weight[i] * data[period - i] for i in range(period))

    See also:
      - http://en.wikipedia.org/wiki/Moving_average#Weighted_moving_average
    )WMAMovingAverageWeighted)wmac                 j   d| j                   j                  | j                   j                  dz   z  z  }t        d t        d| j                   j                  dz         D              }t	        | j
                  | j                   j                  ||      | j                  d<   t        t        | '          y )Ng       @g      ?c              3   2   K   | ]  }t        |        y w)N)float).0xs     W/var/www/app/trading-bot/venv/lib/python3.12/site-packages/backtrader/indicators/wma.py	<genexpr>z1WeightedMovingAverage.__init__.<locals>.<genexpr>/   s     FQaFs   r	   )periodcoefweightsr   )
pr   tupler   r   datalinessuperr   __init__)selfr   r   	__class__s      r   r    zWeightedMovingAverage.__init__-   s    dffmmtvv}}s':;<F%466==13D*EFF (IIdffmmw(

1 	#T35    )__name__
__module____qualname____doc__aliasr   r    __classcell__)r"   s   @r   r   r      s     .EE
6 
6r#   r   N)
__future__r   r   r   r   	utils.py3r    r
   r   r    r#   r   <module>r.      s$   ** *  06- 6r#   