Source code for backtrader.indicators.contrib.wami

#!/usr/bin/env python
"""Functional-test indicators migrated to contrib.

Generated from a single functional strategy module to preserve file-local
helper functions and constants without cross-test name collisions.
"""

from .. import (
    Indicator,
    SimpleMovingAverage,
)

__all__ = [
    "Wami",
]


[docs] class Wami(Indicator): """Calculate a WAMI-style oscillator and signal line from close-price MAs.""" lines = ("wami", "signal") params = ( ("period_ma1", 4), ("period_ma2", 13), ("period_ma3", 13), ("period_sig", 4), ("point_size", 0.01), ) def __init__(self): """Initialize WAMI indicator stages and output lines.""" base_ma = SimpleMovingAverage(self.data.close, period=1) diff = base_ma - base_ma(-1) ma1 = SimpleMovingAverage(diff, period=self.p.period_ma1) ma2 = SimpleMovingAverage(ma1, period=self.p.period_ma2) ma3 = SimpleMovingAverage(ma2, period=self.p.period_ma3) sig = SimpleMovingAverage(ma3, period=self.p.period_sig) scale = self.p.point_size if self.p.point_size else 1.0 self.lines.wami = ma3 / scale self.lines.signal = sig / scale self.addminperiod( 1 + self.p.period_ma1 + self.p.period_ma2 + self.p.period_ma3 + self.p.period_sig )