History records every change you make to the portfolio during a session and shows, next to each one, the metrics that change produced. It is your working bench: try things freely, watch the numbers, then step back to a version that stood out and recall it.
You'll find it at the bottom of the Tools section in the sidebar, right after Variants.
Each row is the state of your recipe after one change, with:
The current version is marked with a dot; steps you've moved past (and abandoned branches) are dimmed.
The metric columns are yours to pick. The Metrics button above the list opens the same chooser you know from the Library cards: tick between 2 and 6 of PnL, Profit %, CAGR, Max DD (% or $), MAR, Sharpe, Sortino, Profit Factor, Win Rate, Volatility, VaR/CVaR 95%, best and worst day, days in drawdown, K-Ratio. Out of the box you get the historical five — PnL, CAGR, Max DD, MAR, Sharpe.
The choice is remembered per device (it is a reading preference, not part of your portfolio), and it drives the desktop table and the mobile cards alike. Pick the ones you're actually working on: comparing versions on drawdown is a different job from comparing them on stability.
Click a column header to rank the list by that value. The first click gives you the order you normally want — dates newest first, numbers highest first, actions from A — and clicking the same header again flips the direction. An arrow on the active header shows which way you're reading.
The default is chronological: History is a history, and it opens as one. Sorting turns it into a leaderboard for as long as you need it — which of these thirty attempts had the best MAR? — without changing anything about your session. On phones, where there are no headers to click, the same controls appear as a row of chips above the cards.
Two details that keep the ranking honest: rows without a number (a version with nothing visible, or one still being recomputed over a framed period) always land at the bottom, in both directions; and ties fall back to chronological order, so equal Sharpe still reads as a story. Abandoned branches are sorted on their own, under their toggle. Sorting by a column you then untick returns the list to chronological rather than ranking it by something you can no longer see.
History reads the same calendar as the rest of the workspace. When you turn on align starting capital on a sub-period, every row is recomputed over that stretch only — exactly like Metrics, Monthly P/L, the weekday panel and the per-strategy register. A band at the top of the list says so, and names the dates.
Without that switch the period is only a zoom of the chart, and the rows keep describing the full history (see Metrics · the framed period).
Each version is recomputed from its own recipe, on the server, with the same engine that computes the live session — so the number you read on a row is the number you'd see if you recalled it. While the recomputation is in flight the cells stay empty rather than showing full-history values: a stretch of three months next to a history of four years would read as a difference between versions when it is only a difference of calendar.
Why the columns can take a moment
Framing a period means every row has to be rebuilt from its recipe, not just re-read. Results are cached per period, so it is paid once: after that, a new change costs only its own row.
Cmd/Ctrl + Z — go back one change.Shift + Cmd/Ctrl + Z — go forward again.Undo, redo and recall all rewrite your live session, so the charts, metrics and every other page follow along. The keyboard shortcuts are global, except while you're typing in a field — there, the shortcut keeps the browser's normal text undo — and while a variant tab is open: what you see then is that variant's working copy, not the live session, so the shortcut stays quiet rather than undoing something you can't see.
Strategies are tracked by identity, not by name, so renames are just another step. Undo past a rename and the strategy comes back under its old name, with its series and every setting intact; redo and it takes the new name again.
A scrubber at the top shows the active path as a row of dots — the filled one is where you are. Click any dot to jump to that step, or use the arrows. On a long history the dots scroll sideways.
No spurious rows while dragging
Dragging a weight slider doesn't fill the list with noise. Rapid changes to the same thing within a couple of seconds collapse into one row, and a change that ends up back where it started leaves no trace — the record follows what actually changed.
History is append-only: nothing is ever thrown away when you go back. If you undo a few steps and then change something, you start a new branch — the steps you'd undone are kept as an abandoned branch rather than being overwritten. Undo and redo always follow the most recent path; the abandoned steps show up dimmed under Show abandoned branches, and you can recall any of them at any time. This means you can explore one idea, back out, try another, and still return to the first.
The AI analyst sees a ranked summary of your history (and your saved variants) for the current session. So you can ask, in the Ask Veeman drawer, things like "which combination this session had the best risk/reward?" — it will point you to the version by its number, cite its Calmar/Sharpe, and can offer a one-click recall of that state. It describes the numbers; the decision stays yours.
For the standout versions (the ones with the best Calmar, Sharpe, CAGR or the smallest drawdown) the analyst also sees how that version differs from your current configuration — which strategies were on or off, how a weight changed, which weekday filters moved. So it can answer "what's different about that version?" directly, e.g. "there, two strategies were off and one carried a higher weight." Each difference is read in the direction version → current.
Weight is a P&L multiplier, not contracts
When the analyst mentions a weight change it means the strategy's P&L multiplier (×N) in the backtest, not the number of contracts or lots — position sizing lives in dynamic sizing. A weekday change names the days that flip on or off relative to your current configuration; days no longer present in a strategy's data are not counted as a change.
They solve different problems and work together.
Found a version you like?
When a row in History catches your eye, recall it and then save it as a Variant to keep it for good. History is where you explore; Variants are where you keep the keepers.
History keeps the most recent changes of the session (older entries fall off once the list gets long). Because it is in-memory, it is not part of the GDPR data export — only saved portfolios and variants are.