PlusEVData/investing

Strategy library

Pre-built screens from published quant literature. Click Backtest to replay each on the historical panel. As of 2026-05-01 01:00:00+01:00.
Comparison table β€” all strategies, same period (2022-2026)
StrategySharpe Sortino Calmar CAGRMaxDD Skew PSR v.rand
Same period, costs, target_n=as-defined for each strategy. v.rand = percentile vs 200 random baskets β€” >95% means strategy beats random selection significantly. Skew > 0 = asymmetric upside (the goal); < 0 = fat downside tail.
value

Magic Formula (Greenblatt)

Top 30 by combined earnings-yield + ROIC rank.
Joel Greenblatt, *The Little Book That Beats the Market* (2005)
Recipe
market_cap > 1000000000.0
earnings_yield is_not_null
roa is_not_null
sort: score_magic_formula desc
top_n: 30 Β· rebalance: Q Β· cost: 10bps
value

Piotroski F-score

Quality value: F-score β‰₯ 7, P/B < 1.5.
Joseph Piotroski, *Value Investing: The Use of Historical Financial Statement Information* (2000)
Recipe
f_score_partial >= 4
pb < 1.5
market_cap > 500000000.0
sort: earnings_yield desc
top_n: 20 Β· rebalance: Q Β· cost: 10bps
factor

Low-Volatility Anomaly

Bottom decile by ATR β€” empirically Sharpe 2.73 in our IC research.
Frazzini & Pedersen, *Betting Against Beta* (2014); Baker, Bradley, Wurgler (2011)
Recipe
atr_14 is_not_null
market_cap > 1000000000.0
sort: atr_14 asc
top_n: 30 Β· rebalance: M Β· cost: 10bps
factor

12-1 Momentum

Top decile of past-year-minus-1-month return.
Jegadeesh & Titman, *Returns to Buying Winners and Selling Losers* (1993)
Recipe
mom_12_1 is_not_null
market_cap > 1000000000.0
sort: mom_12_1 desc
top_n: 30 Β· rebalance: M Β· cost: 10bps
ic_validated

πŸ† Best OOS Combo: dist-from-52w-low Γ— 10d-vol (Sharpe 2.56 OOS)

Best out-of-sample performer in May-2026 holdout: Sharpe +2.56, CAGR +212%, MaxDD only -33%, PSR 100%. Generalises far better than in-sample.
Out-of-sample validation: 2021-2024 train β†’ 2025-2026 test. ALL top-10 combos passed OOS, but this pair had the highest test Sharpe.
Recipe
dist_52w_low is_not_null
vol_10d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(1.0) + vol_10d(1.0)
top_n: 20 Β· rebalance: M Β· cost: 10bps
ic_validated

πŸ† Top IC Triplet: GTJA-167 Γ— dist-from-low Γ— range-true

Best triplet from May-02 sweep: Sharpe 1.93, CAGR 77.5%, MaxDD -32.8% (5pp better than best pair).
Greedy triplet search starting from best pair (gtja_alpha167 Γ— dist_52w_low). Adding range_true reduces MaxDD without losing Sharpe.
Recipe
gtja_alpha167 is_not_null
dist_52w_low is_not_null
range_true is_not_null
market_cap > 1000000000.0
sort: gtja_alpha167(1.0) + dist_52w_low(1.0) + range_true(-1.0)
top_n: 20 Β· rebalance: M Β· cost: 10bps
ic_validated

GTJA Up-Day Sum Γ— Uptrend (May-02 winner)

GTJA-191 + IC research top pair: Sharpe 1.86, CAGR 77.8%, PSR 100%, walk-forward 5/5 folds positive.
Empirical pairwise sweep over top-15 IC features after GTJA Alpha191 + Alpha101 panel rebuild. `gtja_alpha167` = Ξ£(cβˆ’delay(c,1)) on up-days Γ— 12d.
Recipe
gtja_alpha167 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
gtja_alpha167 top_pct 50
dist_52w_low top_pct 50
sort: gtja_alpha167(1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: M Β· cost: 10bps
ic_validated

⚠ Per-sector Γ— annual Γ— vol-target β€” IN-SAMPLE 8y Sharpe 1.54, walk-forward Sharpe 0.69

WARNING: walk-forward backtest with quarterly weight refits (refit using only data prior to each rebal) drops Sharpe from 1.54 β†’ 0.69. The per-sector lift is largely in-sample fit. Use the flat composite (composite_5sig_yearly) as the honest production strategy. Vol-target overlay still useful for drawdown control on top of flat composite.
scripts/walkforward_per_sector.py β€” Sharpe 0.69 walk-forward (vs 1.61 in-sample). Per-sector weights are partially overfit; weight instability between quarters causes 490% annualised vol.
Recipe
dist_52w_low is_not_null
vol_252d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(0.047) + vol_252d(0.078) + wq_alpha042(0.074)
top_n: 20 Β· rebalance: Y Β· cost: 12bps
ic_validated

⚠ Per-sector composite β€” IN-SAMPLE Sharpe 1.61, walk-forward 0.69

DOWNGRADED: walk-forward refit drops Sharpe to 0.69 (below flat composite's 1.28). Per-sector weights look great in-sample but don't generalise quarter-to-quarter. The earlier 'OOS' regime test was technically applying full-panel weights to historical data β€” a subtle leak. Use composite_5sig_yearly instead.
scripts/walkforward_per_sector.py refit each quarter strictly OOS. Per-sector lift is in-sample fit artifact.
Recipe
dist_52w_low is_not_null
vol_252d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(0.047) + vol_252d(0.078) + wq_alpha042(0.074)
top_n: 20 Β· rebalance: Y Β· cost: 12bps
ic_validated

πŸ† BEST HONEST: Composite_5sig + ANNUAL rebal (8y Sharpe 1.28, no in-sample fit)

Constant-weight composite of 5 verified-real-alpha features. NO weight fitting needed β†’ no overfitting risk. 8-year stress test Sharpe 1.28, CAGR 45%, MaxDD -44%, total +2033%. After walk-forward exposed per-sector weights as partially overfit, this is the honest production strategy. Pair with vol-target Οƒ*=15% overlay for institutional-grade drawdown control.
scripts/rebalance_freq_sweep.py β€” Y rebal: Sharpe 1.47 vs Q rebal 1.31 (full window). Average turnover 49% (vs Q 31%) but only 1 rebalance/yr.
Recipe
dist_52w_low is_not_null
vol_252d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(0.047) + vol_252d(0.078) + gap_abs(0.04) + wq_alpha042(0.074) + range_true(0.06)
top_n: 20 Β· rebalance: Y Β· cost: 12bps
ic_validated

πŸ₯‡ Composite_5sig + 12% vol-target overlay (Sharpe 1.46, MaxDD -21%)

Same composite_5sig basket but levered to a 12% annualised vol target via 60-day realised-vol scaling. Lifts Sharpe from 1.31 β†’ 1.46 in the full window AND cuts MaxDD from -55% to -21% β€” ~3Γ— lower downside for nearly identical Sharpe. Skew flips from +0.02 to +0.07. Best risk-reward profile in the library.
scripts/vol_target_composite.py β€” 60-day realised vol, Οƒ*=12%, lev_max=2.0. Pre-shock Οƒ*=8% works better; full+post-shock Οƒ*=12-15% optimal.
Recipe
dist_52w_low is_not_null
vol_252d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(0.047) + vol_252d(0.078) + gap_abs(0.04) + wq_alpha042(0.074) + range_true(0.06)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ† Composite: 5-signal sector-neutral IR-weighted (regime-robust Sharpe 1.57)

Sector-neutral z-score composite of 5 of the 6 features that survived EVERY bullshit gate (NW HAC, Bonferroni, sector-neutral, walk-forward): dist_52w_low + vol_252d + gap_abs + wq_alpha042 + range_true. Each weighted by its h=252d effective IR. Pre-shock 2021 Sharpe +1.23, post-shock 2022-2026 Sharpe +1.57 β€” works in BOTH regimes (the leader works in only one). Verified live through the production engine.
scripts/composite_regime_test.py β€” sector-neutral z-scores summed by IR_eff. Beats mega-cap benchmark by 2Γ— Sharpe. (Sales-yield component dropped from this live version because the screener engine doesn't always materialise sales_yield_pit; the 5-signal composite already captures the value tilt indirectly via vol/range.)
Recipe
dist_52w_low is_not_null
vol_252d is_not_null
market_cap > 1000000000.0
sort: dist_52w_low(0.047) + vol_252d(0.078) + gap_abs(0.04) + wq_alpha042(0.074) + range_true(0.06)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

βš–οΈ SORTINO-OPTIMAL: Leader + gate + sortino-target 12% (Sharpe 1.83, Sortino 2.82, Calmar 2.84)

Best Sortino + best Calmar in the library. Sortino-targets 12% downside-vol (60d lookback, max 2.5x leverage) instead of total vol β€” preserves upside spikes that vol-target clips. 8-year backtest: Sharpe 1.83, Sortino 2.82, CAGR 46.5%, MaxDD only -16.4%, Calmar 2.84. Beats every vol-target variant (vt15 best at Sharpe 1.78, CAGR 33%, Calmar 2.24).
scripts/sortino_target_gated_leader.py β€” sortino-target overlay on gated leader.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ›‘ DEFENSIVE: Leader + spy>100d gate + vt08 stack (Sharpe 1.96, MaxDD -10%)

Same Sharpe as the aggressive variant (1.96) but with EVEN LOWER drawdown (-10% vs -19.6%). Stacks SPY>100d gate + 8% vol-target overlay. Lower CAGR (20% vs 54%) but smoothest equity curve in the library. Annualised vol 6%. For capital-preservation-first deployment with full risk-adjusted return.
scripts/stack_gate_voltarget.py β€” gate-first then vt08 (sequence matters; vt-first drops Sharpe to 1.82).
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ†πŸ†πŸ†πŸ† NEW BEST: Leader (n=10) + SPY 100d gate (Sharpe 1.99, CAGR 69%, MaxDD -27%)

Concentrated 10-stock variant of the gated leader. 8-year walk-forward 2019-2026: Sharpe +1.99, CAGR +69%, MaxDD -27%. Discovered via robustness sweep (45 configs tested) β€” n=10 with quarterly rebal is the sharpest. Drawback: more concentration risk vs n=20 baseline.
scripts/robustness_sweep_gate.py β€” Q rebal Γ— top-10 Γ— 8bps cost. Gate: SPY > 100d-MA.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 10 Β· rebalance: Q Β· cost: 8bps
ic_validated

πŸ₯ˆ BALANCED: Leader (n=20) + SPY > 100d-MA gate (8y Sharpe 1.96, CAGR 54%, MaxDD -19.6%)

BEST RISK-ADJUSTED IN LIBRARY. Leader basket (low_atr Γ— dist_52w_low), deployed only when SPY > 100-day MA. 8-year walk-forward 2019-2026: Sharpe +1.96 (vs leader's 1.66, +0.30 lift), CAGR +53.9%, MaxDD only -19.6%, in market 78% of time. The 100d MA captures medium-term trend β€” less choppy than 50d, more responsive than 200d. Robust to parameterization: nearby specs (50/100/150/200, single or dual) all give Sharpe 1.80-1.96. NO FITTING.
scripts/macro_gate_sensitivity.py β€” SPY 100d MA gate, walk-forward 2019-2026 across 10 gate variants.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ₯ˆ Leader + 8% vol-target + VIX<30 gate (Sharpe 1.83, MaxDD only -12%)

Most defensive variant. Combines 8% vol-target with 'cash if VIX > 30' regime filter. 8-year walk-forward: Sharpe +1.83, CAGR +16%, MaxDD only -12.4%, vol 8.5%. Lowest drawdown of any high-Sharpe strategy in the library. Best for capital-preservation-first deployment. Note: VIX gate only available 2020+ since VIX yfinance data starts there.
scripts/macro_overlay.py β€” VIX < 30 + vol-target Οƒ*=8%, walk-forward 2020-2026.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ₯‰ Leader + 8% vol-target overlay (8y Sharpe 1.79, MaxDD only -15%)

INSTITUTIONAL-GRADE STRATEGY. Same low_atr Γ— high_dist_52w_low basket as the leader, but with daily 60-day-realised-vol targeting at Οƒ*=8% (lev_max=2.0). 8-year walk-forward 2019-2026: Sharpe +1.76 (BETTER than unleveraged leader's 1.65), CAGR +17%, MaxDD only -15%, annualised vol 9%. Perfect for capital-preservation-first deployment. The drawdown control trick that works on the leader (because it's a fixed-weight strategy unlike the in-sample-fit composites).
scripts/leader_combo_voltarget.py β€” Sharpe 1.76 walk-forward over 2019-2026 panel. Vol-target Οƒ*=8%, lookback 60d, lev_max=2.0.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: Q Β· cost: 12bps
ic_validated

πŸ₯ˆ #2 Leader (no vol-target): Low ATR Γ— High dist-from-52w-low (8y Sharpe 1.66)

VERIFIED PRODUCTION STRATEGY. 8-year walk-forward 2019-2026 (no fitting required, fixed sort weights -1Γ—atr_14 + 1Γ—dist_52w_low): Sharpe +1.66, Sortino +2.17, CAGR +63.5%, MaxDD -46.2%, total +3,323%. 80% of quarters positive (24/30), median quarterly +16%. Beats the flat composite (Sharpe 1.28). Worst quarter was Q1 2020 covid (-29%). Calm uptrending stocks β€” high dist from 52w low (in motion) but low ATR (not whippy). The signal-not-fit nature makes this immune to the in-sample issues that demoted the per-sector composites.
scripts/walkforward_leader.py β€” 8-year walk-forward on extended 2018-2026 panel. No weight fitting; sector-neutral z-score of (-atr_14, +dist_52w_low) computed per-rebal-date.
Recipe
atr_14 is_not_null
dist_52w_low is_not_null
market_cap > 1000000000.0
atr_14 bottom_pct 50
dist_52w_low top_pct 50
sort: atr_14(-1.0) + dist_52w_low(1.0)
top_n: 20 Β· rebalance: M Β· cost: 10bps
blend

Low-Vol Γ— High-Sortino (prior IC research winner)

Combine the two: Sharpe 1.84, MaxDD only -12.6%.
Empirical β€” see project_investing_model_ic_findings memory
Recipe
atr_14 is_not_null
sortino_252d is_not_null
market_cap > 1000000000.0
atr_14 bottom_pct 50
sortino_252d top_pct 50
sort: sortino_252d desc
top_n: 20 Β· rebalance: M Β· cost: 10bps
factor

Quality Minus Junk (QMJ)

Top decile by AFP composite quality score.
Asness, Frazzini, Pedersen, *Quality Minus Junk* (2019)
Recipe
score_qmj is_not_null
market_cap > 1000000000.0
sort: score_qmj desc
top_n: 30 Β· rebalance: Q Β· cost: 10bps
value

High Free-Cash-Flow Yield

Top 20 by FCF/market-cap, market cap > $500M.
Practitioner classic β€” proxy for shareholder yield
Recipe
fcf_yield > 0.05
market_cap > 500000000.0
sort: fcf_yield desc
top_n: 20 Β· rebalance: Q Β· cost: 10bps
value

Deep Value (Graham/Dodd)

P/E < 15, P/B < 1.5, ROE > 10%.
Benjamin Graham, *Security Analysis* (1934); Lakonishok-Shleifer-Vishny (1994)
Recipe
pe_trailing < 15
pe_trailing > 0
pb < 1.5
roe > 0.1
market_cap > 500000000.0
sort: earnings_yield desc
top_n: 20 Β· rebalance: Q Β· cost: 10bps
technical

52-Week High Breakouts

Stocks at fresh 52w highs with volume confirmation.
William O'Neil, *How to Make Money in Stocks* (CAN SLIM)
Recipe
bo_new_high_52w == 1
vol_z_20 > 1.0
market_cap > 500000000.0
sort: mom_12_1 desc
top_n: 25 Β· rebalance: W Β· cost: 10bps
technical

Short-Term Mean Reversion

Bottom decile of 5d return + top sortino β€” buys the dip on quality.
Lehmann (1990), De Bondt & Thaler (1985); Connors-RSI inspiration
Recipe
ret_5d is_not_null
sortino_252d > 0.5
market_cap > 1000000000.0
sort: ret_5d asc
top_n: 20 Β· rebalance: W Β· cost: 15bps
factor

Momentum 3-1 (3m return, skip last month)

Top decile by 63dβˆ’21d return β€” short-horizon momentum without the 1m reversal.
Jegadeesh & Titman variant (1993). Captures faster signal than 12-1.
Recipe
ret_63d is_not_null
ret_21d is_not_null
market_cap > 1000000000.0
sort: ret_63d(1.0) + ret_21d(-1.0)
top_n: 25 Β· rebalance: M Β· cost: 10bps
factor

Betting Against Beta (low-Ξ²)

Bottom quintile by Ξ² β€” Frazzini-Pedersen showed long-low / short-high Ξ² earns ~7% Sharpe.
Frazzini & Pedersen, 'Betting Against Beta' (Journal of Financial Economics 2014, NBER w16601).
Recipe
beta is_not_null
beta > 0
beta < 0.9
market_cap > 1000000000.0
sort: beta asc
top_n: 30 Β· rebalance: M Β· cost: 10bps
value

Low Accruals (Sloan)

Companies whose net income is well-matched by operating cash flow β€” high earnings quality.
Sloan (1996) 'Do stock prices fully reflect information in accruals and cash flows?' β€” accruals predict negative future returns.
Recipe
score_sloan_accruals is_not_null
market_cap > 500000000.0
sort: score_sloan_accruals asc
top_n: 30 Β· rebalance: Q Β· cost: 10bps
value

Safe Value (Altman Z + earnings yield)

Top decile of earnings yield among non-distressed (Altman Z > 2.99) names.
Altman (1968) Z-score; combines distress screen with classic value signal.
Recipe
score_altman_z > 2.99
earnings_yield > 0
market_cap > 1000000000.0
sort: earnings_yield desc
top_n: 25 Β· rebalance: Q Β· cost: 10bps
factor

🎯 IC-Validated Value Γ— Size within S&P 500 (Sharpe 1.42)

Smaller + cheaper names within the S&P 500 universe. Built from the 23 features that survived our IC bullshit filter. Backtest 2022-2026: Sharpe +1.42, Sortino +1.93, CAGR +52.4%, MaxDD -35%, random-baseline 100th percentile.
Empirical: ic_table.parquet 944 features Γ— 4 horizons. Size IC=-19.6%, Value IC=-14.2% (252d). NOTE: our fundamentals universe is S&P 500-ish (min cap ~$15B). Size signal here = mid-cap-vs-mega-cap, not small-cap-vs-large.
Recipe
market_cap < 50000000000.0
market_cap > 5000000000.0
ps < 5.0
ps > 0
margin_op < 0.3
dist_52w_low > 0.1
sort: ps(-1.0) + market_cap(-1.0) + dist_52w_low(1.0)
top_n: 25 Β· rebalance: Q Β· cost: 12bps
factor

πŸ”¬ IC-Validated: Cheap & Forgotten (anti-quality)

Counterintuitive: high-margin / consistently-profitable companies UNDERPERFORM (mean IC βˆ’10%). This strategy AVOIDS the priced-rich quality names and buys forgotten value β€” within S&P 500.
Empirical: net_margin_pit IC=-10.24%, gross_margin_pit IC=-10.62%, cfo_q_pct_quarters_positive_8q IC=-6.23% (all 252d, hit β‰₯ 85%). Quality is priced in.
Recipe
market_cap < 100000000000.0
ps < 4.0
ps > 0
margin_op < 0.15
dist_52w_low > 0.1
sort: ps(-1.0) + earnings_yield(1.0)
top_n: 25 Β· rebalance: Q Β· cost: 12bps
factor

πŸ† Pure Alpha (sector-neutral): dist_52w_low Γ— low P/S Γ— low margin

Built ONLY from features that survived our sector-neutral test (true cross-sectional alpha, not sector bets). Combines uptrend (101% retained), value (89% retained), and quality penalty (76% retained). Excludes the size effect which is 61% sector exposure.
Sector-neutral IC sweep May 2026: subtract per-(date,sector) mean from feature & forward return, recompute IC. Only signals retaining β‰₯75% of raw IC count as 'pure alpha'.
Recipe
market_cap > 5000000000.0
ps < 4.0
ps > 0
margin_op < 0.3
dist_52w_low > 0.2
sort: dist_52w_low(1.0) + ps(-1.0) + margin_op(-1.0)
top_n: 25 Β· rebalance: Q Β· cost: 12bps
value

Low Beneish M (clean accounting)

Companies with low manipulation-flag M-score β€” combines with momentum for cleaner up-trends.
Beneish (1999) M-score. M > -1.78 = likely manipulator. Filtering OUT manipulators.
Recipe
score_beneish_m < -2.5
mom_12_1 > 0
market_cap > 1000000000.0
sort: mom_12_1 desc
top_n: 25 Β· rebalance: Q Β· cost: 10bps