Recognised formats import instantly. For everything else, the mapping engine inspects your columns, derives a daily P/L, and — when it isn't fully certain — asks you to confirm in a short review panel.
The engine tries, in order of reliability:
| Method | What it reads | Typical source |
|---|---|---|
| Per-trade | an explicit profit/loss column | most broker / backtester exports |
| Cash flow | a ledger value minus commissions and fees | tastytrade-style statements |
| Equity | a running balance / account-value column, differenced day to day | equity-curve exports (e.g. Invest Studio) |
All three end up at the same place: a daily P/L series.
A cash ledger also contains your deposits
A statement in cash flow form lists every movement of the account, not only trades: deposits, withdrawals, transfers, dividends and interest sit in the same column as the fills. Summed blindly, a $10,000 deposit becomes an extraordinary trading day.
VEEMAN reads the row-type column (Type, Sub Type, Action, Activity…) and excludes movements of
capital, plus dividends and interest — real income, but not produced by the strategy. It then always
opens the review step, so the exclusion is a decision you see rather than one made for you.
If the file has no row-type column, the review step opens anyway: without it there is no way to know whether the file mixes trades and funding, and saying so is more honest than guessing.
Balance or per-trade P/L?
A running balance and a column of per-trade results look alike to a machine, and confusing them is off by orders of magnitude — summing a balance as if it were trades inflates the total by roughly the number of rows.
The engine tells them apart by shape: in a balance the levels are much larger than the steps between
them, and the sign hardly ever flips. That ratio is dimensionless, so it works on a €500 account, on a
$2M account and on an index-points curve alike. Column names like Cum. net profit, Equity curve or
Saldo progressivo are also recognised directly — the name is the more robust signal when the curve is
short or hovers around zero.
When the shape falls in between, the file goes to review with the question asked in plain terms rather than being decided silently.
A daily P/L series is all the equity curve needs, but a per-trade file often carries more — and what is dropped at import cannot be recovered later. So when the method is per-trade, the engine also keeps, whenever the file has them:
No. of Contracts, Contracts, Quantity, Qty, Lots, Shares.Premium, Credit.Margin Req., Margin, Initial margin.09:35:00) is folded back into the trade's datetime. A date column that already carries its own time is left untouched.The time of day is not cosmetic: the daily loss budget and the margin cap consume a day's trades in order of opening time, so losing it (every trade at midnight) changes which trade gets its full size and which one gets trimmed.
They follow the Option Omega convention: contracts and margin are row totals (so P/L and margin are divided by the size to get the per-contract figures the engine works in), while premium is already per contract. Keeping them is what lets a plain per-trade CSV still show the margin column in the trade log, draw the margin band under the chart, size on a margin basis, and charge costs per contract.
Each column found is listed in the review panel next to the date and P/L (Margine → «Margin Req.»).
Ambiguous headers are deliberately skipped rather than guessed: a Contract column holding a symbol is
rejected because it isn't numeric, and Trade Size (usually a notional) or any %/ratio column is
never read as a size or a margin.
The engine scores how confident it is about the date column, the P/L column and the date format.
01/02/2024) or when it had to guess an equity column, and otherwise when smaller uncertainties — a
date column inferred from content, several date-like columns, or a P/L derived from cash flow — stack
up enough to drop the confidence below its threshold. A single mild uncertainty still imports
automatically, carrying a warning to check.12,345 with nothing else to disambiguate it),
or more than ~1% of rows with an unreadable amount or date.When review is requested, you can set:
01/02/2024.Each pending file shows a confidence badge — auto (ready to import) or needs review — and any warnings explaining what to check. Rows whose amount or date cannot be read are left out and counted, never silently turned into a $0 day: an invented flat day is indistinguishable from a real break-even one and would quietly enter win rate, profit factor and the VaR tail. Uploading several files at once collects all the pending ones into a single panel you can confirm or discard individually.
Ambiguous dates
01/02/2024 could be 1 February or 2 January. If VEEMAN can't tell from the data, it flags the file and
asks you to pick the day/month order — getting this wrong shifts every trade to the wrong date.
If something looks off after import, see Troubleshooting, which lists every warning and error with a fix.