This page carries the derivations behind the Strategy Report. Every figure here uses the same run.
The six things that decide whether a backtest means anything — data, rules, sizing, costs, execution, and what the result has to show — and how the backtester in the app handles each of them. Watch on YouTube
Position size is budgeted against the planned stop distance — deliberately set wider than the historically observed MAE. The sizing defines an intended loss limit under normal execution conditions. Gaps, slippage and exceptional market conditions can cause the realized loss to exceed this level.
qty = floor( capital ÷ ( entry_price × (stop_distance% + margin%) × point_value ) ) Example L1, $10K, SPX 5,000, stop 11% + margin 7% = 18%: qty = floor( 10,000 ÷ (5,000 × 18% × $5) ) = floor( 10,000 ÷ 4,500 ) = 2 contracts
What this formula really is: contract maximisation inside the strategy's own limits. It is not a risk budget. It takes the entire account and divides it by what one contract ties up, so the position is the largest the account can carry while still covering margin and surviving a stop-out. The MAE does not cap the quantity — it only decides how much is reserved per contract. Everything after that is filled up.
| Sizing rule | Reserved per contract | Risk per trade |
|---|---|---|
| Broker margin only | 7 % of notional | unbounded — no stop budgeted |
| AVALONPLUS: stop + margin | 18 % of notional | 61 % (= 11/18) |
| Conventional "1 % per trade" | whatever 1 % of capital buys | 1 % |
One contract therefore ties up $7,000 at the current index level (7,754). The smallest account this strategy can be run with is $10,000: at the worst entry date in the test data the balance fell to $7,137, only $216 above the cost of the next contract. 50/50 needs $24,900: one contract becomes possible at $14,000, but only from $24,900 did the account survive the worst stretch in the test data — the August 2011 downgrade. ⚠ The shipped rules did not trade that week — the 68 % belongs to a configuration one parameter step away that did enter and was stopped out (see Risk in the Strategy Report). The four limits the maximisation runs inside are the stop distance (worst MAE + gap buffer), the margin, the price floor and the 500-contract limit of Normalize Positions. Anyone who wants to risk 1 % per trade cannot trade this strategy with a small account at all — the smallest possible position already risks far more.
Every trade is effectively all-in. The formula budgets the whole account against the stop, so one signal ties up as much capital as the stop distance allows. That is what drives the compounding — and it is also why a single triggered stop costs about 61 % of the account. Section 4 shows how to soften this without touching the stop: 50/50 sizing, where only half the account sizes each position and the other half stays in cash.
Empirics: historical worst-case MAE for L1 is ~8%, stop at 11% — in 63 years not a single L1 or S1 stop has been triggered. L2 stop (–1.5%) is tighter; triggered once by design (2015). The effect: a tightly budgeted per-trade account drawdown (under normal conditions), which keeps the reinvest path stable across small losing trades — the long L1 trades can build their capital buffer without the compounding being knocked off course by an intermediate string of losses.
The stop distance is the worst observed adverse move plus a buffer. Signals are computed on the close and executed at the next open, so every position is held through the gap between two sessions — and a stop is not a guarantee of a fill at its price. After a weekend or a halt the market can reopen far beyond it, and the fill is then the open. The buffer is dimensioned for futures: the largest weekend gap in the S&P 500 future since 2004 was about 3 %, so three percentage points are added on top. For L1 that is roughly 8 % + 3 % = 11 %.
| Signal | Worst MAE | + 3 % buffer | Stop used for sizing |
|---|---|---|---|
| L1 | 7.96 % | 10.96 % | 11.0 % |
| S1 | 3.88 % | 6.88 % | 9.0 % |
| L3 | 2.66 % | 5.66 % | 5.6 % |
| L2 | 1.60 % | 4.60 % | 4.6 % |
Measured over 63 years. L2 is the exception: its 1.5 % stop is part of the exit logic, not capital protection, so sizing uses 1.5 % + 3 % = 4.6 % — a weekend gap would clear a 1.5 % stop effortlessly. It is also the only signal whose stop ever triggered, which caps its measured figure; without the stop the same two trades ran to 4.06 %.
One ES equals ten MES, so the two are interchangeable in size — only the granularity and the fees differ. Commission is charged per contract, and one ES ($2.25) costs less than the ten MES it replaces ($6.00). From ten contracts upward, ES is therefore about 62% cheaper for exactly the same position.
Ten MES is reached at roughly a $45,000–$70,000 account, depending on the signal's stop distance — that is where the question first arises. Below it, MES is the right choice: one ES is a large step, and with fewer than ten contracts the finer granularity of MES sizes the position more accurately than the fee saving is worth. Odd sizes are best held mixed — 15 contracts as 1 ES + 5 MES still saves about 42%.
For large positions a second effect is added: measured in dollars, the ES market is more than ten times as deep as the MES market, so the same position moves it correspondingly less. Note that every figure in this report is calculated with MES fees — an account trading ES pays less than shown here, which makes the reported results the conservative case.

Reinvest · X-axis: years since entry · MES Futures · — $10K · -- $100K
| Variant | PnL $10K | Fact. | CAGR $10K | PnL $100K | Fact. | CAGR $100K |
|---|---|---|---|---|---|---|
| Entry 2000 (26 years) | ||||||
| Reinvest | $18,384,332 | 1839× | 32.6% | $20,053,105 | 202× | 22.0% |
| No Reinvest | $194,486 | 20× | 12.0% | $2,179,862 | 23× | 12.4% |
| Long Only (ETF) | $75,086 | 9× | 8.4% | $750,864 | 9× | 8.4% |
| Entry 2006 (20 years) | ||||||
| Reinvest | $17,979,810 | 1799× | 45.5% | $19,388,246 | 195× | 30.2% |
| No Reinvest | $185,454 | 20× | 16.0% | $2,052,467 | 22× | 16.6% |
| Long Only (ETF) | $74,780 | 8× | 11.3% | $747,801 | 8× | 11.3% |
| Entry 2016 (10 years) | ||||||
| Reinvest | $6,481,868 | 649× | 91.1% | $12,926,998 | 130× | 62.7% |
| No Reinvest | $90,762 | 10× | 26.0% | $1,079,008 | 12× | 28.0% |
| Long Only (ETF) | $31,510 | 4× | 15.3% | $315,102 | 4× | 15.3% |
| Entry 2021 (5 years) | ||||||
| Reinvest | $62,143 | 7× | 48.5% | $956,288 | 11× | 60.2% |
| No Reinvest | $26,153 | 4× | 29.3% | $328,541 | 4× | 33.8% |
| Long Only (ETF) | $8,257 | 2× | 12.8% | $82,565 | 2× | 12.8% |
Entry timing changes the outcome substantially — but not in a single direction: absolute profit and annual rate point opposite ways. The earliest entry (2000) produces by far the largest absolute result, for the simple reason that it compounds for 26 years: 32.6% p.a. on $10K, 22.0% on $100K. The most recent entry (2021, 5 years) shows a much higher rate — 48.5% ($10K) / 60.2% ($100K) — but on a small base and over a span short enough that one favourable or unfavourable sequence dominates it. A high rate over a few years is no evidence that the same rate persists over decades: the long-run numbers are lower precisely because they already contain the weak phases that a short window may happen to miss. The period from 2000 to today is used as the primary modern-market reference because it includes the Dot-Com crash, the financial crisis, the subsequent bull market and the COVID period.
Note: each row is a separate backtest that begins at its own entry date and sizes every position from the capital actually available at the time — the same runs the backtester in the app produces. The figures therefore match the rest of this report exactly instead of approximating it.
MES Futures · Reinvest · Costs ON · No tax · All trades from the respective start date
Same trades, same period. Difference: starting capital and reinvest yes/no.

Logarithmic scale · 2000–today · MES Futures · — $10K · -- $100K
| Scenario | Start | Base | PnL (Net Profit) | Factor | ~CAGR |
|---|---|---|---|---|---|
| Long Only (ETF) | — | — | $75,086 | 8.5× | 8.4% p.a. |
| AVALONPLUS No Reinvest | $10K | $10K | $194,486 | 20.4× | 12.0% p.a. |
| AVALONPLUS Reinvest | $10K | $10K | $18,384,332 | 1839× | 32.6% p.a. |
| AVALONPLUS No Reinvest | $100K | $100K | $2,179,862 | 22.8× | 12.4% p.a. |
| AVALONPLUS Reinvest | $100K | $100K | $20,053,105 | 202× | 22.0% p.a. |
The reference line "Long Only (ETF)" is a realistic S&P 500 ETF on a total-return basis: dividends are reinvested (not just the index price change) and are already net of ETF costs — the dividend yield is derived from the actual distributions of a real S&P 500 ETF (SPY), which are already after fund fees. Without dividends, a real ETF investor would be understated by about 1.8–2 % per year.
With an identical percentage edge per trade, the difference in return comes solely from position size: without reinvestment the capital deployed stays constant, while with reinvestment the contract count scales with the growing account — turning linear growth into exponential growth.
MES Futures · $5/point · Costs ON · Normalize Positions ON · No tax · $10,000 starting capital
The comparison in the Strategy Report shows the three modes as they are traded. The chart here takes the same run apart: once with Normalize Positions off, so the difference between the two pictures is that one switch.
The same three again, but with Normalize Positions off. Every figure quoted in this report has it on — contract count stops growing past 500, because a backtest does not care whether an order can actually be filled. With the switch off the arithmetic keeps compounding and full sizing ends in the billions. It is shown here because the difference between the two pictures is that switch: not a market result, an assumption.
Normalize Positions off · theoretical, not tradable · $24,900 start · 2000–today
Per point of drawdown, full size and 50/50 land close together — they take the same trades, 50/50 simply with half the exposure. Over 2000–today from $24,900 that is 2.07 for full sizing against 1.81 for 50/50; with Normalize Positions off, where the contract limit no longer holds full size back, both come out at 2.26. The ETF manages 0.15 — and that gap is the point: the model spends only about a third of the time in the market (3,292 days across 87 trades in 26.7 years); the rest of the time the money sits in cash and earns interest.
| Parameter | Status |
|---|---|
| Live-Trade Start | May 2026 |
| Live Trades so far | 2 |
| Untouched holdout period | none — the rules were developed on the full SPX history |
| Live forward performance | since May 2026 · not yet statistically meaningful |
| Backtest period | 1963–2026 · 63 years · 203 Trades |
| Backtest CAGR (Reinvest, 2000–today) | $10K: 32.6 % p.a. · $100K: 22.0 % p.a. |
| Backtest Max Drawdown (Reinvest, 2000–today) | $10K: 27.7% · $100K: 8.6% |
AVALONPLUS itself began live trading in May 2026, so its own live sample is still small. Its predecessor AVALON — which follows the same principle — has been traded live since March 2020; AVALONPLUS is its refinement with recent insights (see section 1). All figures in this report are hypothetical backtests; past performance, real or simulated, does not guarantee future results.
The signals come from the index, the trades from the future. Every entry and exit is computed on the S&P 500 index (SPX) and executed at the next open in the future. The stop distances are the other way round: they come from the worst adverse move measured on the futures themselves, and from SPX for the decades before futures existed.
The contract is younger than the data. S&P 500 futures started in 1982, the E-mini in 1997, the Micro E-mini in May 2019. Everything before 2000 is therefore a reconstruction: the SPX series scaled to the contract's point value, not recorded futures prices. The app marks it on screen whenever proxy data is in use.
Read the two halves accordingly: 2000–today is a futures backtest on real ES/MES prices, and 1963–1999 is a robustness study on reconstructed prices — useful for the question "do the rules survive other decades", not for a claim about exact futures P&L.
Guidance on backtest disclosure consistently names the same omissions: survivorship bias, look-ahead bias, overfitting and market friction. Each is addressed below — including where the answer is "not applicable" rather than "solved".
They show that further optimisation does not survive on data it never saw — which is why none of it is in the product. They do not show that the strategy's own parameters are validated out-of-sample. Those were chosen with hindsight, like any backtested parameter set. What that is worth, and what it costs, is measured below and in the Strategy Report under Risk.
A strategy can always be improved on the data it was built from. To find out whether such improvements survive, the search procedure was run on the first half of the history only and the rules it found were then applied, unchanged, to the years it had never seen.
| 1,073,028 rule combinations tested | In-sample (searched) | Out-of-sample (unseen) |
|---|---|---|
| Hit rate | 100.0% | 70.0% |
| Max drawdown | 0 | unchanged |
| Effect on P&L | +60,508 | −116,683 |
Out-of-sample the filter stack removed 17 trades — four losers and 13 winners. Repeated at five different split points it was negative five times out of five, so the result does not depend on where the history is cut. And when the same search was run on randomly shuffled results, where no relationship exists at all, it still produced a full stack of filters in 5 of 5 attempts — proof that finding rules proves nothing by itself.
Consequence: none of those filters is in the product. This is evidence of discipline, not of immunity — it shows that additional optimisation does not hold up, not that the core parameters are validated out-of-sample. They were chosen with hindsight, like any backtested parameter set.
A backtest that quietly trades on the same bar that produced its signal will look excellent and cannot be reproduced live. Here the signal is formed on the daily close and executed at the next open at the earliest — never on the bar that generated it. The backtest trades come from the same pipeline that produces the live signals, so there is no separate "research version" that could differ.
Survivorship bias distorts results when a strategy is tested on a universe of individual stocks from which the failed companies have quietly disappeared; studies have found it can understate drawdowns by double-digit percentage points. This strategy trades one instrument — the S&P 500 itself, via futures. There is no universe to select from and no delisted constituent to omit, so the classic effect does not apply. What remains is the index's own composition history, which is a property of the benchmark and affects the Long Only (ETF) comparison in exactly the same way.
Commission per contract per side and slippage per side are applied to every trade in every figure of this report, and both are shown as absolute amounts rather than hidden in a footnote. What a backtest cannot model is the day your order is filled worse than assumed, or not at all.
Every figure in this report is produced with Normalize Positions ON. It bundles two limits that keep a 60-year compounding run from drifting into positions no private account could hold: a price floor (SPX 1500) for sizing — without it the low index levels of the early decades (SPX stood at 65 in 1963) would allow absurd contract counts — and a hard cap of 500 MES / 50 ES contracts per trade. The cap is not a liquidity limit but a plausibility bound: reaching it takes a seven-figure balance.
Once the account reaches the cap, the position stops growing while the account keeps growing, so the percentage return per trade falls structurally:
The headline CAGR is therefore a blend of an early phase below the limit and a later one at it — not a rate that can be extrapolated indefinitely. A small account compounds at the higher rate for years; a large one sits at the limit from the outset. The limit is a fixed contract count while the notional per contract rises with the index, so most of the time spent at it comes from the years when the index stood low. In the app's backtester it is a toggle; this report keeps it ON, which is the more conservative choice.
Sorted alphabetically — each term with definition and AVALONPLUS-specific example.