← Back to TP1

DocsJournal

Importing trades from a CSV

Backfill your history from a Tradovate Performance export or any CSV with trade columns.

The import sits at the bottom of Add trade; Import CSV at the top of that page jumps to it. Pick an account to file the trades under if you want one, choose the file and press Import CSV.

Tradovate exports

Export from Tradovate's Performance tab. Each row there is a complete trade, so it imports as it is: the side comes from which fill came first, a row with only one fill comes in as an open trade, and losses written like $(40.00) read as negatives. Its P&L is gross, so the import takes off the account's commission per contract × contracts when you import into an account that has one.

An Orders export is refused: “This looks like a Tradovate Orders export (one row per fill). In Tradovate, export from the Performance tab instead — those rows are complete trades and import directly.”

Any other CSV

You need a Symbol column and an Entry column; the rest is optional. Names are matched loosely, capitals ignored. Building one by hand? Start from the template.

ColumnAlso accepted
DateEntry date, Open date, Opened, Opened at, Trade date, Date in
TimeEntry time, Open time, Trade time, Time in, Execution time, Exec time
Exit dateClose date, Closed date, Closed, Closed at, Date out
Exit timeClose time, End time, Time out
SymbolTicker, Instrument, Contract, Market
SideDirection, Type, Position, Buy/Sell, B/S
QuantityQty, Contracts, Size, Shares, Lots
EntryEntry price, Buy price, Open price, Avg entry, Price in
ExitExit price, Sell price, Close price, Avg exit, Price out
Net PnLNet P&L, Net P/L, Net profit, Net realized PnL. Kept as written.
PnLP&L, P/L, Profit, Profit/Loss, Realized, Realized PnL. Kept as written (read as net).
Gross PnLGross P&L, Gross P/L, Gross profit. Fees come off it.
CommissionCommissions, Comm, Total commission
FeesFee, Total fees; or Exchange fees, NFA fees, Clearing fees, Regulatory fees, added up; or one Fees & commissions column
SetupPlaybook, Strategy, Tag
NotesNote, Comment, Comments
  • A side starting with S (Sell, Short, SLD) is short. Anything else, blank included, is long.
  • A blank quantity is 1. A blank exit makes an open trade.
  • A blank PnL on a row with an exit is worked out for the symbols listed in Reading your numbers; other symbols stay blank.
  • Fee columns are saved as the trade's fees: a commission column plus a total-fees column (or, without one, the exchange, NFA, clearing and regulatory fee columns added up), or a single Fees & commissions column on its own. A minus sign on a fee is ignored.
  • A Net PnL column, or a plain PnL, P&L, Profit or Realized one, is kept as written: the file doesn't say fees weren't taken off, so none are taken off again, and a fee column is just saved beside it. A Gross PnL column, or a P&L worked out from prices, has the fee columns taken off, or when the file has none, the account's commission per contract × contracts. With both a Net and a Gross column and no fee column, the difference is saved as the fees.
  • The result says which P&L column was read, as net or gross, and where the fees came from.
  • Dates can be 2026-06-10 or 6/10/2026. A row with no time lands at 12:00. See Times and the trading day.

Limits and duplicates

A file can be up to 5 MB and bring in up to 5,000 trades. A row that matches a trade already in your Journal, or an earlier row in the file, on symbol, side, size, entry, exit and both times is skipped as a duplicate. P&L, notes and setup aren't part of the match, so importing the same file twice won't double anything.

Import into account (optional) lists your active manual accounts, and the new trades are filed under the one you pick. Imported trades carry no risk, so they have no R until you add one when editing.

If it doesn't import

MessageWhat to do
“No valid rows found — your CSV needs at least Symbol and Entry columns.”Rename your columns to one of the names above.
“File too large (max 5MB).”Split the file and import the parts one at a time.
“Import failed — please try again.”Try again. Duplicate checking means a second try won't double anything.