Signal Pilot
🟢 Beginner • Lesson 4 of 82

Your Indicators Are Lying to You (The Repaint Problem)

Reading time ~12 min • Indicator Truth & Detection
0%
You're making progress!
Keep reading to mark this lesson complete

🎯 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
Part 1: The Repainting Nightmare

📉 CASE STUDY: Jake's $14,700 Repainting Indicator Disaster

-$14,700
Total Loss
91.5%
Repaint Rate
71% → 34%
Win Rate Collapse
+74%
Recovery After Fix

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)
Backtest (Jan 2024)
71.4% win rate
3.2 profit factor
3.8:1 R:R
+247% return
Live (Feb-Apr 2024)
34.2% win rate
0.58 profit factor
0.92:1 R:R
-45.9% return

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?

A) He should have used smaller position sizes to reduce risk
B) The indicator stopped working because market conditions changed
C) The indicator was repainting—signals he saw live MOVED or DISAPPEARED after bar close, so the "perfect" backtest signals never actually existed in real-time (91.5% repaint rate)
D) He traded too frequently—should have been more selective with entries

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.

Part 2: Deterministic Indicators

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_off and [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)

Part 3: Audit Framework

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:

  1. Visual test: Watch 3-5 signals live, check if they move after bar close
  2. Replay test: Use Bar Replay to compare live vs historical signals
  3. Alert test: Set alerts, track 20+ instances, compare to history
  4. 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:

  1. Load your indicator on a chart: Use a liquid instrument (SPY, ES, AAPL) on 5-min or 15-min timeframe
  2. Enter Bar Replay mode: Click the Bar Replay button (looks like a play button with a bar chart)
  3. Rewind to 3 days ago: Gives you enough historical data to test 20-30 signals
  4. Play forward bar-by-bar: Watch for signals to appear during bar formation
  5. Document signal timing: Does the BUY signal appear BEFORE price moves up, or AFTER?
  6. Compare to chart history: Exit replay mode, look at the same time period
  7. 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:

  1. Screenshot test 1 indicator — Take 3 screenshots of live signals, check in 10 mins
  2. Set 1 alert — Pick your main indicator, set an alert, verify it matches after bar close
  3. 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.

Practice Exercise

🎯 Repaint Detection Practice

Exercise: Audit Your Current Indicators

Test every indicator you're using for repainting before risking real money:

  1. Visual Test: Screenshot 3 signals. Wait 10 minutes. Refresh. Did signals move or disappear?
  2. Replay Test: Use TradingView replay mode. Play forward. Do signals appear BEFORE or AFTER the move?
  3. Alert Test: Set alerts on live signals. 1 hour later, check chart. Are alerts still valid?
  4. Backtest vs Live: Paper trade for 20 trades. Compare expectancy to backtest. Large gap = likely repaint
  5. Document your findings: Which indicators passed? Which failed?
  6. 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.

Test Your Knowledge

🎮 Quick Check (No Pressure)

You backtest an indicator: 2.8R expectancy. You trade it live: -0.5R expectancy. What's the most likely cause?

A) Market conditions changed
B) The indicator repaints (signals changed after bar close)
C) You need more data for backtesting
D) Your execution was bad
Correct! A massive gap between backtest and live results (from profitable to losing) strongly suggests repainting. The indicator showed perfect signals in history that never existed live.

How do you test if an indicator repaints?

A) Just check the backtest results
B) Screenshot signals live, wait for bar close, verify they didn't move
C) Read the indicator description
D) Check the number of downloads
Correct! The visual test is the most reliable: screenshot signals during the bar, then check after the bar closes. If signals moved or disappeared, the indicator repaints.

What was Jake's main mistake?

A) He didn't backtest enough
B) He trusted a repainting indicator—91.5% of signals moved after bar close
C) He traded too large
D) He used the wrong timeframe
Correct! Jake's indicator showed perfect signals in backtests that never existed live. 91.5% of signals moved after bar close—his 71% backtest win rate became 34% live.

If you made it this far, you just saved yourself months (maybe years) of pain. Most traders never learn this. You just did.

Related Lessons
Intermediate #32

Backtesting Reality

Avoid repainting in backtests — test for look-ahead bias and curve-fitting

Read Lesson →
Beginner #3

Price Action is Dead

Use non-repainting order flow instead of lagging price action signals

Read Lesson →
Beginner #5

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)

0/1000

Loading comments...

← Previous Lesson Next Lesson →