Alpha Builder / research notebook 01

Can a price signal beat random ranks?

Synthetic data · no market performance claims

We compare a 28-day price signal with random ranks on unseen data, using parameters chosen on past data and the same execution delay and costs.

Final holdout: price signal -1.62% versus random ranks -1.31%. This fixture does not support the hypothesis.

20 fictional assetsDaily calendar · 2022–2024
12 months → 3 monthsRolling train / test windows
1 close execution delay10 bps per dollar traded
3% annual short chargeConstant financing proxy

Development · walk-forward

29 Jan 2023 — 30 Sep 2024

Rolling tests show development performance; the final holdout below is evaluated separately. Value of 1.00 after trading and financing costs; each period starts in cash.

Development · walk-forward0.570.770.961.161.35Jan 2023Jun 2023Nov 2023Apr 2024Sep 2024

Hover or tap to inspect. Use ← → when focused; Esc to clear.

PortfolioNet returnDaily Sharpe × √365Max drawdownMean daily turnover
● 28-day price signal+23.37%0.8612.24%8.09%
● Random ranks-35.32%-1.5444.53%8.33%
● Equal-weight long-31.55%-0.7840.21%2.64%

Final holdout · parameters frozen

01 Oct 2024 — 31 Dec 2024

The price signal finished 0.31 percentage points behind random ranks after costs. Value of 1.00 after trading and financing costs; each period starts in cash.

Final holdout · parameters frozen0.870.920.971.021.08Oct 2024Oct 2024Nov 2024Dec 2024Dec 2024

Hover or tap to inspect. Use ← → when focused; Esc to clear.

PortfolioNet returnDaily Sharpe × √365Max drawdownMean daily turnover
● 28-day price signal-1.62%-0.3411.37%7.94%
● Random ranks-1.31%-0.2510.45%7.30%
● Equal-weight long+1.10%0.2913.39%2.55%

What was fitted, and when?

Candidate horizons: 1, 7, 14 and 28 calendar days. The largest absolute training IC selects the holding interval; its sign selects momentum or reversal. Ties choose the first candidate. Training label exits must fall on or before the training end date.

EvaluationTraining windowTest windowHorizonDirectionTest ICIC dates
Fold 12022-01-29
2023-01-28
2023-01-29
2023-04-28
28 daysReversal-0.05461
Fold 22022-04-29
2023-04-28
2023-04-29
2023-07-28
28 daysReversal0.20462
Fold 32022-07-29
2023-07-28
2023-07-29
2023-10-28
28 daysReversal0.01563
Fold 42022-10-29
2023-10-28
2023-10-29
2024-01-28
28 daysReversal-0.02763
Fold 52023-01-29
2024-01-28
2024-01-29
2024-04-28
28 daysReversal0.02662
Fold 62023-04-29
2024-04-28
2024-04-29
2024-07-28
28 daysReversal0.00262
Fold 72023-07-29
2024-07-28
2024-07-29
2024-09-30
14 daysMomentum-0.08649
Holdout2023-10-01
2024-09-30
2024-10-01
2024-12-31
28 daysReversal-0.16063

IC is a cross-sectional Spearman correlation against lagged forward labels. Labels can overlap; these are descriptive diagnostics, never the return stream used for Sharpe.

Methodology you can inspect

Formation and execution

Trailing 28-day price change becomes a same-day cross-sectional z-score. At close d+1 the model trades the score from close d. The first earned return ends at close d+2. Top and bottom fifths target +50% and −50% of post-cost NAV. Holdings drift between scheduled rebalances.

Costs and daily marks

Every day's P&L comes from held notionals times one-day price changes. Turnover is absolute traded notional divided by prior NAV; a full entry is about 100%, a reversal about 200%. The 10 bps assumption combines fees and slippage. Initial trades, rebalances and final liquidation incur costs. Borrowing/funding is a flat 3% annual charge on prior-close short notional divided by 365.

Separation and baselines

Each development fold starts in cash and liquidates at its end. The final three calendar months are excluded from all development fits and gates; their parameters are frozen on the preceding training window. Random ranks are an independent fixed-seed no-skill control. Equal-weight long shows market exposure, with different net exposure from the long/short book. Both use the same horizon schedule, costs and delay.

Interpretation and limits

Sharpe uses daily net returns and √365, with cash earning zero. Neither IC t-statistics nor sample Sharpe establish significance. This small, complete fixed universe omits delistings, liquidity constraints, variable funding, market impact and exchange-specific fills. Missing or invalid prices stop execution. Caller-provided signals still need point-in-time provenance.

Research takeaway: synthetic returns do not establish a real investment edge. This fixture uses independent daily innovations with no planted forecasting edge. A real study needs point-in-time public data, a predeclared hypothesis and a new holdout after any model revision. Repeatedly tuning from this holdout would invalidate its role.

Reproduce and audit

From a checkout with Python 3.11 or 3.12, run ./scripts/demo.sh. It creates an isolated environment, installs locked dependencies and writes this report plus CSV/JSON files. Dependency installation needs internet once; the experiment itself makes no network requests and needs no credentials.

Seed 20260914. Inputs: prices.csv and signals.csv (including the baseline scores). Outputs: daily_returns.csv and results.json. Input SHA-256: de08c5761e9c7ae74f0cd175…. The full hash and engine source hash are in results.json. All displayed figures are generated by the engine.