seyir · a public research log

What happens if you follow the rule?

One published momentum rule, one paper portfolio of 100,000 USD, every decision saved before its outcome. No judgement calls, no edits after the fact. This page is the record, good years and bad.

Started 2026-09-08 Day 11 · rebalances 1 Rule version f518dde5d20d Generated 2026-09-23 06:22 UTC
scoreboard · since start · after fees

The paper book against its benchmarks

paper book+3.9%100,000 → 103,893 USD
SPY · benchmark+1.5%from the same startthe book's return is 2.4 percentage points higher
QQQ · benchmark+3.5%from the same startthe book's return is 0.4 percentage points higher
worst fall-9.1%peak to trough
fees paid30.001.50 USD per order
verdictinsufficient evidence11 trading days observed, 1 rebalance completed

The scoreboard is the only thing on this page that changes without a decision. Everything else changes only on a rebalance day.

the book today

The book today

nameweightentrystop-loss (set once)target (set once)held since
ALAB5.0%300.54240.43420.762026-09-09
AMAT4.8%468.85375.08656.392026-09-09
AMD5.0%521.10416.88729.542026-09-09
ARM4.9%264.23211.38369.922026-09-09
ATI4.8%206.54165.23289.162026-09-09
AVT4.8%91.7473.39128.442026-09-09
COHR4.8%303.48242.78424.872026-09-09
DELL4.8%535.25428.20749.352026-09-09
FLEX4.7%112.6890.14157.752026-09-09
HPE5.1%58.9047.1282.462026-09-09
INTC4.9%106.2484.99148.742026-09-09
LITE4.9%988.98791.181,384.572026-09-09
LRCX4.7%315.84252.67442.182026-09-09
MRVL5.0%235.01188.01329.012026-09-09
MU4.9%1,027.77822.221,438.882026-09-09
SITM4.7%589.87471.90825.822026-09-09
SNDK4.9%1,764.171,411.342,469.842026-09-09
STX4.7%885.92708.741,240.292026-09-09
VIAV4.9%39.1831.3454.852026-09-09
WDC4.9%482.28385.82675.192026-09-09

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 two levels marked “set once” are the ones the book acts on: they are fixed at the price actually paid, never moved, and the whole position is sold the first day the price reaches either one. A dash means the level is not set for that name. Both exits are kept by the book itself: the first day the price reaches either one, the whole position is sold, fee charged. Nothing waits for a closing price.

the calendar

Rebalance every 21 trading days

2026-09-08 2026-10-07

Between rebalance days nothing is bought or sold, whatever the market does. The exceptions are the two resting exits set when a name is bought — 20% below the price paid and 40% above it — placed once and never moved. When the S&P 500 sits below its 200-day average on a rebalance day, the book goes to cash and waits.

the ledger · every decision, saved before its outcome

Rebalances

decisionmarket filterordersbook, to nextSPYQQQrule version
2026-09-08invested20pendingpendingpendingf518dde5d20d

Rows are appended on rebalance days; an outcome is written once, when the next rebalance day closes the window, and never edited.

sealed before the first decision

The rules, and what this page cannot claim

record · sealed 2026-09-20 · sha256 e946f4980c4822af…
# The rule, sealed 2026-09-20

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
- parameters are the literature defaults, fixed before any of this data was looked at — nothing here was tuned on the backtest
- 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 (study §1); 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: app/universe/seed_2026-07-25.csv — today's 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 bracket: a stop-loss 20% below each entry and a target 40% above it, both placed against the FILL and never moved; the first day the price reaches either one, the whole position is sold
- 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; this seal corrects it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it. 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
- what a daily price can and cannot settle: a day that reached BOTH levels is recorded as the stop, never the target, because a daily bar cannot say which came first; 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
- the regime filter, when it says cash, sells everything on the decision day and waits

## What the evidence cannot claim
- survivorship: the universe is TODAY's index membership; names that left the 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 (M1-1) 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
- a change to the rule is sealed here before it applies; the version above changes with it
Changes to the rule
2026-09-08momentum_9_1 · version f518dde5d20d — first seal — nine-month rule, 100,000 USD on paper, 1.50 USD per order
2026-09-12momentum_9_1 · version f518dde5d20d — M4-8: the resting order becomes a BRACKET — a stop 20% below the fill and a target 40% above it, both set at the fill and both executed on an intraday touch of the day high or low, replacing the close-only stop and the no-take-profit line. Sealed 2026-09-12, applies to bars from 2026-09-13; the 110 positions opened 2026-09-09 keep the rule they were bought under (a stop, no target) until a rebalance replaces them. Also published: what a daily price can and cannot settle.
2026-09-20momentum_9_1 · version f518dde5d20d — The target now covers positions bought before 13 September too — 40% above each one's own buy price, as the rule always meant. It applies from the next trading day on; no earlier day is judged again.