Reference
As of Fri 18 Sep 2026 · W38 · latest weekSynthetic data, sample interface
Methodology
How every figure in the workspace is produced: the dataset, each measure's definition, the model specifications and estimation, the flag rules, and how the models were checked. Definitions are written once and shared by every screen.
Data
The workspace runs on one reproducible synthetic dataset: 26 explicitly fictional companies (SAMPLE-A to SAMPLE-Z) across 11 sectors and a generated benchmark, BENCH. It is not market data, is not calibrated to any real security, and is not a record of performance.
756 weekday sessions run from 2023-10-27 to 2026-09-18. Market holidays are not modelled. Prices are illustrative USD per share, rounded to cents; every bar satisfies low ≤ open, close ≤ high.
Point-in-time policy: every calculation at an as-of date receives series truncated at that date, so no measure, model fit or flag can use a later observation. An automated test scrambles all data after an as-of date and confirms that nothing computed at that date changes.
Missing-history policy: a measure is shown as unavailable (–) until its full lookback exists; a shortened window is never substituted.
Generator structure
- Market factor. A two-state Markov regime (calm / stressed, daily switching probabilities 1.2% and 5.5%) sets the mean and volatility of the common return.
- Sector factors. One factor per sector, more volatile in the stressed regime, creates correlation clusters.
- Company returns. Beta to the market, a sector loading, GARCH(1,1) idiosyncratic shocks, rare jumps and a slow deterministic trend wave.
- Cointegrated pairs. SAMPLE-M on SAMPLE-E and SAMPLE-R on SAMPLE-H share a common stochastic trend by construction, so the cointegration tests can be checked against a known answer.
- Bars and volume. Open, high and low are drawn consistently with each session's volatility; volume responds to move size, jumps and the regime.
- Reproducibility. Seed 20260918; each component draws from its own seeded stream, so the same data are produced on every run.
Notation: BENCH in the formulas below stands for the market benchmark — BENCH (Titan Edge Sample Benchmark) in this workspace.
Measures · 59
Price & returns
- CloseClose
- Final price of the sessionUSD per share at the close: illustrative for synthetic data; split- and dividend-adjusted for market data. Not a live quotation. Does it rank the coverage? Test it in the lab
- 1-day return1D
- close[t] / close[t−1] − 1Simple return over one session. Does it rank the coverage? Test it in the lab
- 1-week return1W
- close[t] / close[t−5] − 1Simple return over five sessions. Does it rank the coverage? Test it in the lab
- 1-month return1M
- close[t] / close[t−21] − 1Simple return over 21 sessions. Does it rank the coverage? Test it in the lab
- 3-month return3M
- close[t] / close[t−63] − 1Simple return over 63 sessions. Does it rank the coverage? Test it in the lab
- 6-month return6M
- close[t] / close[t−126] − 1Simple return over 126 sessions. Does it rank the coverage? Test it in the lab
- 12-month return12M
- close[t] / close[t−252] − 1Simple return over 252 sessions. Does it rank the coverage? Test it in the lab
Trend & momentum
- Trend classificationTrend
- Uptrend: close > SMA50 > SMA200 · Downtrend: close < SMA50 < SMA200 · otherwise MixedThe report-sample classification, unchanged. Does it rank the coverage? Test it in the lab
- Distance from SMA50vs SMA50
- close / SMA50 − 1SMA50 is the mean of the latest 50 closes. Does it rank the coverage? Test it in the lab
- Distance from SMA200vs SMA200
- close / SMA200 − 1SMA200 is the mean of the latest 200 closes. Does it rank the coverage? Test it in the lab
- Momentum20Mom20
- close[t] / close[t−20] − 1The report-sample momentum measure, unchanged. Does it rank the coverage? Test it in the lab
- 12-1 month momentum12-1M
- close[t−21] / close[t−252] − 1Twelve-month return skipping the latest month, the conventional cross-sectional momentum horizon.Reference: Jegadeesh & Titman (1993) Does it rank the coverage? Test it in the lab
- Trend t-statistic (63d)Trend t
- t-ratio of b in ln(close) = a + b·time, OLS over 63 sessionsStrength and consistency of the log-price slope. |t| above about 2 indicates a slope distinguishable from zero under OLS assumptions, which serial correlation weakens. Does it rank the coverage? Test it in the lab
- Trend slope (63d, annualized)Slope
- 252 × b from the same regressionAnnualized log-price drift over the window. Does it rank the coverage? Test it in the lab
- Trend fit R²R²
- R² of the 63-session log-price regressionShare of log-price variation explained by a straight line. Does it rank the coverage? Test it in the lab
- RSI(14)RSI
- 100 − 100 / (1 + avg gain / avg loss), Wilder smoothing, 14 sessionsBounded 0-100 oscillator of recent gains against losses.Reference: Wilder (1978) Does it rank the coverage? Test it in the lab
- MACD histogram (% of price)MACD h
- (MACD − signal) / close; MACD = EMA12 − EMA26, signal = EMA9 of MACDScaled by price so values are comparable across companies. Does it rank the coverage? Test it in the lab
- ADX(14)ADX
- Wilder average of DX = 100 × |+DI − −DI| / (+DI + −DI)Strength of directional movement regardless of direction; readings above 25 are conventionally treated as directional.Reference: Wilder (1978) Does it rank the coverage? Test it in the lab
Relative strength
- 20-day relative performanceRS20
- Momentum20(company) − Momentum20(BENCH)The report-sample relative measure, in percentage points. Not RSI. Does it rank the coverage? Test it in the lab
- 63-day relative performanceRS63
- 3-month return − BENCH 3-month returnDifference in simple returns, percentage points. Does it rank the coverage? Test it in the lab
- 126-day relative performanceRS126
- 6-month return − BENCH 6-month returnDifference in simple returns, percentage points. Does it rank the coverage? Test it in the lab
- Relative-strength level (z)RS lvl z
- (ln(close/BENCH)[t] − mean) / sd over the trailing 126 sessionsWhere the price ratio sits within its own recent range. Used as the horizontal axis of the rotation map. Does it rank the coverage? Test it in the lab
- Relative-strength momentum (Δz, 10d)RS mom
- RS level z[t] − RS level z[t−10]Direction the relative-strength level is moving. Vertical axis of the rotation map. Does it rank the coverage? Test it in the lab
Volatility, drawdown & loss
- Volatility20Vol20Risk
- sd(20 log returns, denominator 19) × √252The report-sample close-to-close volatility, annualized. Does it rank the coverage? Test it in the lab
- Volatility60Vol60Risk
- sd(60 log returns) × √252Slower close-to-close volatility. Does it rank the coverage? Test it in the lab
- Yang-Zhang volatility (20d)YZ20Risk
- σ²_overnight + k·σ²_open-close + (1−k)·σ²_RS, k = 0.34 / (1.34 + (n+1)/(n−1))Drift-independent estimator using open, high, low and close; efficient and robust to opening gaps.Reference: Yang & Zhang (2000) Does it rank the coverage? Test it in the lab
- Parkinson volatility (20d)Park20Risk
- √( mean(ln(H/L)²) / (4 ln 2) × 252 )Range-based estimator; ignores opening gaps so tends to read low when gaps are large.Reference: Parkinson (1980) Does it rank the coverage? Test it in the lab
- EWMA volatilityEWMARisk
- σ²[t+1] = 0.94·σ²[t] + 0.06·r²[t]RiskMetrics exponentially weighted forecast for the next session, annualized.Reference: J.P. Morgan / Reuters (1996) Does it rank the coverage? Test it in the lab
- GARCH(1,1) next-session volatilityGARCHRisk
- h[t+1] = ω + α·ε²[t] + β·h[t], Gaussian MLE on 504 returns, variance targetingConditional volatility forecast for the next session, annualized.Reference: Bollerslev (1986)
- GARCH persistence (α + β)α+β
- α + β from the fitted GARCH(1,1)How slowly volatility shocks decay; half-life = ln ½ / ln(α + β) sessions.
- Volatility20 percentile (1y)Vol pctlRisk
- Percentile of Volatility20 within its own trailing 252 readingsWhere current volatility sits relative to the company's own year. Does it rank the coverage? Test it in the lab
- ATR(14) % of priceATR %Risk
- Wilder average true range / closeTypical daily range including gaps.Reference: Wilder (1978) Does it rank the coverage? Test it in the lab
- Below 252-day closing highDD252Risk
- close / max(closes t−251…t) − 1The report-sample drawdown measure: current distance below the rolling high. Does it rank the coverage? Test it in the lab
- Maximum drawdown (1y)MaxDDRisk
- min over the year of close / running peak − 1Deepest peak-to-trough decline inside the trailing 252 sessions. Does it rank the coverage? Test it in the lab
- Ulcer index (126d)UlcerRisk
- √ mean(drawdown%²) over 126 sessionsPenalizes both depth and duration of drawdowns.Reference: Martin & McCann (1989) Does it rank the coverage? Test it in the lab
- 1-day 95% VaR (historical)VaR95Risk
- −5th percentile of the latest 252 daily log returnsLoss exceeded on about one session in twenty over the trailing year. Does it rank the coverage? Test it in the lab
- 1-day 97.5% expected shortfallES97.5Risk
- −mean of the worst 2.5% of the latest 252 daily log returnsAverage loss in the tail beyond the 97.5% VaR. Does it rank the coverage? Test it in the lab
Volume & levels
- Volume vs 20-day averageVol vs 20d
- volume[t] / mean(volume t−19…t) − 1The report-sample volume measure; the average includes the current session. Does it rank the coverage? Test it in the lab
- Volume z-score (60d)Vol z
- (ln V[t] − mean ln V) / sd ln V over the prior 60 sessionsLog-volume anomaly against the prior quarter; the current session is excluded. Sessions with no volume (halts) are left out, and have no z-score. Does it rank the coverage? Test it in the lab
- Average dollar volume (20d)ADV
- mean(close × volume) over 20 sessionsIllustrative USD traded per session. Does it rank the coverage? Test it in the lab
- Amihud illiquidity (20d)AmihudRisk
- mean(|r| × 10⁴ / (dollar volume / 10⁶))Price impact per USD 1M traded, in basis points. Higher means less liquid.Reference: Amihud (2002) Does it rank the coverage? Test it in the lab
- Up/down volume ratio (20d)U/D vol
- Σ volume on up closes / Σ volume on down closesAbove 1 means more shares changed hands on rising sessions. Does it rank the coverage? Test it in the lab
- Position in 52-week rangeRange pos
- (close − 52w low) / (52w high − 52w low)0 at the 52-week low, 100 at the high (intraday extremes). Does it rank the coverage? Test it in the lab
- Distance from 52-week highvs 52w H
- close / max(high, 252) − 1Uses intraday highs. Does it rank the coverage? Test it in the lab
- Distance from 20-day VWAPvs VWAP
- close / (Σ typical × volume / Σ volume) − 1, typical = (H+L+C)/3Position against the volume-weighted average of the latest month. Does it rank the coverage? Test it in the lab
- Bollinger %B%B
- (close − lower) / (upper − lower), 20 sessions, 2 population sd0 at the lower band, 1 at the upper band.Reference: Bollinger (2001) Does it rank the coverage? Test it in the lab
- Bandwidth percentile (126d)BW pctl
- Percentile of (upper − lower) / middle within 126 sessionsLow readings mark range compression. Does it rank the coverage? Test it in the lab
Market & regime models
- Beta to benchmark (252d)Beta
- OLS slope of r on r_BENCH over 252 sessionsSensitivity to the market benchmark. Does it rank the coverage? Test it in the lab
- Alpha (annualized, 252d)Alpha
- 252 × intercept of the market-model regressionAverage return unexplained by BENCH over the window; descriptive, not predictive. Does it rank the coverage? Test it in the lab
- Market-model R²R² mkt
- R² of r on r_BENCHShare of variance explained by the benchmark. Does it rank the coverage? Test it in the lab
- Residual volatilityResid σRisk
- sd(regression residual) × √252Company-specific volatility after removing benchmark exposure. Does it rank the coverage? Test it in the lab
- Downside betaβ downRisk
- cov / var on sessions where BENCH fellSensitivity on down-market sessions only. Does it rank the coverage? Test it in the lab
- Upside betaβ up
- cov / var on sessions where BENCH roseSensitivity on up-market sessions only. Does it rank the coverage? Test it in the lab
- High-volatility regime probabilityP(hi-vol)Risk
- Filtered P(state 2 | returns to t), two-state Gaussian HMM on 504 returnsProbability the company is in its higher-volatility state, using returns up to the as-of date only.Reference: Hamilton (1989); Rabiner (1989)
Statistical diagnostics
- Hurst exponent (R/S, corrected)Hurst
- 0.5 + slope of ln(R/S) − ln E[R/S] on ln n, n = 8, 16, 32, 64 over 504 returnsNear 0.5 for independent returns; above suggests persistence, below anti-persistence. Noisy on two years of data.Reference: Hurst (1951); Anis & Lloyd (1976)
- Variance ratio VR(5)VR(5)
- Var(5-day returns) / (5 × Var(1-day returns)), overlapping1 under a random walk; above 1 indicates positive serial correlation.Reference: Lo & MacKinlay (1988) Does it rank the coverage? Test it in the lab
- VR(5) robust zVR z
- (VR − 1) / √(θ̂ / T), heteroskedasticity-consistent|z| above 1.96 rejects a random walk at 5%.Reference: Lo & MacKinlay (1988)
- ADF statistic (log price, 1y)ADF
- t-ratio of γ in Δy = a + γ·y[t−1] + φ·Δy[t−1] + eMore negative is stronger evidence against a unit root; about −2.87 is the 5% critical value.Reference: Dickey & Fuller (1979); MacKinnon (2010)
- Lag-1 autocorrelationAC(1)
- corr(r[t], r[t−1]) over 252 sessionsSerial correlation of daily returns; about ±0.12 is significant at 5% for 252 observations. Does it rank the coverage? Test it in the lab
03Models
Range-based volatility estimators
Parkinson: σ² = mean(ln(H/L)²) / (4 ln 2)Garman-Klass: σ² = mean(½ ln(H/L)² − (2 ln 2 − 1) ln(C/O)²)Rogers-Satchell: σ² = mean(ln(H/C) ln(H/O) + ln(L/C) ln(L/O))Yang-Zhang: σ² = σ²_o + k σ²_c + (1 − k) σ²_RS, k = 0.34 / (1.34 + (n + 1)/(n − 1))Estimation · Rolling 20-session windows, annualized with √252. The close-to-close estimator uses the sample standard deviation of log returns.
Outputs · Five comparable volatility series and a current-value comparison table.
Limitations · Parkinson and Garman-Klass assume no drift and no opening gap; Rogers-Satchell allows drift but not gaps; Yang-Zhang handles both. All assume continuous trading within the session.
- Parkinson, M. (1980). The Extreme Value Method for Estimating the Variance of the Rate of Return. Journal of Business, 53(1).
- Garman, M. B. & Klass, M. J. (1980). On the Estimation of Security Price Volatilities from Historical Data. Journal of Business, 53(1).
- Rogers, L. C. G. & Satchell, S. E. (1991). Estimating Variance from High, Low and Closing Prices. Annals of Applied Probability, 1(4).
- Yang, D. & Zhang, Q. (2000). Drift-Independent Volatility Estimation Based on High, Low, Open, and Close Prices. Journal of Business, 73(3).
GARCH(1,1) conditional volatility
r[t] = μ + ε[t], ε[t] = √h[t] · z[t], z ~ N(0, 1)h[t] = ω + α ε²[t−1] + β h[t−1], ω = σ̄² (1 − α − β)Estimation · Gaussian maximum likelihood on the latest 504 daily log returns with variance targeting. Nelder-Mead simplex over a logistic reparameterisation enforcing α, β ≥ 0 and α + β < 1, from three starting points; the best likelihood is kept.
Outputs · ω, α, β, persistence, half-life of shocks, conditional volatility path, next-session forecast and the forecast term structure E[h(t+k)] = σ̄² + (α + β)^(k−1) (h(t+1) − σ̄²).
Limitations · Symmetric response to positive and negative shocks (no leverage term); Gaussian innovations understate tail risk; parameters are re-estimated at each as-of date and can move.
- Bollerslev, T. (1986). Generalized Autoregressive Conditional Heteroskedasticity. Journal of Econometrics, 31(3).
- Nelder, J. A. & Mead, R. (1965). A Simplex Method for Function Minimization. The Computer Journal, 7(4).
EWMA volatility
σ²[t+1] = λ σ²[t] + (1 − λ) r²[t], λ = 0.94Estimation · Seeded with the mean squared return of the first 20 sessions; no parameters are estimated.
Outputs · Next-session volatility forecast; the reference scale for the 3-standard-deviation move flag.
Limitations · Implies no mean reversion of volatility; λ is fixed rather than fitted.
- J.P. Morgan / Reuters (1996). RiskMetrics — Technical Document, 4th edition.
Volatility cone
For horizons h ∈ {10, 21, 42, 63, 126}: distribution of overlapping close-to-close realized volatility over the available historyEstimation · Two years of history to the as-of date.
Outputs · Minimum, 10th, 25th, 50th, 75th, 90th percentiles, maximum and the current reading per horizon.
Limitations · Overlapping windows are highly autocorrelated, so the percentiles carry less information than their count suggests.
- Burghardt, G. & Lane, M. (1990). How to Tell if Options Are Cheap. Journal of Portfolio Management, 16(2).
Two-state Gaussian hidden Markov model
r[t] | s[t] = k ~ N(μ_k, σ²_k), k ∈ {low-volatility, high-volatility}P(s[t] = j | s[t−1] = i) = p_ijEstimation · Baum-Welch expectation-maximization with scaled forward-backward recursions, initialised by splitting returns at the 80th percentile of |r|. States are ordered by volatility. Convergence at a relative log-likelihood change below 10⁻⁸ or 300 iterations.
Outputs · State means and volatilities, transition matrix, expected durations 1/(1 − p_ii), stationary shares, filtered probabilities (information to each date) and smoothed probabilities (information to the as-of date).
Limitations · Two states is a modelling choice; the likelihood can have local maxima; smoothed probabilities for past dates use later data within the window and are labelled as such.
- Hamilton, J. D. (1989). A New Approach to the Economic Analysis of Nonstationary Time Series and the Business Cycle. Econometrica, 57(2).
- Rabiner, L. R. (1989). A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition. Proceedings of the IEEE, 77(2).
Market model, rolling and Kalman betas
r[t] = α + β r_BENCH[t] + ε[t] (OLS, 252 sessions)State space: [α, β][t] = [α, β][t−1] + η[t], r[t] = α[t] + β[t] r_BENCH[t] + ε[t]Estimation · OLS for the static model and 126-session rolling betas. The Kalman filter is initialised from OLS on the first 60 sessions; state noise variances are 10⁻⁹ (α) and 10⁻⁴ (β) per session.
Outputs · α, β with t-statistics, R², residual volatility, tracking error, up- and down-market betas, capture ratios, and a time-varying β with a 95% band.
Limitations · Single-index model against one market benchmark; state-noise variances are fixed choices that trade responsiveness for stability.
- Kalman, R. E. (1960). A New Approach to Linear Filtering and Prediction Problems. Journal of Basic Engineering, 82(1).
Correlation structure, shrinkage and principal components
Ledoit-Wolf: Σ* = δ m I + (1 − δ) S, with δ estimated from the dataPCA of the sample correlation matrix (cyclic Jacobi eigen-decomposition)Absorption ratio = Σ top-k eigenvalues / Σ all eigenvalues, k = ⌈n / 5⌉Clustering: average linkage on d = √(½(1 − ρ))Estimation · 126-session windows for correlation and PCA; 252 sessions for the basket risk model. Weekly history of the absorption ratio over 52 weeks.
Outputs · Clustered correlation heatmap, shrinkage intensity, eigenvalue spectrum and loadings, absorption ratio and its percentile, average pairwise correlation.
Limitations · Sample windows trade responsiveness for noise; with 26 names and 126 observations the sample correlation matrix is noisy, which is why shrinkage is shown alongside it.
- Ledoit, O. & Wolf, M. (2004). A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices. Journal of Multivariate Analysis, 88(2).
- Kritzman, M., Li, Y., Page, S. & Rigobon, R. (2011). Principal Components as a Measure of Systemic Risk. Journal of Portfolio Management, 37(4).
- Mantegna, R. N. (1999). Hierarchical Structure in Financial Markets. European Physical Journal B, 11(1).
Coverage basket risk decomposition
σ_p = √(w' Σ* w), marginal_i = (Σ* w)_i / σ_p, component_i = w_i · marginal_iDiversification ratio = Σ w_i σ_i / σ_pEstimation · Equal weights across the coverage universe, shrinkage covariance over 252 sessions.
Outputs · Ex-ante volatility, Gaussian and historical VaR, expected shortfall, per-company and per-sector shares of risk.
Limitations · The equal-weight basket is an analytical reference for how risk is distributed across the covered names, not a portfolio, a model allocation or a recommendation.
- Choueifaty, Y. & Coignard, Y. (2008). Toward Maximum Diversification. Journal of Portfolio Management, 35(1).
Value at risk and expected shortfall
Historical: −quantile(r, 1 − c)Gaussian: −(μ + σ z₁₋c)Cornish-Fisher: z* = z + (z² − 1)S/6 + (z³ − 3z)K/24 − (2z³ − 5z)S²/36ES: −mean of returns at or below the (1 − c) quantileEstimation · One-session horizon on the latest 252 daily log returns.
Outputs · VaR at 95% and 99% by three methods; ES at 97.5% and 99%.
Limitations · A single year contains few tail observations; the Cornish-Fisher expansion can misbehave for extreme skewness or kurtosis.
- Cornish, E. A. & Fisher, R. A. (1938). Moments and Cumulants in the Specification of Distributions. Revue de l'Institut International de Statistique, 5(4).
Stationarity and serial-dependence diagnostics
ADF: Δy[t] = a (+ b t) + γ y[t−1] + φ Δy[t−1] + e[t], statistic = t(γ)Variance ratio: VR(q) with the heteroskedasticity-consistent z* statisticHurst: rescaled range with the Anis-Lloyd expected R/S correctionLjung-Box Q(10) on returns and squared returnsEstimation · Two years of daily data; ADF critical values from MacKinnon's response surfaces at the actual sample size.
Outputs · Test statistics, critical values, p-values and the autocorrelation functions of returns and squared returns.
Limitations · Tests have low power on two years of data; running many tests across a universe produces some rejections by chance.
- Dickey, D. A. & Fuller, W. A. (1979). Distribution of the Estimators for Autoregressive Time Series with a Unit Root. Journal of the American Statistical Association, 74(366).
- MacKinnon, J. G. (2010). Critical Values for Cointegration Tests. Queen's Economics Department Working Paper No. 1227.
- Lo, A. W. & MacKinlay, A. C. (1988). Stock Market Prices Do Not Follow Random Walks. Review of Financial Studies, 1(1).
- Hurst, H. E. (1951). Long-Term Storage Capacity of Reservoirs. Transactions of the American Society of Civil Engineers, 116.
- Anis, A. A. & Lloyd, E. H. (1976). The Expected Value of the Adjusted Rescaled Hurst Range of Independent Normal Summands. Biometrika, 63(1).
- Ljung, G. M. & Box, G. E. P. (1978). On a Measure of Lack of Fit in Time Series Models. Biometrika, 65(2).
Engle-Granger cointegration
ln Y[t] = c + h ln X[t] + u[t] (OLS)ADF on û without deterministic terms; two-variable, constant critical valuesEstimation · Two years of log prices for every same-sector pair; Y is the later ticker alphabetically.
Outputs · Hedge ratio, ADF statistic against 1/5/10% critical values, a unit-root check on each leg, spread z-score and mean-reversion half-life.
Limitations · Testing many pairs produces false rejections at the nominal rate; results depend on which series is the dependent variable; the test assumes both legs are I(1), so a leg that is stationary on its own can produce a stationary spread without a shared trend; cointegration can break down.
- Engle, R. F. & Granger, C. W. J. (1987). Co-Integration and Error Correction: Representation, Estimation, and Testing. Econometrica, 55(2).
Technical indicators
RSI(14), ATR(14), +DI/−DI and ADX(14) with Wilder smoothingMACD(12, 26, 9) with SMA-seeded EMAsBollinger bands (20, 2 population sd)Donchian channels (20, 55), rolling VWAP (20), On-Balance VolumeEstimation · Daily bars to the as-of date; indicators are unavailable until their full lookback exists.
Outputs · Chart overlays, oscillator panes and screener columns.
Limitations · Descriptive transformations of price and volume; thresholds such as 70/30 or 25 are conventions, not calibrated levels.
- Wilder, J. W. (1978). New Concepts in Technical Trading Systems.
- Bollinger, J. (2001). Bollinger on Bollinger Bands.
Flag rules · 20
| Rule | Category | Priority | Definition |
|---|---|---|---|
| Close crossed SMA50 | Trend & momentum | medium | Sign change of close − SMA50 between consecutive sessions; touching the average is not a crossing. |
| SMA50 crossed SMA200 | Trend & momentum | high | Sign change of SMA50 − SMA200 between consecutive sessions. |
| Trend classification changed | Trend & momentum | medium | Uptrend (close > SMA50 > SMA200), Downtrend (close < SMA50 < SMA200) or Mixed changed from the prior session. Repeats within three sessions are suppressed. |
| RSI(14) left the 30-70 band | Trend & momentum | low | Wilder RSI(14) crossed above 70 or below 30. |
| MACD line crossed zero | Trend & momentum | low | EMA12 − EMA26 changed sign. |
| ADX(14) rose above 25 | Trend & momentum | low | Wilder ADX(14) crossed above 25, the conventional threshold for a directional move. |
| 20-day relative performance crossed zero | Relative strength | medium | Momentum20 minus the benchmark's Momentum20 changed sign (the report-sample definition). |
| Entered a relative-strength quintile extreme | Relative strength | medium | Cross-sectional percentile of 63-day relative performance entered the top (≥ 80th) or bottom (≤ 20th) quintile of coverage. |
| Volatility20 above its 90th percentile | Volatility & drawdown | high | Close-to-close Volatility20 crossed above the 90th percentile of its own trailing 252 readings. |
| Volatility20 below its 10th percentile | Volatility & drawdown | low | Volatility20 crossed below the 10th percentile of its own trailing 252 readings. |
| Session move beyond 3 EWMA standard deviations | Volatility & drawdown | high | |log return| exceeded 3 × the prior session's RiskMetrics EWMA daily volatility (λ = 0.94). |
| Crossed 20% below the 252-day high | Volatility & drawdown | high | Close / max(closes, 252 sessions) − 1 crossed −20% in either direction. |
| Bollinger bandwidth at a 126-session low | Volatility & drawdown | low | Bandwidth (upper − lower) / middle of the 20-session, 2σ bands set a 126-session low. Repeats within five sessions are suppressed. |
| New 252-session closing high | Volume & levels | medium | Close at or above every close of the prior 251 sessions, first occurrence in five sessions. |
| New 252-session closing low | Volume & levels | medium | Close at or below every close of the prior 251 sessions, first occurrence in five sessions. |
| Volume anomaly | Volume & levels | medium | z-score of ln(volume) against the prior 60 sessions reached 2.5 or more. |
| Close outside the Bollinger bands | Volume & levels | low | Close moved from inside to outside the 20-session, 2σ Bollinger bands. |
| Kalman beta shift | Market model | medium | State-space (Kalman) beta to the benchmark moved by more than 0.25 over 20 sessions. |
| Benchmark regime change | Coverage & benchmark | high | Filtered probability of the high-volatility state in the benchmark's two-state HMM (refitted each week-end on data to that date) crossed 50%. |
| Breadth crossed 50% | Coverage & benchmark | medium | Share of covered companies closing above their SMA50 crossed 50%. |
Monitoring and review · 8 rules · monitoring-rules-1.0.0
The monitoring rules decide which changes reach review. Each is a documented test on measures computed with data to the week-end only; a change names its rule, the settings in force that week and the values that met them. A rule does not fire again for the same company during its cool-down, so a persisting condition is one change, not a weekly repeat. Settings changed later apply from the week they are made and never rewrite earlier flags.
Relative-strength deterioration Relative strength · cool-down 4 weeks
30-session relative performance = the company's 30-session log return less the benchmark's. Its percentile rank among covered companies at the week-end is compared with the rank 4 weeks earlier; the rule fires when it has fallen by at least 45 points and ends in the bottom third of coverage.
Relative-strength improvement Relative strength · cool-down 4 weeks
The same measure as relative-strength deterioration; the rule fires when the percentile rank has risen by at least 50 points over 4 weeks and ends in the top third of coverage.
Unusually high volatility Volatility & drawdown · cool-down 4 weeks
Annualised close-to-close volatility over 20 sessions is ranked against its own trailing 252 readings. The rule fires when the rank at the week-end is at or above the 95th percentile and was below it at the previous week-end.
Drawdown beyond a set level Volatility & drawdown · cool-down 6 weeks
Drawdown = close divided by the highest close of the last 252 sessions, less one. The rule fires when the drawdown at the week-end is deeper than 20% and was not at the previous week-end.
Unusual volume Volume · cool-down 3 weeks
z-score of the natural log of volume against the mean and standard deviation of the prior 60 sessions. The rule fires when any session of the week reaches 2.8σ.
Trend change Trend · cool-down 6 weeks
Uptrend: close above its 50-session average, which is above its 200-session average; downtrend: the reverse; otherwise mixed. The rule fires when the classification at the week-end is an uptrend or downtrend, the previous week-end's was not, and the last defined trend before it was the opposite one. A move out of a mixed period in the same direction as before is not a change.
Company-specific return anomaly Statistical anomaly · cool-down 3 weeks
A market model (the company's daily log return on the benchmark's) is fitted on the 126 sessions before each session. The rule fires when a session of the week has a residual of at least 3.8σ residual standard deviations.
Benchmark and sector disagree Model disagreement · cool-down 6 weeks
30-session relative performance against the benchmark and against the equal-weight mean of same-sector peers have opposite signs, each at least 5% in size, at the week-end but not at the previous week-end. The two comparisons tell different stories about the same company.
Where the move sits. Over the change window the company's log return is compared with the equal-weight mean of its covered sector peers and with the benchmark. When the part not explained by the benchmark is at most 35% of the move and in the same direction, the move is described as market-related; otherwise, the company's excess over its peers against the peers' excess over the benchmark decides between company-specific (at least 65% of the two), sector-related (at most 35%) and mixed. Moves under 1.5% are not placed. This describes where a move sits, not what caused it.
Context. Developments are attached when they fall between three sessions before the change window and five sessions after it, and concern the company, a listed competitor, its sector or the market. Each shows why it was attached. Titan never states that a development caused a move; the sample's developments are synthetic.
Ranking and learning. Changes are ranked by severity — how far past its rule a change went, from 1 to 3 — adjusted for the company's monitoring priorities (×1.25), a Titan analyst's priority, and the team's past decisions on the same kind of change. Each decision counts important +1, investigate +0.75, relevant +0.5, watch +0.5, dismiss -0.25, noise -1; the average is smoothed as if three neutral decisions had already been made, and moves the score by at most 35%. Learned weights reorder and never hide; a change of severity 1.8 or more is never ranked below its own severity.
Group percentiles
Group percentiles are the equal-weight mean of each member measure's percentile rank within coverage. They locate a company relative to the other covered names on one dimension; they are not scores, ratings or recommendations.
Trend & momentum
- Distance from SMA200
- 63-day trend t-statistic
- 12-1 month momentum
- 3-month return
Relative strength
- 20-day relative performance
- 63-day relative performance
- 126-day relative performance
- Relative-strength level (z)
Volatility & drawdown
- Volatility20
- GARCH next-session volatility
- 1-day 95% historical VaR
- Depth below 252-day high (deeper ranks higher)
Volume & levels
- Volume vs 20-day average
- Up/down volume ratio
- Position in 52-week range
- Distance from 20-day VWAP
A higher Volatility & drawdown percentile means more risk relative to coverage, and is shown in the adverse colour when elevated.
Validation
Checked live against the generator
Computing.
Covered by the automated test suite
- Normal, chi-square and Student-t functions against tabulated values; OLS, eigen-decomposition, inverse and Cholesky against exact answers.
- All five volatility estimators on simulated diffusions with known volatility; GARCH(1,1) recovering simulated α, β and persistence.
- The HMM recovering a simulated two-state process; ADF separating random walks from stationary series; Hurst, variance ratio and Ljung-Box on independent and autocorrelated data.
- Ledoit-Wolf shrinkage bounds and behaviour, PCA of an equicorrelation matrix, clustering of block structure and Euler risk contributions summing to total risk.
- Kalman beta tracking a structural break without look-ahead; the point-in-time guarantee for every workspace output.
Backtest lab
The lab studies the terminal's own measures, flags and monitoring rules over up to ten years: the same definitions as every screen here, computed as daily series, and checked against the terminal's values in automated tests. Titan sets studies up from plain words; every figure is computed by the engine.
- Event studies
- An occurrence is a session on which the condition becomes true for a company, at least the cool-down after its previous occurrence. Outcomes run from that session's close, when the occurrence is known.
- Excess outcome: the company's simple return less the benchmark's over the same sessions. A market-wide condition is one occurrence per session, measured on the study companies at equal weight.
- Ordinary sessions: every session on which the condition could be evaluated for the same companies in the same period.
- Intervals: moving-block bootstrap over calendar weeks, blocks as long as the horizon, 1,000 draws, seeded from the study so they reproduce. t-statistics cluster by week.
- Measure studies
- At each rebalance close (last session of a complete week or month), companies with a value are sorted into equal groups; ties share their average rank.
- Group returns are equal-weight, close to next rebalance close, before costs. The information coefficient is the Spearman correlation with the return over each horizon; Newey–West t-statistics allow for overlap.
- Model correlation
- At each rebalance close, the Spearman correlation between every pair of measures across the companies with all of them, averaged over closes; and the Pearson correlation between their information-coefficient series.
- Rule backtests
- Decisions at a session's close with data to that close; filled at the next session's open (or close, if chosen). Long only, no leverage: purchases never exceed the cash available; cash earns nothing.
- Each trade pays the stated cost on the value traded, on each side. Positions are held as shares, so weights drift between trades.
- Sharpe ratios are annualised with √252 and a zero risk-free rate; their intervals allow for skew and fat tails (Mertens, 2002). The deflated Sharpe ratio (Bailey & López de Prado, 2014) allows for every variant tried in the conversation.
Analyst ratings
Third-party sell-side ratings, shown as published in each firm's own words and mapped to positive, neutral or negative. A rating counts from the first close after it was published. An analyst's record is measured in spells — one continuous stance on one company, up to a year — as the company's return less the market, sector or coverage benchmark, signed by the rating's direction, with 95% intervals from a block bootstrap over weeks and the same graded checks as the backtest lab. Rankings shrink each record towards the average of everyone ranked, so short records do not rank on luck. Every figure uses only what was published, and priced, by the as-of date.
The full method, on the Analyst ratings pageWhat followed
Each of the 28 rules has a record of what followed its occurrences on the coverage's history, measured by a protocol fixed on 26 Oct 2026 (outcomes-protocol-1.1.0, fingerprint 19193724) after the history shown, so the historical records are in-sample and only occurrences from that date form an out-of-sample record: which occurrences count, the one question the record answers, the sign each occurrence is measured with, the horizons and the comparison.
- Protocol outcomes-protocol-1.1.0, fixed on 2026-10-26: each rule's occurrences, question, sign, horizons and comparison. It was fixed after the history it scores (and exploratory Backtest lab studies of these rules existed before), so every historical record is in-sample; only occurrences on or after that date form an out-of-sample record. Changing a definition needs a new version. It replaced version 1.0.0 of 2026-10-23 before any record was released: the same rules, questions and comparisons, with these conventions reworded to describe the engine exactly and one episode case brought into line with convention 6.
- Horizons of 5, 20, 60 sessions. Grades and the family test read the 20-session horizon; the others are shown without a grade. A comparison needs at least 3 other covered companies with prices over the window.
- Each occurrence is measured from the first session it could have been acted on: the close of the session after the one at which the weekly report containing it existed — the week-end's own close, or the next session's for a week cut short by a holiday (monitoring rules fire at a week-end). The return from the flag's own close is shown beside it, so the cost of the weekly delivery is visible.
- Each company's return is compared with the average return of the other covered companies over exactly the same sessions, so a market move, or one common to the coverage, is not counted as the rule's. The return against the market benchmark is shown beside it.
- Sizes of moves and depths of falls are in the company's own expected standard deviations (RiskMetrics EWMA, λ = 0.94, at the entry close, scaled to the horizon), less the other companies' over the same sessions, less what companies in the same volatility state (the decile of their volatility within their own last 252 readings) showed — so a rule that merely picks a volatile or a quiet moment, where the EWMA forecast overstates or understates what follows, shows nothing.
- Occurrences on a company entered at the same session count as one, in the direction of the latest (the state the weekly report showed). It joins the current episode when it is in the same direction and within a horizon of that episode's start; otherwise it starts a new episode. Records count episodes; the list keeps the latest occurrences.
- A horizon that has not elapsed by the as-of date is pending: it is listed with the date it completes, or as completing after the last session in the data, and enters no record.
- The standard error comes from a circular block bootstrap over every calendar week of the period, empty weeks included, with blocks three times the horizon, so overlapping horizons and occurrences in the same weeks are not treated as independent. The 95% interval is the record ± 1.96 standard errors, and the p-value and the smallest effect it could reliably detect (2.8 standard errors) come from the same standard error, so the interval clears zero exactly when p < 0.05. Records with fewer than 10 episodes show their value only; an interval also needs at least 8 calendar weeks and at least 95% of the resampled histories to be measurable.
- With up to 26 company rules read together, some records will look notable by chance. Each record with an interval at the primary horizon carries a Benjamini–Yekutieli q-value within the family of such records (valid however the rules depend on one another); a record without an interval is not tested, carries no q-value and is not counted in the family. A record with an interval clear of zero but q above 0.1 is not distinguishable from chance across the family and shows no evidence.
- A grade needs the interval clear of zero with q at or below 0.1, and a record without an interval is not graded; then strong when the rest pass — at least 30 episodes in 20 weeks (caution from 10), the same sign in the earlier and later halves of its episodes by entry date and, for return records, in both parts of the horizon (sessions 1–5 and 6–20), and no company with more than 25% of the episodes (caution to 50%) — moderate when one only raises a caution, weak when one fails. On synthetic demonstration data nothing is graded.
- Licensed prices are back-adjusted for splits and dividends as currently known, so returns are total returns. Today's coverage list is applied to the whole history, so companies that left are missing: falls that continued are under-represented in the records of the down-move rules. Monitoring rules run at their registered defaults, not a client's own settings.
- These are descriptions of what followed in this history, not forecasts, signals or recommendations, and not returns anyone earned: there are no costs and no position sizes.
Status and limitations
- Synthetic data only. This workspace is running on the demonstration universe. A client's actual coverage universe and licensed data replace it once configured and licensed for display.
- Definitions pending approval. Final report definitions, parameters and data references for the Titan Edge Quant service are pending owner approval; this page documents the demonstration build.
- Descriptive, not predictive. Measures and models describe historical behaviour of the synthetic series. Flags, percentiles and regimes are not signals, ratings, forecasts of price or recommendations.
- Statistical caveats. Two to three years of daily data give tests limited power; running many tests across a universe produces some significant results by chance.