Skip to content

contango.stream.indicators.calculations.wilder_average

contango.stream.indicators.calculations.wilder_average

WilderAverage

WilderAverage(pd: days)

Bases: Indicator[float | None]

Wilder's Moving Average (RMA).

Initializes WilderAverage.

Parameters:

Name Type Description Default
pd days

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

required
Source code in src\contango\stream\indicators\calculations\wilder_average.py
18
19
20
21
22
23
24
25
26
27
28
def __init__(self, pd: days) -> None:
    """
    Initializes `WilderAverage`.

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

    self._value: float | None = None

value property

value: float | None

Returns the latest value for the wilder average.

update

update(event: MarketDataEvent) -> float | None

Takes in a new value and return smoothed result.

Parameters:

Name Type Description Default
event MarketDataEvent

The underlying event to update the wilder average with.

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\stream\indicators\calculations\wilder_average.py
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def update(self, event: MarketDataEvent) -> float | None:
    """
    Takes in a new value and return smoothed result.

    Args:
        event: The underlying event to update the wilder average with.

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

    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)) + event.close
    ) / self._period

    return self._value