Tradovate Export P&L Mismatch: Gross vs Net
Your journal's P&L never quite matches your Tradovate account balance. Here's why exported CSVs are gross while your balance is net, and how to reconcile the two to the cent.
You export your Tradovate trades, drop the CSV into your journal, and the total P&L is off. Sometimes it's a few dollars a trade, sometimes hundreds across a busy week, and it never quite matches the balance your Tradovate account actually shows. Before you decide the journal is broken or your fills were wrong, here's what's really happening: in almost every case this is a Tradovate P&L mismatch between gross and net, and it comes down to one simple limitation. Tradovate's exported CSV files don't carry commission or fee data. Your account balance is net of those costs; the exported numbers are gross, before them. The gap you're staring at is the trading cost you already paid. Below, you'll see how to confirm that, where the missing fee data actually lives, and how to reconcile the two so your journal matches your statement to the cent.
Quick Checklist for a Gross vs Net P&L Mismatch
- Compare gross to gross first. Line up your journal's gross P&L against Tradovate's gross P&L for the same date range before you conclude anything is wrong.
- Remember exports are gross. The Orders export has no commission or fee column, so any tool importing it shows pre-cost P&L by default.
- Pull the Cash History report. That's where Tradovate records commissions and fees. The Orders report doesn't.
- Match the date range and time zone. A mismatch is often just a session-boundary or UTC-vs-local cutoff, not a fee gap.
- Check API-sync accounts separately. A sync typically carries only same-day commission and fee data, so older synced trades look gross.
- Know your per-side vs round-turn costs. Confirm whether you're subtracting commission once or twice per trade.
What a "Gross vs Net" P&L Mismatch Means
Gross P&L is your raw trading result: exit price minus entry price, times contracts, times point value. Net P&L is that same number after commissions, exchange fees, NFA fees, and any routing or data costs come out. On a single ES round-turn the difference is tiny. Multiply it across dozens of trades, though, and the two figures visibly split apart, which is exactly what you're seeing when a journal total won't line up with your Tradovate balance.
The reason this mismatch shows up so reliably is structural. When you download the Orders report as a CSV, Tradovate includes fills, prices, quantities, and timestamps, but not the commission or fee charged on each transaction. A Tradovate file upload simply doesn't include commission or fee data, so anything built from that file alone is gross by construction. Your account, on the other hand, has already deducted every one of those charges, so its P&L is net. Two different numbers, both correct, just measured at different points.
There's a second flavor of the same problem for automated or synced setups. When a journal pulls trades through Tradovate's API instead of a file, it usually receives commission and fee data only for same-day activity. Historical trades come across without their costs attached, so recent days look net while older days look gross inside the same report. Knowing which path your data took, manual export or live sync, tells you right away why part of the journal reconciles and part doesn't.
Top Causes of a Tradovate Export P&L Mismatch in 2026
1. The Orders export contains no commission or fee data
This is the root cause behind most mismatches. The Orders report (Order History / Fills) gives you the trade mechanics but leaves out the cost columns entirely. Commissions and fees aren't in the Orders export at all, they live in the Cash History report instead. Any journal fed only the Orders file therefore reports gross P&L, and gross will always read higher on your winners, or less negative on your losers, than your net account balance.

2. Your account and statement P&L are already net of costs
This is the flip side of cause 1. Tradovate's account balance, statements, and performance views reflect money that actually moved, so commissions and exchange fees are already baked in. That's the net figure. When you compare a gross export to a net statement, the difference isn't an error, it's the sum of every commission and fee for the period. You can confirm this by checking that the gap grows in proportion to your trade count rather than jumping around randomly.
3. API-synced accounts only carry same-day fees
If your journal connects to Tradovate by API rather than by uploading a file, expect commissions and fees to appear only for trades executed that same day. Older synced trades arrive without cost data, so a synced journal can show a clean net figure for today and an unadjusted gross figure for last week, all in one report. That's a sync-scope limitation, not a fill discrepancy.
4. Mismatched date ranges, sessions, or time zones
A surprising share of “mismatches” are really the same trades counted over slightly different windows. Futures sessions roll at the exchange close (around 5 PM Central), and exported timestamps may be in UTC while your account view is local. If your journal's day boundary and Tradovate's don't line up, a trade can land on a different day, or drop out of the compared range entirely, making the totals disagree even when every fill matches.

5. Per-side vs round-turn commission confusion
Once you do add costs back, it's easy to subtract them wrong. Commissions are charged per side, once when you open, once when you close, so a full round-turn carries two commission hits plus per-contract exchange and regulatory fees. If your reconciliation applies commission once instead of twice, or the other way around, you'll just trade one mismatch for another. Exact rates vary by plan, by contract, and by whether you're trading micros or minis, so pull your real numbers instead of assuming a flat figure.
How to Fix a Tradovate Gross vs Net P&L Mismatch: Step-by-Step
Confirm it's a gross-vs-net gap (compare gross to gross)
In your journal, switch the P&L view to gross (most tools have a gross/net toggle or a “filter by gross P&L” option). In Tradovate, open the account performance/reports view for the same date range and read off the gross P&L. Compare the two gross numbers. If they now match, the diagnosis is confirmed, the only thing missing is commissions and fees. If they don't match at the gross level, stop: you're dealing with a date-range, time-zone, or missing-fill issue, not a fee gap.
Pull the Cash History report for the fee and commission data
Open Tradovate's Account Reports (the reporting section of the platform). Select the Cash History report, this is the ledger that records commissions and fees as they're deducted, alongside trade-paired entries when positions close. Set the same date range you used for the Orders export so the two files cover identical activity, then download it as CSV.
Reconcile net P&L (merge the files or apply a commission rule)
You have two reliable routes. Merge the reports: download Orders.csv from the Orders report, then append the contents of the Cash History CSV for the same range so the combined file carries both the fills and their fees. Or apply a commission/fee rule in your journal, if your platform supports it, so the gross import adjusts down to net without hand-editing rows. If you set up a temporary rule just to reconcile a synced account, delete it afterward so future imports, which already include same-day fees, aren't charged twice.
Re-check the totals
With costs applied, your journal's net P&L should now match the Tradovate account balance for the period. If it's still off by a small, consistent amount, revisit per-side vs round-turn commission.


Troubleshooting Table
| What you see | What it means | Fix |
|---|---|---|
| Journal P&L higher than Tradovate balance | Export is gross; account is net of fees | Add commissions/fees from Cash History |
| Gross figures match, net figures don't | Only commissions/fees are missing | Merge Cash History or apply a fee rule |
| Gross figures also don't match | Date-range, session, or time-zone misalignment | Re-align the compared window and time zone |
| Recent days net, older days gross | API sync carries same-day fees only | Reconcile older trades from Cash History |
| Costs added but still slightly off | Per-side vs round-turn commission error | Apply commission per side (open + close) |
| Trade appears on wrong day | 5 PM CT session / UTC-vs-local boundary | Match your journal's day cutoff to the exchange |
| Fees double-counted after reconciling | Temporary rule left on a synced account | Delete the temporary commission rule |
Prevent This with PickMyTrade
A gross-vs-net mismatch is a reconciliation headache, but the deeper win is keeping your execution and your records clean from the start. PickMyTrade sits between your TradingView alerts and Tradovate and standardizes the order flow that later becomes your journal:
- Qty / Symbol Validation, every order carries a consistent, validated symbol and size, so your exported fills are clean and easy to match against Cash History.
- Entitlement & Risk Filters, respects prop-firm limits and account state, so you're not reconciling phantom or rejected orders after the fact.
- Rate-Limit-Safe Routing, spaces out order flow so fills land predictably and your trade record is complete, not full of retries.
- Multi-Account Sync, mirrors the same order across every connected account, so each account's report tells the same, reconcilable story.
Cleaner order flow in means a journal that reconciles faster, you spend your time reviewing trades, not chasing missing fee columns.
Trade Rejection-Free
Link your alerts to Tradovate with PickMyTrade and keep your order flow clean, consistent, and easy to reconcile.
Start Your Free 5-Day TrialFrequently Asked Questions
The exported CSV is gross, it has no commission or fee data, while your account balance is net of those costs. The difference between them is the commissions and fees you paid over the period.
No. The Orders (Order History) export contains fills, prices, quantities, and timestamps, but not commissions or fees. Those are recorded separately in the Cash History report.
In the Cash History report inside Account Reports. It logs commissions and fees as they're deducted, along with entries when positions are closed (trade-paired).
Compare gross to gross first to confirm the fills agree. Then pull the Cash History report for the same date range and either merge it with your Orders file or apply a commission-and-fee rule in your journal to arrive at net.
You're likely syncing via API rather than uploading a file. API syncs typically carry only same-day commission and fee data, so historical trades come across gross until you reconcile them from Cash History.
No, they're just gross rather than net. Both the export and the account balance are accurate; they simply measure P&L before and after trading costs.
They vary by plan, contract, and whether you trade micros or minis, and they include exchange and regulatory fees on top of the broker commission. Check Tradovate's current commission schedule for your plan rather than assuming a flat rate.
Most often it's a per-side vs round-turn error. Commission is charged once when you open and once when you close, so a full round-turn carries two commission hits plus per-contract fees. Make sure you're subtracting costs for both sides.
This guide is for educational and informational purposes only and is not financial, investment, or trading advice. Trading futures and other leveraged products carries a substantial risk of loss and is not suitable for every investor. PickMyTrade is an independent third-party automation platform and is not affiliated with, endorsed by, or sponsored by Tradovate, Inc. or Bookmap. All related names, logos, and trademarks are the property of their respective owners. Platform features and steps change over time, so always confirm the current process in the official platform documentation before acting.