Portfolio Backtest
Capital-constrained portfolio backtest over a per-ticker signal model — turns per-ticker signal statistics into a single equity curve where capital is finite, so a burst of same-day signals across many tickers can never open more (or bigger) positions than real money would allow.
Every checked model competes for the SAME cash balance (round-robin fill order on same-day signals); a ticker may carry concurrent positions from different models. Weight % sizes that model's own positions as a percent of current equity.
Applies only to a model with its Apply Filters checkbox on above; a model with filters off still picks its own best-profit-factor horizon per ticker but is never rejected by these thresholds. Gaps has no filters at all (see its note above).
These two are about individual trades, not your account balance — they are separate from the Max DD figure in the results, which is your portfolio's equity drawdown.
For every past trade we measure how far the price moved against you while the trade was open — its worst point, not how it ended. A trade that fell 8% before recovering to close +3% counts as an 8% dip. This is measured on closing prices, so an intraday spike down that closed back up is not counted — your real-world dip can be deeper than the figure here.
Max typical dip per trade looks at the middle (median) trade. Set it to 15% and a ticker is dropped if its typical trade puts you 15% underwater at some point along the way.
Max worst-ever dip per trade looks at the single ugliest trade in that ticker's history. Set it to 40% and one 45% dip disqualifies the ticker even if every other trade was calm.
Leave either at 100% to switch it off.
Shared across every registry model checked above (including those with filters off) — each resolves it against its own horizon bands. Does not apply to Gaps, which has no horizon (its own stop/cut/time exit instead).
In Auto mode, each ticker's horizon is picked from the selected band by whichever horizon gave it the highest historical profit factor.
% of equity — every trade takes the same slice of whatever the account is worth that day. At 5% with $100,000 you buy $5,000 per position; once the account reaches $200,000 that same 5% buys $10,000, so positions grow as you do. If there is not enough cash left for a full slice, the trade is taken smaller rather than skipped — down to the Min fill floor.
Fixed shares — every trade buys the same number of shares, whatever they cost. 100 shares of a $200 stock is $20,000; 100 shares of a $10 stock is $1,000 — a 20x difference in risk between two trades, which is why % of equity is usually the more sensible choice. If the full share count does not fit in the cash remaining, the trade is skipped entirely; there are no partial fills in this mode.
Weight % (e.g. 5) — the slice taken per trade. At 5%, roughly 20 positions fill the account.
Min fill % (e.g. 0.5) — the smallest position still worth opening. With $100,000 and only $400 of room left, that is 0.4% — under the floor, so the trade is skipped rather than opening a token position.
Shares (e.g. 100) — the share count per trade, used only in Fixed shares mode.
Starting equity (e.g. 100,000) — the cash the backtest begins with.
Max gross exposure (e.g. 1.0) — the ceiling on how much can be invested at once. 1.0 means never more than 100% of the account, so no borrowing; 1.5 would allow 150%, i.e. margin.
In-sample — the filters look at the whole period, pick out the tickers that did well, then trade those same tickers over that same period. You are choosing winners already knowing how they turned out, so the result flatters itself. Useful as a best case and for checking the mechanics, but not a number to plan with.
Walk-forward — only ever uses information that existed at the time. It sits out the first few years to build up history (Warm-up), then trades forward, re-checking which tickers qualify every so often (Re-qualify) using only data up to that point. Slower to start and fewer trades, but it is the honest estimate.
On this data the difference is stark: in-sample shows roughly 28% a year, walk-forward roughly 17% — and walk-forward's worst drawdown is deeper, not shallower (about -50% versus -41%). That gap is the size of the hindsight advantage.
Warm-up years (e.g. 3) — how much history to learn from before the first trade is allowed.
Re-qualify months (e.g. 12) — how often to re-run the filters and refresh the list of tradeable tickers.