Skip to content

trading.indicators.calculations.wilder_average

trading.indicators.calculations.wilder_average

WilderAverage

WilderAverage(period: days)

Bases: Indicator[float | None]

Wilder's Moving Average (RMA).

Initializes WilderAverage.

Parameters:

Name Type Description Default
period days

Lookback period to derive the smoothing factor. Larger values -> slower to react to price changes.

required
Source code in src\contango\trading\indicators\calculations\wilder_average.py
32
33
34
35
36
37
38
39
40
41
42
def __init__(self, period: days) -> None:
    """
    Initializes `WilderAverage`.

    Args:
        period: Lookback period to derive the smoothing factor. Larger values -> slower to react to price changes.
    """
    self._period = period
    self._window: deque[float] = deque(maxlen=period)

    self._value: float | None = None

update

update(price: USD) -> float | None

Takes in a new value and return smoothed result.

Parameters:

Name Type Description Default
price USD

The price for the current bar.

required

Returns:

Type Description
float | None

The current WilderAverage. Returns None if period amount of days have not been reached.

Source code in src\contango\trading\indicators\calculations\wilder_average.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def update(self, price: USD) -> float | None:
    """
    Takes in a new value and return smoothed result.

    Args:
        price: The price for the current bar.

    Returns:
        The current WilderAverage. Returns None if period amount of days have not been reached.
    """
    self._window.append(price)

    if len(self._window) < self._period:
        return None

    # First full initialization: simple average
    if self._value is None:
        self._value = sum(self._window) / self._period
        return self._value

    self._value = (
        (self._value * (self._period - 1)) + price
    ) / self._period

    return self._value