ALGOCRUCIBLE ← Help Center
Help Center › Troubleshooting & FAQ

FAQ: portfolios and baskets

The questions people ask on the Portfolio pages, answered in plain words. For which route to use in the first place, read Two routes to a portfolio.

What is a "search space"?

The ranges you allow each setting to move in when the app searches — for example a stop anywhere from 10 to 30 ticks, a period anywhere from 6 to 20 bars. You set them on the Strategies page by ticking a setting and giving it a min and max. Together those ranges are the strategy's search space. Everything that searches (Optimize, Walk-forward, Audit, Basket) draws its candidate settings from inside them.

Why does the basket only list some of my strategies?

The basket's strategy list shows strategies you've run at least once — Optimize, Walk-forward or Audit — because those runs stored the ranges you set. The basket reuses the ranges, not the result. A strategy that has never been run has no ranges on file, so there is nothing to draw from. To get it listed: set its ranges on the Strategies page and run a quick Optimize (a handful of trials is enough). Once you pick a strategy, the form shows the exact ranges it will use and which run set them.

What does "Candidates" mean on the basket form?

A candidate is one complete set of settings — say Target 83, Stop 158, Signal 23, Filter 93. Before anything runs, the app picks the number you enter (50 by default), spread evenly across the ranges, and those are the only settings the whole basket test will consider.

Each candidate is then backtested once on every market. With three markets and 50 candidates that is 150 backtests, and that is all the engine work there is. Every learn-then-grade stretch afterwards is arithmetic on those results: the app looks at how all 50 did combined across the markets during the learning period, picks the best, and grades it on the next stretch.

More candidates means a finer search and proportionally more backtests. On minute bars that is trivial (100 candidates on two markets took 30 seconds); on Range or Tick bars at half a minute per backtest, 100 × 3 markets is a few hours — the run-time estimate under the button says so before you press it.

Why a fixed number rather than "keep searching until it's good"? An adaptive search would need every market's result before choosing the next setting to try, which on NinjaTrader means re-pointing the Analyzer at each market for every small batch. Choosing the candidates up front means one run per market, total — and fewer adaptive steps mean less opportunity to chase noise, which is the basket's whole purpose.

The difference from "trials per window" on the walk-forward page: there, each window runs its own fresh search; in the basket, every stretch chooses from the same candidates.

What am I looking at in the "Walk-forward" column of the portfolio walk-forward form?

Each entry is a finished walk-forward that strategy already has. An entry like

use #182 · 20 windows · 549 OOS trades · 2024-10-29..2026-06-17 · 15 Minute

means run #182, with 20 learn-then-grade stretches, 549 trades made on data nobody tuned on, covering that period, on 15-minute bars. Choosing it reuses the result exactly as it is — its trades are merged with the other members' in seconds, with no engine. The list is ordered longest-first because the longest test is the strongest evidence; a 2-window run is a quick look, not a result.

Pick entries whose periods overlap: the portfolio is only as long as the stretch every member was tested on, and the run states the joint period in its log. The last option, re-run on the engine, walks the strategy forward again from scratch using the ranges shown under Space from; use it only when no existing walk-forward covers the period or bar type you want. Walk-forwards done on another computer can be brought in from the Runs page (Import runs…).

Why was a market refused from the basket, and what is "twice its fair share"?

Two gates keep a basket honest. Every market must genuinely take part (at least ten trades); a setting that makes ten trades on one market and two on another is not a basket, it is one market with a passenger. And from three markets up, a market carrying at least twice its fair share of the trades (fair share = one divided by the number of markets) is refused — the basket would behave like that market in disguise. With two markets this second rule can never trigger: a 2:1 split is a property of how often each market trades on those bars, not of the settings, so it is shown rather than refused.

A market took part fully and still lost — why wasn't it refused?

Because that is the other way a basket goes wrong, and a gate cannot see it. The result carries a Without each market table: the same trades with one market left out, no re-run. It names the market that costs most. Dropping it is a decision about the basket, not a re-optimization — the setting was chosen with that market in, so a basket without it is a different basket that deserves its own walk-forward.

What is CV in the setting-stability table?

The coefficient of variation: how much a setting's winning value moved from stretch to stretch, as a fraction of its typical size, so settings on different scales can be compared. A stop that won at 124, 187 and 150 across windows has a CV of about 0.12 — it moved about 12% of its own size. Under 0.20 is stable, 0.20–0.40 moderate, 0.40–0.70 regime-dependent, above 0.70 unstable. Baskets usually come out more stable than single-market walk-forwards, because one setting that has to work on several markets has little room to fit any one market's noise.

Can a basket go through Audit, Perturbation and Certification?

Yes, the same chain as a single strategy, with every stage evaluating "one setting on every market, legs merged". From a basket walk-forward's hand-off: Run this setting as a basket backtests the setting once per market and stores the combined book — from there Robustness (Monte Carlo), cost sensitivity and Certification run with no engine. Audit the basket and Continue → Perturbation test the setting the strict ways. A ROBUST basket perturbation makes the basket eligible to join a fixed portfolio like any other validated member.

What is the Deployment page?

The record of what you actually trade and what you're watching. A validated setting — from a certification, a robustness run, a basket book, a portfolio, or a campaign's survivor — can be frozen there in one of two states: deployed (you trade it) or incubation (parked, waiting for fresh data to prove itself on). You can move a setting between the two at any time, retire it when you stop, and every move is recorded permanently. Incubation has a second shelf, "parked without a verdict", for settings the audit could not judge (too few out-of-sample trades): same checks on new data, but nothing about them is validated, and the card says so.

What does "run a check on new data" do?

One backtest of the frozen setting on only the weeks that arrived after its last test — data that did not exist when the setting was chosen, so it cannot have been fitted to. Each check adds a dated line to the setting's track record: held up, or did not hold up. It is the honest version of "is this still working?" — for deployed settings it is a periodic re-validation; for incubated ones it is the proving ground before you commit money.

Can I move a tracked setting to my other machine?

Yes. On the Deployment page every entry has an Export button, and the top of the page has Export all. Each writes one JSON file holding the frozen setting, its state, its record of checks and its history. On the other machine, Import… on the same page reads that file and adds the settings there under new numbers, with an "imported from" line in their history, so a check can run on either machine. A setting already tracked on the receiving machine is skipped and named; you can import a copy anyway if you want one. The run numbers inside an imported record belong to the install it came from, so they are shown but not linked. The same file works as a backup or across a reinstall. Keep each setting on one machine so only one of them runs its checks.

← FAQFAQ →

Risk Disclosure: Futures and forex trading contains substantial risk and is not for every investor. An investor could potentially lose all or more than the initial investment. Risk capital is money that can be lost without jeopardizing one's financial security or lifestyle. Only risk capital should be used for trading and only those with sufficient risk capital should consider trading. Past performance is not necessarily indicative of future results.

Hypothetical Performance Disclosure: Hypothetical performance results have many inherent limitations, some of which are described below. No representation is being made that any account will or is likely to achieve profits or losses similar to those shown; in fact, there are frequently sharp differences between hypothetical performance results and the actual results subsequently achieved by any particular trading program. One of the limitations of hypothetical performance results is that they are generally prepared with the benefit of hindsight. In addition, hypothetical trading does not involve financial risk, and no hypothetical trading record can completely account for the impact of financial risk of actual trading. For example, the ability to withstand losses or to adhere to a particular trading program in spite of trading losses are material points which can also adversely affect actual trading results. There are numerous other factors related to the markets in general or to the implementation of any specific trading program which cannot be fully accounted for in the preparation of hypothetical performance results and all of which can adversely affect trading results.