First, Separate the Signal Test from the Account Test
TradingPal does not have one magic backtest. It has three historical engines answering three different questions, plus a live measurement layer that checks whether real execution behaves like the model.
That distinction matters. A setup can have positive average results when every signal is counted and still disappoint in an account that cannot take all of them. Capital, timing, and overlapping positions decide which opportunities a real portfolio can actually hold.
- Support-and-resistance setup engine: tests named Buy-the-Dip and Sell-the-Rip setups that combine automatic lines with Fibonacci and other supporting evidence. It does not assign a win rate to every raw line.
- Chart-pattern engine: tests wedges, pennants, and triangles with the same detector, entry, stop, and exit rules used by the product.
- Autopilot account replay: takes eligible pattern trades and walks one capital-constrained account through them in date order, with ranking, sizing, cash, and portfolio caps.
- Paper/live measurement: separately records actual account returns, fills, slippage, signal mismatches, and realized results. Those are not backtest numbers wearing a new label.
How We Try to Make a Backtest Hard to Fool
There is no single badge called “robust.” It comes from a stack of smaller disciplines. Our beginner's backtesting guide explains the classic traps; this is how we apply the safeguards in TradingPal.
- Use only information available at that moment. A simulated order cannot use tomorrow's close, a later swing, or a final line that did not exist yet. The detector's later confirmation step creates a separate limitation for the group of patterns included in the published results; we explain it below.
- Make the fill possible. Entries must fall inside the bar's traded range, and a gap through the planned price gets the worse opening fill rather than a price nobody could have received.
- Freeze each scored trade rule. Entry, invalidation, target, and any trailing rule stay mechanical within that test. Research can compare logged rule variants, but it does not switch a losing trade to a more flattering exit afterward.
- Name every exclusion. Impossible fills, overlapping duplicate bets, extremely narrow stops, and capacity skips are removed for explicit reasons — never because the result was embarrassing.
- Separate raw edge from portfolio return. Win rate and average R describe resolved setups. CAGR and drawdown come from the smaller set a constrained account could actually take.
- Use locked-away tests only where we can honestly claim them. Some support-and-resistance research registers the rule first, then checks unseen stocks or market periods. Other components rely on anti-hindsight replay and day-by-day ranking; we do not pretend that every nightly statistic passed the same kind of exam.
Engine 1: Support and Resistance Setups
A line by itself is a useful chart location, not a complete strategy. Our monthly and weekly raw-line study did not find a dependable bounce advantage from the displayed line alone. The published support-and-resistance track record therefore belongs to named, reproducible setups: Buy the Dip, Sell the Rip, or the combined setup book.
For each historical decision point, this engine rebuilds the automatic lines as they would have looked on that date. It then asks whether the full setup qualified — line shape, Fibonacci or other supporting evidence, direction, entry band, invalidation, and exit — using the same product logic rather than a simplified article-only calculator.
For filters researched with a locked-away test, candidate rules are written down first and compared on history or stocks they were not designed around. A filter that only improves the development sample does not earn that validation claim. For the chart basics behind the setups, start with support and resistance.
- Historically honest chart: rebuild the automatic lines for the exact historical window, without using today's finished chart.
- Qualified setup: require the complete support or resistance recipe; a nearby line alone does not inherit the setup's odds.
- Executable plan: use interval-specific buffers around the line or Fib zone for entry and stop. Stops are close-confirmed; the weekly book requires two qualifying closes.
- Resolved result: store the actual entry, stop, target, exit, holding time, and R-multiple for every completed setup.
- Account result: roll those resolved trades through the same 1%-risk, capacity-limited account used by the pattern cards.
Engine 2: Chart-Pattern Trades and Their Track-Record Account
The pattern engine tests wedges, pennants, and triangles as mechanical trades. The key anti-hindsight rule is prior-bar establishment: an entry cannot exist until the pattern itself was detectable on an earlier bar. A shape discovered only after the move does not get a fantasy fill at the beginning of that move.
The pattern detector also has an honest limitation: official confirmation can use a few bars after the initial crossing to reject instant fakeouts. The first-poke model reduces entry hindsight, but the confirmed-pattern statistics still describe patterns that ultimately passed that confirmation — not an alert available at the first tick.
- First-poke entry: after establishment, the test can fill when price first reaches the trigger. A gap through the trigger fills at the worse opening price; short trades use the mirror rule.
- Feasible-bar check: the planned fill has to exist inside that bar's range. Impossible entries and entries already beyond the target are rejected.
- Conservative same-bar handling: when target and stop could both be reached inside one daily candle, the engine follows its documented order instead of choosing the flattering path afterward.
- Mechanical exit: the structural stop is fixed at entry. Some bullish converging patterns can hit the measured target and then trail the 10-day average; that ride rule is declared in advance too.
- No duplicate account bets: overlapping trades in the same symbol and direction are deduplicated for ranking statistics, and the portfolio never holds two positions in one symbol.
How a Setup Becomes a Capital-Constrained Track Record
A pattern or support-and-resistance card turns resolved trades into one account, not an infinite-money sum. The shared account uses the most recent 20-year window and reports edge metrics from all qualifying resolved setups separately from the return of the setups the account could hold. Position risk is measured in R; the R-multiple guide makes that unit concrete.
- About 1% of current equity at risk per trade before caps size the position down.
- At most 16 open positions and one position per symbol.
- At most 20% of equity in one name.
- At most 95% gross exposure: no leverage, with roughly 5% left uncommitted at entry.
- Skipped signals stay visible in the accounting instead of being treated as trades the account somehow took.
Engine 3: Replaying the Full Autopilot Account
The pattern test asks, “Did this setup have an edge?” Autopilot asks the harder question: “What happened when one account had to choose among all eligible setups?” The public backtest starts with the stored historical pattern trades, then walks the calendar day by day.
On each day, candidates are ranked using only trades that had already finished before that day. A stock's own short history is blended with the broader pattern-family history so a tiny lucky sample cannot dominate the queue. Cash returns only when a position exits, and every rejected candidate receives a named reason.
The live selector adds another liquidity guard — a position may not exceed 1% of the stock's median dollar volume — that the current public Autopilot backtest does not model. We state that mismatch instead of quietly calling the backtest identical to live execution.
- Current published sizing: 0.65% of current equity planned at risk per position. Pattern cards use about 1%; the Autopilot policy uses the smaller 0.65% fraction validated for its wider 16-position book.
- Breadth caps: at most 16 positions, 6 new entries per day, 2 new entries per family per day, and 10 open positions in one family.
- Capital caps: at most 20% of equity in one name, 95% gross exposure, no leverage, enough cash for the order, and only one position per symbol.
- Tradability filters: minimum $5 share price, at least $2 million in 20-day median dollar volume, and a stop width of at least 0.3% so a microscopic risk unit cannot inflate R.
- Regime and eligibility rules: only the pattern families and market-side conditions in the configured policy enter the book.
What We Model for Costs — And What We Do Not
The honest answer to “Are costs included?” is not everywhere, and never silently. Different public numbers have different cost bases:
Minimum-price and liquidity filters, whole-share sizing, the 20% per-name cap, and the 95% gross cap keep the simulation away from obviously impossible leverage. They do not make costs disappear. That is why the paper/live layer measures actual fills instead of declaring the modeled haircut correct forever.
- Pattern and support-and-resistance track-record cards are before brokerage friction. Their purpose is to compare the historical setup rules under the same account constraints.
- The leading public Autopilot record includes modeled friction. Every entry is worsened by 25 basis points (0.25%), and a deterministic 5% of entries become synthetic −0.25R failed-entry outcomes to represent patterns that dissolve before live confirmation. We publish the median CAGR from 25 allocation paths under those assumptions. These synthetic failures are different from the live “ghost” mismatch described below.
- Modeled friction is not every real-world cost. The published Autopilot backtest does not separately charge commissions, exit slippage, short borrow, taxes, or nonlinear market impact. The 0.25% entry haircut and 5% failed-entry allowance are explicit assumptions, not proof of what future fills will cost.
Every Metric, Grouped by the Question It Answers
No beginner should need a statistics degree to check our work. Here is the compact map; the complete track-record guide gives worked examples and explains which numbers to read together. Not every surface shows every metric, but these are the families we calculate and preserve.
- Per-trade edge: win rate says how often; profit factor compares gross gains with gross losses in the record's native unit; average and median R show the mean and middle result; winner, loser, payoff, and dollar-expectancy fields show where that edge came from.
- Account growth: total return is full compounded growth; CAGR is the smoothed yearly rate connecting the start and finish, not what every calendar year earned.
- Path risk: realized max drawdown is the deepest observed peak-to-trough fall; block-bootstrap p50, p95, and p99 show stress levels across resampled paths; risk of ruin counts paths that fell below half the starting account.
- Risk-adjusted return: Sharpe compares return with monthly volatility at a 0% risk-free rate; Probabilistic Sharpe checks whether true Sharpe exceeds zero; Autopilot also reports Deflated Sharpe, Sortino, and Calmar.
- Activity, capacity, and where the data came from: depending on the page, we preserve completed trades, trades per year, average hold, time in market, peak positions, skipped signals, test dates, symbol count, and the spread across 25 portfolio paths. Live account snapshots separately report actual exposure.
- Consistency and concentration: Autopilot attribution shows positive, best, and worst months, which years and families contributed, and whether one allocation path carried the result.
- Live execution: the paper/live layer adds deposit-adjusted returns, actual exposure, median entry slippage, ghosts, missed signals, realized-versus-model R error, and rolling live versus expected R.
The Backtest Becomes a Hypothesis the Live System Can Disprove
A robust simulation is still a simulation. The paper/live layer therefore reruns the production pattern logic against each real signal identity and compares the model with what the account actually received.
This does not make a young live sample mature overnight. It makes the gap measurable. If real fills consistently cost more than the published 25-basis-point modeled-friction assumption, the right response is to revise the expectation or stop, not defend the old curve.
- Entry slippage: how many basis points — hundredths of a percentage point — the real entry improved or worsened versus the modeled fill.
- Signal matching: paper or live signals with no matching backtest trade (“ghosts”), plus fresh backtest signals the live process never considered (“missed”).
- Outcome parity: the difference between realized live R and modeled R for the same setup.
- Rolling edge: recent live R compared with the model's expected R, with low-sample flags instead of fake certainty.
- Risk response: green, amber, and red drift states feed the nightly report; drawdown and drift gates can reduce the trading mode rather than waiting for a human to notice silently.
What Refreshes Nightly, and What Does Not
Pattern and support-and-resistance results refresh through the nightly process, then the product serves the latest completed stored result. A page view never launches a hidden backtest. The table below comes from that stored pattern result.
The public Autopilot record is different: it is rebuilt after a strategy-affecting update, not recomputed just because someone opens the About page. If the strategy and stored trades are unchanged, the same inputs should produce the same record.
Historical results of a simulated strategy, refreshed nightly. Triangle rows show their usual break direction's family; each guide breaks out both directions.
The Limitations We Want You to Notice
A stronger backtest is more useful evidence. It is not a forecast. These are the main reasons the next account can differ from the historical one:
Historical results describe what the stated rules did on the stated data. They do not promise the next trade, month, or year. The point of all these guardrails is not to make uncertainty vanish. It is to make the evidence inspectable — and make it harder for us to fool ourselves.
- Survivorship bias: the current stock store does not contain every delisted or failed company, so an active-stock historical universe can be optimistic.
- Confirmation delay: confirmed patterns use information after the initial crossing to reject instant fakeouts; the statistics are not proof of an alert available at the first tick.
- Settled-equity drawdown: the Autopilot replay values open positions at entry until they settle, so its historical max drawdown can understate pain inside a trade. Live metrics mark the account daily.
- Bar-level ambiguity: daily, weekly, and monthly candles compress the order of prices inside a bar. Conservative rules reduce that ambiguity but cannot recreate the tape.
- Incomplete friction: the published Autopilot record includes modeled entry slippage and failed entries, but it is not a full commission, exit-slippage, borrow, tax, and market-impact model.
- Regime change: markets can change. A rule that survived several past regimes can still weaken in the next one.
- Different public horizons: the leading Autopilot record begins in 2016; the since-2000 series is a separate long-history stress exhibit.
How TradingPal Backtests: FAQ
Why does TradingPal use three backtest engines?
Because they answer different questions. The support-and-resistance engine tests named setups, the pattern engine tests wedges, pennants, and triangles, and the Autopilot backtest measures how one constrained account chooses among eligible pattern trades.
Why report the median of 25 runs?
Scarce portfolio slots make near-tied signal ordering matter. TradingPal runs 25 reproducible allocation paths and publishes one actual representative path: median ending value for setup cards and median CAGR for Autopilot. It is a path-sensitivity check, not 25 independent market samples.
Does the 95% cap mean 95% of the account is at risk?
No. It is a 95% gross-exposure cap: the total entry notional cannot exceed 95% of equity, so there is no leverage and roughly 5% remains uncommitted. Planned loss risk is much smaller: about 1% per trade on setup cards and 0.65% in the current Autopilot policy, before caps can size it down.
Are commissions and slippage included?
Pattern and support-and-resistance cards remain before brokerage friction. The leading public Autopilot record includes 25 basis points (0.25%) of adverse entry slippage and turns a deterministic 5% of entries into synthetic -0.25R failed-entry outcomes. It does not separately model commissions, exit slippage, short borrow, taxes, or nonlinear market impact.
Why do setup cards use 1% risk while Autopilot uses 0.65%?
A single setup-family card uses about 1% risk to show that edge in a constrained account. The current Autopilot policy spreads risk across a wider 16-position book; its validated setting is 0.65% per position. The two simulations share core caps but are not identical portfolios.
Are the 25 runs out-of-sample validation?
No. They test sensitivity to allocation order inside the same historical sample. Held-out validation is a separate research discipline used where a rule or gate is tuned under a frozen protocol.
Why can two drawdown numbers differ?
Realized max drawdown is the worst dip on the representative historical path. Bootstrap p95 drawdown samples observed trade blocks with replacement to build many synthetic paths, then reports a stress threshold that about 95% stayed below. Autopilot's settled-equity drawdown can still miss deeper moves inside open trades.
How often do the records update?
Pattern and support-and-resistance results update through the nightly process. The public Autopilot record is rebuilt after strategy-affecting updates and served from storage; opening a page never starts a backtest.
Educational content, not investment advice. Backtest statistics are historical results of a simulated strategy. Publication timing varies by record; the numbers describe the past, not the next trade.