research: Task 2 closed — SUE dead, earnings gap informational
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>
This commit is contained in:
@@ -0,0 +1,348 @@
|
||||
{
|
||||
"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": "2a",
|
||||
"result": {
|
||||
"verdict": "INFORMATIONAL",
|
||||
"costs": {
|
||||
"per_side": 0.001,
|
||||
"r_is_net_of_round_trip_costs": true
|
||||
},
|
||||
"closed_trades": 574,
|
||||
"q1_loss_concentration": {
|
||||
"loss_definition": "realized_net_R <= -1.0",
|
||||
"holding_period_definition": "announcement strictly after entry and before exit",
|
||||
"losses_count": 266,
|
||||
"losses_with_announcement_count": 23,
|
||||
"losses_with_announcement_fraction": 0.0865,
|
||||
"all_trades_with_announcement_count": 115,
|
||||
"all_trades_with_announcement_fraction": 0.2003
|
||||
},
|
||||
"q2_entries_within_3_trading_days_before_announcement": {
|
||||
"pre_earnings": {
|
||||
"count": 27,
|
||||
"mean_r": 0.4837,
|
||||
"median_r": -1.0265,
|
||||
"win_rate": 0.3333,
|
||||
"p05_r": -1.1463,
|
||||
"p95_r": 5.981,
|
||||
"min_r": -1.2449,
|
||||
"max_r": 8.8996
|
||||
},
|
||||
"all_other_entries": {
|
||||
"count": 547,
|
||||
"mean_r": 0.2734,
|
||||
"median_r": -0.8316,
|
||||
"win_rate": 0.3565,
|
||||
"p05_r": -1.1228,
|
||||
"p95_r": 4.5888,
|
||||
"min_r": -6.0161,
|
||||
"max_r": 19.98
|
||||
},
|
||||
"tail_deltas_pre_minus_other": {
|
||||
"p05_r": -0.0235,
|
||||
"p95_r": 1.3922
|
||||
},
|
||||
"directional_tail_condition_present": false,
|
||||
"tail_read": "Registered directional tail condition is not present."
|
||||
},
|
||||
"q3_stop_exits_within_1_trading_day_after_announcement": {
|
||||
"stops_after_earnings": {
|
||||
"count": 26,
|
||||
"mean_r": -0.6434,
|
||||
"median_r": -0.9753,
|
||||
"win_rate": 0.2308,
|
||||
"p05_r": -2.4614,
|
||||
"p95_r": 1.1142,
|
||||
"min_r": -2.6413,
|
||||
"max_r": 1.7012
|
||||
},
|
||||
"all_other_stops": {
|
||||
"count": 433,
|
||||
"mean_r": -0.5035,
|
||||
"median_r": -1.0278,
|
||||
"win_rate": 0.1963,
|
||||
"p05_r": -1.1373,
|
||||
"p95_r": 1.3591,
|
||||
"min_r": -6.0161,
|
||||
"max_r": 19.98
|
||||
},
|
||||
"all_other_exits": {
|
||||
"count": 548,
|
||||
"mean_r": 0.3273,
|
||||
"median_r": -0.8361,
|
||||
"win_rate": 0.3613,
|
||||
"p05_r": -1.0644,
|
||||
"p95_r": 4.7224,
|
||||
"min_r": -6.0161,
|
||||
"max_r": 19.98
|
||||
}
|
||||
},
|
||||
"implementation": "REPORT_ONLY_NO_FILTER_ARM_NO_FILTER_CHANGE",
|
||||
"analysis_window": {
|
||||
"from": "2020-01-22",
|
||||
"to": "2026-07-17",
|
||||
"rule": "entry_on_or_after_start_and_exit_on_or_before_end",
|
||||
"simulation_trades_total": 574,
|
||||
"trades_excluded_outside_earnings_coverage": 0
|
||||
},
|
||||
"run_config": {
|
||||
"universe_symbols": 505,
|
||||
"fill_mode": "close",
|
||||
"cost_per_side": 0.001,
|
||||
"momentum_cutoff": 80.0,
|
||||
"exit_policy": "atr_trail3",
|
||||
"hold_days": 30,
|
||||
"max_positions": 10,
|
||||
"risk_per_trade": 0.01
|
||||
},
|
||||
"sim_summary": {
|
||||
"start_date": "2020-01-22",
|
||||
"end_date": "2026-07-13",
|
||||
"trades": 574,
|
||||
"sharpe": 1.03,
|
||||
"cagr_pct": 22.9,
|
||||
"max_drawdown_pct": 26.6,
|
||||
"total_return_pct": 280.6
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user