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/.
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.
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.
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.
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.
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.
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):
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.
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):
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).
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.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.~/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).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 |
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.
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.
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.
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% |
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.
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.
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:
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.
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:
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.
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:
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.
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).
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.
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 |
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.
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:
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.
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.
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.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.
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.
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.
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):
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.
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.
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.
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.
For a scalp to work, profit target > stop distance > noise at the holding timescale. Over 30 seconds on a 3x leveraged ETF:
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.
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.