You take a signal, the row says the entry was 13.99, your broker fills you at 14.06, and you shrug because seven cents on a fourteen dollar stock is nothing. It is fifty basis points. Do that twenty times a month on both sides of the trade and you have handed away a number that would embarrass you if it arrived as a single invoice. The only reason it does not embarrass anyone is that nobody writes it down.
So write it down. The whole exercise is one column subtracted from another, it takes about three minutes a week once it is set up, and it answers a question no backtest can answer for you, which is whether a given signal source survives contact with your particular broker at your particular size.
Not every Entry price was ever a fill
Before you subtract anything, you have to know what the Entry column is, and it is not always what people assume. The trade log carries a banner above the table warning that a block of rows below it were reconstructed by replaying the strategy over historical candles, and it says so bluntly. No order was placed and no fill occurred for those. At capture, 44 of the rows on that page carried that status.
Those rows are useful for judging a strategy and useless for judging your execution. Their Entry is a price computed from a candle, and comparing your real fill against it measures the difference between a model and the market, not between the market and you. Exclude them from the log. If you leave them in you will conclude your broker is terrible when what you actually measured is that candle closes are not transactable.
The live rows have their own subtlety. One active row at capture showed Ford on a one day strategy, order type MARKET, stamped 08/20/26 at 12:00 AM UTC, with an Entry of 13.99 and a Current of 13.93. A daily strategy stamped at midnight UTC is computing off a bar boundary, and midnight UTC is not a moment at which you were awake or at which the US equity market was open. The gap you measure on a row like that contains a delay you can do something about, mixed in with a spread you mostly cannot. Separating those two is the point of the log.
Six columns, twenty rows, three minutes a week

Your log needs six columns and no more. Date and time the row appeared. Symbol. Source, taken from the feed's own Source column, which carries labels identifying which engine produced the row. The feed's Entry price. Your actual average fill from the broker. And your position size in dollars.
Add one computed column, the gap in basis points, signed so that positive always means worse for you. On a long, that is your fill minus the Entry, divided by the Entry, times ten thousand. On a short it is the other way round. Getting the sign convention right matters more than it sounds, because a source where you are consistently getting a better price than the feed is telling you something interesting too, usually that the row is arriving late enough for a pullback.
Build this from your broker's own statement or trade confirmations. There is no need to plug a spreadsheet service into your account to do it, and you should not, because an API key handed to a third party tool is a credential you no longer control. Copy the fills across by hand for the first month. Twenty rows takes minutes and you will read every one of them, which is most of the value.
Splitting the gap into delay, spread and size
An average gap is not actionable. The same forty basis points has three different causes and only two of them are yours to fix.
| Cause | How to test for it | What you can do |
|---|---|---|
| Delay | Plot gap against minutes from row appearing to order sent. If it rises with time, this is your problem. | Alerts, or trade sources whose timing you can actually meet. |
| Spread | Note the quoted bid and ask at the moment you traded. If your gap is roughly half the spread, you paid for immediacy. | Trade in liquid hours, use limits where the signal tolerates it. |
| Size | Compare gap on your largest positions against your smallest in the same symbol. | At retail size this is almost never the cause, and if it is, you are trading something too thin. |
The clean test for delay costs you nothing. For one week, place a limit order at the feed's Entry price rather than a market order, and record how many fill. If most of them fill, the price was still there and your market orders were paying for immediacy you did not need. If almost none fill, the move is gone by the time you see the row and the gap is structural, which is a much more important finding.
The threshold where a signal stops being yours to trade
An absolute basis point limit is the wrong test, because forty basis points is trivial on a trade that runs for a month and fatal on one that targets half a percent. The gap has to be judged against the size of the move the signal is reaching for.
You can approximate that from the feed's own Run-up column, which records the best point a trade reached. Take the median Run-up across closed rows from one source, and compare it to your median round-turn gap, which is entry gap plus exit gap. My working thresholds are these. Under ten percent of median Run-up, the friction is noise and you can ignore it. Between ten and twenty five percent, it is real, and it is worth restructuring how you execute that source. Over twenty five percent, you are not trading that signal, you are subsidising it, and the correct response is to stop rather than to optimise.
For scale on the raw numbers, the terminal at capture printed a bar on BTC with a high of 79,017.76 against a low of 78,823.03. That range is about 195 dollars, roughly twenty five basis points on a price near 79,000. A twenty basis point execution gap on a signal whose whole bar is twenty five basis points wide is not a rounding error, it is the trade.
The dollar version makes it concrete. Twenty round turns a month at 3,000 dollars a position, at forty basis points each way, is 24 dollars a trade and 480 dollars a month. On a 15,000 dollar account that is more than three percent of the account per month leaking out through a column nobody looks at.
What to do with the sources that fail the test
Once the log has thirty or forty rows, sort it by source and look at the medians. The distribution is usually lopsided in a way that is immediately obvious, and the fixes are ordered by how little they cost you.
- Move to limit orders on the sources where the limit test filled. This is free and it is usually the largest single improvement available.
- Take the slower timeframe from the same engine. A four hour or daily variant of a strategy you are missing on shorter bars asks far less of your timing, and your gap becomes a smaller fraction of the move.
- Trade fewer rows from the expensive sources. Frequency multiplies friction, so halving the number of trades you take from a costly source halves the leak without changing a single fill.
- Drop the source. If the median round-turn gap is over a quarter of the median Run-up after the first three fixes, the signal is real and it is not reachable from where you are sitting. That is an honest finding and it is worth more than another month of trying.
Keep the log running afterwards, because the number moves. A broker's fill quality changes, and a source you dropped at one account size can become tradeable at another. What you are building is not a one-off audit but a small permanent instrument that tells you which of these signals are actually yours, and the only way it gives you a wrong answer is if you stop writing down the fills you did not like.