Compare commits
2
Commits
127499eceb
...
1c38a94dd0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c38a94dd0 | ||
|
|
a4d5ed7a93 |
@@ -46,3 +46,4 @@ backtest_snapshots/
|
||||
# Rebuildable pickle caches are local accelerators, not decision evidence.
|
||||
reports/*.pkl
|
||||
reports/*.pk1
|
||||
reports/.cache/
|
||||
|
||||
@@ -71,17 +71,57 @@ or depth changes the risk story.
|
||||
|
||||
## Results
|
||||
|
||||
*(filled after run)*
|
||||
Generated: `2026-07-19T14:07:37` · artifact
|
||||
`reports/prod-book-universe-horizon-20260719-140737.json`
|
||||
Snapshot: MacBook deep `research.sqlite` (506 prod + breadth prices; 2.39M raw
|
||||
GTL candidates). Strategy knobs = live production (residual 80, 80/20 high-vol
|
||||
rank, ATR trail 3×, hold 30, gate-reset, `fill_mode=close`).
|
||||
|
||||
| arm | universe | entry start | Sharpe | SE | CAGR % | max DD % | trades | notes |
|
||||
|---|---|---|---:|---:|---:|---:|---:|---|
|
||||
| A | 505 | 2022-07-01 | | | | | | |
|
||||
| B | 505+liquid | 2022-07-01 | | | | | | |
|
||||
| C | 505 | 2016-07-01 | | | | | | |
|
||||
| D | 505+liquid | 2016-07-01 | | | | | | |
|
||||
> Survivorship: today's constituents backfilled. **Compare arms relatively.**
|
||||
> Absolute deep CAGR/Sharpe are not deployable forecasts.
|
||||
|
||||
---
|
||||
| arm | universe | entries from | Sharpe | SE | CAGR % | max DD % | total ret % | trades | win % | vs SPY |
|
||||
|---|---|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| **A** | 505 only | 2022-07-01 | **1.32** | 0.49 | **31.8** | **18.9** | +205 | 374 | 35.6 | +96.5 |
|
||||
| **B** | 505 + liquid 1500 | 2022-07-01 | 0.14 | 0.50 | −1.8 | 55.3 | −7 | 706 | 29.3 | +95.0 |
|
||||
| **C** | 505 only | 2016-07-01 | **0.88** | 0.31 | **16.7** | **24.4** | +369 | 763 | 36.7 | +257 |
|
||||
| **D** | 505 + liquid 1500 | 2016-07-01 | −0.06 | 0.32 | −7.0 | 73.9 | −52 | 1567 | 28.0 | +254 |
|
||||
|
||||
Qualified longs: A 1 448 · B 6 587 · C 2 450 · D 11 551.
|
||||
|
||||
### Read (relative only)
|
||||
|
||||
1. **Same strategy, broader liquid universe kills the book** (A→B and C→D).
|
||||
Sharpe collapses; DD roughly triples; win rate drops ~6–8pp; trade count
|
||||
~doubles. This matches earlier breadth IC work: the production residual +
|
||||
high-vol package is a **large-cap / prod-universe** edge, not a
|
||||
“more names = better” edge.
|
||||
|
||||
2. **Longer history on 505 stays positive but softer** (A→C). Sharpe 1.32 → 0.88,
|
||||
CAGR 32% → 17%, DD 19% → 24%. Still well above the liquid-breadth arms.
|
||||
Levels are optimistic (survivorship); the useful message is “edge does not
|
||||
vanish when 2018/2020 are included,” not “expect 17% CAGR forever.”
|
||||
|
||||
3. **Arm A vs older Phase‑A / short-window controls** (~Sharpe 1.7–2.1): this
|
||||
matrix re-ranked on deep research.sqlite with a fixed entry start; numbers
|
||||
need not match prior reports row-for-row. Use **this table for A–D
|
||||
comparisons**, not for rewriting the production baseline number.
|
||||
|
||||
4. **No production change implied.** Keep the live ~505 universe. Do not broaden
|
||||
the tradable set to liquid Nasdaq under current knobs without a new
|
||||
pre-registered design (and almost certainly a different rank/tilt package).
|
||||
|
||||
## Verdict
|
||||
|
||||
**PENDING_HUMAN** after numbers land.
|
||||
**Descriptive matrix complete.**
|
||||
|
||||
| question | answer from this matrix |
|
||||
|---|---|
|
||||
| Prod book @ ~4y / 505 | Positive (arm A) |
|
||||
| Same + liquid Nasdaq | **No** — large degradation (arm B) |
|
||||
| Prod book since 2016 / 505 | Still positive, milder (arm C) |
|
||||
| Same + liquid Nasdaq deep | **No** — worst arm (arm D) |
|
||||
|
||||
**PENDING_HUMAN** only for whether to log “universe broaden under current knobs”
|
||||
as rejected in the main research index. Strategy knobs unchanged either way.
|
||||
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"generated_at": "2026-07-19T14:07:37.458454",
|
||||
"snapshot": "/Users/taathde3/git/lab/signal_platform/backtest_snapshots/research.sqlite",
|
||||
"snapshot_meta": {
|
||||
"prod_universe_n": 506,
|
||||
"price_symbols_n": 4654,
|
||||
"raw_candidates": 2389258,
|
||||
"liquid_top_n": 1500,
|
||||
"liquid_min_price": 5.0,
|
||||
"short_start": "2022-07-01",
|
||||
"long_start": "2016-07-01"
|
||||
},
|
||||
"strategy": {
|
||||
"note": "Live production knobs \u2014 no modifications",
|
||||
"momentum": "residual_12_1 gate 80",
|
||||
"rank": "residual_high_vol_blend_80_20",
|
||||
"fill_mode": "close",
|
||||
"cost_per_side": 0.001,
|
||||
"exit": {
|
||||
"mode": "atr_trailing",
|
||||
"trailing_pct": 12.0,
|
||||
"atr_multiplier": 3.0,
|
||||
"hold_days": 30
|
||||
},
|
||||
"max_positions": 10,
|
||||
"risk_per_trade": 0.01,
|
||||
"reentry": "gate_reset"
|
||||
},
|
||||
"arms": [
|
||||
{
|
||||
"id": "A_prod_4y_505",
|
||||
"label": "Prod book \u00b7 ~4y \u00b7 505 only",
|
||||
"start": "2022-07-01",
|
||||
"universe": "prod_505",
|
||||
"n_candidates": 81626,
|
||||
"n_qualified_longs": 1448,
|
||||
"fill_mode": "close",
|
||||
"ranking_key": "residual_high_vol_blend_80_20_score",
|
||||
"exit_policy": "atr_trail3",
|
||||
"hold_days": 30,
|
||||
"sharpe": 1.32,
|
||||
"sharpe_se": 0.49,
|
||||
"cagr_pct": 31.8,
|
||||
"max_drawdown_pct": 18.9,
|
||||
"total_return_pct": 204.7,
|
||||
"calmar": 1.68,
|
||||
"trades": 374,
|
||||
"win_rate": 35.6,
|
||||
"n_returns": 1009,
|
||||
"psr": 0.9965,
|
||||
"start_date": "2022-07-01",
|
||||
"end_date": "2026-07-13",
|
||||
"spy_return_pct": 96.5,
|
||||
"final_equity": 30467.86
|
||||
},
|
||||
{
|
||||
"id": "B_prod_4y_505_liquid",
|
||||
"label": "Prod book \u00b7 ~4y \u00b7 505 + liquid top-1500",
|
||||
"start": "2022-07-01",
|
||||
"universe": "prod_plus_liquid",
|
||||
"n_candidates": 267579,
|
||||
"n_qualified_longs": 6587,
|
||||
"fill_mode": "close",
|
||||
"ranking_key": "residual_high_vol_blend_80_20_score",
|
||||
"exit_policy": "atr_trail3",
|
||||
"hold_days": 30,
|
||||
"sharpe": 0.14,
|
||||
"sharpe_se": 0.499,
|
||||
"cagr_pct": -1.8,
|
||||
"max_drawdown_pct": 55.3,
|
||||
"total_return_pct": -7.1,
|
||||
"calmar": -0.03,
|
||||
"trades": 706,
|
||||
"win_rate": 29.3,
|
||||
"n_returns": 1013,
|
||||
"psr": 0.6107,
|
||||
"start_date": "2022-07-01",
|
||||
"end_date": "2026-07-17",
|
||||
"spy_return_pct": 95.0,
|
||||
"final_equity": 9287.52
|
||||
},
|
||||
{
|
||||
"id": "C_prod_2016_505",
|
||||
"label": "Prod book \u00b7 since 2016-07 \u00b7 505 only",
|
||||
"start": "2016-07-01",
|
||||
"universe": "prod_505",
|
||||
"n_candidates": 190179,
|
||||
"n_qualified_longs": 2450,
|
||||
"fill_mode": "close",
|
||||
"ranking_key": "residual_high_vol_blend_80_20_score",
|
||||
"exit_policy": "atr_trail3",
|
||||
"hold_days": 30,
|
||||
"sharpe": 0.88,
|
||||
"sharpe_se": 0.314,
|
||||
"cagr_pct": 16.7,
|
||||
"max_drawdown_pct": 24.4,
|
||||
"total_return_pct": 369.4,
|
||||
"calmar": 0.68,
|
||||
"trades": 763,
|
||||
"win_rate": 36.7,
|
||||
"n_returns": 2519,
|
||||
"psr": 0.9975,
|
||||
"start_date": "2016-07-01",
|
||||
"end_date": "2026-07-13",
|
||||
"spy_return_pct": 256.9,
|
||||
"final_equity": 46938.66
|
||||
},
|
||||
{
|
||||
"id": "D_prod_2016_505_liquid",
|
||||
"label": "Prod book \u00b7 since 2016-07 \u00b7 505 + liquid top-1500",
|
||||
"start": "2016-07-01",
|
||||
"universe": "prod_plus_liquid",
|
||||
"n_candidates": 649305,
|
||||
"n_qualified_longs": 11551,
|
||||
"fill_mode": "close",
|
||||
"ranking_key": "residual_high_vol_blend_80_20_score",
|
||||
"exit_policy": "atr_trail3",
|
||||
"hold_days": 30,
|
||||
"sharpe": -0.06,
|
||||
"sharpe_se": 0.316,
|
||||
"cagr_pct": -7.0,
|
||||
"max_drawdown_pct": 73.9,
|
||||
"total_return_pct": -52.0,
|
||||
"calmar": -0.1,
|
||||
"trades": 1567,
|
||||
"win_rate": 28.0,
|
||||
"n_returns": 2523,
|
||||
"psr": 0.4287,
|
||||
"start_date": "2016-07-01",
|
||||
"end_date": "2026-07-17",
|
||||
"spy_return_pct": 254.1,
|
||||
"final_equity": 4800.5
|
||||
}
|
||||
],
|
||||
"survivorship_banner": "Today's constituents backfilled. Relative arm comparison only.",
|
||||
"pending_human": true
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
# Production book × universe × horizon — results
|
||||
|
||||
Generated: `2026-07-19T14:07:37.458454`
|
||||
|
||||
> Survivorship: today's constituents backfilled. Compare arms relatively; do not treat deep CAGR/Sharpe levels as deployable forecasts.
|
||||
|
||||
## Arms
|
||||
|
||||
| arm | universe | entry start | Sharpe | SE | CAGR % | max DD % | ret % | trades | qual longs | span |
|
||||
|---|---|---|---:|---:|---:|---:|---:|---:|---:|---|
|
||||
| A_prod_4y_505 | prod_505 | 2022-07-01 | 1.32 | 0.49 | 31.8 | 18.9 | 204.7 | 374 | 1448 | 2022-07-01→2026-07-13 |
|
||||
| B_prod_4y_505_liquid | prod_plus_liquid | 2022-07-01 | 0.14 | 0.499 | -1.8 | 55.3 | -7.1 | 706 | 6587 | 2022-07-01→2026-07-17 |
|
||||
| C_prod_2016_505 | prod_505 | 2016-07-01 | 0.88 | 0.314 | 16.7 | 24.4 | 369.4 | 763 | 2450 | 2016-07-01→2026-07-13 |
|
||||
| D_prod_2016_505_liquid | prod_plus_liquid | 2016-07-01 | -0.06 | 0.316 | -7.0 | 73.9 | -52.0 | 1567 | 11551 | 2016-07-01→2026-07-17 |
|
||||
|
||||
## Config (production, unchanged)
|
||||
|
||||
```json
|
||||
{
|
||||
"note": "Live production knobs \u2014 no modifications",
|
||||
"momentum": "residual_12_1 gate 80",
|
||||
"rank": "residual_high_vol_blend_80_20",
|
||||
"fill_mode": "close",
|
||||
"cost_per_side": 0.001,
|
||||
"exit": {
|
||||
"mode": "atr_trailing",
|
||||
"trailing_pct": 12.0,
|
||||
"atr_multiplier": 3.0,
|
||||
"hold_days": 30
|
||||
},
|
||||
"max_positions": 10,
|
||||
"risk_per_trade": 0.01,
|
||||
"reentry": "gate_reset"
|
||||
}
|
||||
```
|
||||
|
||||
## Snapshot
|
||||
|
||||
```json
|
||||
{
|
||||
"prod_universe_n": 506,
|
||||
"price_symbols_n": 4654,
|
||||
"raw_candidates": 2389258,
|
||||
"liquid_top_n": 1500,
|
||||
"liquid_min_price": 5.0,
|
||||
"short_start": "2022-07-01",
|
||||
"long_start": "2016-07-01"
|
||||
}
|
||||
```
|
||||
|
||||
PENDING_HUMAN — descriptive matrix only; no auto promotion.
|
||||
|
||||
JSON: `reports/prod-book-universe-horizon-20260719-140737.json`
|
||||
|
||||
Reference in New Issue
Block a user