qbuntuqbuntu

Multi-Factor Composite (US S&P 500)

slug: multi-factor-us-sp500

Multi-Factor Composite (US S&P 500) backtest. Median Sharpe across 240 parameter sets is -0.71. p-value is 0.11. Max DD is -39.5%. Period: 2022-02-01 to 2026-09-01. Best Sharpe +0.25 is not the representative figure.

Verdict: rejected. The median reaches neither promising (Sharpe > 0.5 and p-value < 0.05) nor marginal (Sharpe > 0.05 and best p-value < 0.10). Primary reason: no_edge. It is not regime, frequency, or cost, and the median does not clear the bar.

Performance summary

Sharpe (median)
-0.71
Max DD
-39.5%
Win rate
—
Alpha (ann.)
—
p-value
0.11
backtest period: 2022-02-01 → 2026-09-01
Sharpe across 240 grid runs:median -0.71best 0.25 (not representative)worst -2.01p25–p75 -0.94–-0.43

Hypothesis

Combines signals from marginal/promising single factors into a z-scored composite. Applied to S&P 500 constituents.

Why it didn't work

Across 240 grid combinations, median Sharpe=-0.71, best=0.25. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 0.25 (p=0.36).
period 2022-02-01–2026-09-01; cost=5bps
sharpe_ratio0.25
Median Sharpe across 240 grid runs is -0.71.
Full grid of 240 parameter combinations.
sharpe_ratio-0.71
Median Sharpe in DOWN regime is -0.39 across 240 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.39
Median Sharpe in FLAT regime is -1.05 across 240 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-1.05
Median Sharpe in UP regime is -0.65 across 240 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.65

Runs (30)

runparamssharpeUPFLATDOWN
n_factors=2, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0000
cost_bps: 5
n_stocks: 5
n_factors: 2
-0.56-1.11-0.51+0.84
n_factors=2, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-multi-factor-us-sp500-0001
cost_bps: 5
n_stocks: 5
n_factors: 2
-0.21-0.59-0.51+0.84
n_factors=2, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0002
cost_bps: 10
n_stocks: 5
n_factors: 2
-0.81-1.35-0.76+0.58
n_factors=2, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-multi-factor-us-sp500-0003
cost_bps: 10
n_stocks: 5
n_factors: 2
-0.45-0.85-0.76+0.58
n_factors=2, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0012
cost_bps: 5
n_stocks: 50
n_factors: 2
-1.13-1.51-1.92+0.13
n_factors=2, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0014
cost_bps: 10
n_stocks: 50
n_factors: 2
-1.58-2.06-2.45-0.16
n_factors=2, holding_days=5, n_stocks=20, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0024
cost_bps: 5
n_stocks: 20
n_factors: 2
-0.55-0.45-0.84-0.35
n_factors=2, holding_days=10, n_stocks=5, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0034
cost_bps: 10
n_stocks: 5
n_factors: 2
-0.76-0.88-1.20+0.91
n_factors=2, holding_days=10, n_stocks=50, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0044
cost_bps: 5
n_stocks: 50
n_factors: 2
-0.60-0.88-0.55+0.06
n_factors=2, holding_days=20, n_stocks=10, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0054
cost_bps: 10
n_stocks: 10
n_factors: 2
-0.55-0.63-1.03+0.93
n_factors=2, holding_days=60, n_stocks=5, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0064
cost_bps: 5
n_stocks: 5
n_factors: 2
-0.26-0.36-0.56+0.84
n_factors=2, holding_days=60, n_stocks=5, cost_bps=5, regime_gate=True
r-multi-factor-us-sp500-0065
cost_bps: 5
n_stocks: 5
n_factors: 2
+0.25+0.51-0.56+0.84
n_factors=2, holding_days=60, n_stocks=5, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0066
cost_bps: 10
n_stocks: 5
n_factors: 2
-0.28-0.38-0.59+0.82
n_factors=2, holding_days=60, n_stocks=50, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0076
cost_bps: 5
n_stocks: 50
n_factors: 2
-0.82-1.06-1.01-0.07
n_factors=3, holding_days=1, n_stocks=10, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0086
cost_bps: 10
n_stocks: 10
n_factors: 3
-1.27-1.80-1.65+0.19
n_factors=3, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0096
cost_bps: 5
n_stocks: 5
n_factors: 3
-0.74-0.78-0.66-0.77
n_factors=3, holding_days=5, n_stocks=20, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0106
cost_bps: 10
n_stocks: 20
n_factors: 3
-1.16-1.12-1.26-0.96
n_factors=3, holding_days=10, n_stocks=10, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0116
cost_bps: 5
n_stocks: 10
n_factors: 3
-1.02-0.93-1.09-1.15
n_factors=3, holding_days=10, n_stocks=50, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0126
cost_bps: 10
n_stocks: 50
n_factors: 3
-1.12-0.92-1.18-1.36
n_factors=3, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0136
cost_bps: 5
n_stocks: 20
n_factors: 3
-0.94-0.98-0.63-1.42
n_factors=3, holding_days=60, n_stocks=5, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0146
cost_bps: 10
n_stocks: 5
n_factors: 3
-0.81-1.15-0.93-0.02
n_factors=3, holding_days=60, n_stocks=50, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0156
cost_bps: 5
n_stocks: 50
n_factors: 3
-1.22-1.44-1.25-0.72
n_factors=4, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0160
cost_bps: 5
n_stocks: 5
n_factors: 4
-0.79-1.25-1.03+0.37
n_factors=4, holding_days=1, n_stocks=10, cost_bps=10, regime_gate=True
r-multi-factor-us-sp500-0167
cost_bps: 10
n_stocks: 10
n_factors: 4
-1.15-1.12-1.98-0.33
n_factors=4, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0174
cost_bps: 10
n_stocks: 50
n_factors: 4
-2.01-2.33-3.02-0.57
n_factors=4, holding_days=5, n_stocks=5, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0178
cost_bps: 10
n_stocks: 5
n_factors: 4
-1.01-0.94-0.92-1.36
n_factors=4, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0188
cost_bps: 5
n_stocks: 50
n_factors: 4
-1.08-1.03-1.22-0.89
n_factors=4, holding_days=10, n_stocks=10, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0198
cost_bps: 10
n_stocks: 10
n_factors: 4
-0.92-0.89-1.13-0.50
n_factors=4, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-multi-factor-us-sp500-0208
cost_bps: 5
n_stocks: 5
n_factors: 4
-0.63-0.81-0.50-0.31
n_factors=4, holding_days=20, n_stocks=20, cost_bps=10, regime_gate=False
r-multi-factor-us-sp500-0218
cost_bps: 10
n_stocks: 20
n_factors: 4
-0.80-0.97-0.40-1.11

Target universe

S&P 500 constituents, ~503 stocks

Related strategies

source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-09-24T02:22:17

Related strategies