Strategy Research Findings (backtests)

Strategy Research Findings

Backtest-derived findings about entries/exits, kept separate from the system docs (Trading Bot Systems). Every finding here is from a backtest on the Massive/Polygon 5-min data (2016-2026) unless noted. Rule of the house: no finding goes live without a forward paper-test first — the weekend taught this twice (a +145% volume result and a “buy the dip” instinct that both evaporated under scrutiny).

Scripts live in ~/Projects/backtest_data/.


Finding 1: Gap-down mornings FADE – do NOT buy the put (2026-07-13)

The instinct (correct observation, wrong fix): on a gap-down morning (like 2026-07-13, QQQ down ~1.3% from Friday’s close), a PUT feels like the play, and it “keeps failing.” True – it fails. But the reason is not that the MACD crossover “waits too long.” The reason is that gap-downs tend to fade (fill), not continue.

The evidence (gap_test.py, QQQ 2016-2026, 2512 days, IV-independent):

Gap-down morning closed DOWN from open avg dip below open avg pop above open
gap down >1% only 47% -1.17% +1.36%
gap down .5-1% only 48% -0.89% +0.86%
gap down .3-.5% only 41% -0.76% +0.75%

On a big gap-down the average bounce UP (+1.36%) is larger than the average further dip (-1.17%), and the day closes higher than its open ~53% of the time. A put bought at the open is fighting the tape. The bot doing nothing on these days is protecting the account, not missing out.

Option overlay (gap_test.py Part 2, BS-priced = IV-OPTIMISTIC): buying a put at the open with a +30% target is ~breakeven-to-slightly-positive only for big gaps (>0.5%) by catching the intraday dip before the bounce, and a clear loser for small gaps. Because buying options right after a gap means paying spiked IV that BS-on-realized-vol under-charges, the true result is worse – very likely a net loser after real IV.

The symmetric case that DID work: big gap-UPs (>1%) buying a CALL hit +30% ~49% with +3.9% avg – up-momentum in an up-trending market continues just often enough. This matches the one real call winner observed live. Down-momentum does not behave the same.

Verdict: do NOT wire a “gap-down -> buy put” rule into any bot. If anything the contrarian (fade / buy the bounce) is what the data leans toward, and it is thin.


Finding 2: Opening-momentum entry beats the MACD crossover – but it’s fading, and the put side is weak (2026-07-13)

Idea: instead of waiting for a 30-min MACD cross (which can’t catch a move already in progress), enter in the direction of the INTRADAY move from the open (call if up, put if down) once it exceeds ~0.5%.

Evidence (opening_momentum_test.py, QQQ 2016-2026): positive expectancy at every threshold/target (+1.5% to +4.6% avg option return/trade), 47-63% hit +30%, clearly better than the crossover (~breakeven). Both directions historically positive. But the era split shows the edge fading (+3.5% -> +5.1% -> +1.6%) and the put side has decayed to ~+0.1% in 2022-2025 – so the down-capture case is the weakest part, and most exposed to the IV cost the model under-charges.

Important scope note: this catches INTRADAY moves that develop after the open, NOT overnight gaps (see Finding 1). This morning’s drop was an overnight gap, so the momentum entry correctly did not fire.

Status: wired into the paper sim as a third variant (momentum account, alongside ungated/gated) to forward-test with real fills/IV before any live change. See Trading KB Section 7 (Volume Sim tab). On targets: 30% beat 20% per-trade in the single-entry model; the “take 20%, re-enter” idea is not yet modeled.


Finding 3: Relative-volume entry gate – modest, inconsistent (2026-07-12)

Gating MACD entries on time-of-day-normalized relative volume (>=1.25x) looked spectacular on one window (+145%) but did NOT survive stress-testing across thresholds and eras – a single lucky path. The underlying property is real (high rel-vol predicts bigger moves), and DIA/older QQQ periods lean positive, but it is a weak, inconsistent edge, not a deployable one. Forward-testing in the paper sim (gated variant). Scripts: volume_filter_headtohead.py, per_signal_test.py, intraday_volume_test.py.


Finding 4: Profit-target tuning does not fix the crossover strategy (2026-07-11)

A full 10-year 3-regime sweep of 30/35/40/45/50% targets: all five produce ~-99% over every full regime, the per-regime “best” flips each time, and every best-trade-removal check is deeply negative. The 30% setting (live since 2026-07-11) is a regime-local fit to the current chop, not a sweet spot. The entry is the lever, not the target. Detail in Trading KB Section 1.


Finding 5: Scale-out exit (bank half at +30%, trail the rest) – real but tail-dependent (2026-07-13)

Idea (from the user, after a DIA put hit +30% and kept running): instead of selling all at +30%, sell HALF and let the runner ride the chandelier – capture quick-win days AND trend days.

Evidence (scaleout_exit_test.py, QQQ 2016-2026, MACD entries): scale-out beats sell-all, but entirely by positive skew (a fat right tail): the median runner underperforms the +30% it gave up – 53-57% of the time the runner reverses and the chandelier stops it below +30% – and the whole edge comes from the minority (~45%) of runners that catch a real trend day and run to +100%+. It survives removing the top-5 runners (not a 5-trade lottery) but the recent-regime confidence is thinnest. Two independent backtests disagreed on era-robustness: one found it positive in all three regimes, another (calendar-thirds) found the runner LOSES in the calm 2016-2021 eras and only wins in 2022-2025. That implementation-sensitivity is itself the signal – the edge is fragile/regime- and tail-dependent, and does NOT fix the strategy’s negative expectancy (makes a losing base lose less). It is also IV-optimistic (BS lets runners ride cheap; real IV compresses the tail, exactly where the edge lives).

Real-world constraint: only works on 2+ contracts (QQQ 2, not DIA’s 1 – you can’t bank half of a 1-lot).

Status: wired into the paper sim as the QQQ scaleout account to forward-test with real fills/IV before any live change (Trading KB Section 7). On today’s DIA trade the runner gave it back – the exact tail-dependent give-back, now watched live rather than trusted from the backtest’s average.


Finding 6: Overnight/futures momentum at the open – no follow-through; apparent option profit is a pricing artifact (2026-07-14)

Idea (from the user): the bots miss the first move of the day because the 30m MACD can’t confirm until ~10:00. So enter AT the 9:30 open in the direction of the overnight/futures momentum (proxy: last pre-market trade before 9:25 vs the prior 16:00 close), call if up / put if down, and keep the live exit set (chandelier, opposite MACD cross, +30%/-30%, EOD or expiry).

Evidence (~/Projects/options_project/backtests/futures_open_vs_macd.py, QQQ+SPY+DIA 5-min 2016-2026, ~2,508 days each, BS-on-RV20 options, Friday expiry, 2 contracts):

  • The underlying has ~zero follow-through. Mean open->close move in the gap direction is -3 to +2 bps at every threshold (0 to 0.5%) on all three symbols. The put side is consistently negative (-4 to -6 bps): gap-downs fade (re-confirms Finding 1, now on 3 symbols). Gap-up calls are the only positive leg (+2 to +9 bps, best at >=0.5% gaps on SPY/DIA).
  • Option-level “profits” at 1-tick slippage (+$3-17/trade avg) are mostly a long-gamma artifact: with no directional edge in the underlying, the gains come from BS-on-20d-RV under-pricing morning volatility. Real market makers price gap-morning IV up precisely for this; you cannot buy that discount.
  • Slippage decides everything. At 3 ticks/side every variant – including the live MACD baseline – goes negative on all three symbols; at 5 ticks, deeply negative. The whole strategy family trades ~150-400x/year, and the per-trade edge is smaller than a realistic open-auction option spread (and DIA options, the symbol with the biggest modeled “edge,” have the widest real spreads).
  • $2,300 with fixed 2 contracts is ruin-or-riches: most configs bust (QQQ open-entry died in the 2020 vol regime after being profitable 2016-2019); survivors saw -50% to -90% drawdowns. Ten-year outcomes at this size are survival luck, not strategy quality.
  • Overnight holds confirmed bad: hold-to-expiry MACD baseline was the worst variant everywhere (QQQ -$15.9k deep-capital vs +$5.6k with EOD flatten), independently confirming the “don’t hold overnight” lesson.

Verdict: do NOT wire “futures direction -> buy at the open” into the bots. The one candidate worth a paper-sim variant is the narrow gap-up >=0.5% -> calls-only leg (consistent small positive follow-through on all 3 symbols, matches Finding 1’s symmetric case) – and even that is roughly break-even after realistic spreads, so it must earn its way through the paper sim first.


Finding 7: Opening-range momentum ride (watch 5-15 min, time-exit ~60 min) – QQQ yes, DIA no (2026-07-14)

Idea (from the user): follow the momentum from the start of the day for ~30 minutes, then get out – direction = whichever way the morning is moving. This is essentially the published “opening range breakout” (ORB) pattern (Zarattini & Aziz 2023 tested 5-min ORB on QQQ with good results), one of the few day-trading patterns with real literature behind it.

Evidence (~/Projects/backtest_data/opening_range_test.py, QQQ+DIA 2016-2026, grid over watch-window 5/15/30 min x threshold 0.1-0.5% x hold 30/60 min):

  • QQQ: real, and unusually robust. Best cells: watch the FIRST 5 MINUTES, enter at 9:35 if |move from open| >= 0.1-0.2%, hold ~60 min, time exit. Underlying follow-through +4 to +7.4 bps, 54-57% directional win rate. Options (2 contracts, 3-tick slippage): +$26k-29k total, +$20-33/trade avg. Positive in all three eras, on both calls and puts, in 2024/2025/2026 individually, and survives top-5-winner removal. The edge is growing (design +$8/trade -> validation +$29 -> holdout +$36), unlike Finding 2’s fading >=0.5% version – and indeed 0.5% is the WORST threshold in this grid (big first-5-min moves mean-revert; the money is in the small-but-clear ones).
  • DIA: nothing. Underlying follow-through zero-to-negative everywhere; options negative at 3 ticks in almost every cell. “QQQ or DIA, whichever is moving” resolves to: QQQ only.
  • Hold 60 min beats 30 min in nearly every cell; 15-min watch windows only work in the 2022+ regime (design-era flat), so the 5-min watch is the robust spec.
  • Caveat, same as Finding 6: part of the option P&L is the BS-on-RV20 morning-vol discount you can’t actually buy. Unlike Finding 6, here the underlying itself has the edge, which roughly accounts for half the per-trade option P&L – the honest expectation is “modestly positive,” not +$33/trade.
  • Share expression sidesteps the option costs entirely: same signal traded as TQQQ shares (long-only on up-signals, ~2bps costs), $2,300 compounds to ~$6.9-9k over the decade (~13-15% CAGR) with 56-59% win rate and a worst YEAR of only -1 to -3%. Dramatically lower ruin-risk than 2 option contracts on a $2,300 account.

Real-world constraints: ~80-150 same-day round trips/year is day trading – [SUPERSEDED 2026-08-01 – the constraint below no longer exists. The $25k PDT minimum and the 3-trades-per-5-days limit were eliminated effective 2026-06-04; the only floor now is the $2,000 margin-account minimum. See Tips & Tricks §10. The original note read: “under $25k equity, PDT limits a margin account to 3 day trades per 5 sessions; a cash account avoids PDT but T+1 settlement idles the capital every other day.” Note this removes a REGULATORY objection only – the cost/expectancy findings against high-frequency trading are untouched.] This shapes sizing/cadence before anything goes live.

Status: NOT live. Next step per house rule: paper-sim variant with the exact winning spec (QQQ only, first-5-min signal >= 0.1-0.2%, enter 9:35, time exit ~60 min, both directions). Note the existing momentum paper account tests Finding 2’s >=0.5% any-time-intraday spec – this grid says that threshold is the worst of the family, so the new spec should be its own account, not a retune of that one.

Update 2026-07-14 (deeper cost-modeling, the pure futures-open variant, and a live paper-trade). The user refined the idea twice: (1) true ORB = breakout of the opening-range HIGH/LOW (not move-from-open), and (2) the pure “enter AT the 9:30 open in the overnight FUTURES direction, hold 60 min, out” – both at 1DTE ATM, 1 contract (their live-account spec, far more theta than the Friday weeklies the grid above used).

  • True ORB breakout (orb_breakout_test.py, 14 symbols): the underlying has no continuation edge – mean 60-min move after a breakout is -4 to +5 bps, 48-52% win rate on every symbol. As a 1DTE trade it loses in 31/33 symbol x window cells at realistic cost, and adding a +30% take-profit makes it WORSE (caps winners, lets losers ride to the time-stop = negative skew). Best cell (QQQ 30-min) = +$0.52/trade = statistical zero.
  • Pure futures-open (futures_open_60min_test.py): looked profitable at 1-tick/RV20 (QQQ +$16k) – but a direction-NEUTRAL straddle made the MOST (+$38k), the tell that it is a long-gamma pricing artifact, not directional edge (u_bps is NEGATIVE; gaps fade, re-confirming Finding 1). Re-pricing at realistic 1DTE IV (RV20 x 1.3-1.5, since short-dated ATM IV runs well above realized) AND 5-tick open spreads turns it negative on QQQ/SPY/DIA, losing in 8 of 11 years. The residual profit is entirely 2024-2026, QQQ-only (SPY negative, DIA noise), and tail-concentrated: ~2% of days carry 42-63% of the P&L, decaying fast as the IV assumption rises. Trailing-2yr QQQ was +$8.4/trade (directional) / +$18/trade (straddle) at 1.3x IV – real but regime- and tail-dependent, while QQQ buy-and-hold returned +46% over the same window, passively.
  • The methodological point that resolves the grid’s optimism: the “+$20-33/ trade” above is BS-on-RV20, which under-prices the single richest-IV instrument on the board (1DTE ATM). Charge real IV + real open spreads and the futures-direction expression does not survive. The move-from-open confirmation entry (this Finding’s original spec) may still beat blind futures-direction – it waits for the market to show its hand (e.g. 2026-07-14 futures were UP but QQQ faded from the open, so a move-from-open rule would have stood aside/gone short while the futures rule bought a call into the fade) – but that too must clear real IV/spreads, still unproven.
  • Now forward-testing with REAL fills, not BS: ~/Projects/shared_trading_lib/paper_orb_live.py (cron’d, PAPER ONLY) trades the futures-open QQQ 1DTE at real bid/ask each morning -> paper_orb_trades.csv. Quote source corrected 2026-08-02: it was built yfinance-only, but yfinance returns bid=0/ask=0 for options intraday and starved it of entries, so it now reads Robinhood market data via rh_quotes.py (yfinance kept as fallback). That means the earlier “never logs into Robinhood / never touches the login lock” description is no longer true – it authenticates read-only and shares /tmp/robinhood_login.lock. It remains incapable of trading: it imports no order function at all (verified by grep), takes the lock non-blocking with a 3s give-up so it can never queue ahead of a live bot, and hard-bounds rh.login() at 30s so it cannot stall live trading by hanging in MFA while holding the lock (_login_bounded, added 2026-08-02 after a judge pass found the login was the one unbounded step inside the mutex).
  • RESULT after 12 real-fill sessions (2026-07-15 -> 07-31): -$1,285 total, -$107/trade, 33% win rate (4/12), best +$557 worst -$420. On the $2,300 account that sizing implies -56%. The BS-optimistic backtest predicted a loser and real fills confirmed it inside three weeks – the 1DTE ATM premium ($400-700/contract) plus spread is simply larger than any directional edge in the open. Treat the futures-open trade as closed and refuted, not pending. Day 1 (2026-07-14, reconstructed): futures UP -> call, QQQ 718.20->718.34 (+0.02%, direction “right”), but -$4.00 realistic (the 4-tick spread ate a +$0.76 mid-to-mid move) – the toll, live. ~2 weeks proves the plumbing and real-fill- vs-model, NOT edge (needs months given the 2%-of-days concentration).

Finding 8: Put credit spread – the condor’s “hidden edge” isn’t there (2026-07-19)

Hypothesis (reasonable, tested, dead): our BS-on-RV20 model UNDER-prices premium (no vol-risk premium), so premium-SELLING structures are modeled pessimistically – maybe the condor’s red ink hides a real edge on the bullish put side alone, which also harvests theta + the documented upward drift.

Evidence (put_credit_spread_test.py, QQQ/DIA/SOXL 2016-2026, same conventions as the condor: 16-delta short, 2%-of-spot wing, 50% PT / 2x-credit stop, weekly):

Symbol All 3 splits Win% Avg/trade Only green era
QQQ -$1,018 (523 trades) 76% -$1.95 holdout 25-26 (+$1,191, 89% win)
DIA -$1,621 (523) 77% -$3.10 holdout 25-26 (+$238)
SOXL -$2,183 (388) 67% -$5.63 none – negative in every era
  • The classic seller shape: avg winner +$12-40, avg loser -$46-$180. High win rate, negative expectancy – the “win% is not profit” trap, third time confirmed.
  • The 2025-26 profit is a regime bet (selling puts into a calm grinding bull) – the exact “regime-local fit” trap of Finding 4. 2018/2020/2022 eras got smashed.
  • Skew makes it worse than modeled: real OTM-put IV » flat-vol proxy, so the short put balloons faster on selloffs than the model shows. The red is understated.
  • SOXL is the worst of the three – selling puts on a 3x ETF is maximum gap risk.

Verdict: NOT wired into the paper sim. A monitor that looks good for months of calm and then blows up would teach the wrong lesson.


Finding 9: The two survivors, now live as paper-sim monitors (2026-07-19)

Ten years of testing left exactly two ideas positive out-of-sample, and both are now forward-monitored as SHARE-based QQQ accounts in paper_volume_sim.py ($2,300 start, $0.01/share slippage per side, shares = no BS/IV artifact):

  • night – the overnight drift (night_*_test JSONs): buy the close, sell the next open. QQQ +$1.58/trade over 2,489 trades across ALL eras; 2025-26 holdout +$1.61/trade (59% win). SPY/DIA positive but thinner. Caveats: tiny per-trade edge, real gap risk, and it is a drift harvest – expect losing streaks in corrections.
  • orb – Finding 7’s winning spec: first-5-min move >= 0.10% -> enter 9:35 in that direction (either way, ignores daily_bias by design), time-exit 10:35. Shares sidestep the option-cost problem that killed the 1DTE expression.

Dashboard: both appear in the Volume Sim head-to-head next to ungated/gated/momentum/ scaleout. House rule stands: months of paper, not weeks, before any live change. Same day, the dashboard goal was re-based to a $100/trading-day pace line (32 NYSE days, 2026-07-20 -> 2026-09-01), replacing the +189% target that Finding 4 showed was built on a negative-expectancy assumption.


Finding 10: NOW-regime sweep (2020-07 -> 2026-07) – RSI2 dip-buy on semis is the best new survivor (2026-07-23)

The ask: best strategy for the CURRENT regime – last 6 years only, not the full decade. New sweep (now_regime_sweep.py, verified by now_regime_verify.py): shares-only, $0.01/share/side, $2,306.91 compounding, three 2-year splits with 2024-07->now as holdout, “survives” = positive in all three splits + top-N-winner removal + parameter-sensitivity checks.

Honest benchmark first: B&H SMH returned 41.5% CAGR over this window (45% maxDD) and beat every strategy tested. Everything below is judged on risk-adjusted terms, not raw return.

1. RSI2 dip-buy on SOXL (the winner): RSI(2) < 10 -> buy at close, sell at close when RSI(2) > 60, ONLY when above the 200SMA. $2,307 -> $10,285 (28% CAGR), 39 trades (~6/yr, avg hold 3.5 days), 77% win, 13% closed-trade maxDD, positive every year it traded and all three splits. Robust, not a knife-edge fit: every neighboring parameter (buy<5/10/15, sell>50/60/70) is profitable and survives top-3-winner removal (looser threshold = MORE profit: buy<15 made $21.9k on 57 trades). SMH and TQQQ versions also all-positive (smoother, smaller). The 200SMA gate kept it out of 2022 entirely – it fails a bear by MISSING, not losing. Caveats: intra-trade pain is real (median dip -5.7% before recovery, worst -28.5%, 15% of trades go >15% underwater – position sizing must survive that without panic); and it IS a regime bet (“dips in uptrending semis get bought”), which is exactly the NOW-style ask, but it will go quiet/lag if the regime turns. Multi-day holds, cash-account friendly. (The original “no PDT issues” note is moot – PDT was eliminated 2026-06-04, see tips_and_tricks §10; multi-day holding is no longer an advantage on that axis, though it still sidesteps the cash-account T+1/GFV trap.)

2. Leveraged monthly rotation (runner-up, most hands-off): hold the best 3-month-momentum pick of QQQ/SMH/IWM/GLD/TLT expressed as TQQQ/SOXL/TNA/GLD/TLT, go cash when QQQ < 200SMA. ~9 trades/yr. $10.6k at 3mo lookback; robust to lookback (2mo $14.0k, 6mo $19.5k, all minus-top3 positive) and the gate does real work (ungated versions collapse). But: -44% maxDD, two negative years (2021 -19%, 2024 ~0%), and picks concentrate in SOXL (28/72 months) – it is mostly “ride semis with a seatbelt.”

3. Night effect is 2.6x stronger on SMH than QQQ (new): +12.4 bps/night vs +4.8 (Finding 9 only tested SPY/QQQ/DIA). $12.9k end, all splits positive, survives top-10 removal, Tue/Wed strongest. But 2022 was -28.7%, maxDD 38%, and 248 trades/yr of buy-close-sell-open cycles = good-faith-violation trap in a cash account (needs a margin account). The GFV constraint is real and unchanged; the original “overnight holds dodge PDT” rationale is moot – PDT ended 2026-06-04 (tips_and_tricks §10), so a margin account has no day-trade count limit either.

Also learned: ORB long-leg ports thinly (QQQ +5.3 bps still the best; SPY/IWM ~zero – re-confirms Finding 7’s QQQ-specificity); afternoon-trend (up >=0.2% at 13:00 -> ride to close) is modestly positive on SMH/QQQ; last-30-min+overnight momentum on SMH (+15.3 bps) is decent but is mostly the night effect wearing a hat. SOXL night-uncond made the most raw dollars ($18.0k) but with -28.6% in split B and 85% maxDD – ruin-or-riches, not a strategy.

Status: NOTHING live; paper monitor running since 2026-07-23. ~/Projects/shared_trading_lib/paper_rsi2_live.py (cron, last-10-min-of-session check) paper-trades the exact spec on SOXL/SMH/TQQQ as three independent $2,300 accounts, with Discord entry/exit alerts and an “RSI2 Dip” dashboard tab showing live RSI2/200SMA signal proximity. Note the edge is ~6 signals/yr per symbol, so a meaningful forward test is quarters, not weeks; the honest fast check is watching it paper-trade the NEXT few signals correctly while trusting the 6-year backtest for expectancy. SPMO B&H context (user asked): 23.1% CAGR / -24% maxDD / worst yr -12% over the window – half SMH’s return at half the pain, beats QQQ risk-adjusted; right core holding, wrong place to look for outperformance.

Capital plan (2026-07-24): of the $3,400 trading balance, $1,500 is earmarked for the card statement due 08-28 (kept in cash – a 30-day obligation does not belong in an asset with a -36% worst year). The investable $1,900 goes all-SMH for this slice: the 90/10 SMH/SPMO idea was dropped because $190 of SPMO moves risk by nothing at this size, and the Roth (~$11k: SPMO/SCHD/VOO/CVX/VGT/SMH) already carries the household diversification. Execution: ~half up front, ~half reserved for the next SMH RSI2<10 signal from the paper monitor (fallback: deploy after ~6 weeks if no signal fires). This is B&H deployment, not a strategy going live – the house paper-first rule is untouched.


Finding 11: The 200SMA gate fixes the night effect’s bear-market hole (2026-07-26)

The idea (cross-pollinating two existing findings): Finding 10 showed the RSI2 dip-buy survived 2022 because a 200SMA gate kept it flat – “it fails a bear by MISSING, not losing.” Findings 9/10 showed the night drift is the strongest raw edge but bled -28.7% in 2022 with a 38% maxDD. The gate that saved the one had never been applied to the other.

Evidence (night_gate_tom_test.py, night_gate_robustness.py, 2017-2026, shares only, $0.01/share/side): buy the close / sell the next open, but ONLY when close > 200SMA.

sym baseline tot gated base maxDD gated maxDD base 2022 gated 2022
QQQ 157% 208% -29.3% -19.7% -23.1% -7.8%
SMH 616% 858% -38.1% -24.0% -29.6% -8.1%
SOXL 484% 924% -85.7% -60.7% -76.5% -16.4%
TQQQ -71% +38% -89.1% -74.3% -69.7% -11.1%
SPY 96% 113% -30.8% -13.5% -16.0% -6.4%
IWM 172% 121% -30.7% -20.8% -13.2% -5.5%
  • Drawdown improves on all six; return improves on five of six (IWM is the exception on return).
  • The mechanism is visible in the data: below-200SMA nights are where the losses live – SMH -5.2 bps, TQQQ -21.0 bps, SPY -0.9 bps. The overnight drift is a bull-regime phenomenon; the ungated version harvests a positive and a negative edge mixed together.
  • Not a knife-edge: SMA 100/150/200/250/300 all work on every symbol tested, and all survive top-5-winner removal. Same robustness standard as Finding 10.
  • Upgrades two prior conclusions: TQQQ night goes from unusable to viable, and SOXL night – dismissed in Finding 10 as “ruin-or-riches, 85% maxDD” – becomes a real candidate at -56%.
  • Honest benchmark: gated-night SMH is 27.8% CAGR vs ~39% for B&H SMH over the same window. It wins on drawdown (-24% vs -45%), not on return. See Finding 12 for what tax does to that comparison.

Dead sub-hypothesis (kept so it is not re-tested): turn-of-month. The classic anomaly appeared inverted – TOM nights looked like the worst nights (SMH 1.9 bps vs 11.8 elsewhere) – but it did not survive window-sensitivity: the spread runs -0.3 to +4.2 bps on QQQ and flips sign on SPY depending on where the window is drawn. Fitted artifact, not an effect. What sits underneath it is a day-of-week tilt (Tue/Wed strongest on all four symbols tested, confirming Finding 10’s passing note on SMH) – a lead, not a finding; stacking a second filter on the same data is how Finding 3’s +145% mirage happened.

Status: NOT live – paper monitor running since 2026-07-26. A night_gated account was added to paper_volume_sim.py alongside the existing night, so the gate is measured head-to-head against the thing it is supposed to improve. Both start at $2,300 on the same bars. Nights the gate declines are logged with reason gate_flat (pnl 0, excluded from win% and shown as flat= in the summary) so the two accounts’ divergence is always attributable. The 200SMA comes from yfinance, cached once per day; if the lookup fails the gated account stands aside rather than guessing. House rule stands: months, not weeks.


Finding 12: Tax drag makes short-term strategies structurally uphill (2026-07-26)

The gap: the word “tax” did not appear anywhere in ~1,700 lines of trading KB. Every strategy comparison to date has been pre-tax, which systematically flatters the high-turnover strategies – i.e. all of them.

The mechanic: overnight and intraday strategies realize 100% short-term capital gains, every year, taxed as ordinary income. Buy-and-hold defers everything and pays long-term at sale. The drag compounds against the trader.

Evidence (contribution_race.py, 22% short-term / 15% long-term assumed):

pre-tax after tax haircut
gated-night SMH (Finding 11) $26,780 $16,243 -39%
B&H SMH $42,263 $36,433 -14%

With $500/month contributions, full window, after tax: B&H SMH $300,739 vs gated-night SMH $178,752 (-41%) vs gated-night SOXL $203,015 (-32%) vs B&H QQQ $128,665 (-57%). On a hostile start (buy the Nov-2021 top, eat 2022) B&H SMH still wins by 25%. Note gated-night SOXL beats B&H SMH pre-tax at $500/mo ($362,541 vs $344,210) and loses after tax – the ranking inverts.

The one window where the strategy wins is the bear (Nov-2021 -> Jan-2023): gated-night SMH $3,259 vs B&H SMH $2,946, maxDD -12.3% vs -45.3%. That is insurance, not alpha – paid for in returns and taxes.

Verdict: apply this lens to every future strategy test. A short-term strategy must beat B&H by a wide margin before tax just to draw even after it. Corollary: the tax argument does not apply inside the Roth, so any strategy that ever does clear the bar belongs there, not in the taxable account. Dollar levels in these runs are the luckiest semi decade extrapolated and are NOT forecasts – only the ranking survives, and it survives both windows.


Finding 13: Verified win != edge – a fully reconciled +1,959% week that is still a coin flip (2026-07-26)

Why this is in the KB: the user brought a r/smallstreetbets post claiming a $2.5k -> $51k week on SPY/AAPL puts (2026-07-20 -> 07-23). It was checked properly rather than dismissed, and it is genuine – worth recording as the concrete counter-example to “but this person actually did it.”

The verification (real prices via yfinance + Realized P&L screenshots): the day-by-day narrative reconciles to 27 cents.

P&L running poster’s words
Mon 7/20 +$4,150 $6,624 “doubled 6k”
Tue 7/21 +$5,975 $12,599 “tripled to around 12k”
Wed 7/22 +$845 $13,444 “lost Wednesday to 9k unrealized”
Thu 7/23 +$35,440 $48,884 “and today 51k”
+ open 5x SPY 748P +$2,605 $51,489 screenshot: $51,489.06

Also verified: buying power $186,856 on $51,489 equity = 3.63x, normal PDT day-trade buying power (the thread’s “obviously fake” commenters were describing a cash account). Individual trades price correctly against the tape.

What it actually was, once verified:

  • 67% of the entire week’s profit came from one strike on one day – SPY $748P 7/23 (+$13,640 / +$10,980 / +$6,320 = $30,940 of $46,410 total).
  • That money was made overnight, not by trading. SPY moved -1.07% overnight and -0.16% intraday on 7/23; it dipped to 735.21 and bounced – a textbook Finding 1 gap-down fade. Anyone who bought puts at Thursday’s open lost.
  • Position sizing was all-in, repeatedly: implied basis reached $10,000-13,247 per trade by 7/22-23, on an account that began the week at $2,473.79. Winnings were rolled immediately into larger bets.
  • The starting capital was itself a lottery win – $550 -> ~$2,000 profit on the Virginia lottery app, cashed out and moved to Robinhood for a self-described “yolo trade.”
  • Only the 1W tab was photographed. 1M / 3M / YTD / MAX were right there and not shown.
  • Their stated method is already in this KB: “wait for vwap above or below… bet toward the direction,” enter 30+ min after the open, 1-2 dollars OTM, 0-1DTE – i.e. Findings 2 and 7, which tested marginal-to-negative once real IV and spreads were charged. The poster agrees: “there ain’t no correct way it goes opposite direction you still lose.”
  • Runs against our own measured base rates: SPY overnight drift is +3.2 bps, positive (Finding 9), so holding puts overnight fights a tilt; and Finding 6 found overnight holds were the worst variant across 2,508 days.

Verdict: authenticity and edge are unrelated questions. A trade can be fully verified, fully reconciled, and still be one draw from a distribution whose other outcomes never get posted. The poster’s stated plan – “I wanna do this 3 time then buy a house” – is to repeat a tail event three consecutive times; if one has probability p, three more is p^3. Note also the tax trap the thread laughed off: ~$49k of short-term gains in Virginia is roughly $14k owed (Finding 12), payable whether or not the money still exists.


Open Question 1: mega-cap after-hours earnings drop -> next-morning SPY gap (2026-07-26)

Origin: the only falsifiable idea in the Finding 13 post. The poster’s biggest trade was not a dart throw – “bought after market close at 4:03 because I saw google drop and bad report.” GOOGL gapped -6.13% that night; SPY gapped -1.08%. SPY/QQQ options trade until 16:15 ET, so the claimed edge is timing: buying ATM puts before the post-close options market fully reprices.

First-pass evidence (megacap_earnings_gap_test.py, AAPL/MSFT/GOOGL/AMZN/NVDA/ META, 2,652 nights 2016-2026). Base rate: SPY gaps below -0.45% on 14.2% of all nights. Conditional on any mega-cap gapping down hard:

mega-cap gap n nights SPY mean gap % SPY down % beat -0.45% EV/trade
<= -2% 324 -0.779% 80.9% 56.2% +0.40%
<= -3% 153 -1.065% 81.0% 62.1% +0.67%
<= -5% 56 -1.413% 78.6% 66.1% +1.03%
<= -7% 36 -1.715% 83.3% 66.7% +1.33%

Positive on all six names individually (EV +1.21% to +2.06%) and in all three eras (+0.21% / +1.11% / +0.51%), monotone in threshold. ~15 qualifying nights/year. Breakeven cost is ~1.12% of spot – 2.5x a normal ATM 1DTE put, so there is real margin for an IV markup.

Why this is an OPEN QUESTION and not a finding:

  1. The signal proxy is optimistic. No after-hours tape, so the mega-cap’s full overnight gap stands in for “what you saw at 16:03.” At 16:03 you see only part of that move, and some names that are -3% then are -1% by the open. Every number above is an upper bound.
  2. It has the exact failure mode that killed Findings 6 and 7. The EV assumes you pay a normal ATM price (~0.45% of spot). After a mega-cap misses, IV spikes and post-close spreads are wide – “you cannot buy that discount” is the single most repeated lesson in this document.
  3. Regime-dependent: 2016-2019 was weak (+0.21% EV, 42% beat rate); the strength is post-2020.
  4. The judgment call is the hard part – “bad report” within three minutes is what a bot does worst.

Status: harness running since 2026-07-26. ~/Projects/shared_trading_lib/paper_earnings_gap_live.py (cron, PAPER ONLY, read-only RH quotes via rh_quotes.py) resolves objections 1 and 2 together by using real bid/ask, no Black-Scholes anywhere:

  • ARM (16:01-16:14 ET): read each mega-cap’s post-market move off Robinhood’s extended-hours print, then capture a real ATM SPY put quote on the nearest expiration. Paper-buys at the ask.

  • SETTLE (09:31-09:50 ET): re-quote the same contract id and sell at the bid. Both objections die here – the signal is what you could actually see at 16:03, and the price is what you could actually pay.

  • A CONTROL leg is captured every trading day, armed or not. Without it we would learn the armed nights’ return but not whether it beats buying a SPY put every night at the same real cost. The base rate is the entire question.

  • No earnings calendar: the signal is measured directly, which also catches guidance shocks and matches the backtest (which conditioned on gap size, not on an earnings date).

  • Capture heartbeat (--heartbeat, cron Fri 14:00 MST). The RH-token tickler watches authentication; this watches capture. A yfinance break, a missing extended-hours print, or a 0-bid ATM lookup all leave the token green while the harness silently records nothing – and silence is indistinguishable from “no signal fired.” The control leg settles ~4 rows/week unconditionally, so fewer than 3 in 7 days is a failure, not a quiet week; a pending capture older than 3 days means --settle is not firing. Either posts to Discord.

Read the control leg before the armed leg. At ~15 armed nights/year, a handful of rows proves the plumbing and nothing else; this needs quarters. Nothing goes live off the table above.


Finding 14: The survivorship trap is bigger than the lookback trap (2026-07-30)

The ask: can a screen FIND a stock “starting to take off”? Tested as cross-sectional momentum (momentum_screen_test.py / momentum_screen_verify.py), 6 years, 3 splits – the user correctly judged that 10 years was not needed.

universe total vs B&H SPY (161%) all splits +
180 names hand-listed in 2026 1405-1707% +1244 pts no
~50 mega-caps knowable in mid-2020 268% +107 pts yes

~80% of the “edge” was writing the ticker list with hindsight. A momentum screen buys precisely the names that went up, and the list was chosen knowing which those were. Three attacks:

  • name removal FAILED to kill it (minus top-10 names still +1019%) – the bias was in the whole list, not a few tickers. This is why name-removal alone is not a sufficient robustness test for a cross-sectional strategy.
  • hindsight-free universe collapsed it 1405% -> 268%. This is the decisive test.
  • random halves scattered 5.4x (median 760%, range 246-1332%) – a stable cross-sectional effect clusters; this did not.
  • it was not even run-to-run stable: 1707% vs 1405% on identical code, because yfinance returned 177 vs 180 usable names. Split B flipped sign, flipping the all-splits verdict.

Standing rule added: any cross-sectional screen must be re-run on a universe that was knowable at the START of the window. No amount of history fixes a ticker list written with hindsight.


Finding 15: Parameter dominance as a disqualifier – trendline breaks (2026-07-31)

Source: a YouTube trendline strategy (“This boring trading strategy made me $526,454”). Spec as reported: lines redrawn daily, break above -> long, break below -> short, trailing stops. Mechanized in trendline_break_test.py with pivot-based lines (causal: a pivot at bar i is only knowable at bar i+k – skipping that lag is what makes most trendline backtests look magical).

  • SPY: negative in all 12 k x trail cells. -3.5 to -20.7 bps/trade, 33-37% win.
  • SOXL ranged -55% to +1491% across reasonable drawing conventions. A 1,546-point swing driven entirely by a parameter the method never specifies.
  • Best cells never beat B&H: SPY -18% vs +144%, QQQ +42% vs +193%, SMH +125% vs +707%, SOXL +1491% vs +1483% (a tie, on 3x leverage, with -58% maxDD).

The general disqualifier: sweep whatever the method leaves undefined. If the range of outcomes is wider than the claimed edge, there is no strategy – there is a family of strategies with no selection rule. Such a method cannot be falsified (when it works you drew the line right; when it doesn’t, you didn’t), which feels like robustness and is the opposite.


Finding 16: Setup filters vs plain momentum – the Qullamaggie test (2026-08-01)

Qullamaggie’s published skeleton is genuinely more specifiable than most: stocks up 30%+ over 3 months, a tightening consolidation, entry on the breakout, 10/20-day MA trail. Mechanized in qullamaggie_breakout_test.py. The right benchmark is not SPY – it is PLAIN momentum, since “buy strong stocks” is a 30-year-old published premium. His contribution is the setup filter, so that is what must earn its keep.

variant (biased universe) trades total avg/trade all splits +
plain momentum 1049 545% 0.20% YES
best consolidation variant 615 457% 0.30% YES
worst consolidation variant 526 8% 0.02% no
  • The setup DOES concentrate quality: +0.30%/trade vs +0.20% – a 50% improvement. Credit where due.
  • But it trades 40% less, and the lost exposure exceeds the quality gain: 545% -> 457% total. The filter finds better trades and leaves more on the table than it saves.
  • 7% to 457% across nine consolidation definitions – Finding 15’s parameter dominance again, milder (65x rather than sign-flipping).
  • Everything still loses to B&H SMH (706%), on a universe biased in its favour.

Untestable parts, stated: his real universe is thousands of small caps (where Finding 14’s bias is far worse), he eyeballs which setups look best, and his sizing is discretionary and tail-driven. The specifiable part is not where the edge is, and where the edge may be is not specifiable.


Finding 17: The live-execution finding – 200 real manual scalps, -$486 (2026-08-01)

The only finding in this document backed by real money rather than a backtest. Between 07-01 and 07-31 the user hand-traded a momentum scalp: 30-60 second holds on leveraged ETFs, trailing the stop up, targeting +0.5-1%. Source: trade_ledger.csv (rebuilt by fill_logger.py from raw RH fills – canonical, not narrated).

closed manual trades 200 (150 of them SOXL)
gross P&L -$485.97 (excl. fees; true net slightly worse)
win rate 62% (125W / 74L)
avg win / avg loss +$4.32 / -$13.86
mean return per trade -0.285% (median +0.022%)
wins avg / losses avg +0.400% / -1.118%
trades that reached +0.5% 26 of 200

1. The four good days were real. 07-27 +$1.11, 07-28 +$4.93, 07-29 +$17.95, 07-30 +$37.56 = +$61.55, improving every day, 5-17 trades/day. The skill impression was not imagined. It was also ~$15/day on flawless execution.

2. One day erased four, three times over. 07-31: 36 trades, -$187.72.

3. The damage was NOT mostly revenge trading – it was two unprotected losses. Decomposing 07-31:

  • trade #2 -$50.63 (-7.6%) and trade #8 -$97.13 (-5.3%) = -$147.76, 79% of the day’s loss in 2 of 36 trades. Multi-percent losses on a system designed around +/-0.5% are the signature of a stop that never went on.
  • the 28 trades AFTER the second blow-up netted -$45.08 – size dropped to 5 shares and churned. That is the grind-it-back tail, and it added 24% more damage on top.
  • so: execution failure ~79%, loss-chasing ~24%, strategy ~0%.

4. The distribution says Finding 8, live. 62% win rate, negative expectancy – the “win% is not profit” trap, now confirmed a FOURTH time and this time with the user’s own capital. The remembered “+0.5-1%” is the winners: only 13% of trades got there, and the average winner was +0.400% against an average loser of -1.118%. Losses ran 2.8x wins on a system whose entire design is capped losses.

5. “What if we only traded SOXL/TQQQ/QQQ” was already the experiment. 150 of 200 trades were SOXL. The concentrated version IS the -$486.

6. It matched the backtest, which was run BEFORE any of this surfaced. quick_scalp_mechanic_test.py (2026-07-28) tested the mechanic on 195k random entries: SOXL +0.5% target with a symmetric stop hits the STOP more often than the target (43.1% vs 39.8%), -1.3 bps gross before costs. Live came in at -0.285%/trade. Different route, same sign.

The transferable lesson – the gap between system-as-designed and system-as-executed. Every backtest in this document assumes orders arrive as intended. This month priced that assumption: two failed stop submissions cost $148, roughly 2.4x what four disciplined days earned. Execution risk is not a rounding error on a fast strategy; it is the dominant term. Any strategy whose edge is smaller than the cost of one missed stop is not a strategy the operator can run, however good the entry signal is.

Corollary for automation: automating this does NOT fix it. The mechanic tests negative when executed perfectly, so a bot would simply lose more reliably. Automate only what has positive expectancy under perfect execution – which is why the night_gated and earnings-gap monitors are paper-first and slow.

Context for scale: the $500 bi-weekly transfer starting 2026-10-14 deposits $1,083/month without requiring a single correct decision. The four best manual days produced $61.55.


Finding 18: ADX tested as a regime gate – loses to the 200SMA in 36/36 cells (2026-08-01)

Origin: a 5-indicator TradingView scalp stack proposed for QQQ/TQQQ options (MACD Custom / Squeeze Momentum / Pure Price Action / ADX Volatility Waves / SuperTrend AI). Four of the five already map onto findings in this document, so only the untested one was isolated and run against a real benchmark:

indicator already covered by
MACD Custom (ChrisMoody) Finding 4 – decade sweep, ~-99% every regime
Squeeze Momentum (LazyBear) Finding 16 (consolidation filter made it worse) + Finding 7 (breakouts have no continuation edge)
Pure Price Action (LuxAlgo) Finding 15 – levels/trendlines; SPY negative in all 12 cells
SuperTrend AI (LuxAlgo) trailing stops tested; the “AI” is automated parameter selection = Finding 15’s failure mode industrialized
ADX Volatility Waves untested -> this finding

Why not test the stack: ~16 free parameters across the five (MACD 3, Squeeze 5, Price Action ~2, ADX 2, SuperTrend ~4). At three settings each that is ~43 million combinations – one will always look spectacular on any dataset. Per Finding 15, a method whose outcome range exceeds its claimed edge is not a strategy. So ADX was tested ALONE, swept, against the Finding 11 benchmark.

Evidence (adx_gate_test.py, 2017-2026, shares, $0.01/side, buy-close/ sell-open): gate the night trade on ADX instead of close > SMA200.

symbol 200SMA total best of 6 ADX settings
QQQ 208% 87%
SMH 858% 304%
SOXL 924% 280%
TQQQ +38% -77% (all six negative)
SPY 113% 58%
IWM 121% 55%

6 symbols x 3 ADX periods x 2 thresholds = 36 cells. ZERO beat the 200SMA. Swept, not single-point, so this is not a knife-edge result.

  • The predicted defect held: ADX measures trend STRENGTH, not DIRECTION. A high ADX in a bear market is a strong downtrend – the worst time to hold overnight. TQQQ ADX(14)>20 = -87% total, 2022 -60%: the filter waves you into the decline. Adding +DI > -DI improves drawdown (TQQQ -59% vs -91%) but never rescues return. Direction has to come from somewhere and the SMA supplies it better.
  • TQQQ is the clearest case: the 200SMA turns it from -72% to +38%; every ADX variant leaves it -77% to -87%. ADX fails at precisely the hole the SMA plugs.

The tempting cell that does NOT replicate. 200SMA AND ADX<20 (gating for CHOP rather than trend) looked excellent on TQQQ – +174% vs +38%, maxDD -24% vs -74%, all three splits positive – with a plausible story attached (overnight drift is a passive premium harvest, so calm regimes should suit it). Against SMA-alone per symbol: QQQ better, SMH better, TQQQ much better, SOXL worse, SPY worse, IWM worse. Three up, three down = noise wearing a narrative. Chasing it would be Finding 3’s +145% mirage repeated. Not pursued.

Verdict: the Finding 11 200SMA gate survives its first real challenge. That matters more than the negative – the gate has now been tested against an alternative, not merely found to work.

Methodological note (the transferable part): the reason this question could be answered at all is that it was reduced to one variable, one benchmark, a swept parameter space, and an outcome that could come back “no.” The 43-million-combination version cannot produce that answer, which is exactly why it would have felt more promising.


Meta-lesson (2026-07-13): recency + intuition vs. the decade

Three ideas in one day felt right in the vivid moment and needed the full decade to correct: the volume gate (+145% -> one-window mirage), the gap-down put instinct (-> gap-downs fade, wrong on average), and scale-out (-> real but tail/regime- dependent, not universal). The user’s pattern-recognition was genuinely good each time; the discipline that matters is testing the instinct honestly and letting the data adjust the conclusion – then forward-paper-testing anything that survives, never wiring a backtest straight to live money.


Meta-lesson (2026-07-26): the constraint is capital, and the scoreboard is after-tax

Two things reframed the whole program on 2026-07-26:

1. Most of this research has been optimizing the wrong variable. The goal was stated as “~1% a day, or ~$30-40 a day.” 1%/trading-day compounds to 12.4x a year and does not exist. But the dollar target has a second lever: at the gated-night SMH rate it needs ~$41k of capital ($31k on SOXL, $87k on QQQ, $138k on SPY) – versus $2.76/day on $3,400. The binding constraint is account size, not strategy discovery. $500/mo reaches ~$31k in about 4 years at a sober 12%; $1,000/mo in about 2. That is a bigger lever than any entry signal found in ten findings.

2. Ten findings of mostly-rejections is the return, not a failure. The volume gate, the gap-down put, the credit spread, the futures-open trade and the 1DTE ORB would each have cost real money live. The program has been paid in losses avoided, and that total exceeds any edge it would plausibly have found. Finding 13 is the same lesson arriving in its most persuasive costume yet: a genuine, fully-reconciled, +1,959% brokerage screenshot that is still a coin flip. Verified != repeatable.

Standing rules added this day: (a) every strategy comparison reports an after-tax number (Finding 12); (b) any strategy that ever does clear the bar goes in the Roth, not the taxable account; (c) “someone really did it” is answered by checking what fraction of the P&L came from one decision, not by checking whether the screenshot is real.


Finding 19: Odd-lot tender arbitrage – the mechanic is real, the frequency is ~5 events a year (2026-08-02)

Origin: a marketing post (2026-07-21) for a third-party “Oddly” Claude skill promising ~25% returns scanning SEC filings for odd-lot tender arbitrage. Installing their skill and joining their Discord was ruled a hard NO (supply-chain risk + lead funnel). The mechanic was kept and rebuilt from scratch off EDGAR directly: shared_trading_lib/oddlot_tender_scanner.py.

The mechanic: an issuer self-tender (form SC TO-I) usually grants odd-lot priority – a holder of fewer than 100 shares who tenders ALL of them is bought in full, ahead of everyone else, exempt from proration. Buy 99 shares below the offer price, tender, collect the difference. Upside is capped at the offer price. This is an event trade, not a position that can run.

Measured base rate (12 months, 2025-08-01 -> 2026-08-01, EDGAR quarterly full-index, every SC TO-I filed):

stage count
distinct issuers filing SC TO-I 235
exchange-listed at all ~18
listed common stock with an odd-lot priority clause 10
passed every check (verdict ACTIONABLE) 3
flagged for human read (verdict REVIEW) 2

~85% of SC TO-I filings are non-traded interval funds and private BDCs repurchasing at NAV (A&Q, Carlyle AlpInvest, BlackRock Private Investments, PGIM…). You cannot buy 99 shares of those on an exchange and there is no spread. That single filter removes the overwhelming majority of the feed.

The five real candidates and what they were worth:

ticker filed offer market at filing spread 99 shares cost
MLCI (Mount Logan) 2025-12-29 $9.43 cash $8.08 +16.8% $800
YEXT 2026-02-10 $6.50 cash $5.61 +15.9% $555
EXFY (Expensify) 2026-05-13 $0.98-$1.20 Dutch $1.14 -14% to +5.3% $113
ANEB (Anebulo) 2025-12-22 $3.50 cash $1.72 +103% (REVIEW) $170
OPTU (Optimum Comms) 2026-06-01 $2.50 cash $1.16 +116% (REVIEW) $115

The two triple-digit ones are not parser errors – they are the actual point of the strategy. Both were tiny partial offers (ANEB: 300,000 shares total; OPTU: 120M of a much larger float). The market discounts the stock toward the stub value because ordinary holders get savagely prorated – maybe 10-20% of what they tender is bought. Odd-lot holders are exempt from proration and get 100%. The bigger the proration, the wider the gap, and the more the odd-lot exemption is worth. Verified for OPTU: stock gapped $0.66 -> $1.16 on the 6/1 announcement, traded $1.05-$1.66 for the entire offer window, and never approached $2.50.

Realistic income: 3-5 tradeable events a year at ~$100-800 deployed each. At the ordinary 2-17% spreads that is ~$50-300/yr. If the proration-discount cases are genuinely capturable it is meaningfully more, but that is unproven and is exactly what the paper walk-through exists to test.

The gotcha that was assumed and did NOT show up: the 2026-07-21 note warned that many modern offers restrict odd-lot priority to holders of record before the announcement date, which would disqualify buying in on the news. Across all 10 odd-lot offers in the 12-month sample, zero used a fixed past record date. The universal wording tests ownership at the Expiration Date (“owned beneficially or of record a total of fewer than 100 shares” – Expensify), which you satisfy by buying now. The scanner still classifies the clause on every filing and quotes the sentence verbatim, because the money rides on it.

Real disqualifiers found instead (each one cost a false positive during build):

  1. Wrong security class. National Healthcare Properties (5/2026) tendered for its Series A/B preferred (HTIA/HTIB) at $22.50 while the CIK maps to the common ticker NHP near $14.90 – a fabricated 50% “spread” on a security the offer does not cover. The scanner now reads the tendered security from the offer’s title block and skips anything that is not common stock.
  2. Financing / minimum-tender / MAC conditions. YEXT and ANEB both carried a financing condition; MLCI and OPTU did not.
  3. Going-private intent (ANEB) – delisting risk on any stub left over.
  4. Not all cash – exchange offers hand you paper, not money.

Status: LIVE as an alert-only monitor, no capital committed. Cron 16:25 weekdays, alerts to the stocks Discord channel, oddlot_tenders.csv + oddlot_state.json for the audit trail. House rule stands: the first filing that passes every check gets a full PAPER walk-through of the tender process end to end – broker tender mechanics, odd-lot certification on the Letter of Transmittal, settlement timing – before a single real dollar.

Why it is worth running anyway: it costs nothing to leave on, the downside per event is capped at ~$100-800 of a $3,400 account, and unlike every strategy in Findings 1-18 the edge is structural (a stated contractual priority) rather than statistical. It is also the opposite of the capital constraint in the 2026-07-26 meta-lesson: this one works precisely because the account is small. A large account cannot use it at all.


Finding 20: Perfect stop discipline does not rescue the 30-second scalp (2026-08-11)

This is the counterfactual to Finding 17. That finding decomposed 200 real manual scalps at -$486 as “execution failure ~79%, loss-chasing ~24%, strategy ~0%” – two multi-percent losses on a system designed around +/-0.5%, the signature of a stop that never went on. The implication was that a machine which never forgets the stop would work.

paper_30s_scalper.py was that machine. It ran 2026-07-31 to 2026-08-11 on SOXL, two scenarios, stop enforced on every single poll. It is also negative.

Scenario 1 ($0.25 trail, 3s poll) Scenario 2 ($0.15 trail, 1s poll)
entries 925 1,020
exits via trailing stop 620 (67%) 930 (91%)
exits via the designed signal 306 (33%) 91 (9%)
win rate 12.4% 14.7%
net -$3.32 -$2.56

Scenario 2’s momentum-collapse exit – the actual thesis – fired 9% of the time. It was not running a momentum strategy with a stop. It was running a stop with a momentum entry filter.

The mechanism: the trail is smaller than the noise

Measured on 1,950 one-minute SOXL bars (2026-08-05..11, price ~$133):

median 1-minute high-low range                     $0.485
median move across the real 11.3s quote gap        $0.211   (range ~ sqrt(t))

Scenario 1  $0.25 trail  -- routine 11s noise exceeds it  41% of minutes
Scenario 2  $0.15 trail  -- routine 11s noise exceeds it  71% of minutes

Two independent methods agree: the noise model predicted the $0.15 trail would be exceeded 71% of the time, and the trade log shows it exiting on that trail 91% of the time.

Why a better data feed would not fix it

The script’s own freshness instrumentation reported 5.3 distinct prices/min from yfinance – one new price every ~11 seconds, against a 1-second polling loop. Ten of every eleven polls saw a stale repeat.

But a true 1-second feed only makes the sampled path accurate. The $0.485 median one-minute range is the instrument’s real behaviour, not a sampling artifact. A $0.15 trail is inside that range no matter how often you look.

The generalisable constraint

For a scalp to work, profit target > stop distance > noise at the holding timescale. Over 30 seconds on a 3x leveraged ETF:

  • noise across one quote gap: $0.21
  • noise across one minute: $0.485
  • directional drift capturable in 30 seconds: smaller than either

There is no trail distance satisfying both constraints. It is the timescale, not the tuning. Widening the stop until it survives noise pushes the loss per stop-out past what a 30-second move can pay back.

Both failure modes are the same problem

  • Manual (Finding 17): stop off -> two unprotected losses -> -$486
  • Automated (this finding): stop always on and tight -> 91% noise stop-outs -> also negative

Finding 17 read as an execution problem because the alternative had not been tested. It had been, in effect: the stop distance that survives SOXL’s noise is wider than the profit a 30-second hold can deliver, so tightening it bleeds and loosening it means holding longer – which is a different strategy.

Retired 2026-08-11. Dashboard tab and /api/paper_30s_scalper endpoint removed; paper_30s_scalper.py carries a RETIRED banner and is kept for the data. paper_30s_scalper_trades.csv (3,892 rows) is the evidence and should not be deleted.

Worth reusing: the QUOTE FRESHNESS instrumentation added 2026-08-01. It measured its own data source and reported “only 5.3 distinct prices/min – COARSE (sub-second sampling is fiction)” in plain language, unprompted. Any strategy claiming a sub-minute edge should measure its feed’s actual tick rate before trusting a single result. It diagnosed this before anyone thought to ask.