Quant research project

AXIOM

I tried to build a daily stock-prediction signal, caught the first version leaking, and rebuilt it carefully. This page shows what's left after a clean test: a small signal that loses to just holding the market.

Net Strategy Return
+1.84%
Fixed logistic signal after cost and slippage.
Strategy Sharpe
0.097
Below buy-and-hold.
Buy-Hold Return
+64.20%
Equal-weight baseline over same dates.
Spearman IC
0.0073
Small positive rank signal.
Deflated Sharpe
-0.707
Adjusted for 41 lower-bound trials.
Turnover
10.72%
Average daily turnover after thresholding.
The question

Can daily price and volume data beat buy-and-hold?

Short version: the model finds a tiny positive signal, but it loses to just holding the same names and doesn't survive a Sharpe adjustment for how many things I tried.

Method Total Return Ann. Sharpe Max Drawdown Interpretation
Fixed logistic signal, net +1.84% 0.097 -10.21% Real but tiny; barely positive after costs.
Equal-weight buy-hold +64.20% 0.646 -14.95% Just holding the names wins easily.
Zero-skill random, net -15.74% -3.499 -16.42% Trades at the same rate; shows the cost drag.
How it's validated

What keeps the test clean

The harness is built to fail the strategy if it can. Every transform is fit inside the training fold, trades lag the signal by a day, and the baselines use the same data the signal does.

Fold-local preprocessingStandardScaler is inside the sklearn pipeline and fit only on training slices.
Purged walk-forward CV504-day minimum train windows, 63-day validation windows, 5-day purge, and 5-day embargo.
Execution lagSignals use close[t] information; fills occur at open[t+1] with exit at close[t+1].
Cost model5 bps transaction cost plus 5 bps slippage per side, applied to active positions.
DiagnosticValue
IC t-stat2.19
Active hit rate53.47%
Active fraction5.36%
Configuration lower bound41
DSR probability1.79e-235
Charts

What the plots show

These are the three plots I actually care about: does it beat the baselines, does a higher score mean a higher return, and does the signal hold up over time.

Equity curves for strategy, buy-hold baseline, and random baseline
Performance and drawdown. The signal ends slightly positive, but buy-and-hold runs away with it, and the drawdown panel shows the small return isn't buying a better risk profile.
Bar chart of next-day return by signal score decile with hit-rate line
Score vs. return. The top decile has the best next-day return, but the middle buckets are noisy — a weak signal, not a tradable one.
Rolling IC and trading intensity over time
Stability over time. Rolling IC drifts around zero while turnover spikes early — not steady enough to lean on.
The audit

Why the old numbers can't be trusted

I kept the earlier experiments because they show how good-looking metrics come out of a narrow ticker list, same-bar trades, and trying a lot of configs.

Selection biasThe old runs used four hand-picked tickers, or just PLTR.
LeakageEarly scripts fit scalers and thresholds on the full dataset before splitting.
ExecutionThe fixed harness trades next-day and pays real costs and slippage.