A grid backtests many versions of one strategy at once. Instead of guessing a single RSI length or stop-loss percentage, you give the parameter a range and the platform tests every value, so you can see whether the setting you picked is robust — surrounded by other settings that also work — or a lonely spike that only works by luck.
This is the antidote to overfitting. A single backtest can be tuned to look perfect; a grid shows you whether that perfection survives a small nudge.
Building a grid#
- Create a grid template from a strategy you have already built and backtested — the strategy is the starting point, the template exposes its parameters.
- Give the parameters you're unsure about a range. Each becomes a
Start / End / Step — RSI length from
8to20in steps of2, say, or the stop from1%to4%. Leave everything you're confident about fixed. - Check Variations. Every backtest is one combination of the ranges, so the count is the ranges multiplied together — two parameters with ten values each is a hundred backtests. The button tells you the total before you commit; narrow the ranges if it is larger than you want.
- Create Grid. The platform runs every variation and ranks them, so the strongest settings rise to the top.
Variation counts multiply, they don't add. Three parameters with ten steps each is a thousand backtests, not thirty. Always Check Variations before creating the grid — both to control cost and to keep the run finishing this century.
Choosing a creation mode#
When you click New Template from a strategy, pick the range shape that matches what you're trying to learn. Every mode is auto-clamped to your plan's variation cap, so the template is submittable as soon as it lands — you should not have to hand-narrow ranges any more.
- Zoom In (default) — narrow ranges centered on the strategy's current values, at a fine step. The safest first search: high chance of a meaningful result near settings you already trust. Great for confirming robustness of a strategy you're about to promote.
- Explore Above — a full window above every current value. Use when you suspect the current settings are too small: "would a longer lookback actually help?"
- Explore Below — a full window below every current value. The mirror of Above.
- Manual — the legacy wide default (current → current + 10 for integer params). Still clamped, but the widest of the four; use when you want broad exploration and expect to prune afterwards.
You can switch modes as often as you like — the mode picker sits at the top of the strategy chooser and only affects the ranges the template opens with; nothing is locked in until you launch the grid.
What a good result looks like#
When the grid finishes, sort the variations — by Sharpe, Return or Max Drawdown — and look at the shape of what performs, not just the single best row.
Pick a setting from the middle of a plateau, not the tip of a spike — even if the spike scored higher. Then compare your final candidates on drawdown and trade count too, not return alone.
Refining after a run#
Once a grid completes, the results page offers three follow-up searches you can launch with one click. All three are seeded from what you already know:
- Zoom in — halves the step inside the top plateau, testing finer values inside a region you know works. Use when the plateau looks promising and you want to pinpoint the sweet spot.
- Explore Above — shifts every numeric axis to a fresh window above the tested range. Use when the top plateau sits at the upper edge of your original ranges — the peak might be further out.
- Explore Below — mirror of Above.
Each option opens a new template pre-populated with the chosen shape, already clamped to your plan cap. Review, adjust if you like, then submit. This is the loop that turns a first exploratory grid into a confidently narrow one.
Labels#
Grids collect fast — a serious research session leaves dozens behind. Attach free-form labels to each grid so you can find them later.
- Click the + label chip on any grid card (list view) or on the detail header. Type a label and press Enter. Labels autocomplete from the ones you've used before.
- Labels are your own — nobody else sees them. Use whatever convention makes
sense:
promising,archive-me,btc-1h,mean-reversion,2026-jan. - Up to 20 labels per grid, 32 characters each. Labels are lowercased and de-duplicated on save.
Labels then feed the list filter — see below.
Filtering the grids list#
The /research/grids page filters and sorts server-side over indexed
columns, so a full account with thousands of grids narrows in one query.
Search — filter by grid name (case-insensitive substring).
Facets — multi-select any of:
- State: Running / Completed / Errored / Archived.
- Verdict: Robust plateau / Weak plateau / Isolated peaks / No survivors (the robustness classification the analysis produces).
- Timeframe, Exchange, Ticker: the strategy's root settings.
- Label: any label you've applied to a grid.
Performance — additive numeric filters. Pick a metric, an operator, and a value; every applied filter joins with AND, so you can express "Sharpe ≥ 1.5 AND Max DD ≤ 20%".
Available metrics and units:
- Sharpe — raw ratio (e.g.,
1.5). - Return — percentage as displayed on the card (e.g.,
50for 50%). - Max DD — percentage magnitude (e.g.,
20for "no worse than -20%"). - Time in Market — percentage (e.g.,
50). - Robustness — raw 0-1 score.
Operators: ≥ > ≤ <. Enter a value and press Enter or click Add
filter; the chip appears above the row. Remove a chip with its × and
the filter drops out immediately.
The value's unit matches what the card shows. If the card says "50%",
you type 50 — not 0.5. The frontend converts to the raw stored
fraction (0.5) before hitting the API.
For agents driving the MCP API directly, the URL parameters use <col>_<op>
suffixes: sharpe_gte=1.5, max_drawdown_gte=-0.15 (raw column, always
negative for drawdown), time_in_market_gt=0.5, etc. Legacy scalar aliases
(min_sharpe, max_drawdown as magnitude) are still accepted.
Sort — Robustness / Sharpe / Return / Max DD / Time in market. Sort happens in SQL against promoted metric columns, so it's consistent across paging and always applies to the whole filtered set.
Cost#
Each variation is a full backtest, so grid runs draw on your plan's daily grid allowance and, beyond it, cost tokens. This is the other reason to Check Variations first: it is your cost estimate as well as your patience estimate. See plans for the daily allowance on your tier.