POINT-IN-TIME · RESEARCH-ONLY · EXECUTION-ISOLATED

Auditable alpha research, built to falsify itself.

A compact autonomous research framework for causal factor synthesis, neutral portfolio evaluation, multiple-testing correction, and decision-focused ranking— without broker access or automatic strategy promotion.

Explore the repository Read the literature map
PITDisclosure alignment
CSCVBacktest-overfitting audit
max-tJoint family inference
0Execution interfaces

The live record, redrawn every day

A frozen specification (dea0e608) holds the single best-ranked eligible name and rotates every session. Fetching, selection, scoring and redrawing all run on a GitHub runner from public data, so a reader can rerun it and reach the same name. A separate job re-fetches the index series and fails if any committed benchmark return no longer matches its source; it writes nothing, because a verifier that can rewrite the file it verifies is not a verifier.

Two records run and answer different questions: this one-name, one-session rotation published in advance, and a ten-name, ten-session record (b19bbc74, c0768449) carrying the four factors that survived the 456-candidate search.

Cumulative return of a
      one-name daily rotation against onshore A-share indices

The dashed, shaded span on the left proves nothing, and it is drawn that way on purpose. Those four factors were chosen from a 456-candidate search whose data overlaps that window, and on this panel the selection step alone is worth about 3 bps per day — more than most published equity-factor results. An in-sample curve that beats every index is what a selected strategy always looks like.

Only the solid span to the right of the divider is evidence, it begins the day the specification was frozen, and at the start there is almost none of it. The strategy line is a raw return net of realised cost so that it is comparable to an index; the excess line answers a different question and is labelled separately, because plotting an excess against a raw index is the oldest trick in the genre.

The name is published before the session it applies to. Each evening the frozen specification selects one name from roughly 4,700 eligible, and it is committed here with a timestamp, at the top-right of the chart, before that market opens. A record scored afterwards always invites the question of whether the rule moved once the outcome was visible. One committed in advance cannot: it can be shown to be wrong, but never edited. The file is append-only — next_pick.json, published_picks.jsonl, rotation.jsonl.

Research only. This is a record of what a frozen rule selected, published to test that rule in public. It is not advice, not a recommendation, and no order-placement path exists anywhere in the codebase — CI asserts that on every commit.

What the search actually produced

Every factor in four published libraries (Kakushadze 101, GTJA 191, Qlib 158, academic) over a point-in-time A-share panel, ranked only on the training window by the mean excess of a ten-name book, then reported on the untouched test window. 900 sessions split at 2024-12-31, rebalanced every session, ten sessions held, entry and exit at the open after the signal, limit-locked legs dropped rather than priced. Excess is against the equal-weight eligible universe, which returned +0.85% per hold on the test window.

#factortrain excesstest excess>10% oddsworst holdhit
1academic/hml+2.20%−0.04%1.01×−17.5%49.2%
2qlib158/imin60+0.81%−0.73%0.53×−11.6%36.7%
3gtja191/alpha_144+0.73%+0.17%1.16×−7.5%46.5%
4academic/cma+0.67%+0.26%0.72×−9.4%48.9%
5qlib158/vsumn20+0.66%+0.40%0.86×−6.4%50.5%

Costs are excluded, and said to be. On an overlapping series three defensible turnover conventions give three different answers, and a gross figure anyone can recompute is worth more than a net one nobody can; at 30 bps a round trip, a book that fully rotates each hold gives back 0.30% of every number above. All 456 rows are published in library_ranking.json.

Selection works, and it is not enough

The number that matters is not in the table. Across all 456 factors, training-window excess predicts test-window excess at Spearman ρ = +0.48 (p < 0.001). Training-side ranking carries real information; anyone calling this pure noise is contradicted by that number. Then look at what it buys.

mean test excess per holdshare beating the universe
all 456 factors−0.71%21.3%
the training-window top ten−0.24%30.0%

Choosing cleanly on the training window is worth +0.47 percentage points per hold over choosing at random, and is still negative. The best ten of 456, selected without a glance at the test window, went on to underperform the universe they were drawn from — before a single basis point of cost. That is neither of the two stories usually told: the signal is real, and it is smaller than what decay and concentration take away.

Row 1 is the problem in one line. hml leads the training window by a mile and lands at zero out of sample, while the fifth-placed factor, at a third of its training excess, is the best of the five on test. Ranks are correlated across the full 456 and nearly unrelated at the top — which is exactly where everyone selects. The libraries also contain duplicates: gtja191/alpha_120 and alpha101/alpha_042 are identical formulas published under different names, and this run reproduces them to the digit, so a deflated-Sharpe denominator should count distinct behaviours rather than files.

The table this replaces could not be reproduced. An earlier version reported a different top five and nothing on disk could regenerate it. Rebuilding from its description recovered the universe benchmark exactly, and matched no individual factor under any of three rebalancing and cost conventions — one came out with the opposite sign. Varying the convention until the numbers agreed would have been fitting the method to the answer, so the table was replaced rather than reconciled. The four factors under forward observation were chosen by that ranking; under this one they place 4th, 30th, 57th and 234th of 456. That does not weaken the forward record, which is tested by what happens after the freeze rather than by how it was picked — but the account of why those four were chosen cannot be checked.

Four biases, measured and removed

Each was quantified on a real equity panel while building this pipeline, and each is large enough to invent a strategy on its own. Red is what the flaw reports; violet is what survives once it is removed. Neither column is a return claim.

Factors chosen with hindsight report +2.00 bps/day against -1.24 when chosen on trailing data. Limit-locked legs priced as fillable carry +6.05% forward return against +0.38%. A universe filtered on whole history admits 391 names in the first year against 77. Overlapping labels scored as independent give t = -5.79 on pure noise against -2.25.

The first row is the one worth sitting with. Same panel, same cost model, same portfolio construction — only the rule for choosing factors differs, and the gap is about 3 bps/day. That exceeds most published equity-factor results, which is why a pipeline unable to audit its own selection step cannot separate a discovery from an artifact of choosing. The mechanism reproduces on synthetic data containing no signal at all: an information ratio of 4.53, manufactured in ten seconds by examples/selection_artifact.py.

Status, stated plainly: candidates are generated and fully evaluated; none has yet cleared the counterfactual, walk-forward and multiple-testing gates together. That is the gates working on a price-and-volume library, not the engine failing to run — and unlike most backtests, this one reports the count.

Research architecture

Discovery is separated from acceptance. Candidate generation receives training data; validation and shadow windows are structurally excluded from parent selection and refitting.

PIT data plane Audited DSL Bounded synthesis Purged walk-forward Counter / Placebo PBO / DSR Reality Check / Romano–Wolf Sealed forward shadow

Scientific primitives

The library exposes compact reference implementations. A primitive is available for preregistered falsification; availability is not evidence of predictive power.

Regime inference

Causal Hidden Markov Filter

Forward-filtered state probabilities based on Hamilton-style regime switching. Full-path Viterbi labels are excluded from online-safe features.

Transition risk

EWS + BOCPD

Critical-slowing statistics and Bayesian run-length inference diagnose transitions without claiming directional alpha.

Local dynamics

Koopman / DMD Residual

A fixed historical window estimates a local linear operator and reports the unexplained dynamical residual.

Bubble feasibility

Simplified LPPLS

Fixed-grid calibration reports residual and critical-time stability distributions—never a single deterministic crash date.

Bayesian shrinkage

Black–Litterman

Combines an equilibrium prior with uncertain views. Shrinkage improves conditioning; it cannot create information.

Offline labels

Triple Barrier

Profit, loss, and time barriers standardize outcomes. Future-dependent labels are permanently separated from features.

Decision learning

Bounded Top-K Pairwise Loss

Optimizes the ranking boundary directly under simplex constraints and exposes instability with complete-block replicas.

Forecast reliability

Proper Scoring Diagnostics

Brier, LogLoss, AUC, ECE, and probability buckets evaluate discrimination and calibration separately.

Dependence-aware Evidence Lab

A standalone falsification workbench for a searched family of factors, forecasts, or policies. One shared resampling design preserves serial and cross-candidate dependence, then tests both the global winner and individual survivors.

Time dependence

Stationary Bootstrap

Geometrically distributed circular blocks preserve weak serial dependence and drive confidence intervals and every joint test from one frozen design.

Search-wide null

White Reality Check

Tests whether any member of the full searched family outperforms a frozen benchmark after recentering the joint bootstrap distribution.

Candidate attribution

Romano–Wolf Step-down

Studentized max-t inference controls family-wise error while retaining the measured dependence between competing candidates.

Discovery control

BH / BY q-values

Reports both standard false-discovery control and the conservative arbitrary-dependence correction—without treating either as deployment authority.

Research basis

The code follows published methods while retaining explicit implementation boundaries.

Selection bias

Probability of Backtest Overfitting

CSCV estimates how often model selection reverses out of sample after searching many alternatives. Bailey et al.

Multiple testing

Deflated Sharpe Ratio

DSR adjusts apparent performance for trial count, return non-normality, and selection bias. Bailey & López de Prado

Decision quality

Predict-then-Optimize

Downstream decision loss can be more relevant than point-prediction error. Elmachtoub, Liang & McNellis

Calibration

Strictly Proper Scoring Rules

Proper scores incentivize honest probability forecasts and separate confidence from ranking. Gneiting & Raftery

Regime structure

Markov-Switching Models

Latent discrete states provide a tractable representation of regime-dependent dynamics. Hamilton

Symbolic discovery

Formulaic Alpha Synthesis

Modern research combines formula generation with dynamic factor selection; this repository uses a smaller audited DSL. AlphaForge

Data snooping

Reality Check

The winner of a specification search must be tested against the joint null, not as a solitary preregistered strategy. White

Family-wise inference

Step-down max-t

Studentized joint resampling can control family-wise error while exploiting dependence to improve power. Romano & Wolf

Factor research surface

DomainResearch objectsPrimary audit
Price and volumeMomentum, reversal, volatility, beta, liquidityTurnover, crowding, cost sensitivity
FundamentalsValue, profitability, growth, cash conversion, balance-sheet safetyDisclosure timing, restatements, survivorship
Hybrid mechanismsQuality × risk, value × reversal, growth × momentumIncremental value over both component legs
State and dynamicsHMM, EWS, BOCPD, DMD, LPPLSTrue predictive increment versus mechanical abstention

Research integrity contract

{
  "status": "diagnostic_only_research_only_not_trading",
  "orders": [],
  "automatic_trading_changes": []
}
No empirical result is published here. The repository contains no proprietary factor weights, security selections, performance tables, broker integration, order function, strategy overlay, or automatic promotion path. A historical survivor is only eligible for a separately preregistered forward-shadow study.