Technical architecture · v0.10

Inside the architecture

Design objective

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.

Abstract

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.

01Data foundation and bias control

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.

Survivorship

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.

Look-ahead

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.

Revision and vintage

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.

Why the international series matter

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.

Investability filter

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.

Sources
DomainSourceVolumeCoverage
MarketDaily OHLCV, corporate actions3,848 entities1980 – present
Corporate disclosureSEC EDGAR, XBRL-parsed57,089 filings1,263 symbols · financial history from 1995, XBRL from 2009
Insider activitySEC Form 4216,496 transactions21,878 insiders, 1,220 symbols, 2001 – present
U.S. macroFederal Reserve Economic Data (FRED)530+ engineered indicatorsmulti-horizon transforms, vintage-aware
European macroEurostat, ECB, European Commissionnational accounts, HICP, industrial production, sentiment surveyseuro-area and member-state granularity
Global developmentWorld Bankcross-country structural and demographic seriesannual, revision-tracked
EnergyInternational Energy Agencysupply, demand, inventory and price seriesmonthly, by region and product
TradeInternational trade statisticsbilateral flows, tariff and volume seriesmonthly, by partner and commodity class
ClassificationGICS4 levels11 sectors / 26 groups / 69 industries / 118 sub-industries
TextCorporate filings and news corpusFinBERT + Loughran-McDonaldsentiment, vintage-aligned to publication
~400
Source datasets, market through international trade
3,848
Entities tracked from 1980, failures retained
1,266
Symbols in the investable production universe
45+
Years of daily market history, 1980 – present
02Feature construction

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.

What the vector is made of
Technical, NLP and relational

Price and volume kinematics, multi-horizon trend persistence, polynomial trend curvature, microstructure, graph-neural relational embeddings, and document-level sentiment.

Macro and cross-asset

Vintage-aware transforms of FRED, Eurostat, World Bank, IEA and trade series, mapped to symbol-level exposure.

Pattern and wavelet

18 geometric chart patterns, multi-scale Daubechies-4 decomposition, higher-order volatility structure.

Fundamental

19 categories derived from period-matched financial statements.

Fama-French

Explicit five-factor exposures, rolling estimation.

Regime

Nine-dimensional state probabilities and transition features.

Valuation

Intrinsic-value level, gap, kinematics and cross-sectional relative value.

Relational features

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.

Higher-order volatility structure

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.

Sentiment

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.

Quality control

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.

03Regime estimation

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.

DimensionObservable basisStructural consequence
Volatility structureVariance regimes, volatility-of-volatility, jump sharePosition sizing and risk caps
Credit conditionsCredit spreads, funding stress, corporate financingCyclical versus defensive tilt
LiquiditySystem-wide capital availability, liquidity breaksGross exposure targets
Monetary policyCentral bank stance, tightening and easing cyclesDuration and rate-sensitive sector weights
Real yieldsInflation-adjusted yield environmentGrowth, value and duration factor rotation
InflationCore pricing pressure and trend dynamicsCommodity exposure, multiple compression
Recession riskProbability of macroeconomic contractionCyclical de-risking
Fundamental cycleEarnings quality, expansion and contractionAsset-mix orientation
SentimentNLP corporate tone, cross-asset psychologyExtremes detection
Fusion and propagation

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.

16
Historical crises in the evaluation set, 1987 Black Monday to the 2024 yen carry unwind
16 / 16
Detection pass rate
0.097
Raw confidence Brier score
0.020
Expected calibration error
04The model estate

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.

FamilyInstancesBasisRole
Cross-sectional return forecasters24XGBoost, LightGBM, CatBoost, LSTM, MLP, Temporal Fusion Transformer × 4 horizonsPrimary return point forecasts
Sector rotation44Per-sector CatBoost, 11 GICS sectors × 4 horizonsRelative sector expected return
Regime estimators289 per-dimension Gaussian HMM ensembles + cross-dimensional HSMMMarket state posterior
Chart pattern detectors18Geometric pattern recognitionStructural price formations
Risk engines14VaR, CVaR, EVT-GPD, copula, DCC-GARCH, Ledoit-Wolf, Black-Litterman, stressRisk quantities, each independently backtested
Conformalised quantile regressors123 quantiles × 4 horizonsDistributional forecasts and calibrated direction probability
Volatility-structure estimators9Semivariance, bipower, realised skew and kurtosisDistribution shape
Anomaly detectors98 rule-based + unsupervised Isolation ForestStatistical outlier surveillance
Valuation models9Monte Carlo DCF, dynamic WACC, EV/EBITDA, residual income, P/E, and 5 industry-specific frameworksIntrinsic value distribution
Belief voice mappers5DCF mean-reversion, IV kinematic, IV relative, CQR return, CQR probabilityFitted transforms feeding the aggregator
Meta-learners5Per-horizon Bayesian online aggregation + stacked ridge / elastic-netBelief 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.

Industry-specific valuation

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.

05Belief formation

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.

VoiceSourceHorizon strength
inference_ensembleMulti-family cross-sectional forecasters1d – 63d
sector_catboostPer-sector rotation models1d – 63d
dcf_mean_reverterMonte Carlo DCF mean-reversion mapping21d / 63d
iv_kinematicIntrinsic-value velocity, acceleration and gap-z5d / 21d — peak swing alpha, IC ≈ 0.060 at 21d
iv_relativeSector- and industry-neutral cross-sectional z-score21d / 63d — peak rotation alpha, IC ≈ 0.060 at 63d
iv_cqr_returnConformalised quantile median forward return1d – 63d
iv_cqr_probCalibrated probability of positive forward return1d – 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.

The absent-forecast contract

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.

06Uncertainty quantification

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.

MetricResultTarget
True out-of-sample interval coverage96.57%95%
Expected calibration error0.020
Brier score, directional calibration0.247< 0.25
Asymmetric error reduction, high-side tail

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.

07Valuation

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.

A
Stochastic estimation

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.

B
Regime-conditional cost of capital

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.

C
Kinematic integration

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.

08Service architecture

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.

ServiceQuestion ownedPublishesExplicitly cannot
Investment IntelligenceWhat do we believe today?ii_belief — distribution per (symbol, horizon) with dispersion, direction probability, reliability and gate reasonSize a position, construct a portfolio, or score its own accuracy
Risk IntelligenceMay this book take this change, and at what size?Covariance, factor loadings, tail parameters, risk decisions, breaches, budget stateChoose what is worth holding; publish anything that tilts construction
Portfolio IntelligenceWhat does this book hold and what happens to it?Instances, positions, NAV series, realised performance, scorecardsForm a belief; judge whether a policy is good
Strategy IntelligenceWhich policies are worth running, and how much is real?Versioned strategy templates, strategy scorecardsOwn a simulator, a portfolio, an order or a user preference
Experiment IntelligenceWas any of it real?Model × context evidence lattice (~30k cells/day), per-day information coefficient series, hypothesis verdictsPromote a model, change a weight, size a position or place an order
Risk Intelligence is a control plane, not a stage

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.

Experiment Intelligence emits, and never acts

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.

09Risk control

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.

DomainMethod
Tail and copula riskExtreme value theory with generalised Pareto distributions; Clayton and Gumbel tail-dependency structures
Covariance estimationLedoit-Wolf shrinkage with dynamic conditional correlation GARCH; correlation-break detection typically 5–10 sessions ahead of moving-average methods
Allocation optimisationMulti-model Black-Litterman under hard operational bounds — 5% single-position ceiling, 150% maximum gross exposure
Backtested risk measuresVaR and CVaR under Kupiec, Christoffersen and Basel validation procedures
Stress testing8 scenarios — 6 historical, 2 hypothetical
10Execution cost

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.

11Validation and promotion

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.

GateMethodThreshold
Multiple-testing correctionHarvey, Liu & Zhu factor-zoo verificationt ≥ 3.0
Backtest inflationDeflated Sharpe ratio (Bailey & López de Prado)above threshold
Overfitting probabilityProbability of backtest overfittingbelow threshold
Out-of-sample stabilityWalk-forward validation, 8 sliding windows
Crisis behaviour16 historical crises, 1987–2024full pass
CalibrationPIT uniformity and Brier gates, dailyin-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.

12Known limitations

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.

Fundamental history begins in 1995.

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.

Regime detection is retrospective at the boundary.

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.

Macro series are revised after we act on them.

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.

Coverage guarantees are marginal, not conditional.

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 universe is U.S. equity, large and mid capitalisation.

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.

Horizons run 1 to 63 days.

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.

Execution modelling is an estimate, not a fill.

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.

References
Almgren, R. & Chriss, N. (2001). Optimal execution of portfolio transactions. Journal of Risk, 3(2), 5–39.
Bailey, D. H. & López de Prado, M. (2014). The deflated Sharpe ratio: correcting for selection bias, backtest overfitting and non-normality. Journal of Portfolio Management, 40(5), 94–107.
Corwin, S. A. & Schultz, P. (2012). A simple way to estimate bid-ask spreads from daily high and low prices. Journal of Finance, 67(2), 719–760.
Engle, R. (2002). Dynamic conditional correlation. Journal of Business & Economic Statistics, 20(3), 339–350.
Fama, E. F. & French, K. R. (2015). A five-factor asset pricing model. Journal of Financial Economics, 116(1), 1–22.
Gibbs, I. & Candès, E. (2021). Adaptive conformal inference under distribution shift. Advances in Neural Information Processing Systems, 34.
Harvey, C. R., Liu, Y. & Zhu, H. (2016). …and the cross-section of expected returns. Review of Financial Studies, 29(1), 5–68.
Ledoit, O. & Wolf, M. (2004). A well-conditioned estimator for large-dimensional covariance matrices. Journal of Multivariate Analysis, 88(2), 365–411.
Loughran, T. & McDonald, B. (2011). When is a liability not a liability? Textual analysis, dictionaries, and 10-Ks. Journal of Finance, 66(1), 35–65.
Vovk, V., Gammerman, A. & Shafer, G. (2005). Algorithmic Learning in a Random World. Springer.

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.

Final step

Invest like an institution. Without becoming one.

Stop reacting to the market. Run an institutional research process on your own holdings: continuous analysis, forecasts with stated uncertainty, and a scorecard for every number the platform publishes.

See the architecture