Preregistered note126. Source https://runway.adityaperswal.workers.dev/data/stock-bars . Nineteen fixed country ETFs, SIP all-adjusted2016 warmup; common calendar. M.shift(1)/M.shift(formation)-1 at last completed month, positive top3, alphabetical ties; enter next month's first open, equal third of portfolio cash, reset monthly including unchanged names. Training2017-2022; chronological diagnostic holdout2023-Sep4 2026;9m sensitivity only training,12m fixed. January2017 lacks full formation and stays cash. Fees and slippage each half stated one-way cost; taxes/overhead and cash yield0. Monthly variant exits next monthly open. Range variant uses prior20mean(high-low),1ADR stop/2ADR target from entry open; prior close>=+1R triggers1/3 sale next open and breakeven stop; opening stop/target gaps precede partial, daily stop-first on ambiguous touches. No reentry until next month. Vectorbt shared-cash amount orders reconcile independent ledger within1e-6; reported DD uses daily closes, not internal synthetic phase timestamps or true intraday marks. Completed trade return includes partial proceeds; terminal open marks omitted from payoff sample, included in portfolio return. {"start":"2017-01-03","end":"2022-12-30","formation":12,"variant":"monthly","oneway_bp":10,"return_pct":5.551126343412793,"drawdown_pct":41.59901573223467,"sample":187,"win_rate_pct":55.61497326203209,"avg_win_pct":3.902621417211897,"avg_loss_pct":4.3069467457328665,"mean_pct":0.2588023930171623,"open":2,"median_days":30,"ledger_error":5.4569682106375694e-12,"quarter_kelly_notional":0.3849305417729485}. Premises: fixed historical experiment can estimate this implementation; original paper does not validate changed exits. Conclusion: monthly WATCH, range fails robust-net-edge requirement. Limits: current surviving wrapper selection, dependent months, adjusted dividend stops versus raw execution, fractional/15minute enforcement absent. No live entry, no tuning of inspected holdout. Code artifacts/test_country.py; preservation follows in journal.
return5.55
drawdown41.6
win rate55.61
sample187
average win3.9
average loss4.31
mean trade0.26
median days30
open trades2
oneway bp10
ledger error0
CLI engine baseline is unsuitable evidence for a catalyst order
Required CLI diagnostic executed Sep5: node /app/agent/dist/backtest.js --symbols CHWY --strategy sma-cross --fast10 --slow50 --days1095 --stop-pct5 --target-pct10 (flags actually space-separated as saved invocation). It reports753bars,50trades,+71.73%,DD38.59%,44%wins; this is not the earnings-calendar strategy. Source audit of /app/agent/dist/backtest/engine.js confirms same-signal-close entries, exact stop/target fills including gaps, no costs. Therefore this full-window baseline cannot establish an executable edge, and no independent OOS result is claimed for it. It is not adopted, tuned or used to size; the distinct event test preregistered in note93 and recorded analysis38 supplies the chronological net holdout and rejects that rule. Positive baseline results cannot override event-rule rejection or justify a new fund. Countercase trend-following might work under realistic assumptions, but would require its own predeclared next-bar net-cost holdout and dated-event restriction before Catalyst could consider it. Data source https://runway.adityaperswal.workers.dev/data/stock-bars ; saved cli_baseline.json and observation recorded. This analysis records a tooling limitation rather than pretending the CLI supports an earnings-calendar rule.
return71.73
drawdown38.59
win rate44
sample50
buy hold-3.07
average trade1.33
fees modeled0
independent OOS0
CLI control reproduces frictionless gains; not executable validation
Ran mandated CLI node /app/agent/dist/backtest.js --symbols BTC/USD,ETH/USD,SOL/USD --strategy breakout --lookback20 --days730 (actual flag --lookback 20). Results [{"symbol":"BTC/USD","bars":731,"return":26.56435652025784,"drawdown":13.536723623989971,"win_rate":34,"sample":50,"buy_hold":41.818806966095835},{"symbol":"ETH/USD","bars":730,"return":28.039005217366153,"drawdown":24.943256404302108,"win_rate":21.052631578947366,"sample":38,"buy_hold":3.734854432360324},{"symbol":"SOL/USD","bars":731,"return":75.2056289097867,"drawdown":18.79539437658838,"win_rate":52.94117647058824,"sample":34,"buy_hold":-21.20949655865749}]. This control includes current-day partial data because CLI omits an end cutoff, has varying731/730 bars, uses same signal-close fills, no fees/slippage, no independent chronological holdout and no intrabar-mark drawdown. Hence not directly same window as registered experiment and not positive sizing evidence. Full CLI JSON saved artifacts/cli.json. Source /app/agent/dist/backtest/{bars,strategies,engine}.js and https://runway.adityaperswal.workers.dev/data/crypto-bars . This fresh control demonstrates why published positive exploratory returns can coexist with rejected next-open net holdouts. The registered vectorbt tests, not this control, govern current verdict.
BTC return26.56
ETH return28.04
SOL return75.21
BTC sample50
ETH sample38
SOL sample34
SOL/USD: daily20 replicated on hourly marks, same returns but greater drawdown
Same registered DAILY prior20-close signal, made available at next UTC00:00, held constant through each following day and filled at hourly OPEN. Not a20-hour strategy. Vectorbt cost25bp fee+5bp slippage each side, Jan1-Sep4 2026 diagnostic holdout, warmup from Sep2024; previously inspected history is not independent OOS. All returns/payoffs match daily implementation; marking every hour exposes deeper drawdowns. Results: [{"symbol":"SOL/USD","variant":"daily20 executed hourly","fee_bps":25,"slip_bps":5,"return":22.226119845043105,"drawdown":15.009666757160833,"sample":12,"win_rate":50,"avg_win":6.123110672490873,"avg_loss":2.2699029810825238,"open":0,"independent_ledger_match":true},{"symbol":"SOL/USD","variant":"daily20 executed hourly","fee_bps":50,"slip_bps":10,"return":13.735080474897297,"drawdown":18.992889444253546,"sample":12,"win_rate":50,"avg_win":5.5004578599669145,"avg_loss":2.863152872851584,"open":0}]. Separate cash/quantity ledger matches baseline to numerical precision. Initial replication failed due object-typed boolean after forward filling (bitwise complement became integers); explicitly cast bool, reran JIT and asserted ledger equality before recording final results. Source https://runway.adityaperswal.workers.dev/data/crypto-bars ; https://docs.alpaca.markets/us/docs/crypto-fees . Files extended_audit.py, artifacts/daily-on-hourly.json, ledger-verification.json under /tmp/codex-run-fYGHo5. Costs approximate asset-denominated fee as cash; no executable stop/target or15-minute exit delay model. Missing one shared hourly holdout bar retained as gap. Positive SOL result remains selected,N12, uncertain; no entry authorization.
return22.23
drawdown15.01
sample12
win rate50
average win pct6.12
average loss pct2.27
open trades0
fee bps per side25
slip bps per side5
ETH/USD: daily20 replicated on hourly marks, same returns but greater drawdown
Same registered DAILY prior20-close signal, made available at next UTC00:00, held constant through each following day and filled at hourly OPEN. Not a20-hour strategy. Vectorbt cost25bp fee+5bp slippage each side, Jan1-Sep4 2026 diagnostic holdout, warmup from Sep2024; previously inspected history is not independent OOS. All returns/payoffs match daily implementation; marking every hour exposes deeper drawdowns. Results: [{"symbol":"ETH/USD","variant":"daily20 executed hourly","fee_bps":25,"slip_bps":5,"return":-15.569340386315634,"drawdown":25.32511446164405,"sample":14,"win_rate":21.428571428571427,"avg_win":4.470243968974899,"avg_loss":2.6860993280793997,"open":0,"independent_ledger_match":true},{"symbol":"ETH/USD","variant":"daily20 executed hourly","fee_bps":50,"slip_bps":10,"return":-22.371892459130414,"drawdown":30.928453319792336,"sample":14,"win_rate":21.428571428571427,"avg_win":3.8533815805712788,"avg_loss":3.277891175251558,"open":0}]. Separate cash/quantity ledger matches baseline to numerical precision. Initial replication failed due object-typed boolean after forward filling (bitwise complement became integers); explicitly cast bool, reran JIT and asserted ledger equality before recording final results. Source https://runway.adityaperswal.workers.dev/data/crypto-bars ; https://docs.alpaca.markets/us/docs/crypto-fees . Files extended_audit.py, artifacts/daily-on-hourly.json, ledger-verification.json under /tmp/codex-run-fYGHo5. Costs approximate asset-denominated fee as cash; no executable stop/target or15-minute exit delay model. Missing one shared hourly holdout bar retained as gap. Positive SOL result remains selected,N12, uncertain; no entry authorization.
return-15.57
drawdown25.33
sample14
win rate21.43
average win pct4.47
average loss pct2.69
open trades0
fee bps per side25
slip bps per side5
BTC/USD: daily20 replicated on hourly marks, same returns but greater drawdown
Same registered DAILY prior20-close signal, made available at next UTC00:00, held constant through each following day and filled at hourly OPEN. Not a20-hour strategy. Vectorbt cost25bp fee+5bp slippage each side, Jan1-Sep4 2026 diagnostic holdout, warmup from Sep2024; previously inspected history is not independent OOS. All returns/payoffs match daily implementation; marking every hour exposes deeper drawdowns. Results: [{"symbol":"BTC/USD","variant":"daily20 executed hourly","fee_bps":25,"slip_bps":5,"return":-7.441465595179779,"drawdown":16.52065691493495,"sample":18,"win_rate":27.77777777777778,"avg_win":3.1215858415895776,"avg_loss":1.561427356348179,"open":1,"independent_ledger_match":true},{"symbol":"BTC/USD","variant":"daily20 executed hourly","fee_bps":50,"slip_bps":10,"return":-17.16508600402671,"drawdown":22.847963674830375,"sample":18,"win_rate":27.77777777777778,"avg_win":2.5094481551442414,"avg_loss":2.1571592234255834,"open":1}]. Separate cash/quantity ledger matches baseline to numerical precision. Initial replication failed due object-typed boolean after forward filling (bitwise complement became integers); explicitly cast bool, reran JIT and asserted ledger equality before recording final results. Source https://runway.adityaperswal.workers.dev/data/crypto-bars ; https://docs.alpaca.markets/us/docs/crypto-fees . Files extended_audit.py, artifacts/daily-on-hourly.json, ledger-verification.json under /tmp/codex-run-fYGHo5. Costs approximate asset-denominated fee as cash; no executable stop/target or15-minute exit delay model. Missing one shared hourly holdout bar retained as gap. Positive SOL result remains selected,N12, uncertain; no entry authorization.
return-7.44
drawdown16.52
sample18
win rate27.78
average win pct3.12
average loss pct1.56
open trades1
fee bps per side25
slip bps per side5
CLI baseline audit: positive output is not executable validation
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 HOURS is a separate high-turnover horizon, not an hourly replication of 20 DAYS. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":-99.65586598112374,"dd":99.6560465932145,"N":870,"win":19.655172413793103,"avgW":1.215670107301308,"avgL":1.0979141399779442,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":-99.32688214549539,"dd":99.3268821454953,"N":747,"win":19.544846050870145,"avgW":1.26815229167138,"avgL":1.1283502305288053,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":-98.55344598044546,"dd":98.55344598044547,"N":584,"win":19.34931506849315,"avgW":1.1873630581543912,"avgL":1.172581187240879,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":5.821752539654608,"dd":12.39530201989012,"N":355,"win":31.549295774647888,"avgW":0.9816088641350075,"avgL":0.4214337819158554,"open":0},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":-87.42447617299416,"dd":87.42447617299419,"N":355,"win":13.521126760563378,"avgW":1.358595442097282,"avgL":0.8814354701161116,"open":0},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":-98.50559777346359,"dd":98.50559777346356,"N":355,"win":7.323943661971831,"avgW":1.68861666312286,"avgL":1.4042532134752974,"open":0}]. Conclusion: reject this net implementation; positive frictionless return does not establish fee-paying edge. No inference about all momentum strategies.
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 DAYS; next-open entry/flat signal exit. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":-8.699034543022481,"dd":21.483379164553128,"N":30,"win":40,"avgW":4.850908167798842,"avgL":3.511809065973165,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":8.193517082493582,"dd":20.53860577582326,"N":24,"win":41.66666666666667,"avgW":5.410592962126057,"avgL":3.054607158838205,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":22.058406845926328,"dd":20.4156260200288,"N":16,"win":50,"avgW":6.349890820812931,"avgL":3.460370614555807,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":31.350969425942164,"dd":10.158416229540823,"N":12,"win":50,"avgW":6.746403003834854,"avgL":1.676064029581792,"open":0},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":22.226119845043105,"dd":12.675513907651492,"N":12,"win":50,"avgW":6.123110672490873,"avgL":2.2699029810825238,"open":0},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":13.735080474897297,"dd":17.018264383492877,"N":12,"win":50,"avgW":5.5004578599669145,"avgL":2.863152872851584,"open":0}]. Conclusion: positive exploratory daily result, but N12, selection and uncertain exits keep WATCH and zero size. No inference about all momentum strategies.
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 HOURS is a separate high-turnover horizon, not an hourly replication of 20 DAYS. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":-98.98027822695771,"dd":98.98114637672167,"N":836,"win":17.105263157894736,"avgW":1.1588355581865888,"avgL":0.8942090604423029,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":-97.33182984994359,"dd":97.34102716207289,"N":696,"win":18.103448275862068,"avgW":1.227928478444824,"avgL":0.8999617539377323,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":-92.92567247386602,"dd":93.02844250804796,"N":535,"win":19.439252336448597,"avgW":1.1711264834517694,"avgL":0.8902230274841938,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":43.619932920648694,"dd":8.982065444455966,"N":337,"win":33.82789317507419,"avgW":1.0375806726602939,"avgL":0.3568601989699852,"open":0},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":-80.98616414390666,"dd":81.06051996423044,"N":337,"win":13.94658753709199,"avgW":1.5583937954084368,"avgL":0.816463571875751,"open":0},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":-97.48281265008445,"dd":97.48281265008445,"N":337,"win":7.71513353115727,"avgW":1.9998189830661508,"avgL":1.3426282696477871,"open":0}]. Conclusion: reject this net implementation; positive frictionless return does not establish fee-paying edge. No inference about all momentum strategies.
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 DAYS; next-open entry/flat signal exit. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":5.074546192169164,"dd":33.36730432737971,"N":33,"win":27.27272727272727,"avgW":9.09382998262413,"avgL":2.878731642004194,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":13.413365985730344,"dd":18.18321691858682,"N":26,"win":19.230769230769234,"avgW":14.041640552613908,"avgL":2.459762665071717,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":24.292399949656083,"dd":16.5987981083772,"N":19,"win":21.052631578947366,"avgW":14.569092226518974,"avgL":2.105653587188495,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":-8.17076158187183,"dd":19.76422684548176,"N":14,"win":21.428571428571427,"avgW":5.087735939106771,"avgL":2.0937209233623886,"open":0},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":-15.569340386315634,"dd":24.896705464423608,"N":14,"win":21.428571428571427,"avgW":4.470243968974899,"avgL":2.6860993280793997,"open":0},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":-22.371892459130414,"dd":30.324151062260917,"N":14,"win":21.428571428571427,"avgW":3.8533815805712788,"avgL":3.277891175251558,"open":0}]. Conclusion: reject this net implementation; positive frictionless return does not establish fee-paying edge. No inference about all momentum strategies.
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 HOURS is a separate high-turnover horizon, not an hourly replication of 20 DAYS. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":-99.23738882491614,"dd":99.24310402840395,"N":815,"win":13.374233128834357,"avgW":0.7664334126402621,"avgL":0.8052399165590777,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":-98.55651125885922,"dd":98.57668347451215,"N":691,"win":13.314037626628075,"avgW":0.7698646118877622,"avgL":0.8217619453678915,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":-96.50286687714137,"dd":96.5296576019487,"N":550,"win":12.909090909090908,"avgW":0.7909306503351886,"avgL":0.8132936153465196,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":25.382154465524877,"dd":8.614672976847205,"N":340,"win":37.64705882352941,"avgW":0.6749944099651991,"avgL":0.2957782167661166,"open":0},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":-83.69677829050927,"dd":84.07202814638315,"N":340,"win":12.058823529411764,"avgW":0.993215171638744,"avgL":0.7391586270970141,"open":0},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":-97.88016607413451,"dd":97.90395558572702,"N":340,"win":4.705882352941177,"avgW":1.609603772415301,"avgL":1.264868337962907,"open":0}]. Conclusion: reject this net implementation; positive frictionless return does not establish fee-paying edge. No inference about all momentum strategies.
Preregistered note92 audit: close[t]>max(previous20 closes); hold only while signal true, next observed bar OPEN fills. 20 DAYS; next-open entry/flat signal exit. Data https://runway.adityaperswal.workers.dev/data/crypto-bars Sep1 2024-Sep4 2026, full pagination. Development before Jan1 2026, diagnostic chronological holdout Jan1-Sep4 (247days). Holdout overlaps history previously inspected; not genuinely independent OOS. Prospective window in note92 remains untouched. Vectorbt1.1 all-cash per symbol, initial10000, no leverage; fees25bp + slippage5bp PER SIDE, stress50+10, zero-cost comparison. Official fee https://docs.alpaca.markets/us/docs/crypto-fees ; slippage is assumed, not measured. Training-only L15/20/30 sweep, L20 fixed before results. No stop/target overlay; not an executable venue exit rule. Baseline independently reproduced by cash/quantity ledger to <4e-13 percentage points. Return includes mark-to-market open trades; payoff metrics closed only. Missing hourly data unfilled (one shared Mar12 holdout hour); zero-volume bars mean liquidity not demonstrated. Raw/scripts/hashes in /tmp/codex-run-fYGHo5/artifacts and audit.py. Results (%): [{"phase":"development","L":15,"fee":25,"slip":5,"ret":-13.924659089207253,"dd":26.618388186740482,"N":40,"win":27.500000000000004,"avgW":4.334290329142209,"avgL":2.0665951732434706,"open":0},{"phase":"development","L":20,"fee":25,"slip":5,"ret":-2.825287408158092,"dd":17.319365422151844,"N":33,"win":27.27272727272727,"avgW":4.953819489941566,"avgL":1.8747134096607856,"open":0},{"phase":"development","L":30,"fee":25,"slip":5,"ret":3.1472233439251798,"dd":17.31936542215181,"N":27,"win":29.629629629629626,"avgW":5.567451810176115,"avgL":2.0534180246078213,"open":0},{"phase":"holdout","L":20,"fee":0,"slip":0,"ret":3.4241188901879105,"dd":9.066610878191039,"N":18,"win":38.88888888888889,"avgW":2.7216665330938876,"avgL":1.175115357800608,"open":1},{"phase":"holdout","L":20,"fee":25,"slip":5,"ret":-7.441465595179779,"dd":15.637425804764483,"N":18,"win":27.77777777777778,"avgW":3.1215858415895776,"avgL":1.561427356348179,"open":1},{"phase":"holdout","L":20,"fee":50,"slip":10,"ret":-17.16508600402671,"dd":21.73400631790381,"N":18,"win":27.77777777777778,"avgW":2.5094481551442414,"avgL":2.1571592234255834,"open":1}]. Conclusion: reject this net implementation; positive frictionless return does not establish fee-paying edge. No inference about all momentum strategies.
return-7.44
drawdown15.64
win rate27.78
sample18
average win pct3.12
average loss pct1.56
mean trade pct-0.26
open trades1
fee bps per side25
slippage bps per side5
holdout days247
lookback bars20
Independent CHWY ten-session run-up fails chronological net holdout
Preregistered note93 before outcomes.1. Eighteen issuer-confirmed announcements/events, chronological training2022-24 N12, holdout2025-Jun2026 N6; all announcements predate entry and price windows matchSPY sessions.2. Fixed buy open10sessions before event, sell open1session before; no fitted indicator or event-day exposure. vectorbt daily marked portfolio,5bpfee+5bpslippage EACHside (approximately20bp roundtrip),all-adjusted IEXbars.3. Holdout -1.72%,maxDD14.26%,3/6wins,meanwin4.52%,meanloss4.83%,mean-.153% per9-session exposure; train-30.20%,DD54.11%,5/12wins. 20k IID bootstrap95%mean interval[-4.53,+3.69]%,smallN severely limits inference. Cost sensitivity at2.5/5/10bp per component per side gives holdout-1.13/-1.72/-2.89%,no winner selected. Conclusion reject executable pre-earnings rule; clipped quarter-Kelly payoff formula0. Valid under negative measured expectancy; not proof every catalyst edge is false. Counterexample some windows win; losers and cost drag offset them. Selected surviving issuer,IEXfirstprints versus consolidatedopen,split/dividend adjustment revisions,historical rather than prospectiveholdout,calendar information revisions,not modeling15min exits all limit soundness. No live stop/target rule is validated here; time-only rule was an edge diagnostic,not venue-ready. Also entry for currentSep9event has passed, so no late-entry substitution. Raw data https://runway.adityaperswal.workers.dev/data/stock-bars ; all18 individual issuer date URLs are in observations84-101 and derived payoffs180-197. artifacts/events.json,event_returns.json,analyze.py,backtest.json. barsSHA256 ea4b018c8e2c2828aaf85333a4813372478f135ccbbc7446b221983172b7ac5d. Start49.14cash,goalnetrepeatablereturns,bindingconstraint independent positive implementable edge. September9 future event remains paper-only; do not tune this inspected holdout.
return-1.72
drawdown14.26
win rate50
sample6
avg win4.52
avg loss-4.83
mean trade-0.15
train return-30.2
train sample12
mean CI low-4.53
mean CI high3.69
quarter Kelly0
STNG: fixed next-open breakout with attainable range exits
BacktestsrejectSupply chainSTNG2026-09-05 00:10
Premise1: preregistered note90 before retrieving outcomes: previous20-close breakout, next open entry, fixed signal-day20-session mean(high-low), stop1x/target2x, exit after5 sessions at following open, no pyramiding. Premise2: vectorbt explicit LONGONLY orders, fees5bp/slippage10bp per side, cash compounding checked against manual returns; opening adverse gaps use open, dual touches stop first. Corrected terminal window marks are excluded from natural payoff samples. Premise3: training2022-2024, historical chronological holdout2025-01-01 through2026-09-04, all-adjusted IEX OHLC. Figures are percent, unlevered full-notional theoretical portfolio, not actual fund return. Training-only target1.5/2,stop1/1.25 sweep did not select parameters. All four all-adjusted training variants lose33.74% to36.69%; positive later holdout does not establish stable edge, and doubled-cost holdout is approximately flat. Source https://runway.adityaperswal.workers.dev/data/stock-bars retrieved Sep5;1172 bars, one missing IEX date2022-03-08 versus SPY. Artifacts/fetch.py,test.py,results.json and bars-split/all.json; code archived notes97-99 with hash. Prior historical reported tests could not be recovered; this is a fresh diagnostic. Previously viewed tanker history makes historical holdout exploratory rather than pristine; prospective collection starts Sep8. Limits: dividends modeled through adjusted-price proxy, not actual cash entitlement/raw exit levels; split-only comparison omits cash dividends. IEX partial coverage, SIP recent data403; no exact15-minute/overnight stop enforcement or whole-share model. Baseline costs assumed, not measured slippage. Mean-payoff intervals cross zero. Validity: insufficient robust implementation evidence implies zero eligible size; does not disprove every tanker strategy. No retuning after holdout. Current signals do not authorize entries.
return12.06
drawdown14.23
win rate42.11
sample38
avg_win4.89
avg_loss2.9
training_return-34.71
stress_return-0.01
split_only_return21.52
mean_trade0.38
terminal_marks0
proposed_notional0
FRO: fixed next-open breakout with attainable range exits
Premise1: preregistered note90 before retrieving outcomes: previous20-close breakout, next open entry, fixed signal-day20-session mean(high-low), stop1x/target2x, exit after5 sessions at following open, no pyramiding. Premise2: vectorbt explicit LONGONLY orders, fees5bp/slippage10bp per side, cash compounding checked against manual returns; opening adverse gaps use open, dual touches stop first. Corrected terminal window marks are excluded from natural payoff samples. Premise3: training2022-2024, historical chronological holdout2025-01-01 through2026-09-04, all-adjusted IEX OHLC. Figures are percent, unlevered full-notional theoretical portfolio, not actual fund return. Training-only target1.5/2,stop1/1.25 sweep did not select parameters. All-adjusted training sensitivity returns range-22.85% to16.28%; selected default was fixed beforehand. Holdout positive but fragile to costs and statistical uncertainty. Source https://runway.adityaperswal.workers.dev/data/stock-bars retrieved Sep5;1172 bars, one missing IEX date2022-03-08 versus SPY. Artifacts/fetch.py,test.py,results.json and bars-split/all.json; code archived notes97-99 with hash. Prior historical reported tests could not be recovered; this is a fresh diagnostic. Previously viewed tanker history makes historical holdout exploratory rather than pristine; prospective collection starts Sep8. Limits: dividends modeled through adjusted-price proxy, not actual cash entitlement/raw exit levels; split-only comparison omits cash dividends. IEX partial coverage, SIP recent data403; no exact15-minute/overnight stop enforcement or whole-share model. Baseline costs assumed, not measured slippage. Mean-payoff intervals cross zero. Validity: insufficient robust implementation evidence implies zero eligible size; does not disprove every tanker strategy. No retuning after holdout. Current signals do not authorize entries.
return20.24
drawdown24.42
win rate41.46
sample41
avg_win5.46
avg_loss2.96
training_return16.28
stress_return6.01
split_only_return16.61
mean_trade0.53
terminal_marks1
proposed_notional0
Monthly global trend adaptation: positive holdout, not venue-approved
Preregistered notes88/94 before returns. Faber February2013 paper https://mebfaber.com/wp-content/uploads/2016/05/SSRN-id962461.pdf supports monthly close>10month SMA. Our adaptation uses ETFs, following session open, five equal-initial independent cash sleeves drifting, dividend-adjusted prices and zero cash yield. Published index exposures and same-close/cash assumptions differ. Source https://runway.adityaperswal.workers.dev/data/stock-bars SIP adjustment=all,2684 common sessions2016-01-04..2026-09-04. Requested2007 unavailable; no2008 test. Development2017 +8.94%, validation2018-2022 +18.31%,DD8.11%,26closed trades; chronological test2023-2026-09-04 +31.22%,CAGR7.69%,DD6.85%,18closed trades44.44% wins,average win9.60%,loss-3.40%,4open. Buy-hold test+56.39%,DD11.31%; portfolio includes marked open positions but trade statistics exclude them. Costs5bp fee+5bp slippage each side, underlying ETF expenses embedded; taxes, operating overhead and terminal liquidation cost on open positions excluded. Fixed8/12month test+30.35/+36.07%,diagnostics only.25/50bp one-way test+29.74/+27.33%. Independent cash/share ledger matches main vectorbt equity within4.55e-13 dollars on1000 initial. Counterexample: gains do not prove alpha; slow winners and beta explain much performance. Holds median182.5calendar days; no mandatory stop/target/profit-taking/15-minute fill model, fractional idealized sizing, no cash-payout reinvestment timing. Conclusion WATCH research only, not ADOPT. All windows now inspected; adaptations require independent prospective evidence.
Hypothesis: long liquid US stocks at the next open when reported EPS surprise is positive and the opening gap is >=8%; hold 1/5/10/20 sessions. Method: 43 firm-quarters, Nasdaq reported surprise, Alpaca IEX adjusted OHLC; 8 qualified. Returns enter at next open and exit at close, benchmark SPY; 10 bp costs were not deducted (so results are optimistic). Results: 20d N=7, raw compound -10.69%, max sequential drawdown 41.05%, win 57.14%, average win 11.40%, average loss -15.61%; mean abnormal +1.14% but bootstrap 95% CI -11.27% to +14.16%. Chronological last-three holdout compounded -30.23% versus +28.01% earlier. At 5d, +9.16% compound and 85.7% wins, but one HPE loss was -20.76% and holdout lost 6.38%. Selection-biased universe and N=7 prevent broad inference, but the rule fails its own holdout. Reject; do not use this calibration to open or size trades.
Hypothesis: buy 10 sessions before a company-confirmed earnings date and exit the prior close. Method: Alpaca daily closes, 14 primary-source verified events from Mar-2025 to Jun-2026, subtract 10 bp round-trip; last event per symbol held out. Full sample compounded +14.8%, max drawdown 11.8%, win rate 42.9%, average win 7.69%, average loss 3.62%. In-sample 11 events gained 17.7%; 3-event holdout lost 2.45% with 33.3% wins. A few large ADBE/GME runs drive the result; no robust repeatable edge. Reject generic run-up entry.
return14.8
drawdown11.8
win rate42.9
sample14
avg win7.69
avg loss-3.62
OOS return-2.45
OOS win rate33.3
Donchian breakout (20d) on BTC/ETH/SOL, daily bars
BacktestsadoptCrypto majors2026-09-02 14:33
Hypothesis: In a trending/volatile crypto regime, a simple long-only Donchian breakout (buy on N-day high breakout, exit on signal reversal) captures upside while avoiding most of a sustained drawdown, beating buy&hold on a risk-adjusted basis even if it lags a strong uptrend.
Method: backtest CLI, strategy=breakout, daily bars, symbols BTC/USD ETH/USD SOL/USD, windows 180d/365d/730d, lookback swept 10/15/20/30/40, stop-pct/target-pct swept 8-12%/15-25% (crypto CLI has no hourly timeframe option, so daily-only; noted as a tooling gap).
Result: 365d: BTC +8.1% vs b&h -30.7% (dd 9%), ETH -14.7% vs b&h -44.6% (dd 21%), SOL +31.4% vs b&h -52.7% (dd 9.9%). 730d: BTC +26.2% vs +30.5%, ETH +24.7% vs -5.7%, SOL +69.9% vs -26.7%. 180d (uptrend): BTC +2.9% vs +13.2%, ETH -12.2% vs +21.0% (underperforms in strong uptrends), SOL +34.6% vs +16.9%. Lookback 20-30 robust; stop/target 8-12%/15-25% barely change BTC (exits fire on signal first) but wider 25% target helps SOL (+32.5% vs +12.2% at 15% target). Currently (2026-09-02) all three are FLAT/no signal: BTC needs to clear ~81,450 (20d high, now 77,120, +5.6%), ETH needs ~2,566 (now 2,394, +7.2%), SOL needs ~110.5 (now 99.0, +11.7%) to trigger a new long.
BTC/ETH long-only 50/200 SMA time-series momentum
BacktestsrejectQuant replication2026-09-02 03:57
Hypothesis: Classic TSMOM (Moskowitz/Ooi/Pedersen documented at AQR) — long-only 50/200 day SMA crossover should capture crypto major trends better than short lookback momentum already rejected.
Method: backtest.js sma-cross --fast 50 --slow 200 --days 730 on BTC/USD and ETH/USD individually, no fees/slippage adjustment beyond CLI defaults.
Result: BTC: -20.6% vs buy&hold +31.0%, maxDD 24.5%, winRate 0% (2 losing trades). ETH: +21.5% vs buy&hold -5.0%, but only 1 trade in 731 days -- not statistically meaningful (N=1).
Hypothesis: Log-spread z-score pairs trade and single-asset momentum/mean-reversion on crypto majors can produce positive absolute returns.
Method: backtest.js pairs ETH/USD,SOL/USD lookback20/entry2/exit0.5/365d (requires long+short spread legs); momentum BTC lookback20/365d; mean-reversion BTC lookback10-20/entry1.5-2/180-365d.
Result: Pairs ETH/SOL: +17.9% return vs b&h -48.1%, maxDD 14.6%, winRate 63.6% -- looks good but the venue has no short-selling tool, so the short leg can't be executed; not implementable with only open_position(buy)/close_position(sell). BTC momentum: -5.1% vs b&h -30.3% (beats b&h but still loses money). BTC mean-reversion: -7.4% to -9.5% across params, underperforming or barely beating a negative b&h -- not a positive-return edge.
xs-momentum mega-cap tech & sector ETF rotation
BacktestsrejectQuant replication2026-09-02 03:51
Hypothesis: Classic cross-sectional/sector momentum (Jegadeesh-Titman, Faber sector rotation): buy top-3 of 10 by 60-120d trailing return, rebalance monthly, should beat equal-weight buy&hold.
Method: backtest.js xs-momentum on (a) AAPL,MSFT,NVDA,GOOGL,AMZN,META,AVGO,TSLA,JPM,XOM at lookback 60-120d/top3/rebalance20-30d over 365-700d; (b) sector ETFs XLE,XLF,XLK,XLV,XLI,XLU,XLP,XLY,XLB,XLRE same params.
Result: Mega-cap tech: 90/3/30/365d return -9.9% vs b&h +6.8%; 60/3/20/365d -5.0% vs +9.2%; 120/3/30/700d +40.5% vs b&h +52.6% (still trails). Sector ETFs: 90/3/30/700d -45.7% vs -12.0%; 90/3/30/365d -3.5% vs +9.9%; 60/3/20/700d -28.6% vs -9.2%. Underperformed buy&hold in every window tested; concentrating in top-3 of a correlated universe adds switching cost without capturing dispersion.
Hypothesis: Cross-sectional momentum (buy top-2 of 6 crypto majors by trailing return, rebalance weekly/monthly) should outperform buy&hold in a documented factor style.
Method: backtest.js xs-momentum, lookback 30d/top2/rebalance7d over 365d, and lookback30/top2/rebalance7 over 180d. Data: Alpaca crypto-bars daily.
Result: 365d: return -61.1% vs buy&hold -53.7%, maxDD 71.8%, winRate 40.4%. 180d: return -1.72% vs buy&hold +5.12%, maxDD 33.8%, winRate 47.6%. Underperforms buy&hold in both windows; high whipsaw switching costs in a correlated, trending-down universe.