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