← Research and backtests

ML day trader

Development period: 2017-01-03 → 2022-12-30 (6.0 years) · SPY and QQQ in 30-minute blocks from 10:00, out by the close · retrained every month · 1 bp cost per dollar traded · Holdout (2023 to today) is still locked and unseen.

Bottom line

6 variants tried so far (monthly and intraday together), so a strategy needs t ≥ 2.6 against a risk-matched SPY to pass. The ultra-risky slot has no drawdown limit.

Scorecard

CAGRSharpeMax drawdownTurnover / yrExcess vs risk-matched SPY / yrt-stat vs risk-matched SPYNeeded tDrawdown limitResult
Day trader (ridge)1.9%0.12-17%24833%-4.1%-1.02.6-100%✗ FAIL
Day trader (gbm)0.5%-0.01-22%52136%-6.4%-1.52.6-100%✗ FAIL
SPY, daytime only-4.0%-0.31-30%50400%-12.3%-3.1——reference
Last-half-hour momentum-3.6%-1.29-23%27570%-6.9%-3.8——reference
Buy & hold SPY11.3%0.58-34%0%————reference

SPY, daytime only holds SPY from 10:00 to the close every day and nothing overnight, the simplest possible day trade. Last-half-hour momentum is a published intraday pattern: if SPY is up from yesterday's close to 10:00, hold it for the final 30 minutes.

Growth of $100 for each strategy, log scale
Drawdowns for each strategy

Trading activity

Day trading lives or dies on the average gain per trade versus the cost per trade. A block's gain is before costs; each trade (buy or sell) costs 1 bp.

Trades / dayTime in marketWin rate (blocks held)Avg gain per block held (bps)Cost / day (bps)
Day trader (ridge)1.020%54.0%+0.591.0
Day trader (gbm)2.123%52.7%+0.732.1
SPY, daytime only2.0100%52.4%+0.022.0
Last-half-hour momentum1.15%46.6%-1.481.1

How much do trading costs matter?

The same trades, charged 0, 1 and 3 bps per dollar traded.

CAGR @ 0 bpsCAGR @ 1 bpsCAGR @ 3 bpsSharpe @ 0 bpsSharpe @ 1 bpsSharpe @ 3 bps
Day trader (ridge)4.5%1.9%-3.0%0.400.12-0.44
Day trader (gbm)5.9%0.5%-9.5%0.47-0.01-0.97
SPY, daytime only1.0%-4.0%-13.2%0.05-0.31-1.05
Last-half-hour momentum-0.9%-3.6%-8.8%-0.55-1.29-2.75

Can the model predict anything?

IC (information coefficient): the rank correlation between the predicted and actual next-30-minute returns, averaged by month. 0 means no skill; for intraday returns, even +0.02 to +0.05 that holds up would be a real, useful signal. Direction right: how often the predicted sign (up or down) was correct; 50% is a coin flip.

Avg monthly ICIC t-statDirection right
Day trader (ridge)+0.009+1.450.5%
Day trader (gbm)+0.025+3.651.4%

What the main (ridge) model learned

Average weight on each feature across the monthly retrains, in bps of predicted 30-minute return per standard deviation of the feature.

Average weight (bps)Meaning
Return, last 5 minutes-0.625predicts lower returns when this is high
Overnight gap (today's open vs yesterday's close)+0.595predicts higher returns when this is high
Yesterday's return-0.502predicts lower returns when this is high
Volatility, yesterday+0.327predicts higher returns when this is high
Return, last 15 minutes+0.317predicts higher returns when this is high
Return since today's open+0.207predicts higher returns when this is high
Volume, last 30 min vs usual for this time-0.192predicts lower returns when this is high
Return over the previous 5 days+0.172predicts higher returns when this is high
Return, last 30 minutes-0.085predicts lower returns when this is high
Volatility, last 30 minutes-0.080predicts lower returns when this is high
QQQ rather than SPY-0.050predicts lower returns when this is high
Time of day (block 1-12)-0.032no real effect

Year by year

Blue = up, red = down; deeper shade = bigger move.

Day trader (ridge)Day trader (gbm)SPY, daytime onlyLast-half-hour momentumBuy & hold SPY
20172.0%0.4%3.4%-3.7%21.7%
20180.2%-16.6%-21.9%-4.8%-4.6%
20193.4%1.5%8.0%-0.2%31.2%
202019.0%1.9%2.8%3.0%18.3%
20212.1%7.8%-1.5%-11.2%28.7%
2022-12.8%10.4%-11.1%-4.0%-18.2%

Every variant tried

Shared with the monthly ML strategies. Never delete rows.

first_triedconfig
2026-10-12ML moderate | ridge | top 3 | features v1
2026-10-12ML safe | ridge | top 3 | 200-day crash filter | features v1
2026-10-12ML moderate | gbm | top 3 | features v1
2026-10-12ML safe | gbm | top 3 | 200-day crash filter | features v1
2026-10-12Day trader | ridge | SPY+QQQ 30-min blocks | enter above round-trip cost | features intraday-v1
2026-10-12Day trader | gbm | SPY+QQQ 30-min blocks | enter above round-trip cost | features intraday-v1

How it works