What happens if you follow the rule?
The rule-based portfolio started at 100,000 USD and is now valued at 104,218 USD (+4.2%), held in 20 positions.
One published momentum rule, one paper portfolio of 100,000 USD, every decision saved before its outcome. No judgement calls in applying the rule, no edits after the fact — the rule can be amended only going forward, with each amendment sealed. This page is the record, good years and bad.
The paper book against its benchmarks
The scoreboard is the only thing on this page that changes without a decision. Everything else changes only on a rebalance day.
Value of 100,000 USD, day by day
Fills happen at the close of the session after each decision, never at the price the decision was made on.
The rule on past data
With the book’s own costs, 07.09.2017 to 04.09.2026. The first three rows are the lists of companies the rule picks from; the last is SPY.
| companies the rule picks from | a year | worst fall |
|---|---|---|
| Today’s members of the S&P 500, MidCap 400 and Nasdaq-100 — the three indices the book picks from | 42.6% | −36.9% |
| Today’s members of the S&P 500 | 29.6% | −34.1% |
| Members of the S&P 500 on each decision day | 12.3% | −38.7% |
| SPY, the benchmark | 15.3% | −33.7% |
On the S&P 500 as it stood on each decision day, the rule earned 12.3% a year. On today’s members of the same index it earned 29.6%, 17.3 points a year more for the same rule over the same years. That gap is measured on the companies that have prices: free price data is missing 97 of the 190 companies that left the S&P 500 in these years, so they are left out, and they could move the gap either way. The MidCap 400 and Nasdaq-100 have no free membership history, so the same effect there is not measured. SPY earned 15.3% a year over the same years.
The book below runs this rule, and the rule is unproven: on the S&P 500 of the time it earned less than SPY, and nine years do not separate it from the market. Only the record kept here from 08.09.2026 can test it.
The book today
| name | weight | value | return | latest close | entry | stop-loss (set once) | held since |
|---|---|---|---|---|---|---|---|
| AMD | 4.9% | 5,132 | +16.7% | 608.1009.10.2026 | 521.10 | 416.88 | 09.09.2026 |
| ARM | 4.7% | 4,929 | +0.8% | 266.2809.10.2026 | 264.23 | 211.38 | 09.09.2026 |
| DELL | 5.3% | 5,515 | +9.5% | 586.0609.10.2026 | 535.25 | 428.20 | 09.09.2026 |
| DINO | 5.5% | 5,716 | +0.5% | 121.3009.10.2026 | 120.72 | 96.58 | 08.10.2026 |
| FTNT | 5.4% | 5,605 | +3.0% | 194.7509.10.2026 | 189.10 | 151.28 | 08.10.2026 |
| HPE | 5.3% | 5,552 | +24.7% | 73.4609.10.2026 | 58.90 | 47.12 | 09.09.2026 |
| INTC | 4.8% | 5,042 | -1.4% | 104.7009.10.2026 | 106.24 | 84.99 | 09.09.2026 |
| LITE | 5.2% | 5,406 | +11.6% | 1,103.3509.10.2026 | 988.98 | 791.18 | 09.09.2026 |
| MPC | 5.4% | 5,606 | -1.8% | 455.0309.10.2026 | 463.34 | 370.67 | 08.10.2026 |
| MRVL | 5.1% | 5,269 | +17.1% | 275.2809.10.2026 | 235.01 | 188.01 | 09.09.2026 |
| MU | 4.9% | 5,155 | +0.1% | 1,029.0009.10.2026 | 1,027.77 | 822.22 | 09.09.2026 |
| NBIS | 4.9% | 5,078 | +0.6% | 221.0709.10.2026 | 219.71 | 175.77 | 08.10.2026 |
| PBF | 5.3% | 5,487 | -5.7% | 84.2709.10.2026 | 89.34 | 71.47 | 08.10.2026 |
| PSX | 5.4% | 5,580 | -1.2% | 278.1809.10.2026 | 281.60 | 225.28 | 08.10.2026 |
| SMTC | 5.1% | 5,267 | -0.1% | 187.3009.10.2026 | 187.49 | 149.99 | 08.10.2026 |
| SNDK | 4.9% | 5,093 | -10.3% | 1,581.8209.10.2026 | 1,764.17 | 1,411.34 | 09.09.2026 |
| STX | 5.1% | 5,285 | -11.6% | 783.0009.10.2026 | 885.92 | 708.74 | 09.09.2026 |
| VIAV | 5.1% | 5,353 | +16.0% | 45.4609.10.2026 | 39.18 | 31.34 | 09.09.2026 |
| VLO | 5.3% | 5,574 | -2.3% | 433.7509.10.2026 | 443.80 | 355.04 | 08.10.2026 |
| WDC | 5.1% | 5,339 | -17.6% | 397.2809.10.2026 | 482.28 | 385.82 | 09.09.2026 |
| cash | -2.7% | -2,766 | — | — | — | — | — |
The names are whatever the rule ranks highest on the rebalance day. They are not picks, and nobody here has an opinion about them. The level marked “set once” is the one the book acts on: it is fixed at the price actually paid, never moved, and the whole position is sold the first day the price reaches it. A dash means the level is not set for that name. The stop is kept by the book itself: the first day the price reaches it, the whole position is sold, fee charged, and every sale is listed below. Nothing waits for a closing price.
momentum_9_1 is the published configuration out of 6 tested. A rolling out-of-sample study favoured its nine-month lookback, and the owner confirmed the selection, 08.09.2026.
Cash can run positive or negative: each buy is sized using the decision day's closing price but executed at the next session's, so the amount actually spent can land a little above or below the target.
Sold
| name | bought | sold | why | result | net, USD |
|---|---|---|---|---|---|
| LITE | 988.98 09.09.2026 | 1,048.60 08.10.2026 | rebalance | +6.0% | 10.96 |
| HPE | 58.90 09.09.2026 | 71.00 08.10.2026 | rebalance | +20.5% | 163.56 |
| ATI | 206.54 09.09.2026 | 188.13 08.10.2026 | rebalance | -8.9% | -447.05 |
| AMD | 521.10 09.09.2026 | 620.68 08.10.2026 | rebalance | +19.1% | 142.67 |
| VIAV | 39.18 09.09.2026 | 44.09 08.10.2026 | rebalance | +12.5% | 53.75 |
| MRVL | 235.01 09.09.2026 | 274.66 08.10.2026 | rebalance | +16.9% | 118.83 |
| ALAB | 300.54 09.09.2026 | 347.05 08.10.2026 | rebalance | +15.5% | 802.09 |
| COHR | 303.48 09.09.2026 | 302.35 08.10.2026 | rebalance | -0.4% | -21.71 |
| SITM | 589.87 09.09.2026 | 645.06 08.10.2026 | rebalance | +9.4% | 457.84 |
| ARM | 264.23 09.09.2026 | 275.29 08.10.2026 | rebalance | +4.2% | 5.20 |
| AMAT | 468.85 09.09.2026 | 509.57 08.10.2026 | rebalance | +8.7% | 427.82 |
| LRCX | 315.84 09.09.2026 | 320.59 08.10.2026 | rebalance | +1.5% | 71.10 |
| FLEX | 112.68 09.09.2026 | 114.74 08.10.2026 | rebalance | +1.8% | 87.10 |
| AVT | 91.74 09.09.2026 | 99.56 08.10.2026 | rebalance | +8.5% | 420.06 |
Every sale the book has made, and why: the rule's rebalance (a trim or an exit), the stop set when the name was bought, or, on a sale before 07.10.2026, the target. A daily price cannot say which came first. A day that reached both levels is therefore recorded as the stop, and a price that opened past a level is recorded at that open rather than at the level.
Rebalance every 21 trading days
Between rebalance days nothing is bought or sold, whatever the market does. The exception is the resting stop set when a name is bought — 20% below the price paid — placed once and never moved. The target that used to sit 40% above the price paid was removed on 07.10.2026. Over nine years of testing it cost about 14 points of return a year. When the S&P 500 sits below its 200-day average on a rebalance day, the book goes to cash and waits.
Rebalances
| decision | market filter | orders | book, to next | SPY | QQQ | rule version |
|---|---|---|---|---|---|---|
| 07.10.2026 | invested | 28 | pending | pending | pending | f518dde5d20d |
| 08.09.2026 | invested | 20 | +8.8% | +1.9% | +5.8% | f518dde5d20d |
Rows are appended on rebalance days; an outcome is written once, when the next rebalance day closes the window, and never edited.
The rules, and what this page cannot claim
# The rule, sealed 2026-10-02 model: momentum_9_1 — 9-1 momentum · top 20 · equal weight (version f518dde5d20d) ## What the rule does - score = total return over the last 12 months, skipping the most recent month (Jegadeesh–Titman 12-1; the skip avoids the one-month reversal) - eligible = a name whose close is above its own 200-day average and which has 13 months of history - hold the top 20 eligible names by score, equal weight, capped at 10% each - regime filter: when SPY closes below its 200-day average the model holds cash - data guard: a name with a single-day move over 40% inside the lookback is excluded and named — a jump that size is a corporate action or a bad bar, not momentum, until verified - rebalance every 21 trading days; 10 bps per side assumed on every change - variant: nine-month lookback (189 bars) instead of twelve — the rolling out-of-sample tuner chose it from 2022 on once it was in the grid; a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead ## How it is run on paper - universe: S&P 500, S&P MidCap 400 and Nasdaq-100 index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh - cadence: a decision every 21 US trading days on the close; nothing is traded between decisions - fills: at the NEXT session's close, never at the price the decision was made on - notional: 100,000 USD on paper; no real money follows the page - fee: 1.50 USD per order, charged on every fill - the resting exit: a stop-loss 20% below each entry, placed against the FILL and never moved. The whole position is sold the first day the price reaches it. For every bar before 2026-10-07 the book also held a target 40% above each entry, set the same way. From 2026-10-07 on there is no target; the stop is the only resting exit - from when: the bracket applies to every bar from 2026-09-13 onward. A position opened before that day was bought under the rule as it stood then — a stop, no target. The target is a fixed multiple of the fill, so it was already implied at the buy; an earlier seal corrected it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it — unchanged by this seal. Its stop leg has been live since 2026-09-13, unchanged. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it - the target is removed: from 2026-10-07 on, every position — bought before or after that day — keeps its stop and nothing else. A position held on that day loses its target from that day. The measured reason: over ten years of testing, the 40% target cost about 14 points of return a year, while the 20% stop alone cost less than one. Every sale a target already made, and every record of it, stays exactly as it was written. This is sealed before it applies. It is never applied backwards - what a daily price can and cannot settle: a price that opened past a level is recorded at that open, not at the level, because it never traded there. Every sale says which level fired and on what day. On a bar before 2026-10-07 that reached BOTH levels, the stop is recorded, never the target; a daily bar cannot say which came first - the regime filter, when it says cash, sells everything on the decision day and waits
Show what the evidence cannot claim
## What the evidence cannot claim - survivorship: the universe is TODAY's S&P 500, S&P MidCap 400 and Nasdaq-100 membership; names that left those indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership is the fix and is not built - returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it - costs: 10 bps per side on every weight change; no slippage model beyond that - this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) — an in-sample selection, not the literature's default; its edge is measured on the same years that picked it ## Changes - Each rule change is sealed here before it takes effect. Its date and sha256 are recorded above and in the change log. The version names the model's own settings and changes only when one of those settings does.
record.json contains every field above, the full sha256 and the sealed text of each earlier version.