research: survivorship sensitivity and total-return momentum investigation
Three questions answered against snapshot copies, with no production change. Step 1 — how sensitive is the backtest to the ranking universe? Restoring 85 S&P 500 constituents removed between 2021-06 and 2026-07 moves the same window from 2.09 Sharpe / 51.6% CAGR to 1.57 / 38.1%. The failed banks never reached either book (identical best/worst trade R), so this measures universe recomposition, not survivorship bias. The removals list is curated by hand with per-symbol sources; only three explicitly confirmed terminal events get marks, and four unresolved endings are reported as caveats rather than inferred. Step 2 — does a total-return basis change the ranking? Ordered lists differ on 1009 of 1009 evaluated dates, 4.56 replacements per date. The shift correlates with trailing implied yield (mean Spearman +0.79), which is strong evidence consistent with a dividend effect but does not isolate own-yield, since both the stock and benchmark legs change. Step 3a — does that reach P&L? A paired replay reusing one shared candidate set (control reproduces the production row exactly) changes ~30% of entries. Treatment is -3.7pp CAGR and -1.9pp drawdown, with the entire return gap in 2025. A paired moving-block bootstrap (seed 20260907, 5000 replicates, 21/63 blocks, both reported) puts every interval across zero. Decision: production stays unchanged. No schema, no ingestion, no wider sweep. The observed window does not resolve which basis is better, and choosing a threshold now — with -3.7pp on the table — would be fitting the rule to the answer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HAH7vVtn7qbcn1EVheecHQ
This commit is contained in:
1 parent
8453b87290
commit
ebe9047403
16 files changed
+442522
No files matched your search
@@ -0,0 +1,540 @@
|
||||
{
|
||||
"generated_at": "2026-09-07T10:57:26.602851+00:00",
|
||||
"snapshot": "C:\\Workspace\\signal-platform\\backtest_snapshots\\survivorship-a.sqlite",
|
||||
"cache": "C:\\Workspace\\signal-platform\\backtest_snapshots\\tr-rank-cache.sqlite",
|
||||
"window": {
|
||||
"start": "2021-06-24",
|
||||
"end": "2026-07-02"
|
||||
},
|
||||
"universe_size": 505,
|
||||
"inert_snapshot_symbols": [
|
||||
"RHM"
|
||||
],
|
||||
"cutoff": 80.0,
|
||||
"verdict": "proceed to Step 3 - ordered lists differ",
|
||||
"result": {
|
||||
"evaluated_dates": 1009,
|
||||
"skipped_dates_no_history": 252,
|
||||
"dates_with_different_admitted_set": 1007,
|
||||
"dates_with_different_ordered_list": 1009,
|
||||
"mean_set_disagreement": 0.08668279921946223,
|
||||
"max_set_disagreement": 0.21428571428571427,
|
||||
"mean_admitted_per_arm": 100.09,
|
||||
"mean_names_only_in_price_return": 4.56,
|
||||
"mean_names_only_in_total_return": 4.56,
|
||||
"mean_replacements_per_date": 4.56,
|
||||
"max_replacements_per_date": 12,
|
||||
"mean_symmetric_difference": 9.13,
|
||||
"per_year": {
|
||||
"2022": {
|
||||
"dates": 132,
|
||||
"changed_sets": 132,
|
||||
"changed_orders": 132
|
||||
},
|
||||
"2023": {
|
||||
"dates": 250,
|
||||
"changed_sets": 250,
|
||||
"changed_orders": 250
|
||||
},
|
||||
"2024": {
|
||||
"dates": 252,
|
||||
"changed_sets": 252,
|
||||
"changed_orders": 252
|
||||
},
|
||||
"2025": {
|
||||
"dates": 250,
|
||||
"changed_sets": 248,
|
||||
"changed_orders": 250
|
||||
},
|
||||
"2026": {
|
||||
"dates": 125,
|
||||
"changed_sets": 125,
|
||||
"changed_orders": 125
|
||||
}
|
||||
},
|
||||
"examples": [
|
||||
{
|
||||
"date": "2022-06-24",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"CDNS",
|
||||
"MAR",
|
||||
"FIX",
|
||||
"COST",
|
||||
"LIN",
|
||||
"AON",
|
||||
"STE",
|
||||
"CI",
|
||||
"AJG"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"PSX",
|
||||
"WY",
|
||||
"AMCR",
|
||||
"DTE",
|
||||
"GIS",
|
||||
"FE",
|
||||
"BMY",
|
||||
"ES"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"OXY",
|
||||
"EQT",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"ALB",
|
||||
"CF",
|
||||
"SMCI"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"OXY",
|
||||
"EQT",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"ALB",
|
||||
"SMCI"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-06-27",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"FCX",
|
||||
"COST",
|
||||
"FIX",
|
||||
"CI",
|
||||
"PAYX",
|
||||
"HSIC",
|
||||
"L",
|
||||
"AIZ"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"MO",
|
||||
"AMCR",
|
||||
"GIS",
|
||||
"DTE",
|
||||
"CMS",
|
||||
"FE",
|
||||
"BMY"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"ON",
|
||||
"CTRA",
|
||||
"ALB",
|
||||
"CF",
|
||||
"SMCI"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"ON",
|
||||
"CTRA",
|
||||
"CF",
|
||||
"SMCI",
|
||||
"ALB"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-06-28",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"FCX",
|
||||
"LYV",
|
||||
"ULTA",
|
||||
"CDNS",
|
||||
"AMP",
|
||||
"FIX",
|
||||
"AJG"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"MO",
|
||||
"AMCR",
|
||||
"ETR",
|
||||
"DTE",
|
||||
"CMS",
|
||||
"BMY"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"EQT",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"ALB",
|
||||
"HAL"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"EXE",
|
||||
"HAL"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-06-29",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"CDNS",
|
||||
"FIX",
|
||||
"COST",
|
||||
"WAB",
|
||||
"AJG",
|
||||
"TRV"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"LYB",
|
||||
"MO",
|
||||
"AMCR",
|
||||
"DTE",
|
||||
"WEC"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ALB",
|
||||
"ON",
|
||||
"CF",
|
||||
"EXE"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"CF",
|
||||
"ALB",
|
||||
"EXE",
|
||||
"ON"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-06-30",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"LYV",
|
||||
"CDNS",
|
||||
"RJF",
|
||||
"WAB",
|
||||
"FIX",
|
||||
"AON",
|
||||
"TKO"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"NRG",
|
||||
"MO",
|
||||
"LMT",
|
||||
"DTE",
|
||||
"WEC",
|
||||
"AEE"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"ALB",
|
||||
"HAL"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"EXE",
|
||||
"HAL"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-07-01",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"DDOG",
|
||||
"LYV",
|
||||
"HLT",
|
||||
"RJF",
|
||||
"FIX",
|
||||
"TKO",
|
||||
"AON",
|
||||
"AJG",
|
||||
"ACGL"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"WY",
|
||||
"NRG",
|
||||
"AMCR",
|
||||
"MO",
|
||||
"PKG",
|
||||
"LMT",
|
||||
"CMS",
|
||||
"KO"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"EQT",
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"SMCI",
|
||||
"CF",
|
||||
"EXE"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"EQT",
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"CF",
|
||||
"SMCI",
|
||||
"EXE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-07-05",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"HLT",
|
||||
"AON",
|
||||
"TKO",
|
||||
"L",
|
||||
"TRV"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"WY",
|
||||
"MO",
|
||||
"CMS",
|
||||
"DTE"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"ON",
|
||||
"SMCI",
|
||||
"CTRA",
|
||||
"CF",
|
||||
"HAL"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"EQT",
|
||||
"OXY",
|
||||
"APA",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"ON",
|
||||
"CTRA",
|
||||
"SMCI",
|
||||
"CF",
|
||||
"EXE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-07-06",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"TPL",
|
||||
"ANET",
|
||||
"HLT",
|
||||
"LIN",
|
||||
"UNH",
|
||||
"CVS"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"RF",
|
||||
"LYB",
|
||||
"WY",
|
||||
"MO",
|
||||
"ETR"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"ON",
|
||||
"CTRA",
|
||||
"SMCI",
|
||||
"CF",
|
||||
"HAL"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"ON",
|
||||
"SMCI",
|
||||
"CF",
|
||||
"HAL"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-07-07",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"RJF",
|
||||
"LIN",
|
||||
"PKG",
|
||||
"L"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"LYB",
|
||||
"WY",
|
||||
"ETR"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"ON",
|
||||
"MOS",
|
||||
"SMCI",
|
||||
"CTRA",
|
||||
"HAL",
|
||||
"CF"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"APA",
|
||||
"EQT",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"MOS",
|
||||
"ON",
|
||||
"CTRA",
|
||||
"SMCI",
|
||||
"HAL",
|
||||
"EXE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"date": "2022-07-08",
|
||||
"admitted_price_return": 99,
|
||||
"admitted_total_return": 99,
|
||||
"only_in_price_return": [
|
||||
"ANET",
|
||||
"HLT",
|
||||
"RJF",
|
||||
"WAB",
|
||||
"RSG",
|
||||
"AIZ",
|
||||
"HSY"
|
||||
],
|
||||
"only_in_total_return": [
|
||||
"EXC",
|
||||
"LYB",
|
||||
"AMCR",
|
||||
"MO",
|
||||
"ETR",
|
||||
"AEP",
|
||||
"ATO"
|
||||
],
|
||||
"order_changed_without_membership_change": false,
|
||||
"first_10_price_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"ON",
|
||||
"MOS",
|
||||
"CTRA",
|
||||
"SMCI",
|
||||
"HAL",
|
||||
"VLO"
|
||||
],
|
||||
"first_10_total_return": [
|
||||
"APA",
|
||||
"OXY",
|
||||
"DVN",
|
||||
"EQT",
|
||||
"CTRA",
|
||||
"MOS",
|
||||
"ON",
|
||||
"SMCI",
|
||||
"HAL",
|
||||
"EXE"
|
||||
]
|
||||
}
|
||||
],
|
||||
"elapsed_seconds": 132.0
|
||||
},
|
||||
"coverage": {
|
||||
"symbols_cached": 507,
|
||||
"symbols_with_unmatched_dates": 0,
|
||||
"total_unmatched_dates": 0
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user