Day trader that learns from scratch
Bottom line
- ✗ FAIL Started from scratch in January 2017: 0.5%/yr vs 11.3% for SPY · worst drop -17% · 1.2 trades a day · t = -1.4, needed 2.7 (7 variants tried).
- It learns, slowly. On day 1 its beliefs are off by 4.0 bps per weight on average; after a year, by 0.72. Trades per day fall from 3.9 to 1.8 as it stops acting on noise.
Scorecard
| CAGR | Sharpe | Max drawdown | Turnover / yr | Trades / day | Excess vs risk-matched SPY / yr | t-stat vs risk-matched SPY | Needed t | Drawdown limit | Result | |
|---|---|---|---|---|---|---|---|---|---|---|
| Day trader, from scratch | 0.5% | -0.02 | -17% | 30841% | 1.2 | -5.6% | -1.4 | 2.7 | -100% | ✗ FAIL |
| Day trader, full history | 1.9% | 0.12 | -17% | 24833% | 1.0 | -4.1% | -1.0 | — | — | reference |
| Buy & hold SPY | 11.3% | 0.58 | -34% | 0% | 0.0 | — | — | — | — | reference |
Full history is the earlier day trader, which starts with a year of data and retrains monthly. Same features, same trading rule.
The learning curve
Sixty fresh starts, one at the beginning of every month from 2017 to 2021, each followed for 250 trading days. The bottom panel is the normal range the dashboard shades for the live account.
Watching its beliefs settle
The continuous run's weights at each checkpoint (bps of predicted 30-minute return per typical move in the feature), next to what a model trained on all six years settles on. Early weights are big and often the wrong sign; they shrink toward the real, small effects.
| After 1 week | 1 month | 3 months | 1 year | 6 years | Six-year model | |
|---|---|---|---|---|---|---|
| Overnight gap (today's open vs yesterday's close) | -0.62 | -0.23 | -0.67 | +0.02 | +0.95 | +0.90 |
| Return, last 5 minutes | +3.26 | -0.29 | -0.20 | -0.13 | -0.87 | -0.85 |
| Return, last 15 minutes | -1.80 | -1.24 | -0.56 | -0.25 | +0.95 | +0.85 |
| Yesterday's return | -0.27 | +0.14 | -0.42 | -0.62 | -0.59 | -0.55 |
| Volatility, yesterday | +1.90 | +1.07 | +0.60 | -0.29 | +0.65 | +0.48 |
| Return since today's open | +0.31 | -0.89 | -0.12 | +0.20 | +0.42 | +0.37 |
| Return, last 30 minutes | -0.40 | +0.87 | +0.65 | +0.37 | -0.40 | -0.35 |
| Return over the previous 5 days | +0.20 | +0.77 | +0.60 | +0.23 | +0.19 | +0.15 |
| Volume, last 30 min vs usual for this time | -0.26 | +0.14 | +0.14 | -0.10 | -0.08 | -0.10 |
| QQQ rather than SPY | -0.84 | -0.36 | -0.09 | +0.04 | -0.09 | -0.09 |
| Volatility, last 30 minutes | -0.40 | -0.71 | -0.01 | +0.63 | -0.17 | -0.03 |
| Time of day (block 1-12) | +0.78 | +1.16 | +0.55 | +0.08 | -0.06 | +0.01 |
How it works
- On its first morning the model trains on the 5 trading days before it (about 120 examples: 12 half-hours × 2 ETFs × 5 days).
- Every morning after that it retrains on everything since, about 24 more examples a day, and never forgets anything.
- Same features, trading rule, costs and timing as the full-history day trader; see the day trader report.
- The fresh starts overlap in time, so they show the range of experiences, not independent results. Past results are not a forecast.