← Back to Projects

Multi-Factor Equity Strategy — SGX

Real, correctly signed factor structure on SGX; spreads and borrow remove it before it becomes a strategy.

Capability: Systematic equities
Category: Quantitative Research
Date: August 2026

At a glance

Delisting bias on SGX
−0.89 pp/yr
Blue-chip Sharpe, survivor → point-in-time
1.00 → 0.45
Composite edge, gross → fully costed
1.66 → 0.28 %/mo
Pre-registered tests surviving BHY
0 of 65
SGX multi-factor strategy performance, point-in-time universe
STI-core strategy on the point-in-time roster: +0.40%/mo, Newey-West t = 2.26.

About this project

A systematic multi-factor strategy on Singapore equities, my NTU final-year project, consolidated from ten research branches into one verified body of work: every published number traces to an executed run on real vendor data, catalogued claim by claim in a verification ledger, with superseded and contaminated results listed in an exclusions file. Value, momentum, quality, size and liquidity signals form a composite tested with point-in-time membership, Fama-MacBeth pricing, a pre-registered 65-test grid, and full cost and borrow modelling.

Why it matters

Factor premia are documented on US data with deep liquidity. SGX is small, REIT-heavy and thinly traded, so it is a clean test of whether the cross-sectional structure transports and, separately, whether it can be harvested. The answer is yes to the first and no to the second, and the gap between them is measured rather than asserted.

Methodology

  • Point-in-time index membership rebuilt quarterly; 338 delistings adjudicated against deal records so that takeouts, liquidations and transfers carry the right terminal return.
  • Fundamentals lagged with a four-month reporting embargo; forward returns by explicit point-in-time lookup after a forward-return bug was caught and corrected.
  • Composite IC and Fama-MacBeth pricing on two universes: a 71-name point-in-time STI roster and the broad Compustat universe (1991–2026).
  • Per-name Corwin-Schultz half-spreads with the traded-days correction, Markit borrow availability and fees on the short side, and a capacity curve at feasible participation.
  • Pre-registered 65-test specification grid on a 1995–2019 development window with Bonferroni, BHY and bootstrap reality-check corrections; a second M=55 family for the price-signal branch.
  • Risk measured with a Merton jump-diffusion fit and compared with Gaussian expected shortfall.

Strongest findings

  • Delisting survivorship bias on SGX runs backwards: dropping dead names lowers measured universe returns by 0.89 pp/yr, because 59% of exits are takeouts at a premium.
  • Survivor-defined backtests still flatter themselves: the naive blue-chip Sharpe of 1.00 corrects to 0.45 under quarterly point-in-time membership, and the broad-universe long-short reverses outright (survivor t = 1.0 vs point-in-time t = 3.8).
  • Composite IC is 0.049 (t = 5.9) on the broad universe, the governing estimate, and 0.070 (t = 5.9) on the 71-name point-in-time roster; value carries the signal and part of it is a REIT effect.
  • Fully costed with real spreads and borrow, the gross 1.66%/mo edge (t = 5.1) falls to 0.28%/mo (t = 0.85): statistically real, economically untradeable at institutional scale.
  • The STI-core book earns +0.40%/mo (Newey-West t = 2.26) with a feasibility-bound capacity of roughly S$50M; a t+1-membership benchmark would have inflated the passive alternative by 0.40%/mo.
  • Of 65 pre-registered tests, 24 clear |t| = 1.96, one clears 3.0, and zero survive BHY false-discovery control.

Figures

  1. Survivorship bias sign in both universes
    Figure 1. Delisting survivorship bias is negative in both universes: dead names raise measured returns.
  2. SGX delisting exit mix
    Figure 2. 59% of SGX delistings are acquisitions, and takeouts pay: the mechanism behind the backwards bias.
  3. Alpha leakage funnel
    Figure 3. Where the alpha goes: benchmark correction, costs, and the tradability screen.
  4. Markit borrow scenarios
    Figure 4. Real borrow fees destroy the naive short book; the availability screen rescues it into large caps.
  5. Capacity analysis
    Figure 5. Feasibility-bound capacity of roughly S$50M for the concentrated STI-core book.
  6. Benchmark contamination test
    Figure 6. A t+1-membership benchmark inflates the passive alternative by 0.40%/mo.
  7. Multiple-testing corrections on the price-signal family
    Figure 7. Price-signal family (M = 55 tests, gross): Bonferroni passes 15, BHY 19, bootstrap reality check 12; net of costs 0 of 22 survive any correction. The separate pre-registered 65-test grid has zero BHY survivors.
  8. Merton jump-diffusion fit
    Figure 8. 57.9% of strategy variance is jump risk; Gaussian risk limits understate 99% ES by a third.
  9. TSMOM combination under constraints
    Figure 9. The TSMOM-plus-fundamentals combination reverses once borrow constraints and costs are applied.

Robustness and caveats

  • Nothing in the 65-test grid survives multiple-testing correction; the defensible claim is structure, not alpha.
  • 57.9% of strategy variance is jump risk; a Gaussian risk limit understates 99% expected shortfall by a third.
  • The TSMOM-plus-fundamentals combination that looked additive reverses once borrow constraints and costs are applied.
  • The project caught its own synthetic-data fallback and two look-ahead traps; the corrections are published as part of the work.

Challenges

Building point-in-time index membership and adjudicating 338 delistings against SDC deal records, applying a 4-month fundamental reporting embargo, replacing a contaminated t+1-membership benchmark worth 0.40%/mo of phantom alpha, and holding every result to pre-registered multiple-testing discipline.

Learnings

Verification as method: the project caught its own synthetic-data fallback, two look-ahead traps and a forward-return bug, and published the corrections as part of the contribution. In a small market the binding constraints are spreads and borrow availability, not signal.

Stack

PythonpandasstatsmodelsBloomberg VBACompustatMarkitCapIQ

Papers and documents