Your Indicators Are Lying to You (The Repaint Problem)
🎯 What You'll Learn
By the end of this lesson, you'll be able to:
- Test indicators for repainting (screenshot signal before bar close, verify after)
- Identify which TradingView indicators repaint (80%+ of retail indicators do)
- Use only non-repainting tools (all SignalPilot indicators are non-repainting)
- Walk-forward test on live data for 2-4 weeks before trusting any indicator
📉 CASE STUDY: Jake's $14,700 Repainting Indicator Disaster
Trader: Jake Morrison, 26, former marketing analyst ($32K account)
Strategy: "Ultimate Reversal Pro" TradingView indicator (47K downloads, 4.8★)
Fatal flaw: Indicator was repainting—signals changed or disappeared after bar close
📊 The "Perfect" Backtest vs Reality (click to expand)
The breaking point (Apr 8, 2024): Jake screenshotted live signals, then compared after bar close:
- 9:38 AM BUY: Signal at 5,186 → After bar close: moved to 5,179 (7 points lower!) • Lost $680
- 10:52 AM SELL: Signal at 5,194 → After bar close: disappeared completely! • Lost $520
- 1:15 PM BUY: Signal at 5,201 → After bar close: moved to 5,196 (5 points lower) • Lost $440
- 2:43 PM SELL: Signal at 5,209 → After bar close: moved to 5,213 (4 points higher) • Lost $380
The investigation: 43/47 signals moved (91.5% repaint rate). Code audit found request.security() without lookahead=barmerge.lookahead_off.
Recovery (May-Aug 2024): Switched to deterministic indicators. 90 trades, 58.9% win rate, +$12,820 profit. Account: $17.3K → $30.1K (+74.1%).
Jake's advice: "I lost $14,700 trading ghosts—signals that MOVED after bar close. Test EVERY indicator: screenshot live, compare after bar close. If backtest looks TOO perfect (>70% WR, <10% DD), it's probably repainting. Real edges are 55-65% win rates. NEVER trust, ALWAYS verify."
Case Study Quiz: Jake backtested "Ultimate Reversal Pro" indicator and got amazing results: 71.4% win rate, 3.2 profit factor, +247% return. He went live with $32K but lost $14,700 (-45.9%) in 10 weeks with only 34.2% win rate. What was his fatal mistake?
Correct: C. Jake's indicator showed 71.4% backtest WR, but 91.5% of signals moved/disappeared after bar close. He was "trading ghosts"—entries that looked perfect only because they repainted. Fix: screenshot-test live signals. If backtest looks too perfect (>70% WR), it's likely repainting. Real edges produce 55-65% win rates.
What "Deterministic" Means (And Why It Matters)
Here's the thing: Most indicators are built by hobbyists who don't know about repainting. Or worse, by scammers who do know and don't care.
SignalPilot takes a different approach.
💡 Signal Pilot's Guarantee
Every SignalPilot indicator follows strict deterministic rules:
- No future data: All HTF requests use
lookahead_offand[1]offsets - Fixed signals: Once a signal prints, it never moves or disappears
- Confirmed bars only: Signals wait for bar close (no intra-bar magic)
- Open-source auditable: Code is available for independent review
Translation: What you see live is what you'll see in history. No tricks. No lies.
❌ Repainting Indicator
Backtest: 3.2R expectancy, 2.8 profit factor
Live trading: -0.8R expectancy, 0.6 profit factor
Problem: Signals change after bar close
Result: Wasted months, blown account
✓ Deterministic Indicator
Backtest: 1.8R expectancy, 1.6 profit factor
Live trading: 1.7R expectancy, 1.5 profit factor
Integrity: Signals never change
Result: Consistent, profitable edge
Notice: The deterministic indicator has a lower backtest expectancy. That's because it's honest. It doesn't cheat by using future data.
But live? It actually works.
Visual Repaint Examples: Before vs After
Here's what repainting actually looks like when you catch it:
Example 1: "SuperTrend Reversal" Indicator (TradingView, 120K downloads)
| Time | What You See LIVE (During Bar) | What Shows in HISTORY (After Bar Close) |
|---|---|---|
| 10:45 AM | BUY signal at $5,186 (green arrow) | Signal moved to $5,179 (-7 points!) |
| 11:22 AM | SELL signal at $5,194 (red arrow) | Signal disappeared completely! |
| 2:15 PM | BUY signal at $5,201 | Signal moved to $5,196 (-5 points) |
Example 2: "AI Prediction Zones" Indicator (TradingView, 85K downloads)
12:04 PM (During bar):
Shows "Support Zone" at SPY $519.00-$519.50 (shaded green box)
Indicator label: "High probability bounce zone — 78% accuracy"
12:05 PM (After bar close):
Support zone MOVED to $518.20-$518.70 (80 cents lower!)
Now appears perfectly aligned with actual low
→ This is repainting. Zone "predicted" low AFTER it happened.
Real-time impact:
You bought at $519.00 thinking it was support → Price dropped to $518.20
Lost $0.80/share on 500 shares = -$400
Indicator now shows support at $518.20 where it "should have been"
→ Makes indicator look perfect in history, useless live
Example 3: "Smart Money Divergence" Indicator (Paid indicator, $199)
Live signal (1:30 PM): "BULLISH DIVERGENCE DETECTED — Price lower low, indicator higher low"
After bar close (1:31 PM): Divergence line moved 3 bars earlier, now shows different angle
Impact: You entered long at 1:30 PM based on divergence → Price continued down → -$620 loss
Chart history now shows: Divergence started 3 bars earlier (perfect timing in hindsight)
Never Trust, Always Verify
Here's your step-by-step framework for auditing ANY indicator before risking real money:
✅ Indicator Audit Checklist
Before trading ANY indicator:
- Visual test: Watch 3-5 signals live, check if they move after bar close
- Replay test: Use Bar Replay to compare live vs historical signals
- Alert test: Set alerts, track 20+ instances, compare to history
- Code audit (if available): Check for
request.security()red flags
Pass criteria: ALL tests must show consistent signals.
If ANY test fails → DO NOT USE → Find another indicator
Common Repainting Indicators to Avoid
Here's a list of indicator types and specific indicators that commonly repaint. If you're using any of these, test them immediately:
| Indicator Type/Name | Why It Repaints | How to Detect |
|---|---|---|
| Zigzag indicators | Recalculates pivots as price moves—"perfect" swing detection in history | Check if pivot points move after bar close |
Higher timeframe (HTF) pulls without lookahead_off |
Uses future HTF data not available in real-time | Code audit: search for request.security() without lookahead=barmerge.lookahead_off |
| "AI/ML prediction" indicators | Many use intra-bar data or future-peeking to show "predictions" | Bar replay test—do predictions appear before or after the move? |
| Divergence indicators (most) | Redraw divergence lines as new bars form | Screenshot divergence line, check if angle/position changes |
| Support/resistance zones (dynamic) | Zones adjust to fit recent price action perfectly | Alert test—set alerts on zone boundaries, verify they don't move |
Red flag: If an indicator's backtest shows >75% win rate with <10% drawdown, it's almost certainly repainting. Real, honest edges produce 55-65% win rates with realistic drawdowns (15-30%). Perfection in backtests = fraud in live trading.
Bar Replay Detection Walkthrough
TradingView's Bar Replay feature is one of the best tools for catching repainting indicators. Here's exactly how to use it:
Step-by-Step Bar Replay Test:
- Load your indicator on a chart: Use a liquid instrument (SPY, ES, AAPL) on 5-min or 15-min timeframe
- Enter Bar Replay mode: Click the Bar Replay button (looks like a play button with a bar chart)
- Rewind to 3 days ago: Gives you enough historical data to test 20-30 signals
- Play forward bar-by-bar: Watch for signals to appear during bar formation
- Document signal timing: Does the BUY signal appear BEFORE price moves up, or AFTER?
- Compare to chart history: Exit replay mode, look at the same time period
- Check for discrepancies: Are signals in the same location? Or did they move?
Example Test Results (Bar Replay on "Ultimate Reversal Pro"):
Replay Mode (Playing forward bar-by-bar):
10:15 AM: No signal shown
10:30 AM: No signal shown
10:45 AM: Price drops from $520 → $518 → BUY signal appears at $519
11:00 AM: Price rallies to $522 (signal worked!)
Historical Chart View (Same time period):
10:15 AM: BUY signal shown at $520 (signal MOVED!)
Original signal: $519 during replay
Historical signal: $520 in chart view
→ Difference: Signal moved 1 point to "predict" the low perfectly
Verdict: REPAINTING DETECTED
Signal appeared at $519 during live bar formation
Signal moved to $520 in historical chart (appears earlier, better entry)
This is future-peeking—indicator adjusts signals after knowing outcome
🚨 Real Talk
This feels like extra work. It is. But consider the alternative:
Spend 2 hours testing → Save months of losses and psychological damage.
Skip testing → Blow account → Wonder why trading is "impossible."
Your choice.
Code Audit Deep-Dive: Pine Script Red Flags
If an indicator provides source code (open-source on TradingView), you can audit it for repainting issues. Here are the exact code patterns to look for:
Red Flag #1: request.security() without lookahead_off
// ❌ REPAINTING CODE (uses future HTF data)
htf_close = request.security(syminfo.tickerid, "60", close)
// ✅ NON-REPAINTING CODE (waits for HTF bar to close)
htf_close = request.security(syminfo.tickerid, "60", close, lookahead=barmerge.lookahead_off)
// Even better: add [1] offset to use CONFIRMED HTF bar
htf_close = request.security(syminfo.tickerid, "60", close[1], lookahead=barmerge.lookahead_off)
Red Flag #2: Calculations using current bar data without barstate.isconfirmed
// ❌ REPAINTING CODE (signal can change during bar)
signal = close > ema_20 and rsi > 50
plotshape(signal, style=shape.triangleup, color=color.green)
// ✅ NON-REPAINTING CODE (only plots on confirmed bar close)
signal = close > ema_20 and rsi > 50
plotshape(barstate.isconfirmed and signal, style=shape.triangleup, color=color.green)
Red Flag #3: Pivot calculations that recalculate
// ❌ REPAINTING CODE (pivot location changes as new bars form)
pivot_high = ta.pivothigh(high, 5, 5) // looks back 5 bars, forward 5 bars
// Problem: needs 5 FUTURE bars to confirm pivot → repaints by definition
// ✅ BETTER APPROACH (use fixed swing detection with confirmed bars)
// Signal Pilot approach: detect swing only after 5 bars have CLOSED
// No forward-looking, signals are delayed but honest
Pro tip: If you can't read Pine Script code, use the visual and replay tests instead. They'll catch 95%+ of repainting indicators without needing to understand the code. But if you CAN read code, this is the fastest detection method—spot repainting in 30 seconds by searching for these patterns.
🎓 Key Takeaways
- 60-90% of indicators repaint — Test everything before trading it
- Repainting = fake edge — Perfect backtests, disastrous live results
- Use 4 detection methods — Visual, Replay, Alert, Code audit
- Deterministic code matters — Signals often never change after bar close
- SignalPilot guarantees it — No future data, no tricks, no lies
- Audit before you trade — 2 hours testing saves months of losses
⚡ Quick Wins for Tomorrow (Click to expand)
Don't overwhelm yourself. Start with these 3 actions:
- Screenshot test 1 indicator — Take 3 screenshots of live signals, check in 10 mins
- Set 1 alert — Pick your main indicator, set an alert, verify it matches after bar close
- Journal it — "Indicator: [name]. Test: Screenshot. Result: Signals moved/didn't move."
After testing 3 indicators this way, you'll know which ones are lying. Remove the liars immediately.
🎯 Repaint Detection Practice
Exercise: Audit Your Current Indicators
Test every indicator you're using for repainting before risking real money:
- Visual Test: Screenshot 3 signals. Wait 10 minutes. Refresh. Did signals move or disappear?
- Replay Test: Use TradingView replay mode. Play forward. Do signals appear BEFORE or AFTER the move?
- Alert Test: Set alerts on live signals. 1 hour later, check chart. Are alerts still valid?
- Backtest vs Live: Paper trade for 20 trades. Compare expectancy to backtest. Large gap = likely repaint
- Document your findings: Which indicators passed? Which failed?
- Remove ALL repainting indicators from your charts immediately
Goal: Verify that every indicator you trade is deterministic. If you can't prove it doesn't repaint, assume it does.
🎮 Quick Check (No Pressure)
You backtest an indicator: 2.8R expectancy. You trade it live: -0.5R expectancy. What's the most likely cause?
How do you test if an indicator repaints?
What was Jake's main mistake?
If you made it this far, you just saved yourself months (maybe years) of pain. Most traders never learn this. You just did.
Backtesting Reality
Avoid repainting in backtests — test for look-ahead bias and curve-fitting
Read Lesson →Price Action is Dead
Use non-repainting order flow instead of lagging price action signals
Read Lesson →RSI Extremes
Learn how RSI works properly — and why "overbought" doesn't mean sell
Read Lesson →⏭️ Coming Up Next
Lesson #5: RSI Extremes Are Not Reversal Signals
Learn why RSI >70 in an uptrend is often a potential BUY signal, and how regime determines everything.
Educational only. Trading involves substantial risk of loss. Past performance does not guarantee future results.
💬 Discussion (0 comments)
Loading comments...