Inside the architecture
Every architectural decision in this system optimises one quantity: the probability that measured historical performance generalises to unseen market conditions. Where that objective conflicts with in-sample performance, the objective wins.
Opulence Alpha is a quantitative equity research system that transforms 45 years of market, fundamental, macroeconomic and international-institutional data — drawn from approximately 400 source datasets — into calibrated multi-horizon return distributions over a 1,266-symbol investable universe. The platform engineers a high-dimensional state vector per symbol per trading day, estimates a nine-dimensional market regime through per-dimension hidden Markov models fused by a hidden semi-Markov model, and forms beliefs through Bayesian online aggregation over an estate of production models. Predictions are published as distributions with distribution-free coverage guarantees under adaptive conformal inference. The system is decomposed into five intelligence services separated by question rather than by pipeline stage, under a single governing constraint: a service may publish a quantity only if it also validates it. This document describes the data foundation, feature construction, regime estimation, model estate, belief formation, uncertainty quantification, risk control, execution modelling and validation regime, and closes with a statement of known limitations.
Four hundred datasets, one point-in-time contract
Model sophistication cannot compensate for a contaminated sample, and breadth cannot compensate for inconsistent vintaging. The platform ingests approximately 400 distinct source datasets spanning market microstructure, corporate disclosure, insider activity, national accounts, monetary and fiscal statistics, energy balances and international trade flows. Every one of them enters under the same contract: values are bound to the date they were first knowable, and no downstream consumer can read a revision that had not yet been published.
Three classes of bias are addressed at the data layer rather than corrected downstream.
3,848 U.S.-listed entities are tracked from 1980, retaining bankruptcies, mergers, acquisitions and delistings. Datasets constructed from currently-listed securities systematically overstate historical returns; retaining the failures removes that distortion at source.
Observations are partitioned into four market eras — Legacy (1980–1989), Modern Volatility (1990–1995), Modern Credit (1996–1999) and Full (2000–present) — with era-aware feature computation. A model trained on 1987 observations has no access to VIX, high-yield spreads or sector ETFs, because those instruments did not exist. Feature availability is a function of date, enforced in the feature store.
Macroeconomic series are revised, often substantially, months after first release. National accounts, trade balances and energy statistics are the worst offenders. Series are stored with their release vintage, so a backtest positioned in March 2011 sees the March 2011 print of GDP, not today's twice-revised figure. Every ClickHouse table carrying a prediction input holds a processed_at version column, making any downstream read reconstructible as of a past date without leakage.
U.S. equity prices are not determined solely by U.S. conditions. Energy inventories set input costs for a third of the industrial universe; bilateral trade volumes lead revenue in export-exposed sectors by one to two quarters; euro-area monetary conditions transmit through the dollar into the earnings of every multinational in the universe. Most U.S. equity platforms hold none of this, which is why their regime models are a volatility index and a yield curve. Breadth of source is not a vanity metric here — it is what allows the credit, liquidity, inflation and real-yield dimensions to be estimated from independent evidence rather than from four transformations of the same price series.
The production universe of 1,266 symbols is filtered on share price ≥ $15, average daily dollar volume ≥ $25M over a six-month lookback, trading continuity ≥ 95%, complete four-level GICS coverage, and a maximum-to-minimum price ratio ≤ 50× to reject reverse-split artefacts. Non-equity entities, static-data symbols and non-premium listings are excluded. The filter is applied point-in-time.
| Domain | Source | Volume | Coverage |
|---|---|---|---|
| Market | Daily OHLCV, corporate actions | 3,848 entities | 1980 – present |
| Corporate disclosure | SEC EDGAR, XBRL-parsed | 57,089 filings | 1,263 symbols · financial history from 1995, XBRL from 2009 |
| Insider activity | SEC Form 4 | 216,496 transactions | 21,878 insiders, 1,220 symbols, 2001 – present |
| U.S. macro | Federal Reserve Economic Data (FRED) | 530+ engineered indicators | multi-horizon transforms, vintage-aware |
| European macro | Eurostat, ECB, European Commission | national accounts, HICP, industrial production, sentiment surveys | euro-area and member-state granularity |
| Global development | World Bank | cross-country structural and demographic series | annual, revision-tracked |
| Energy | International Energy Agency | supply, demand, inventory and price series | monthly, by region and product |
| Trade | International trade statistics | bilateral flows, tariff and volume series | monthly, by partner and commodity class |
| Classification | GICS | 4 levels | 11 sectors / 26 groups / 69 industries / 118 sub-industries |
| Text | Corporate filings and news corpus | FinBERT + Loughran-McDonald | sentiment, vintage-aligned to publication |
One state vector, read identically by every consumer
Each symbol is represented on each trading day by a unified state vector of roughly two thousand engineered dimensions, materialised in a single feature_samples table so every downstream consumer reads identical inputs.
Price and volume kinematics, multi-horizon trend persistence, polynomial trend curvature, microstructure, graph-neural relational embeddings, and document-level sentiment.
Vintage-aware transforms of FRED, Eurostat, World Bank, IEA and trade series, mapped to symbol-level exposure.
18 geometric chart patterns, multi-scale Daubechies-4 decomposition, higher-order volatility structure.
19 categories derived from period-matched financial statements.
Explicit five-factor exposures, rolling estimation.
Nine-dimensional state probabilities and transition features.
Intrinsic-value level, gap, kinematics and cross-sectional relative value.
Graph neural network embeddings represent the production universe as a live network — nodes linked by supply-chain dependency, cross-asset correlation and sector adjacency — and are materialised into the feature vector rather than held as a separate model output. This captures alpha propagation between related securities before it is visible in any single symbol's price series, which is the specific failure mode of a per-symbol feature set.
Nine orthogonal volatility-structure signals separate variance components that a single realised-volatility estimate conflates: realised semivariance (upside and downside separately), bipower jump share, realised skew and realised kurtosis. These carry information about the shape of the return distribution that scalar volatility discards.
Cross-asset natural-language sentiment is derived from a domain-adapted FinBERT model combined with the Loughran-McDonald financial dictionary, and is wired into the SENTIMENT regime dimension rather than used as a standalone signal — sentiment matters conditionally on state, not absolutely.
Schema validation, range checks, completeness monitoring, freshness tracking, return winsorisation and feature drift detection via population stability index run continuously. Drift beyond threshold triggers retraining rather than silent degradation.
Nine orthogonal dimensions, fused into a single market state
Financial time series are non-stationary. A model estimated over a pooled sample implicitly assumes a single data-generating process, which is false across regime boundaries and is a principal cause of live-versus-backtest divergence.
Nine dimensions are estimated independently, each by a specialised Gaussian hidden Markov model over its own observable set — and, critically, over its own source. The credit dimension reads spreads and funding conditions; the inflation dimension reads price statistics from FRED and Eurostat; the liquidity dimension reads system-wide capital availability. Dimensions are orthogonal because their inputs are genuinely independent, not because a rotation was applied to a correlated block.
| Dimension | Observable basis | Structural consequence |
|---|---|---|
| Volatility structure | Variance regimes, volatility-of-volatility, jump share | Position sizing and risk caps |
| Credit conditions | Credit spreads, funding stress, corporate financing | Cyclical versus defensive tilt |
| Liquidity | System-wide capital availability, liquidity breaks | Gross exposure targets |
| Monetary policy | Central bank stance, tightening and easing cycles | Duration and rate-sensitive sector weights |
| Real yields | Inflation-adjusted yield environment | Growth, value and duration factor rotation |
| Inflation | Core pricing pressure and trend dynamics | Commodity exposure, multiple compression |
| Recession risk | Probability of macroeconomic contraction | Cyclical de-risking |
| Fundamental cycle | Earnings quality, expansion and contraction | Asset-mix orientation |
| Sentiment | NLP corporate tone, cross-asset psychology | Extremes detection |
Fusion uses signed principal-component projection with an expectation-maximisation probit layer, augmented by the National Financial Conditions Index and ΔCoVaR systemic-risk measures. The fused state is not a display artefact: it conditions ensemble weights, valuation discount structures, risk limits, position sizing and execution cost estimates. A credit-regime transition from Benign to Stressed propagates within the same cycle to weighted average cost of capital, position ceilings and stop levels across the platform.
Structural diversity, not member count
The estate is deliberately heterogeneous. Ensemble benefit derives from error decorrelation, not from member count, so families are selected for structural diversity — tree-based, sequential, relational, state-space, quantile and analytical — rather than for variations on one inductive bias.
Forecasts are produced at four horizons: 1, 5, 21 and 63 trading days. The 126- and 252-day horizons were retired. Their information coefficients did not survive the promotion gate at a standard that justified the estate cost, and a horizon the platform cannot forecast honestly is better absent than present and weakly weighted.
| Family | Instances | Basis | Role |
|---|---|---|---|
| Cross-sectional return forecasters | 24 | XGBoost, LightGBM, CatBoost, LSTM, MLP, Temporal Fusion Transformer × 4 horizons | Primary return point forecasts |
| Sector rotation | 44 | Per-sector CatBoost, 11 GICS sectors × 4 horizons | Relative sector expected return |
| Regime estimators | 28 | 9 per-dimension Gaussian HMM ensembles + cross-dimensional HSMM | Market state posterior |
| Chart pattern detectors | 18 | Geometric pattern recognition | Structural price formations |
| Risk engines | 14 | VaR, CVaR, EVT-GPD, copula, DCC-GARCH, Ledoit-Wolf, Black-Litterman, stress | Risk quantities, each independently backtested |
| Conformalised quantile regressors | 12 | 3 quantiles × 4 horizons | Distributional forecasts and calibrated direction probability |
| Volatility-structure estimators | 9 | Semivariance, bipower, realised skew and kurtosis | Distribution shape |
| Anomaly detectors | 9 | 8 rule-based + unsupervised Isolation Forest | Statistical outlier surveillance |
| Valuation models | 9 | Monte Carlo DCF, dynamic WACC, EV/EBITDA, residual income, P/E, and 5 industry-specific frameworks | Intrinsic value distribution |
| Belief voice mappers | 5 | DCF mean-reversion, IV kinematic, IV relative, CQR return, CQR probability | Fitted transforms feeding the aggregator |
| Meta-learners | 5 | Per-horizon Bayesian online aggregation + stacked ridge / elastic-net | Belief consolidation |
Counts are instances under independent lifecycle management — each separately versioned, separately validated and separately promotable. The figures are a census, not a marketing aggregate; they are published here so they can be checked.
General discounted-cash-flow methodology misprices businesses whose economics it was not designed for. Five sector frameworks are applied where appropriate: justified price-to-book for banking, excess-return for insurance, price-to-FFO for REITs, regulated-return for utilities, and pipeline net present value for healthcare, with a PV-10 floor applied to energy.
Seven voices, aggregated online, weighted by demonstrated skill
Individual model outputs are consolidated into a single belief per symbol per horizon through Bayesian online aggregation. The distinction from static model averaging is material: BOA updates its weight vector sequentially as each outcome is observed, with regret bounds relative to the best voice in hindsight. It does not require a stationary posterior over models, which is the assumption that breaks first when a regime turns. A voice that degrades loses weight within days rather than at the next retraining cycle. A voice that recovers regains it without manual reinstatement.
| Voice | Source | Horizon strength |
|---|---|---|
| inference_ensemble | Multi-family cross-sectional forecasters | 1d – 63d |
| sector_catboost | Per-sector rotation models | 1d – 63d |
| dcf_mean_reverter | Monte Carlo DCF mean-reversion mapping | 21d / 63d |
| iv_kinematic | Intrinsic-value velocity, acceleration and gap-z | 5d / 21d — peak swing alpha, IC ≈ 0.060 at 21d |
| iv_relative | Sector- and industry-neutral cross-sectional z-score | 21d / 63d — peak rotation alpha, IC ≈ 0.060 at 63d |
| iv_cqr_return | Conformalised quantile median forward return | 1d – 63d |
| iv_cqr_prob | Calibrated probability of positive forward return | 1d – 63d |
The two conformalised quantile voices are structurally distinct from the other five. The kinematic and relative voices are derived feature mappers — they transform pre-computed valuation state into a return estimate through a fitted mapping. The CQR voices are direct per-horizon outputs carrying finite-sample coverage guarantees. iv_cqr_prob is the only voice whose probabilistic output is accompanied by a coverage guarantee, which is why it dominates any downstream Kelly-style sizing calculation.
Per-horizon weights track each voice's empirical information coefficient profile. A Sharpe gate rebalances weights as out-of-sample observations accumulate; voices failing the gate are progressively down-weighted rather than removed.
Beliefs are published in long form — one row per (timestamp, symbol, horizon). A horizon for which no voice produced a forecast is an absent row, not a zero. This is a deliberate schema decision: the predecessor wide-format table defaulted missing horizons to 0.0, which downstream construction correctly read as a confident forecast of flat. A missing voice became a universe-wide neutral call, invisibly. In long form there is no value left to misread.
The system distinguishes no opinion from an opinion of zero. Most do not.
Distribution-free intervals with finite-sample coverage
Point estimates are insufficient for capital allocation. The platform implements split conformal prediction with adaptive conformal inference (Gibbs & Candès, 2021), which provides intervals satisfying P(Y ∈ C(X)) ≥ 1 − α without distributional assumptions on the underlying process, in finite samples rather than asymptotically.
Conformal prediction in its standard form assumes exchangeability, which financial time series violate through volatility clustering, regime transition and structural break. Adaptive conformal inference addresses this by adjusting nonconformity thresholds dynamically, with separate calibration sets maintained per regime. Interval width therefore widens in high-volatility regimes and contracts in calm ones as a property of the method, not as a post-hoc adjustment.
| Metric | Result | Target |
|---|---|---|
| True out-of-sample interval coverage | 96.57% | 95% |
| Expected calibration error | 0.020 | — |
| Brier score, directional calibration | 0.247 | < 0.25 |
| Asymmetric error reduction, high-side tail | 9× | — |
Posterior calibration is monitored in-pipeline and daily, under probability-integral-transform uniformity testing and Brier-score gates. Calibration drift is treated as a production incident, not as a research finding.
Regime-conditional intrinsic value, re-estimated daily
Standard discounted-cash-flow valuation is estimated infrequently against fixed assumptions, which makes it structurally unable to inform positions held over one to three months. Three modifications adapt it to that horizon.
Fair value is estimated as a distribution rather than a point, through 10,000-path Monte Carlo simulation over probabilistic growth, margin, discount-rate and terminal assumptions.
The discount rate is not a constant. A dynamic WACC engine conditions on regime state with volatility-aware beta shrinkage and credit-spread adjustment, so an identical cash-flow forecast produces a different fair value under stressed credit than under benign credit — as it should.
Fundamental estimates move slowly and produce value traps over swing horizons. Valuation output is fused with price kinematics — velocity, acceleration and localised frequency volatility — producing the iv_kinematics_daily and iv_relative_value_daily feature layers that feed the belief ensemble as independent voices.
Five intelligences, separated by question
The system is decomposed by question owned, not by pipeline stage. Each service answers exactly one question and is structurally incapable of answering another's. One rule governs every boundary.
A service may publish a quantity only if it also validates that quantity.
The rule is greppable and it settles ownership disputes mechanically. Risk Intelligence backtests its own value-at-risk under Kupiec, Christoffersen and Basel procedures, so it owns the covariance matrix, factor loadings and tail parameters. No service backtests crowding as a risk quantity, so crowding does not live in Risk Intelligence — it lives in feature engineering.
| Service | Question owned | Publishes | Explicitly cannot |
|---|---|---|---|
| Investment Intelligence | What do we believe today? | ii_belief — distribution per (symbol, horizon) with dispersion, direction probability, reliability and gate reason | Size a position, construct a portfolio, or score its own accuracy |
| Risk Intelligence | May this book take this change, and at what size? | Covariance, factor loadings, tail parameters, risk decisions, breaches, budget state | Choose what is worth holding; publish anything that tilts construction |
| Portfolio Intelligence | What does this book hold and what happens to it? | Instances, positions, NAV series, realised performance, scorecards | Form a belief; judge whether a policy is good |
| Strategy Intelligence | Which policies are worth running, and how much is real? | Versioned strategy templates, strategy scorecards | Own a simulator, a portfolio, an order or a user preference |
| Experiment Intelligence | Was any of it real? | Model × context evidence lattice (~30k cells/day), per-day information coefficient series, hypothesis verdicts | Promote a model, change a weight, size a position or place an order |
The layer diagram places risk last, which describes roughly a third of what the service does. It executes three times daily against three clocks: T0, publishing the risk model before any portfolio runs; T-mid, gating each proposed change synchronously inside the portfolio loop; and T+1, validating the closed day against realised NAV.
The dependency graph is over artefacts and time, not services. T0 reads t−1 artefacts; the synchronous gate performs zero reads of portfolio state, drawing everything from the request, the T0 model and its own folded state; T+1 reads a closed day. Unrolled, the ordering is strictly acyclic. A practical consequence: Risk Intelligence can be restarted mid-fan-out without a partially-visible portfolio transaction affecting a verdict.
Risk Intelligence is also an allocator rather than a gate. It meters a finite risk budget and decides where a cut lands when that budget binds, rather than issuing a binary permission. It is the only service on the platform whose objective function is not return.
The adjudication layer writes a model-by-context evidence lattice of roughly 30,000 cells per simulated day, carrying raw and shrunk information coefficients per (voice, horizon, sector, liquidity bucket), alongside non-rolling per-day IC series and standing hypotheses — one per voice-horizon against the blended ensemble. It issues verdicts and recommendations and it will not promote a model, change a weight, size a position or place an order. If a recommendation is to be applied, a human applies it.
This is the structural answer to the question every quantitative platform must eventually face and most cannot: who checks the model? Here the answer is a service with no ability to benefit from the answer it gives.
Fourteen engines, each validating what it publishes
Alpha without risk control is uncompensated variance. Every proposed allocation change is evaluated synchronously against fourteen specialised engines.
| Domain | Method |
|---|---|
| Tail and copula risk | Extreme value theory with generalised Pareto distributions; Clayton and Gumbel tail-dependency structures |
| Covariance estimation | Ledoit-Wolf shrinkage with dynamic conditional correlation GARCH; correlation-break detection typically 5–10 sessions ahead of moving-average methods |
| Allocation optimisation | Multi-model Black-Litterman under hard operational bounds — 5% single-position ceiling, 150% maximum gross exposure |
| Backtested risk measures | VaR and CVaR under Kupiec, Christoffersen and Basel validation procedures |
| Stress testing | 8 scenarios — 6 historical, 2 hypothetical |
Trades that cannot cover their own friction are never issued
The gap between backtested and realised performance is predominantly an execution-cost gap, and it is where most systematic strategies fail in production. Per-symbol market impact is estimated under Almgren-Chriss with Corwin-Schultz spread estimation, and modelled round-trip cost is compared against predicted statistical edge before a trade candidate is published. Where cost exceeds edge, the candidate is suppressed — not flagged, not weighted down. Suppressed.
This is a deliberately expensive design choice. It removes real signal from the output. It removes more false signal than real.
Ten statistical tests, enforced by pipeline
Model promotion is a mechanical process, not an editorial one. A candidate must clear every gate before serving a single prediction.
| Gate | Method | Threshold |
|---|---|---|
| Multiple-testing correction | Harvey, Liu & Zhu factor-zoo verification | t ≥ 3.0 |
| Backtest inflation | Deflated Sharpe ratio (Bailey & López de Prado) | above threshold |
| Overfitting probability | Probability of backtest overfitting | below threshold |
| Out-of-sample stability | Walk-forward validation, 8 sliding windows | — |
| Crisis behaviour | 16 historical crises, 1987–2024 | full pass |
| Calibration | PIT uniformity and Brier gates, daily | in-pipeline |
Supporting this, 7,050 hyperparameter optimisation trials execute weekly under walk-forward validation, with three independent A/B engines for model comparison and automated drift detection triggering retraining. Every experiment is tracked with parameter logging, metric recording and artefact versioning for full reproducibility.
What this architecture does not solve
A system's boundaries are more informative than its capabilities. These are the constraints we consider material and do not expect to remove.
Market, macro, insider and international series extend to 1980. Company financial statements do not: the fundamental record starts in 1995, and machine-readable XBRL parsing only from 2009, with the 1995–2008 span reconstructed from pre-XBRL sources. Fundamental and valuation models are therefore evaluated over a 30-year sample rather than the 45-year market history, and over a sample of lower parsing fidelity before 2009. Technical, regime and macro models use the full history.
State estimation is a posterior. The system identifies a transition after sufficient evidence accumulates, which means the first days of a genuine regime change are misclassified by construction. Early-warning features reduce but do not eliminate this lag.
National accounts, trade balances and energy statistics are revised for months after first release, sometimes materially. Vintage storage means a backtest sees the print that was actually available, which is correct — but it also means the platform, in live use, is acting on figures that will later change. This is a property of the data, not a defect of the system, and it cannot be engineered away.
Conformal intervals guarantee coverage on average across the calibration distribution. They do not guarantee coverage for any particular symbol on any particular day. Per-regime calibration narrows this gap; it does not close it.
The $15 price and $25M average daily volume filters exclude small caps by design. Findings do not transfer to microcap, international, fixed income or derivative markets, and are not claimed to.
The architecture is built for swing and position horizons. The 126- and 252-day horizons were retired because their information coefficients did not survive the promotion gate; the platform therefore has no view beyond one quarter and does not pretend to one. It carries no intraday microstructure model either, and should not be used for intraday decisions.
Almgren-Chriss impact and Corwin-Schultz spread are models. Realised cost will differ, particularly in stressed liquidity where the estimator is least reliable and most consequential.
The architecture is the argument.
Nothing above is a claim about future returns. It is a description of how the system is built, how it is validated and where it stops. Thirty days of full access is enough time to check whether the description holds.