Skip to content

About

Point-in-time intraday equity stat-arb with market-neutral construction, next-minute execution, cost/latency stress and reproducible backtests.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CrossImpact v5.2

Python 3.11 | 3.12 License: MIT

Results · Research Memo · Model Selection · Validation

Intraday equity price-discovery & market-neutral statistical-arbitrage research engine

CrossImpact studies whether information is absorbed unevenly across a tightly related basket of liquid US growth/technology equities. The project converts that hypothesis into a point-in-time research system: residual features → cross-sectional portfolio construction → next-minute simulated execution → transaction costs → share-level P&L → robustness and model-selection diagnostics.

Research status: development candidate, not a live or analyst-blind OOS track record. All February–July 2026 slices have now been inspected. The annualized figure below is a geometric extrapolation from 106 observed post-warmup sessions.

CrossImpact research summary

60-second result

The publication headline is deliberately unlevered / 1× only.

1× result Value
Observed period 2 Mar–31 Jul 2026
Trading sessions 106
Observed net return +9.27%
Geometric annualized return 23.45%
Annualized daily Sharpe 4.59
Annualized daily volatility 4.62%
Maximum drawdown -1.01%
Net P&L on $1m +$92,672
One-way effective cost assumption 1.0 bp
Explicit leverage multiplier None

The 1× book remains positive under materially worse execution assumptions:

  • 2 bp one-way cost: 16.90% annualized, Sharpe 3.41.
  • 5-minute fill delay at 1 bp: 17.70% annualized, Sharpe 3.64.
  • 2 bp + 5-minute delay simultaneously: 11.44% annualized, Sharpe 2.43.

These are development backtests, not claims of future/live performance.

What changed in v5.2

v5.1 used equal pre-neutralization weights inside the 09:59 opening sleeve. v5.2 uses linear rank weights: the most extreme cross-sectional residuals receive more of the same 1× gross budget before exact aggregate dollar/beta neutralization.

The change was selected from pooled pre-June evidence:

Opening allocation Pre-June annualized Pre-June Sharpe Full 106-session annualized
Equal 17.64% 4.42 20.65%
Linear rank 19.33% 4.48 23.45%
More aggressive concentration Rejected Rejected Not promoted

The later June–July slice was checked after the linear-rank rule was chosen.

Why not deliberately push drawdown to 5%?

A drawdown budget is a ceiling, not a target. We tested more aggressive unlevered ways to deploy risk: narrower books, squared-rank concentration, earlier opening entries, a closing sleeve, and an overnight-gap sleeve. Those candidates either degraded the earlier chronological windows, became single-name dependent, or exposed portfolio-construction problems.

So the strategy stays near 1% observed drawdown. Forcing it toward 5% on the same sample would mean accepting weaker trades or over-concentrating the book, which is the opposite of good quant research.

Research hypothesis

CrossImpact tests two related price-discovery mechanisms:

  1. Opening cross-sectional continuation — after the market has traded for 30 minutes, beta-adjusted from-open returns contain information about short-horizon continuation across related equities.
  2. Conditional cross-impact continuation — after a material Nasdaq move, exactly seven of nine names showing persistent 15/30-minute residual direction identifies a regime in which cross-sectional residual continuation is more tradeable than broad residual momentum.

The system does not predict raw market direction. Each sparse alpha vector is projected onto exact aggregate dollar- and rolling Nasdaq-beta neutrality.

Strategy architecture

flowchart LR
    A[1-minute OHLCV] --> B[Session-safe returns]
    B --> C[Rolling NAS100 beta]
    C --> D[Beta-adjusted residuals]
    D --> E1[09:59 opening rank signal]
    D --> E2[Conditional CrossImpact core]
    E1 --> F[Sparse signed alpha vector]
    E2 --> F
    F --> G[Selected-support dollar/beta projection]
    G --> H[1x gross target]
    H --> I[Next-minute simulated execution]
    I --> J[Costs + position ledger]
    J --> K[P&L / drawdown / attribution]
    K --> L[Cost, latency, bootstrap, audit trail]
Loading

Frozen v5.2 schedule

  • 09:59 ET: compute beta-adjusted return from the session open; rank the cross-section; construct a rank-weighted top-4/bottom-4 sparse target.
  • 10:29 ET: replace the opening position only if the core CrossImpact gate is active and the Nasdaq shock exceeds the stricter q70 threshold.
  • 10:59 and 11:59 ET: evaluate the standard CrossImpact core gate.
  • Intraday only: all positions are liquidated; no overnight inventory.

A completed signal minute must precede the simulated fill. The headline configuration uses a one-minute signal-to-fill delay.

Portfolio construction

For stock (i), rolling benchmark beta is estimated from strictly prior intraday observations. Short-horizon residual return is approximately

[ \epsilon_{i,t}=r_{i,t}-\hat\beta_{i,t}r_{NQ,t}. ]

The opening sleeve ranks the beta-adjusted from-open residual. The selected tails receive linear rank magnitudes, giving the most extreme residuals more pre-neutralization weight.

The sparse signed alpha vector (v) is then projected to the nearest vector (w) satisfying

[ \mathbf{1}^T w = 0,\qquad \beta^T w = 0, ]

with all unselected names fixed at zero, and finally normalized to 1× gross.

Important construction detail: this is an aggregate exposure projection, not a hard per-name sign constraint. The projection can adjust or, in rare cases, change an individual selected name's sign to satisfy exact net/beta neutrality. The repo documents that explicitly because pretending otherwise would misdescribe the implemented portfolio.

Chronological diagnostics

Slice Observed return Annualized Sharpe Max DD
Development +1.85% 8.77% 1.89 -2.38%
Validation +2.03% 15.54% 3.30 -0.72%
Later research slice +3.96% 32.26% 4.88 -1.01%
Post-warmup combined +9.27% 23.45% 4.59 -1.01%

These slices are useful diagnostics, but because the project evolved while the overall sample was available they should not be presented as pristine OOS partitions.

Unlevered performance

Where the P&L came from

P&L attribution

The result reconciles to the trade/event ledger:

Component P&L
Opening sleeve gross +$96,942
Core sleeve gross +$19,621
Modeled transaction costs -$23,891
Net P&L +$92,672

The opening sleeve is therefore the dominant contributor; the conditional core remains an economically distinct later-morning mechanism.

Execution robustness

Joint execution stress

Cost stress

One-way cost Annualized Sharpe Max DD
0.5 bp 26.87% 5.17 -0.94%
1.0 bp 23.45% 4.59 -1.01%
2.0 bp 16.90% 3.41 -1.15%
3.0 bp 10.69% 2.23 -1.29%
4.0 bp 4.80% 1.05 -1.55%

Delay stress at 1 bp

Signal-to-fill delay Annualized Sharpe Max DD
1 min 23.45% 4.59 -1.01%
2 min 21.60% 4.25 -0.97%
3 min 20.98% 4.21 -0.92%
5 min 17.70% 3.64 -1.05%

The project also tests cost and latency jointly, not just one at a time.

What was tried and rejected

The repository intentionally retains losing/fragile research. Highlights include:

  • ungated residual momentum;
  • weaker q50 shocks;
  • 8/9 and 9/9 persistence regimes;
  • volatility-normalized continuation;
  • walk-forward Ridge forecasting;
  • SPX+Nasdaq factor variants;
  • alternative 30/45/90-minute schedules;
  • narrower top-1/top-2 opening books;
  • squared-rank opening concentration;
  • earlier 09:44/09:49/09:54 entries;
  • late-day continuation/reversal sleeves;
  • overnight residual-gap continuation, rejected despite spectacular raw results because leave-one-out analysis showed severe AMD dependence and normalization/constraint audits did not support a stable cross-sectional interpretation.

See docs/MODEL_SELECTION_LOG.md and research/v5_2/ for the audit trail.

Statistical uncertainty

Bootstrap uncertainty

A circular five-session block bootstrap gives a sampling-only median annualized return of ~23.16% and a 95% range of roughly 7.90% to 43.21%.

That range does not account for researcher degrees of freedom, strategy selection, vendor-specific effects, capacity or real market impact. It is deliberately not presented as a confidence interval for future alpha.

Data and execution caveats

The committed demonstration run uses public 1-minute OHLCV evaluation samples for nine US equities plus NAS100/SPX500 diagnostic indices. The bundled/public provider data do not contain historical NBBO quotes, so the 1–4 bp one-way execution costs are stress assumptions, not reconstructed spreads/market impact.

Raw third-party market files are excluded from the GitHub archive. Reproducible download scripts and a SHA-256 data manifest are included.

Reproduce

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
make data       # if raw public files are not already present
make reproduce

make reproduce regenerates the research results/report, runs the test suite and runs result-integrity checks.

The result fingerprint records:

  • raw-data SHA-256 manifest;
  • configuration SHA-256;
  • source/script tree SHA-256;
  • Python / NumPy / pandas versions;
  • deterministic bootstrap seed;
  • experiment ID.

Repository map

config/                  frozen v5.2 research configuration
src/crossimpact/         feature, strategy and event-driven backtest engine
scripts/                 data, research, report and validation entry points
tests/                   leakage, neutrality, execution and accounting tests
research/                model-selection grids and rejected variants
research/v5_2/           final concentration/risk-budget research audit
results/                 committed 1× ledgers, metrics and publication figures
docs/                    research memo, architecture, design decisions, testing, limitations and interview notes

Five-minute reviewer path

  1. Read this README.
  2. Open docs/QUANT_RESEARCH_MEMO.md.
  3. Inspect results/figures/alpha_performance.png and results/figures/execution_robustness_heatmap.png.
  4. Read docs/MODEL_SELECTION_LOG.md — especially the rejected overnight result.
  5. Read docs/DESIGN_DECISIONS.md and docs/TESTING_AND_VALIDATION.md.
  6. Inspect src/crossimpact/strategy.py, src/crossimpact/backtest.py, and the tests.

Publication and review documentation

Next falsifiable experiment

Freeze v5.2. Do not tune February–July again.

The next meaningful research step is a broader, longer and more execution-realistic experiment:

  • 50–100 liquid US equities;
  • QQQ / SPY / sector-ETF hierarchy rather than one benchmark only;
  • multi-year 1-minute history;
  • historical top-of-book/NBBO where possible;
  • preregistered final holdout or prospective forward window;
  • turnover-aware portfolio optimization and capacity analysis.

A higher return from new opportunities and new data would be meaningful. A higher return obtained by forcing this same 106-session sample toward a 5% drawdown would not.

License

MIT. Market-data rights remain with the respective data providers.

About

Point-in-time intraday equity stat-arb with market-neutral construction, next-minute execution, cost/latency stress and reproducible backtests.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages