Home / Strategies / Statistical Arbitrage / Backtesting Methodology Reference

Momentum Omega Quantitative Backtesting Methodology & Simulation Engine Reference

Institutional Simulation Architecture, Point-in-Time Tradable Universes, Quantitative Factor Mechanics, Intraday EMA Filters, Execution Friction Modeling, and Quantitative Tearsheet Auditing.

Framework: Institutional Event-Driven Simulation Engine • Factor Model: Momentum Omega (\(\Omega\)) • Technical Gate: 15m Triple EMA (50 / 200 / 800) • Friction: Tiered Broker Fee Schedule + Quadratic Slippage
Section 1

Executive Summary & Foundational Principles

In systematic quantitative asset management, backtesting represents the empirical laboratory for strategy validation, parameter risk-budgeting, and capital allocation. The central objective of backtesting is not to produce cosmetically appealing historical returns, but to provide an executionally conservative, mathematically rigorous estimate of how a strategy performs across diverse historical market regimes, liquidity bottlenecks, and structural frictions.

The simulation framework leverages an Event-Driven Equity Simulation Engine coupled with a high-throughput Time-Series Database (TSDB) backbone to execute deterministic, bar-by-bar simulations across US equities.

High-Level Quantitative Pipeline Flow

flowchart LR
    A[1. Historical Market Data] --> B[2. Universe & Liquidity Sizing]
    B --> C[3. Momentum Alpha Scoring]
    C --> D[4. Intraday EMA Gatekeeper]
    D --> E[5. Portfolio Risk Weighting]
    E --> F[6. Slippage & Broker Fees]
    F --> G[7. Tearsheet Performance Audit]
            

Five Core Methodological Defenses:

1. Strict Temporal Separation (\(T\) vs. \(T+1\))

Signals calculated from market data ending at day \(T\) close are queued strictly for execution on or after market open on day \(T+1\), preventing look-ahead bias.

2. Point-in-Time Universe Tracking

Dynamic historical universes track listings, corporate delistings, and bankruptcies, completely eliminating survivorship bias.

3. Continuous Liquidity Filtering (ADV)

Trailing 30-day Average Dollar Volume filtering (\(\$10\text{M} - \$500\text{M}\)) prevents simulated fills in illiquid or untradable micro-cap securities.

4. Institutional Friction Modeling

Every simulated order incurs explicit broker per-share commissions with minimum ticket costs and quadratic volume-share market impact.

Section 2

System Architecture & Daily Execution Lifecycle

The simulation engine orchestrates a modular pipeline separating time-series market data, factor computation, intraday technical gatekeeping, portfolio allocation, and execution accounting:

Simulation Lifecycle Architecture

flowchart TD
    subgraph Data ["1. Data Storage & Ingestion"]
        DB[(Time-Series Market Store)] -->|Daily EOD Bars| PIPE[Trading Pipeline Engine]
        DB -->|15m Intraday Bars| EMA_CACHE[Intraday Moving Averages]
    end

    subgraph Signals ["2. Alpha Generation & Gatekeeping"]
        PIPE --> UNI[Tradable Universe Sizing]
        UNI --> ALPHA[Momentum Omega Factor: Differential / Volatility]
        ALPHA --> GATES{Triple EMA Confirmation: 50, 200, 800}
        EMA_CACHE -.-> GATES
    end

    subgraph Portfolio ["3. Portfolio & Execution"]
        GATES --> CONSTR[Equal-Weight Portfolio Constructor]
        CONSTR --> RUNNER[Execution Runner: PerShare Fees & Slippage]
        RUNNER --> AUDIT[Post-Rebalance Defensive Audit]
        RUNNER --> DELIST[Delisting Liquidation Handler]
    end

    subgraph Reports ["4. Performance Reporting"]
        AUDIT & DELIST --> TEARSHEET[Individual Scenario Report: report.html]
        TEARSHEET --> MATRIX[Cross-Scenario Analysis: analysis.html]
    end
            

Execution Timeline (\(T\) vs. \(T+1\)):

Phase Timing (EST) Actions Performed Safeguard Guarantee
Day \(T\) Market Hours 09:30 – 16:00 Equity trading sessions record regular close and intraday 15m bars. No simulation signals computed during active trading.
Day \(T\) Post-Market 16:05 – 17:30 EOD ingestion runs; trading pipeline evaluates Momentum Omega scores. Pipeline array indexing strictly limited to \(data[:, -1] = P_T\).
Day \(T+1\) Market Open 09:30 Simulation engine routes orders; fills executed with slippage and broker commissions. Orders executed strictly at \(T+1\) opening bar prices.
Day \(T+1\) Intraday & Close 09:30 – 16:00 Intraday EMA trend monitoring, defensive position audits, and delisting liquidations. Immediate liquidation of delisted or disqualified holdings.
Section 3

Stage 1 — Universe Selection & Market Data Sizing

The tradable asset universe dynamically adapts to historical market conditions. Rather than using a static list of today's largest stocks, the engine queries the point-in-time constituent list on each simulation day:

1. Trailing 30-Day Average Dollar Volume (ADV) Filtering

To guarantee capacity and eliminate illiquid micro-caps susceptible to manipulated quotes, assets must fall within strict dollar volume boundaries:

$$\text{ADV}_{30}(A, T) = \frac{1}{30} \sum_{i=0}^{29} \left( \text{Close}_{T-i}(A) \times \text{Volume}_{T-i}(A) \right)$$
  • Minimum Dollar Volume: \(\$10,000,000\) (\(\$10\text{M}\)). Assets trading below this threshold are immediately filtered out.
  • Maximum Dollar Volume: \(\$500,000,000\) (\(\$500\text{M}\)). Focuses capital on high-momentum growth equities and mitigates mega-cap inertia.

2. Historical Sample Sizing (300 to 504 Days)

Assets must possess sufficient historical data observations to compute 252-day momentum and 126-day volatility. In constructor configurations, 300 trading days of valid observations are required, filtering out volatile post-IPO listings with unstable statistics.

$$\text{HistoryCount}(A, T) = \sum_{i=0}^{H-1} \mathbb{I}\left(\text{Close}_{T-i}(A) \neq \text{NaN}\right) \ge 300$$
Section 4

Stage 2 — Trading Signal Generation & Alpha Calculation (\(\Omega\))

The foundation of the quantitative model is the Momentum Omega Factor. Unlike naive 12-month return momentum which is vulnerable to severe momentum crashes at inflection points, Momentum Omega measures the differential between sustained baseline momentum and recent short-term acceleration, scaled by return volatility.

Mathematical Formulation

Long-Term Return (252d to 21d):
$$R_{\text{long}}(T) = \frac{P_{T-21} - P_{T-252}}{P_{T-252}}$$
Short-Term Return (21d to T):
$$R_{\text{short}}(T) = \frac{P_T - P_{T-21}}{P_{T-21}}$$
Rolling 126-Day Volatility Scaling:
$$\sigma_{126}(T) = \sqrt{\frac{1}{125} \sum_{t=T-125}^{T} (r_t - \bar{r})^2}$$
Risk-Adjusted Momentum Omega Score:
$$S_{\text{raw}}(T) = \frac{R_{\text{long}}(T) - R_{\text{short}}(T)}{\sigma_{126}(T)}$$

When percentile-based normalization is enabled, scores across all qualified universe assets are mapped to a uniform distribution \([-1.0, +1.0]\):

$$\text{Signal}(A, T) = \left( \frac{\text{Rank}(A)}{N - 1} \times 2.0 \right) - 1.0$$
Section 5

Stage 3 — Technical Confirmation & Intraday EMA Filters

Entering positions based solely on daily closing prices introduces regime risk. To confirm timing, the engine cross-references statistical alpha against 15-minute intraday bars using a Triple Exponential Moving Average (EMA) Gatekeeper.

Triple EMA Gatekeeping Mechanism

flowchart TD
    CAND[Candidate Stock with Alpha Signal] --> RES[15m Intraday Price: P_t]
    RES --> TEST_LONG{Is Strategy Buying Long?}
    
    TEST_LONG -- Yes --> L_GATE{Price > EMA 50 AND
Price > EMA 200 AND
Price > EMA 800 ?} L_GATE -- Pass --> APP_LONG[Approved Long Entry] L_GATE -- Fail --> REJ_LONG[Rejected: Counter-Trend or Resistance] TEST_LONG -- No (Short) --> S_GATE{Price < EMA 50 AND
Price < EMA 200 AND
Price < EMA 800 ?} S_GATE -- Pass --> APP_SHORT[Approved Short Entry] S_GATE -- Fail --> REJ_SHORT[Rejected: Counter-Trend or Support]
Fast Horizon: EMA 50

\(\sim 12.5\) market hours on 15m bars. Captures immediate momentum flow and confirms entry momentum.

Medium Horizon: EMA 200

\(\sim 50\) market hours (\(\sim 7.7\) trading days). Establishes multi-day trend equilibrium.

Macro Horizon: EMA 800

\(\sim 200\) market hours (\(\sim 30.8\) trading days). Governs macro regime direction.

Section 6

Stage 4 — Portfolio Construction & Risk Constraints

The platform utilizes an Equal-Weight Long/Short Threshold Constructor rather than complex mean-variance optimizers. This eliminates parameter estimation error and prevents hyper-volatile assets from dominating portfolio variance.

Longs-Only & Shorts-Only Regimes

Allocates capital across up to 10 holdings (e.g. \(9\%\) per asset under a \(90\%\) gross target), retaining a \(10\%\) defensive cash cushion.

$$w_i = \min\left( \frac{W_{\text{target}}}{N_{\text{selected}}}, \, W_{\text{max}} \right)$$
Mixed Long/Short Regime

Maintains a dollar-neutral gross split across 5 Longs and 5 Shorts (\(45\%\) long / \(45\%\) short), achieving near-zero beta to broader market swings.

$$\text{Net Exposure} = \text{Gross}_{\text{long}} - \text{Gross}_{\text{short}} \approx 0.0$$
Post-Rebalance Defensive Audits:

To prevent zombie positions (residual shares lingering from partial fills or volume ceilings), the runner performs an automated secondary scan. Any active position whose signal has fallen to zero or which dropped from the approved target set is liquidated at market open.

Section 7

Stage 5 — Execution Simulation & Institutional Friction Modeling

Backtests that omit friction generate fictitious alpha. The engine integrates realistic broker fee schedules and non-linear market impact models:

1. Broker Commission Structure

Matches the Interactive Brokers US Equities schedule with per-share charges and mandatory minimum ticket fees:

$$\text{Commission} = \max\left( |\text{Shares}| \times \$0.0035, \, \$1.00 \right)$$

• Small Order (50 shares): Fee = \(\$1.00\) (\(\$0.0200\)/share)

• Standard Order (2,000 shares): Fee = \(\$7.00\) (\(\$0.0035\)/share)

• Institutional Block (10,000 shares): Fee = \(\$35.00\)

2. Quadratic Slippage & Volume Caps

Penalizes large orders relative to daily bar volume and enforces liquidity participation ceilings:

$$\Delta P = P_{\text{bar}} \times 0.05 \times \left( \frac{\text{Order Shares}}{\text{Bar Volume}} \right)^2$$

• Max Volume Share: Capped at \(20\%\) of daily bar volume.

• Queuing: Orders exceeding \(20\%\) are filled partially and queued across multiple trading sessions.

Section 8

Stage 6 — Delisting Liquidation & Terminal Loss Handling

In long-term historical simulations, companies inevitably face bankruptcies, acquisition events, or exchange delistings. Ignoring delistings causes artificial performance distortion:

Point-in-Time Forced Liquidation Mechanism:

When a held company is delisted, the engine resolves the last traded closing price prior to delisting, submits a liquidation order, records realized losses in delisted_liquidations.csv, and purges the asset from further signal generation.

$$\text{PnL}_{\text{delist}} = (\text{Price}_{\text{liquidation}} - \text{Cost Basis}) \times \text{Shares}$$

Disambiguation: Entry Price vs. Cost Basis

Quantitative tearsheets distinguish between the thesis entry price and the financial volume-weighted cost basis:

Entry Price (report.html)

The price of the first fill transaction that opened the position leg. Evaluates the original trade thesis timing.

$$\text{Entry Price} = p_{\text{first fill}}$$
Cost Basis / VWAP (analysis.html)

The Volume-Weighted Average Price across all accumulated shares currently held. Evaluates actual economic capital invested.

$$\text{Cost Basis} = \frac{\sum_{k=1}^m p_k \cdot q_k}{\sum_{k=1}^m q_k}$$
Section 9

Operational Guide & Workflow Playbook

The automated backtesting suite runs parallelized scenario matrices across multi-period horizons (1 week, 1 month, 3 months) and market position regimes:

Output Artifact Format Primary Generator Key Information & Diagnostic Purpose
analysis.html HTML5 / CSS Simulation Analyser Cross-scenario comparative tearsheet ranking all 35 permutations by final portfolio value; active constituents, cost basis, and direct links to scenario drilldowns.
report.html HTML5 / Plotly Tearsheet Reporter Single-scenario deep-dive featuring cumulative equity curves, drawdown plots, monthly return heatmaps, active positions, and trade logs.
performance.csv CSV Backtest Runner Daily time-series of portfolio equity, returns, cash balance, gross leverage, and benchmark returns.
positions.csv CSV Backtest Runner Daily point-in-time positions ledger with share counts, VWAP cost basis, and market values.
delisted_liquidations.csv CSV Backtest Runner Audit record capturing forced liquidation timestamps, terminal prices, and realized loss metrics.
Section 10

Glossary of Quantitative Performance Metrics

Metric Name Formula / Notation Target Standard Economic Meaning
Sharpe Ratio \(\frac{\mathbb{E}[R_p - R_f]}{\sigma_p} \sqrt{252}\) \(\ge 1.50\) Risk-adjusted excess return per unit of annualized total portfolio volatility.
Sortino Ratio \(\frac{\mathbb{E}[R_p - R_f]}{\sigma_{\text{down}}} \sqrt{252}\) \(\ge 2.00\) Excess return penalizing solely harmful downside volatility, rewarding upside momentum skew.
Maximum Drawdown \(\max \left( \frac{\text{HWM}_t - V_t}{\text{HWM}_t} \right)\) \(\le 15.0\%\) Worst historical peak-to-trough capital contraction before setting a new equity high.
Calmar Ratio \(\frac{\text{CAGR}}{|\text{Max DD}|}\) \(\ge 1.50\) Measures recovery efficiency by comparing annualized return directly to tail-risk drawdown.
CAGR \((V_{\text{final}} / V_0)^{\frac{252}{T}} - 1\) \(> 15.0\%\) Compound Annual Growth Rate representing smooth geometric year-over-year expansion.
Jensen's Alpha \(\alpha = (\bar{R}_p - \bar{R}_f) - \beta(\bar{R}_m - \bar{R}_f)\) \(> 0.0\) Pure idiosyncratic model value-add after removing systematic market benchmark exposure.
Market Beta \(\frac{\text{Cov}(R_p, R_m)}{\text{Var}(R_m)}\) \(0.0 \pm 0.2\) (Mixed) Sensitivity to market index co-movement; near-zero indicates dollar/factor neutrality.
Profit Factor \(\frac{\sum \text{Gross Gains}}{\sum |\text{Gross Losses}|}\) \(\ge 1.60\) Ratio of total trading profits to total losses across all completed round-trip trades.
Section 11

The 35 Parametric Scenarios Matrix (\(A_1 \dots G_5\))

The quantitative engine executes across a two-dimensional grid of 7 Liquidity / Traded Dollar Volume Tiers (Groups A–G) crossed with 5 Parameter / Horizon Variations (Indices 1–5), generating exactly \(7 \times 5 = 35\) independent scenarios:

Dimension 1: Liquidity & Traded Volume Tiers (Groups A through G)

Group A

$10M – $500M

Liquid Small & Mid Cap equities.

Group B

$500M – $1.0B

Mid to Upper-Mid Cap tier.

Group C

$1.0B – $1.5B

Large Cap institutional baseline.

Group D

$1.5B – $2.0B

High-volume Large Cap universe.

Group E

$2.0B – $2.5B

Premier High-liquidity universe.

Group F

> $2.5B

Mega-Cap & ultra-liquid institutional leaders.

Group G (Broad Market Baseline)

> $10M (Unbounded Upper Limit)

Comprehensive cross-market universe capturing all liquid equities without upper market-cap caps.

Dimension 2: Lookback Horizon & Parameter Variations (Indices 1 through 5)

Index 1: 12-Month

Standard baseline lookback (252d long, 21d short, 126d vol).

Index 2: 9-Month

Intermediate 3-quarter cycle (189d long, 21d short, 126d vol).

Index 3: 6-Month

Medium-term semi-annual cycle (126d long, 21d short, 63d vol).

Index 4: 3-Month

Quarterly tactical lookback (63d long, 10d short, 42d vol).

Index 5: Tactical

Fast momentum swing horizon (42d long, 5-10d short, 21d vol).

Complete 35 Parametric Scenarios Matrix Reference

Tier / Group Daily Traded Dollar Volume Index 1 (12M) Index 2 (9M) Index 3 (6M) Index 4 (3M) Index 5 (Tactical)
Group A $10M – $500M A1 A2 A3 A4 A5
Group B $500M – $1.0B B1 B2 B3 B4 B5
Group C $1.0B – $1.5B C1 C2 C3 C4 C5
Group D $1.5B – $2.0B D1 D2 D3 D4 D5
Group E $2.0B – $2.5B E1 E2 E3 E4 E5
Group F > $2.5B F1 F2 F3 F4 F5
Group G > $10M (Unbounded) G1 G2 G3 G4 G5