Skip to main content

TradingView to broker execution mismatch guide

why your trade shows a profit on TradingView but a loss on Tradovate or Interactive Brokers — the 4 reasons it happens, and how to reconcile the two so you actually trust your algo.

Written by Brad
Updated this week

what this article covers

if you've ever looked at your TradingView chart and seen a winning trade, then pulled up your Tradovate or IB account and seen a smaller win — or a loss — you're not alone.

it's the #1 thing members ask about once their algo goes live.

the short version: TradingView and your broker are measuring 2 different things. TradingView is showing you what the chart would have done. your broker is showing you what the market actually did — with real fills, real slippage, and a real contract.

there are 4 reasons those 2 pictures don't match. this article walks through each one, in order of how often we see it, and ends with a reconciliation workflow you can run after every trade.

reason 1 — symbol mismatch

this is the most common one, and it's the fastest to fix.

TradingView shows you a continuous contract by default — a synthetic chart that splices together every expiring contract into one clean line. your broker trades the actual front-month contract that expires on a specific date.

so when you see a move on NQ1! in TradingView, you're looking at a blended chart. but your Tradovate order is firing on NQM6 (or whatever the current front-month symbol is). small price differences between the continuous chart and the front-month contract are normal — and they compound around rollover.

if this sounds like your problem, the symbol mapping and rollover mechanics are covered in depth here:

reason 2 — bar-close timing vs broker fill

TradingView strategies fire alerts on bar close — the moment a candle completes. the execption to this would be for the initial balance algo where the alert will fire based on the entry retracement level you have selected in the algo settings.

your broker fills the order on the next tick after it receives the webhook. that gap is usually small — we see around 300ms on average — but on fast-moving bars, it matters.

here's what that looks like in practice.

your 5min candle on NQ closes at 9:35 ET with a strong move up. TradingView logs the entry at the close price — let's call it 18,250. your alert fires, the webhook hits edgeful, edgeful hits your broker, and your order fills a fraction of a second later. by that point, price has moved to 18,252.

TradingView's PnL uses 18,250 as your entry. your broker's PnL uses 18,252. that's 2 points of entry slippage per contract — before you even talk about the exit.

this isn't a bug. it's physics. the fix isn't to eliminate the gap (you can't) — it's to expect it, and build it into how you evaluate the algo.

the full execution chain is documented here: how the algo automation chain works.

reason 3 — stop loss slippage

this one trips people up the most because it looks like the algo "didn't protect" you.

in TradingView's strategy tester, a stop loss fills at the exact stop price. always. the tester assumes an instant, perfect fill at your number.

live markets don't work that way.

when your stop price trades, edgeful sends a market order to your broker to close the position. a market order fills at the best available price — not at your stop price. on a calm bar that's almost the same thing. on a fast move, it can be a few ticks worse.

also worth knowing: your TP and SL are sent as separate market orders, not as a bracket order bundled with your entry. if you're coming from a platform that uses native bracket orders, the behavior will feel different.

the details on order types, why we route market orders, and the latency breakdown are here:

on a winning trade, slippage favors you sometimes and hurts you other times — it averages out. on a loser, slippage always hurts. that's why your live results will usually show slightly worse exits than the TradingView tester — even when every other variable is identical.

reason 4 — the tester isn't a simulator

this one isn't a mismatch — it's a misunderstanding of what the TradingView strategy tester is doing.

the tester is a replay. it walks the chart bar by bar and fills your orders at clean prices, at the exact moment you told it to. it doesn't model:

  • the time between your alert firing and your broker receiving the order

  • market orders walking up the order book during fast moves

  • spread widening around news

  • queue position on limit orders

  • broker-side rejections (margin, symbol, contract size)

so when you see "73% win rate, $4,200 net" in the tester, treat it as the chart's version of the strategy — not a forecast of what your account will do.

the gap between tester results and live results is real, but it's usually a few percent, not a rewrite of the setup. customize, run it forward on a small size first, and measure.

results vary — you'll need to customize the setup and run it on live size before you'll have a real read on how the algo behaves in your account.

the reconciliation workflow

run this checklist on any trade where TradingView and your broker disagree by more than a few dollars.

  1. confirm the symbol. pull up the trade in your broker and note the contract month. compare it to the symbol in your TradingView alert. if they're different, that's your answer — start with the contract rollover article.

  2. check the timestamp. find the exact fill time on your broker statement. compare it to the bar close time on your TradingView chart. a few hundred milliseconds is normal. a few seconds points to a webhook delay — open a ticket.

  3. compare the entry price. note your TradingView fill, note your broker fill. the delta is your entry slippage. if it's more than 2–3 ticks on a normal bar, flag it.

  4. compare the exit price. same exercise for TP or SL. this is where most of the PnL delta lives.

  5. add up the delta. entry slippage + exit slippage × contracts = the difference. if that number matches the PnL gap between TradingView and your broker, you've reconciled the trade — there's no bug, just real-world execution cost.

  6. if the numbers still don't reconcile, open a support ticket inside the app with the trade date, ticker, contract month, TradingView screenshot, and broker statement line. we'll walk through it with you.

when to open a support ticket

open a ticket if any of the following are true after you've run the reconciliation:

  • your broker shows a trade that TradingView never alerted on, or vice versa

  • the fill time on your broker is more than a few seconds after the alert fired

  • the slippage is wildly outside normal range — we're talking double-digit ticks on a quiet bar

  • Tradovate rejected the order and you can't tell why from the dashboard

include a screenshot of the trade details or the trade IDs for both the open and the flatten of the trade; these will be helpful in determining the source of the variance. other useful pieces of information are the trade timestamp, the ticker and contract month, and screenshots of both sides. the more specific you are, the faster we can solve it.

related articles

Did this answer your question?