VEEMANDocs
DocumentationSupportOpen Dashboard

Getting started

  • Introduction
  • Quick start
  • Core concepts

Importing data

  • Supported formats
  • How import works
  • Splitting a file
  • Troubleshooting

Building your portfolio

  • Workspace & equity
  • Weights & capital
  • Weekday filter
  • Keyframes
  • Currencies & FX
  • Library
  • Strike guard
  • Variants & comparison
  • History (undo/redo)
  • Shared spaces

Analytics

  • Metrics reference
  • Charts (deep-dive)
  • Monthly P&L
  • Correlations
  • Comparison
  • Monte Carlo
  • Equity Control
  • Optimization
  • IBKR reconciliation
  • Veeman AI

Research

  • Research overview
  • Define
  • Composing a backtest
  • How the engine trades
  • Results & archive
  • Parameter study
  • Rewind
  • Tactics
  • Indicators

Reference

  • Keyboard & command palette
  • Exporting data
  • Settings

Technical

  • Architecture
  • API reference
  • Security
  • Your data & privacy
  • Risk disclosure
← PreviousResults & archiveNext →Rewind

Parameter study

Trying a hundred stop levels and keeping the best one is the fastest way to build a backtest that fails live: the best of many is, very often, just the luckiest. The Study view of the Backtest page lets you vary a recipe's parameters and then does what a careful researcher would: it chooses a configuration that is good and stable, re-does the whole search on data it hasn't seen, counts how many configurations you tried, and hands you a verdict.

What a study can and can't tell you

A study finds the configuration that would have done best on the past, and measures how much of that is likely to survive. It doesn't create an edge: if no configuration in the space has a positive risk-adjusted return in-sample, the verdict says so and stops there. Even a Robust verdict is a statement about historical data.

Starting a study

A study always starts from a recipe: the run on screen, or, without one, the recipe being composed (at least the legs). It varies only the parameters you choose and leaves everything else exactly as the recipe says. Open it from the Study tab of the view switch; New study starts another, and the Studies menu at the top lists past studies (with Resume and Delete). The study you are following is remembered: reopen the Backtest page and you find it again, running or finished.

What varies

The parameters are grouped like the recipe:

Structure
How each leg picks its strike: delta, distance in points or %, offset, premium (in $, the quote). Twin legs (a condor's short put and short call, or its two wings) can be linked: same value for put and call, or mirrored wings. A linked pair is one degree of freedom instead of two.
Entry
The entry time (or the floating window's start and end, within 09:32–15:59 like the composer) and the entry filters: premium bounds (in $, the quote), short/long ratio, VIX level and moves, VIX9D/VIX, gap and intraday moves, RSI, SMA days, EMA minutes. Add a parameter brings in a filter the recipe doesn't use today.
Exit
Profit target and stop (in % or in $ like a broker quote, as in the composer: $20 = $2,000 per SPX contract), per-leg stop (in % or $), early exit time, minutes in trade, trailing stop and its activation, underlying-move, delta, tested-short, VIX, RSI and short/long-ratio exits, and the cooldown of each exit (custom indicator exit included).
Indicators
The numeric inputs of the recipe's custom indicators (a length, a level), within the range each script declares (minval, maxval; its step is the axis' default step). Each combination computes its indicator once, then reuses it. Only numeric inputs vary: options, on/off inputs, sources, texts, times and colors stay as in the recipe (run each option from the composer and compare).

For each parameter turn on vary and give from, to and step; the panel counts the values. Include «off» adds the value "this rule switched off", so the study also asks whether the exit is needed at all. Errors are explained inline (from after to, a zero step, too many values).

A target or stop in % and the same exit in $ are alternatives, as in the composer. When a parameter sets one of them, that combination switches the other off: varying the stop in $ on a recipe with a 200% stop really tests stops in $. If you vary both, the % wins wherever it is set, as in the engine. On a recipe whose stop is per leg, the stop row is the per-leg stop. Adding the stop on the whole structure as a parameter tests the two together: the engine runs both, but the composer has one stop, so a result reopened there keeps the per-leg one and says so. When both delta exit levels vary, the combinations whose lower level is not below the upper one are skipped (every position would close at its first minute), and the panel says how many.

Some things are deliberately not optimisable:

  • Weekdays. Picking the best days of the week is the archetype of cherry-picking; the recipe's days stay fixed.
  • Commissions and slippage. They are execution realities, not choices. They enter the stress tests instead (costs × 1.5 and × 2).
  • Sizing (capital, contracts, margin): it belongs to Risk Sizing in Analysis.
  • Dates (the period, specific dates, blackout days): choosing them is itself data-mining.
  • Economic event rules and the close before economic events. Choosing which releases to skip, or to step aside from, after seeing the results is the same cherry-picking as the weekdays. A rule the recipe already has stays fixed and counts as one more degree of freedom; to judge it, run the recipe with and without it.
  • Execution assumptions (Cap profits, Two consecutive touches, the stop's cap and single-bar rule): they describe how realistic the fills are, not the strategy.

The study panel

Combinations
The size of the grid (product of the value counts) and the number of free parameters. At most 6 parameters, 4 recommended.
Degrees of freedom
The parameters the study varies plus the rules the recipe already chose (active filters, weekdays). Each is one more way to fit noise; beyond 4 free parameters the panel warns that the risk grows fast.
Objective
Sharpe, Sortino or Calmar, computed on the daily P&L with the same definitions as Analysis. Plus two constraints: minimum positions (default 150 over the development period) and an optional maximum drawdown %.
Lockbox · last 12 months
On by default: the most recent 12 months are set aside and never computed by the study (see The lockbox). Off = no check on unseen data; the verdict then rests on the walk-forward alone.
Walk-forward
The number of windows: 4, 6 (default) or 8.
Budget
Quick, Standard or Thorough: about 100, 400 or 1,500 evaluations.
Mode
Full evaluation when the whole grid fits the budget (no sampling); otherwise Area search over the grid (see below). Exits and day filters that don't change the entries can be resolved in bulk from one engine pass, which makes many more combinations affordable with the same numbers.
Estimated time
An estimate before starting. If compute slots are busy, the study will start from the queue on its own.
Family
The strategy family this study belongs to (underlying, expiry and the legs' types, sides and quantities) and how many studies and distinct configurations it has already seen. Two iron condors with different deltas are the same family; a condor and a butterfly are not.

The development period (the recipe's period minus the lockbox) must hold at least about one year of trading days, or no statistic can stand.

While it runs

A study runs on the server, in the background: you can close the page and come back, even after a restart. If the server restarts mid-way, the study is marked interrupted and Resume continues from the evaluations already saved. No study is ever rejected for being one too many: beyond the free compute slots it waits in a queue that rotates fairly between users, and it shows how many studies start before yours.

The progress card shows four steps (Evaluation → Walk-forward → Stress → Verdict), the current phase, the configurations evaluated, the budget spent and the elapsed time, with Cancel (or Remove from queue). During the evaluation a provisional landscape fills in: a heat map of Sharpe over the two parameters with the most values (the same two as the final grid). It is a provisional reading (some trials run on part of the days, and with more than two parameters a cell averages its combinations); in an area search some cells stay empty, the zones the search judged unpromising.

How the choice is made

Search

If the whole grid fits the budget, every combination is evaluated. Otherwise the area search:

  1. Exploration: a quasi-random sample of the coarse grid, evaluated on a third of the days.
  2. Areas: every evaluated point is the centre of an area; an area's score is the 25th percentile of the objective on its points, never its best point, so an isolated peak can't drag the search.
  3. Refinement: the best third of the areas (plus 10% of discarded areas at random, against premature convergence) are narrowed and resampled, while the share of days grows from one third to two thirds to all of them.
  4. Final: finalists, the exploration sample and the neighbours of the finalists are evaluated on every day.

Days of market stress, chosen from market data only (never from the strategy's P&L), are always included, so a trial on a subset can't look better just by skipping a crisis. The search is deterministic: the same study on the same data repeats the same steps.

The robust choice

  1. Constraints: configurations the engine rejects, with too few positions, an equity that touches zero, a drawdown beyond the cap, or a degenerate Sortino are out of the race.
  2. Plateau score: for each configuration, the 25th percentile of the objective over the configuration and its neighbours (one step along each parameter).
  3. Equivalents: the configurations statistically indistinguishable from the best on daily Sharpe (a model confidence set at 10%).
  4. Choice: the highest plateau score among the equivalents. Ties go to the simplest configuration (more rules switched off), then to the most central one.

The choice is therefore rarely the single best number: it is the best number that stays good when you move it a little.

Walk-forward of the process

The development period is split into anchored windows: each window re-runs the entire study (search and robust choice) on everything before it, and the chosen configuration is measured on the months after. The out-of-sample pieces, stitched together, form a curve that no one who picked the parameters ever saw. Its efficiency is the out-of-sample objective divided by the average in-sample objective.

Reading the results

The result has four tabs.

Verdict

The verdict label with its one-line reason:

Robust
It beats luck over the space tried, the selection rule generalizes, it holds out of sample and sits on a plateau, and it survives the cost, delay and year checks. Until the lockbox is opened it remains an in-sample result.
Weak
Mixed signals: the label lists the checks to look at.
Likely overfit
At least one strong signal: high PBO, out-of-sample failure, degradation in the lockbox, or a winner indistinguishable from luck (this last one counts alone when the objective is Sharpe; with Sortino or Calmar, together with a failed walk-forward).
Insufficient sample
Too few positions, or a development period too short for the walk-forward.
No edge
Not even the best configuration has a positive objective in-sample: optimizing parameters won't create an edge. Change the structure or the entry instead.

Below it: the robust choice against the starting recipe (what changed, parameter by parameter), and the key figures: the objective on the development period (and the recipe's), the walk-forward out-of-sample objective and its efficiency, the Δ Sharpe over the recipe with its 90% band, P&L, max drawdown, positions and the share of days traded. A chart compares the cumulative P&L of the choice (solid) and of the recipe (dashed) on the development period. A sentence says whether the gain over the recipe is likely or holds even counting every trial (a SPA test over all the configurations tried), and how many configurations are statistically equivalent to the best.

The ranking by plateau lists the top configurations with their objective and plateau score, tagging the choice, the peak (the best raw number) and a peak at the edge of the space.

Apply to backtest runs the chosen configuration as a normal backtest on the recipe's period: the same numbers, to the cent. New study starts over.

Landscape

What matters
The share of the objective's variance explained by each parameter. A parameter that doesn't matter should be fixed.
Landscape median · positive configurations
How good the space is overall, not just its best point.
Hold per axis
For each parameter, the median of the neighbours ÷ the choice: how much of the objective survives a one-step change. The worst axis counts.
Profile per parameter
One bar per value of the parameter, with the other parameters at the choice's value: the bar is the objective, below the zero line when negative, and the choice is the bar in full colour. A dash on the zero line is a value not evaluated. The number shown is the choice's objective; hover a bar to read its own, with its value of the parameter.
Grid
A heat map over two parameters (the others at the choice's value), coloured by Objective or Plateau. «·» marks a combination not evaluated or out of the race.
Does the selection rule generalize?
The PBO (probability of backtest overfitting: how often the best in-sample configuration ends below the out-of-sample median) for two rules, picking the maximum and picking the plateau. Below 0.35 the choice generalizes; from 0.5 it is as good as chance.
Maximum test
The probability that luck alone, on this space, produces a best this good (a reality-check test).

Walk-forward

One row per window: training and test dates, the configuration chosen with only the past, its in-sample and out-of-sample objective, and whether it beat the recipe on the test. Above: the stitched out-of-sample objective, the efficiency, how many windows beat the recipe, and the parameter stability (how many window choices are equivalent to the final one). The chart is the stitched out-of-sample P&L. If the development period is too short, the walk-forward isn't computable and the verdict is Insufficient sample.

Checks

Every check has a status (ok, warning, fail, not applicable) and a plain-language message.

Sample
Positions in the development period ≥ the minimum.
Edge in-sample
The choice's objective is positive.
Max test
The best configuration beats what luck alone produces on this space.
PBO
Below 0.35 ok, below 0.5 warning, from 0.5 fail.
Walk-forward
Ok with efficiency ≥ 50% and beating the recipe in at least 60% of the windows; fail if the out-of-sample objective is ≤ 0 or the efficiency below 30%.
Plateau
Hold per axis ≥ 70% ok, ≥ 50% warning (a ridge), below fail (a peak).
Costs × 1.5
With commissions and slippage × 1.5 the Sharpe must stay positive and keep at least half its nominal value.
Delayed entry
Entering one minute later the Sharpe must stay positive; if a minute erases the edge, it is probably a data artifact.
Consistency across years
The best year accounts for at most half of the P&L.
Dependence on a few days
Without the best 1% of days the P&L stays positive.
Complexity
At least 30 positions per degree of freedom and trades on at least 25% of days.
Edge of the space
Whether the choice or the peak sits at the last value tried of a parameter: the optimum may lie beyond, widen that range.
Lockbox
Once opened: the Sharpe on unseen data inside the band expected from the walk-forward.

The tab also shows the execution stress table (nominal, costs × 1.5, costs × 2, entry +1, +2 and +5 minutes, for the choice and for the recipe), year by year P&L and Sharpe, the average daily P&L by volatility regime (terciles of the previous day's VIX; context only, never a verdict criterion), the P&L without the 5 best days and without the best 1%, and an assumptions ledger stating what was computed exactly, what was resampled and what was assumed.

The verdict is punitive by construction: Robust needs the max test, PBO, walk-forward and plateau all ok, and costs, delay and years ok (or not applicable); one strong signal is enough for Likely overfit. A failed check that isn't a strong signal (a max test failed under Sortino or Calmar, costs, years…) gives Weak.

The lockbox

The lockbox is the last 12 months of the recipe's period, excluded from every computation of every study of the family until someone opens it. Open the lockbox reveals the Sharpe of the choice on those unseen days and compares it with the band the walk-forward predicts for a period of that length (a two-stage block bootstrap: the uncertainty of the estimate, then the variability of new days). Inside the band: the result holds. Below: the strategy degraded, and the verdict becomes Likely overfit.

It opens once

The lockbox opens once per strategy family. After that, those days are development data for every future study of the family, and the lockbox refills only with data that arrives later. Opening it after tweaking the strategy while looking at these results unmasks nothing: open it when you are done.

Once refilled, the lockbox holds only the days after the opening. Until there are at least 120 of them, a new study says it relies on the walk-forward alone; those days still stay out of the study.

Apply to backtest runs the choice on the recipe's whole period, lockbox months included: its results show those months before the lockbox is opened. If you want the lockbox to stay a blind test, open it before you apply the choice, or read the applied backtest only up to the start of the lockbox.

Studies and shared spaces

Studies are saved with their results and belong to the scope you were in (your library or a shared space). The family register, with its count of studies and configurations tried and the lockbox state, is kept per family in the same scope.