Documentation/CSV format
Reference

CSV format specification

Two columns and you are done. One with per-trade profit or loss, one with a date. OverfitCheck takes trade logs from any platform, and column names are matched loosely, so you rarely need to rename anything.

Download example_trades.csv

Required columnsRequired

These two columns must be present. If either is missing, the error you get lists what was expected and what was found in your file.

Canonical nameAccepted aliases (partial list)DescriptionExample values
pnlpnlprofitp&lplreturngainnetresultnet profitrealized pnlPer-trade profit or loss in any currency. Currency symbols ($, €, £) and comma-formatting are stripped automatically.125.00 or $125.00 or "1,234.56"
entry_dateentry_datedatetimedatetimetimestampopen timeclose timetrade datebar timeTrade date. Entry, exit, or close date all work. Year-month-day (ISO 8601) is preferred, but most common formats parse.2024-01-15 or 01/15/2024 or Jan 15 2024

Optional columnsOptional

These add detail when they are there. Leaving them out causes no errors.

Accepted namesDescription
trade_id / idUnique identifier per trade. Auto-generated as 1, 2, 3… if not present.
exit_date / close_dateTrade close date. If absent, entry_date is used for the timeline.
direction / sideTrade direction (long, short). Also used to identify exit rows in entry+exit formats.
quantity / qty / size / contractsNumber of units, contracts, or shares per trade.
entry_price / open_pricePrice at which the trade was entered.
exit_price / close_pricePrice at which the trade was closed.
symbol / ticker / instrumentInstrument traded (e.g. MNQH25, AAPL, EURUSD).
strategy_id / strategy_nameStrategy label. Useful when auditing several strategies at once.

Constraints

Minimum trade count

OverfitCheck needs at least 30 closed trades. Below that, tests like PBO and Monte Carlo permutation stop meaning anything. If your file parses to fewer than 30 trades, the error tells you the count we found.

Entry + exit row formats

Some platforms (TradingView) export one row per entry and one row per exit. OverfitCheck spots this on its own. It looks for “Exit” or “Close” keywords in the direction/type column and keeps only the exit rows, so each trade counts once. Platforms where each row is already a closed trade (MetaTrader, QuantConnect, NinjaTrader) pass through as-is.

Currency symbols and formatting

Dollar signs, euro signs, pound signs, commas, and percent symbols are stripped before parsing. $1,234.56, €-500, and 1234.56 all parse to the same value.

Delimiters

Comma (,), tab (\t), semicolon (;), and pipe (|) delimiters are all auto-detected.

Platform column mapping

Common platform exports and how their columns map to OverfitCheck fields. In most cases you can upload the raw export without renaming a single column.

QuantConnect

Export path: Algorithm Lab → Backtests → Download CSV
QuantConnect columnOverfitCheck field
Entry Timeentry_datereq
Exit Timeexit_date
Profitpnlreq
Symbolsymbol
Directiondirection
Quantityquantity
Entry Priceentry_price
Exit Priceexit_price

QuantConnect exports one row per closed trade. No filtering needed.

NinjaTrader

Export path: Control Center → Account Performance → Export to CSV
NinjaTrader columnOverfitCheck field
Entry timeentry_datereq
Exit timeexit_date
Profitpnlreq
Instrumentsymbol
Market pos.direction
Qtyquantity
Entry priceentry_price
Exit priceexit_price
Trade #trade_id

NinjaTrader exports one row per completed trade. The "Market pos." column contains "Long" or "Short".

MetaTrader 4 / 5

Export path: account-history CSV (broker portal or export tool); MT5 users: upload the HTML report instead
MetaTrader 4 / 5 columnOverfitCheck field
Open Timeentry_datereq
Close Timeexit_date
Profitpnlreq
Symbolsymbol
Typedirection
Sizequantity
Priceentry_price
Close Priceexit_price
Tickettrade_id

The “Type” column uses “buy” and “sell”, not “exit” keywords, so every row counts as a trade. Note that MetaTrader 5 backtest reports are HTML, not CSV. The Strategy Tester has no CSV export. You don't need one. Upload the .htm report directly and OverfitCheck parses its Deals table natively. See the MT5 report format guide.

Example file structure

The downloadable example contains 35 simulated MNQH25 futures trades. It uses both required columns and several optional ones.

trade_id,entry_date,exit_date,pnl,symbol,direction,quantity,entry_price,exit_price
1,2024-01-03,2024-01-03,125.00,MNQH25,long,2,18045.25,18083.00
2,2024-01-04,2024-01-04,-75.00,MNQH25,short,2,18120.50,18195.25
3,2024-01-08,2024-01-08,200.00,MNQH25,long,4,17980.00,18030.00
...