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_offto avoid future leaks. - Confirm HTF bars with
barstate.isconfirmedbefore 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.multiplierto 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.