Swing Low

What it measures: The lowest low of the prior N bars (excludes the current bar — already shifted)

When to use it: Downside structure/liquidity levels: breakdown, or a bearish liquidity grab (low < swing_low but close > swing_low = a stop sweep followed by a bounce)

Typical period: 10-20

Caution: Already shift(1) internally — no need to connect an extra Lag

Formula the engine actually uses

low.rolling(period).min().shift(1)

smoothing: None — shift(1) prevents lookahead (excludes the current bar) · warmup: period + 1