Earnings backfill sourced from the public DoltHub earnings repo at a pinned commit rather than the FMP API: reproducible for anyone re-running the study, and it burns no request quota. 12,414 events, 98.6% of symbols with >=8 announcements, 99.2% paired actual/estimate, no keyed duplicates. 2a earnings-gap diagnostic: INFORMATIONAL, no filter shipped. The pre-earnings cohort's right tail was better, so the registered avoid-earnings condition failed. Note the raw 23/266 vs 115/574 incidence gap is largely a duration confound -- severe losses stop out fast and have less time to span an announcement -- so it is not evidence that holding through earnings is safe. 2b SUE: FAIL against the pre-registered +0.03 bar (unconditional IC +0.0151 over 56 reliable windows, momentum-conditional +0.0213). Signs stable across eras, so this is a clean null rather than an ambiguous one, consistent with post-earnings drift having decayed in large caps. Closes the Tier-1 arc: Task 1 dead on deep evidence, Task 2 dead here, Task 3 complete as diagnostic. No in-sample research thread remains open. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
350 lines
10 KiB
JSON
350 lines
10 KiB
JSON
{
|
|
"generated_at": "2026-07-20T07:02:10.934892+00:00",
|
|
"snapshot": "C:\\Workspace\\signal-platform\\backtest_snapshots\\research.sqlite",
|
|
"snapshot_depth": {
|
|
"manifest": {
|
|
"schema_version": 1,
|
|
"snapshot": "research.sqlite",
|
|
"snapshot_resolved": "C:\\Workspace\\signal-platform\\backtest_snapshots\\research.sqlite",
|
|
"complete": true,
|
|
"finished_at": "2026-07-19T14:22:15.706192+00:00",
|
|
"ticker_count": 4650,
|
|
"ohlcv_row_count": 5081073,
|
|
"rank_only_count": 4144,
|
|
"sources": {
|
|
"pool": "source_snapshot"
|
|
},
|
|
"history_days": 5000,
|
|
"min_bars": 1262,
|
|
"fetch_ok": 505,
|
|
"fetch_fail": 1,
|
|
"limit": null,
|
|
"extra": {
|
|
"prod_symbols_at_start": 506,
|
|
"pool_size": 506,
|
|
"to_fetch": 506,
|
|
"source_symbols_only": true,
|
|
"benchmark_spy_rows": 2649
|
|
},
|
|
"live_counts": {
|
|
"ticker_count": 4650,
|
|
"ohlcv_row_count": 5081073,
|
|
"rank_only_count": 4144
|
|
}
|
|
},
|
|
"requested_symbols": 506,
|
|
"tradable_symbols": 505,
|
|
"missing_symbols": [],
|
|
"zero_bar_symbols": [
|
|
"RHM"
|
|
],
|
|
"bar_count": {
|
|
"min": 24,
|
|
"median": 2649,
|
|
"max": 2649
|
|
},
|
|
"symbols_with_pre2021_bars": 491,
|
|
"symbols_with_pre2021_bars_pct": 97.2,
|
|
"shallow_symbols_lt_1000_bars": [
|
|
{
|
|
"symbol": "SPCX",
|
|
"first_bar": "2026-06-12",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 24
|
|
},
|
|
{
|
|
"symbol": "Q",
|
|
"first_bar": "2025-11-03",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 176
|
|
},
|
|
{
|
|
"symbol": "PSKY",
|
|
"first_bar": "2025-08-07",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 237
|
|
},
|
|
{
|
|
"symbol": "SNDK",
|
|
"first_bar": "2025-02-13",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 357
|
|
},
|
|
{
|
|
"symbol": "GEV",
|
|
"first_bar": "2024-04-02",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 575
|
|
},
|
|
{
|
|
"symbol": "SOLV",
|
|
"first_bar": "2024-04-01",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 576
|
|
},
|
|
{
|
|
"symbol": "VLTO",
|
|
"first_bar": "2023-10-02",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 700
|
|
},
|
|
{
|
|
"symbol": "KVUE",
|
|
"first_bar": "2023-05-04",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 803
|
|
},
|
|
{
|
|
"symbol": "GEHC",
|
|
"first_bar": "2022-12-15",
|
|
"last_bar": "2026-07-17",
|
|
"bars": 898
|
|
}
|
|
],
|
|
"price_window": {
|
|
"min": "2016-01-04",
|
|
"max": "2026-07-17"
|
|
},
|
|
"benchmark_spy": {
|
|
"rows": 2649,
|
|
"min": "2016-01-04",
|
|
"max": "2026-07-17"
|
|
},
|
|
"gate_threshold": {
|
|
"min_tradable_symbols": 505,
|
|
"max_missing_or_zero_bar": 1,
|
|
"min_symbols_with_pre2021_bars_pct": 80.0,
|
|
"benchmark_min_rows": 1000,
|
|
"benchmark_must_begin_pre2021": true
|
|
},
|
|
"gate_pass": true
|
|
},
|
|
"data_quality": {
|
|
"window": {
|
|
"from": "2020-01-22",
|
|
"to": "2026-07-17"
|
|
},
|
|
"prod_symbols": 505,
|
|
"events": 12414,
|
|
"symbols_with_any_event": 504,
|
|
"symbols_with_ge8_announcements": 498,
|
|
"symbols_with_ge8_announcements_pct": 98.6,
|
|
"symbols_with_ge8_paired_announcements": 495,
|
|
"symbols_with_ge8_paired_announcements_pct": 98.0,
|
|
"events_with_actual_and_estimate": 12311,
|
|
"events_with_actual_and_estimate_pct": 99.2,
|
|
"duplicate_rows_in_table": 0,
|
|
"duplicate_rows_fetched": 0,
|
|
"restated_rows_fetched": 940,
|
|
"dedupe_policy": "UNIQUE(symbol, announce_date); normalise dot/dash symbols; retain one calendar row per key; preserve existing non-null session/EPS values from the prior FMP/Alpha Vantage partial backfill, then fill nulls and all remaining symbols from DoltHub; attach DoltHub period-end alignment",
|
|
"events_per_symbol_year": {
|
|
"mean_active_span_rate": 4.08,
|
|
"expected": "approximately 4",
|
|
"far_off_rule": "active-span rate <2 or >6, plus zero-event symbols",
|
|
"far_off_count": 1,
|
|
"far_off_symbols": [
|
|
{
|
|
"symbol": "SPCX",
|
|
"events": 0,
|
|
"events_per_year": 0.0
|
|
}
|
|
]
|
|
},
|
|
"announcement_session": {
|
|
"recognised_bmo_amc_or_during": 11520,
|
|
"recognised_pct": 92.8,
|
|
"reliable": true,
|
|
"assessment": "usable"
|
|
},
|
|
"point_in_time_policy": "announce_date_plus_1_trading_day_for_all_events",
|
|
"sue_scaling": {
|
|
"primary": "eps_surprise_over_stdev_of_prior_8_surprises_min_4",
|
|
"fallback_trigger": "paired event coverage <50% or symbols with >=8 paired events <50%",
|
|
"fallback_needed": false,
|
|
"fallback_name": "not_used"
|
|
},
|
|
"backfill": {
|
|
"mode": "dolthub_public_bulk_clone",
|
|
"window": {
|
|
"from": "2020-01-22",
|
|
"to": "2026-07-17"
|
|
},
|
|
"coverage_amendment": {
|
|
"approved_by_user": true,
|
|
"reason": "FMP free tier blocks historical bulk earnings",
|
|
"original_start": "2016-01-04",
|
|
"amended_announcement_start": "2020-01-22"
|
|
},
|
|
"source": {
|
|
"repository": "https://www.dolthub.com/repositories/post-no-preference/earnings",
|
|
"commit": "9n0et3hpj9j7vue8f3qsldon3qa5sdjj",
|
|
"license": "CC-BY-SA-4.0",
|
|
"upstream_provider_documented": false
|
|
},
|
|
"bulk_windows_total": 1,
|
|
"bulk_windows_done": 1,
|
|
"bulk_requests_logged_total": 1,
|
|
"bulk_exports": 2,
|
|
"calendar": {
|
|
"raw_rows": 117482,
|
|
"universe_rows_in_window": 12342,
|
|
"deduped_rows_in_window": 12342,
|
|
"duplicate_rows": 0,
|
|
"restated_rows": 0
|
|
},
|
|
"eps_history": {
|
|
"raw_rows": 165050,
|
|
"universe_rows": 18515,
|
|
"deduped_rows": 18515,
|
|
"duplicate_rows": 0,
|
|
"restated_rows": 0,
|
|
"complete_actual_and_estimate": 18304
|
|
},
|
|
"pairing": {
|
|
"method": "minimum-cost monotonic alignment per symbol",
|
|
"allowed_announce_minus_period_end_days": [
|
|
-14,
|
|
90
|
|
],
|
|
"matched_calendar_events": 12271,
|
|
"unmatched_calendar_events": 71,
|
|
"unmatched_periods_in_pairing_window": 538,
|
|
"announce_minus_period_end_days": {
|
|
"min": -10,
|
|
"median": 30,
|
|
"max": 89
|
|
},
|
|
"pre_2020_eps_history_use": "trailing_surprise_stdev_only; never treated as an announcement or live signal event"
|
|
},
|
|
"duplicate_rows_logged_total": 0,
|
|
"restated_rows_logged_total": 940,
|
|
"conflicting_existing_rows": 940,
|
|
"conflicting_existing_fields": 1526,
|
|
"preserved_existing_fields": 2945,
|
|
"existing_enrichment_events_not_in_dolthub_calendar": 72,
|
|
"dedupe_policy": "UNIQUE(symbol, announce_date); normalise dot/dash symbols; retain one calendar row per key; preserve existing non-null session/EPS values from the prior FMP/Alpha Vantage partial backfill, then fill nulls and all remaining symbols from DoltHub; attach DoltHub period-end alignment",
|
|
"events_in_window": 12414,
|
|
"events_with_actual_and_estimate": 12311,
|
|
"symbols_done": 506,
|
|
"symbols_universe": 506,
|
|
"symbols_with_dolthub_calendar": 504,
|
|
"symbols_without_dolthub_calendar": [
|
|
"RHM",
|
|
"SPCX"
|
|
],
|
|
"announce_date_range": {
|
|
"min": "2020-01-22",
|
|
"max": "2026-07-17"
|
|
},
|
|
"complete": true
|
|
}
|
|
},
|
|
"production_impact": "none",
|
|
"experiment": "2b",
|
|
"result": {
|
|
"verdict": "FAIL",
|
|
"verdict_detail": "SUE DEAD for this stack",
|
|
"grade_rule": {
|
|
"mean_ic_ge_0_03_positive": false,
|
|
"reliable_ge_12_windows": true,
|
|
"positive_sign_pre_and_post_2021": true,
|
|
"pass": false
|
|
},
|
|
"sue_unconditional": {
|
|
"signal": "sue_latest",
|
|
"weeks": 56,
|
|
"avg_cross_section": 451.4,
|
|
"mean_ic": 0.0151,
|
|
"ic_t_stat": 1.29,
|
|
"ic_positive_pct": 51.8,
|
|
"mean_quintile_spread": 0.0041,
|
|
"reliable": true
|
|
},
|
|
"era_split": {
|
|
"pre_2021": {
|
|
"signal": "sue_latest",
|
|
"weeks": 9,
|
|
"avg_cross_section": 398.3,
|
|
"mean_ic": 0.0286,
|
|
"ic_t_stat": 0.7,
|
|
"ic_positive_pct": 55.6,
|
|
"mean_quintile_spread": 0.0084,
|
|
"reliable": false
|
|
},
|
|
"post_2021": {
|
|
"signal": "sue_latest",
|
|
"weeks": 48,
|
|
"avg_cross_section": 461.9,
|
|
"mean_ic": 0.0172,
|
|
"ic_t_stat": 1.34,
|
|
"ic_positive_pct": 64.6,
|
|
"mean_quintile_spread": 0.0038,
|
|
"reliable": true
|
|
}
|
|
},
|
|
"signal_eval_identical_cross_sections": {
|
|
"sue_latest": {
|
|
"signal": "sue_latest",
|
|
"weeks": 56,
|
|
"avg_cross_section": 450.9,
|
|
"mean_ic": 0.0148,
|
|
"ic_t_stat": 1.27,
|
|
"ic_positive_pct": 51.8,
|
|
"mean_quintile_spread": 0.004,
|
|
"reliable": true
|
|
},
|
|
"mom_12_1": {
|
|
"signal": "mom_12_1",
|
|
"weeks": 56,
|
|
"avg_cross_section": 450.9,
|
|
"mean_ic": 0.0195,
|
|
"ic_t_stat": 0.74,
|
|
"ic_positive_pct": 58.9,
|
|
"mean_quintile_spread": 0.0104,
|
|
"reliable": true
|
|
},
|
|
"mom_12_1_resid": {
|
|
"signal": "mom_12_1_resid",
|
|
"weeks": 56,
|
|
"avg_cross_section": 450.9,
|
|
"mean_ic": 0.0262,
|
|
"ic_t_stat": 1.07,
|
|
"ic_positive_pct": 55.4,
|
|
"mean_quintile_spread": 0.0114,
|
|
"reliable": true
|
|
}
|
|
},
|
|
"identical_cross_section_definition": "same week-symbol-forward-return cells where sue_latest, mom_12_1, and mom_12_1_resid are all non-null",
|
|
"momentum_conditional_top_quintile": {
|
|
"mean_ic": 0.0213,
|
|
"ic_t_stat": 1.3,
|
|
"weeks": 56,
|
|
"avg_cross_section": 89.8,
|
|
"population": "top_mom_12_1_quintile_only"
|
|
},
|
|
"coverage": {
|
|
"symbols_with_live_sue": 501,
|
|
"avg_weekly_live_n_all_weeks": 453.1,
|
|
"avg_cross_section_n_scored_nonoverlap": 451.4,
|
|
"thin_cross_section_lt_100": false,
|
|
"warning": null
|
|
},
|
|
"scaling": {
|
|
"method": "eps_surprise_over_stdev_of_prior_8_surprises_min_4",
|
|
"fallback": "not_used",
|
|
"counts": {
|
|
"standard_scaled_events": 12149,
|
|
"events_scaled_from_period_history": 12149,
|
|
"price_fallback_events": 0,
|
|
"dropped_insufficient_trailing_history": 95,
|
|
"dropped_missing_period_alignment": 67,
|
|
"dropped_zero_stdev": 0
|
|
},
|
|
"pre_coverage_history_policy": "period-end EPS surprises may scale later events but are never treated as live signals without an announcement date",
|
|
"availability": "announce_date_plus_1_trading_day",
|
|
"carry_trading_days": 63
|
|
},
|
|
"universe_symbols": 505
|
|
}
|
|
}
|