Aug 11, 2025 • 16 min read
MTF Strategy Design in Pine Script: security(), Timeframes, and Signal Sync
Bring higher-timeframe context into lower-timeframe execution without repaint and with predictable timing.
Key concepts
- Use
request.security()
withbarmerge.lookahead_off
to avoid future leaks. - Confirm HTF bars with
barstate.isconfirmed
before acting on derived signals. - Align bar opens with
timeframe.change()
and manage edge cases around session transitions.
Example: LTF entries gated by HTF trend
//@version=6 strategy("MTF Trend Gate", overlay=true) htf = input.timeframe("240", "HTF") emaLen = input.int(100, "HTF EMA") emaHTF = request.security(syminfo.tickerid, htf, ta.ema(close, emaLen), barmerge.gaps_off, barmerge.lookahead_off) confirmed = barstate.isconfirmed trendUp = confirmed and close > emaHTF trendDn = confirmed and close < emaHTF entry = ta.crossover(ta.ema(close, 20), ta.ema(close, 50)) if entry and trendUp strategy.entry("L", strategy.long) if entry and trendDn strategy.entry("S", strategy.short)
Timing and confirmation
- On intraday charts, HTF values evolve intra-bar; act only on confirmed signals when appropriate.
- Use
timeframe.multiplier
to reason about alignment (e.g., 15→60 = 4 bars).
Advanced: mixed-session and asset nuances
- Assets with fragmented sessions (FX/crypto vs equities) change how HTF bars confirm; test both.
- Use
session.*
inputs or explicit time windows to avoid crossing illiquid gaps. - Consider HTF volatility regimes to adapt position sizing across the day/week.
Debugging MTF issues
- Plot the HTF series on the LTF chart to verify alignment and confirmation behavior.
- Log key states using labels or
plotchar()
to spot off-by-one and na initializations. - Stress-test around session opens/closes and DST changes where timestamps jump.
Power tools for MTF work
PineScripter.app is tuned for v6 and generates MTF-safe patterns with clear confirmation gates. Builders likePineify andPine Script Wizard can be helpful for quick drafts—just review MTF logic carefully for repaint.