Why Your Journal P&L Does Not Match Your Broker
You import your fills, the journal shows one number, your broker shows another, and now you do not trust either of them. This is the most common complaint in trade journaling and it almost always comes down to one of three things. They are worth checking in order, because the first one is free to check and the third one takes real work.
Before anything else, write down both numbers and the difference. You are going to need the difference as an actual figure, not a feeling.
One: the export was a snapshot and you were still in a trade
Most futures exports are a list of fills as they stood at the moment you pressed the button. If you were holding a position when you exported, the fill that closes it does not exist yet. Your entry is in the file on its own.
A pairing engine sees an entry with no exit and either drops it or leaves it open. Either way the profit and loss on that trade is missing from your total, and if it was a winner your journal now looks worse than your broker by exactly that amount.
This is not a bug in anything. It is the file being an honest snapshot of a session that was not over. The fix is to export again after you are flat and re-import.
Here is how to recognise it. The gap is one trade sized, it lines up with a position you remember holding, and the direction of the error matches whether that trade won or lost. If your gap is a strange number spread across the whole account, it is not this.
Two: commissions
This is the one that gets almost everybody, and it is the reason the gap usually points the same way. Your journal looks better than your broker.
A lot of futures exports carry no commission column at all. Tradovate's Orders report is the obvious example. When there is no fee data in the file, every journal on the market has to estimate, and the estimates are built for retail accounts.
Prop simulated accounts do not pay retail rates. A common all in cost is around a dollar ninety per round turn, roughly ninety five cents a side. A journal guessing fifty cents per round turn is under counting your costs by nearly four times.
A real case from an account we reconciled: the journal showed four hundred and sixty three dollars, the broker showed one hundred and six. That is a gap of three hundred and fifty seven dollars on what looked like a good month, and every cent of it was fees. The account had traded five hundred and ten round turn contracts. Solve the gross difference over those contracts and you land on ninety five cents a side, which is exactly the rate that firm charges.
Do the arithmetic yourself
This takes a minute and it settles the question.
- Take your gross profit and loss, meaning before any fees your journal applied.
- Subtract your broker's net figure.
- Divide by the number of round turn contracts you traded.
If the answer lands somewhere between about ten cents and fifteen dollars per contract, you are looking at commissions and nothing else. Set your real rate, recost the trades, and the two numbers agree.
If the answer is wildly outside that band, stop. It is not fees. A four hundred dollar per contract commission does not exist, so something else is wrong and baking that figure in as a fee rate would just hide the real problem under a plausible looking label. Go to cause three.
Gross and net are different numbers
While you are here, check which one your journal is showing you. A total labelled just "P&L" that quietly has estimated fees subtracted from it is a number you cannot reconcile against anything, because you do not know what was taken out. Your journal should tell you whether a figure is gross, net, or net of an estimate.
Three: trades were silently dropped
This is the rare one and the serious one. The import said it found twenty two trades and your journal contains eighteen.
The usual mechanism is deduplication. Journals skip rows that carry an order id they have already seen, which is correct behaviour and stops you doubling your history every time you re-import the same file. It breaks when one order gets split across several round trips. Scale out of a ten lot in two fives and both halves can end up carrying the same order id from the entry. The first one lands and the second is thrown away as a duplicate.
We know this because Aurafy did exactly that until a fix in July of this year. Twenty two trades parsed, eighteen inserted, no error message anywhere. It is fixed now, and re-importing the same file heals the affected journals rather than doubling them, but I mention it because the failure mode is invisible from the outside and other tools can have it too.
How to catch it: count the round trips in your export by hand, or in a spreadsheet, and compare that count against what your journal holds. Not the profit and loss, the count. If the counts disagree, no amount of fee tuning will ever make the totals line up.
A second version of this is a contract your journal does not recognise. If a tool has never heard of the symbol on a row, some of them skip the row without saying so. Micro Dow, Micro Russell, natural gas, the treasury contracts and the currency futures are the ones that tend to be missing from a short built in list. If your entire journal came up empty after an import that reported success, check whether the instrument is even supported before you check anything else.
The order to check things
- Count your trades. If the count is wrong, nothing else matters yet.
- Look for an open position at the time you exported. That explains a one trade sized gap.
- Solve the implied commission per contract. If it is plausible, it is fees, and you are done.
- Only after all three, start suspecting the parser.
Most people do this backwards. They assume the tool is broken, spend an evening on it, and the answer turns out to be ninety five cents a side.
What Aurafy does about it
After every import there is a box where you paste your broker total. If the two figures differ by more than one percent, Aurafy solves the implied commission from the difference, shows you the rate it worked out, and lets you apply it to every closed trade in that account with one press. The rate is printed on the button before you press it, so a nonsense number is visible rather than silently baked in.
If the solved rate is not a plausible commission, it says so and points you at your trade count instead of pretending the gap was fees.
You can set a different rate per symbol, because most people do not pay the same commission on micros as on the full size contract. And every import runs a set of checks on itself before it saves anything, comparing computed profit and loss against whatever figure the file states, so a parse that is wrong but plausible gets flagged instead of quietly becoming your history.
If you are on Tradovate, the step by step export guide is here. And once your numbers do reconcile, what a good win rate actually looks like covers what to do with them.