# Frozen research design parameters (see docs/RESEARCH_DESIGN.md). Changing a value requires a DECISIONS.md entry. seed: 20261102 sample: start: 2012-01-01 end: 2026-10-30 min_quarters_per_firm: 8 min_price_usd: 1.0 # at cutoff, raw close min_regular_bars_per_day: 100 # sessions with fewer 1m regular-session bars are "sparse" min_valid_days_in_window: 15 # out of the 20-trading-day feature window cutoffs: event_time_horizons_td: [40, 20, 10, 5, 1] # trading days before the earnings release date A_q primary_horizon_td: 20 fixed_calendar: month_end # last trading day of each month embargo_rule: "cutoff c < min(A_q, F_q); bars with session_date <= c only; fundamentals with available_at <= c only" feature_window: short_td: 20 long_td: 60 frequencies: [1d, 30m, 5m, 1m] targets: primary: name: adverse_opinc_surprise variable: op_inc expectation: seasonal_random_walk_with_drift # E[X_q] = X_{q-4} + mean(X_{q-1-k} - X_{q-5-k}, k=0..3), PIT scale: assets_tot (latest available) threshold: -0.005 # surprise <= -0.5% of total assets continuous_primary: scaled_opinc_surprise secondary: - {name: roa_yoy_decline, rule: "roa_q - roa_{q-4} <= -0.01"} - {name: ocf_innovation_negative, rule: "(cash_op_q - cash_op_{q-4})/assets <= -0.01"} - {name: liquidity_deterioration, rule: "current ratio falls >= 10% yoy OR interest coverage falls below 1 from >= 1"} - {name: eps_miss, rule: "eps_reported < eps_estimate (vendor estimate, exploratory)"} splits: train: [2012-01-01, 2018-12-31] validation: [2019-01-01, 2020-12-31] test: [2021-01-01, 2026-10-30] walk_forward: {first_test_year: 2016, embargo_quarters: 1} firm_holdout_fraction: 0.2 inference: cluster: [entity_id, calendar_quarter] bootstrap_blocks: calendar_quarter n_bootstrap: 1000 multiple_testing: holm