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 name | Accepted aliases (partial list) | Description | Example values |
|---|---|---|---|
pnl | pnlprofitp&lplreturngainnetresultnet profitrealized pnl | Per-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_date | entry_datedatetimedatetimetimestampopen timeclose timetrade datebar time | Trade 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 names | Description |
|---|---|
trade_id / id | Unique identifier per trade. Auto-generated as 1, 2, 3… if not present. |
exit_date / close_date | Trade close date. If absent, entry_date is used for the timeline. |
direction / side | Trade direction (long, short). Also used to identify exit rows in entry+exit formats. |
quantity / qty / size / contracts | Number of units, contracts, or shares per trade. |
entry_price / open_price | Price at which the trade was entered. |
exit_price / close_price | Price at which the trade was closed. |
symbol / ticker / instrument | Instrument traded (e.g. MNQH25, AAPL, EURUSD). |
strategy_id / strategy_name | Strategy label. Useful when auditing several strategies at once. |
Constraints
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.
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.
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.
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 column | OverfitCheck field |
|---|---|
Entry Time | entry_datereq |
Exit Time | exit_date |
Profit | pnlreq |
Symbol | symbol |
Direction | direction |
Quantity | quantity |
Entry Price | entry_price |
Exit Price | exit_price |
QuantConnect exports one row per closed trade. No filtering needed.
NinjaTrader
Export path: Control Center → Account Performance → Export to CSV| NinjaTrader column | OverfitCheck field |
|---|---|
Entry time | entry_datereq |
Exit time | exit_date |
Profit | pnlreq |
Instrument | symbol |
Market pos. | direction |
Qty | quantity |
Entry price | entry_price |
Exit price | exit_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 column | OverfitCheck field |
|---|---|
Open Time | entry_datereq |
Close Time | exit_date |
Profit | pnlreq |
Symbol | symbol |
Type | direction |
Size | quantity |
Price | entry_price |
Close Price | exit_price |
Ticket | trade_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 ...