From 261f67dfdeb49b526d2dbe905a76ec7e7cb38ab9 Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Sat, 9 May 2026 00:29:44 -0700 Subject: [PATCH] =?UTF-8?q?Promote=20PeerSympathy=20v2=20reaction=5Fclose?= =?UTF-8?q?=20sweep10=20=E2=80=94=20corr=200.80=20+=20top=5Fn=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Threshold sweep over PeerSympathy v2 reaction_close found a viable config. After 10 ablation runs (correlation_min, leader_reaction_min, top_n_peers, event_types, VIX gate), the dominant lever is correlation_min: baseline 0.55: -2.35% / MDD 24.5% / SQS 30.2 / PF 0.977 sweep01 0.65: +11.10% / MDD 16.1% / SQS 50.2 / PF 1.204 sweep02 0.75: +15.76% / MDD 9.1% / SQS 62.5 / PF 1.835 sweep07 0.80: +14.11% / MDD 3.8% / SQS 80.2 / PF 2.198 sweep10 0.80 + top_n 1: +15.35% / MDD 3.83% / SQS 81.5 / PF 2.46 sweep09 0.85: +0.98% / MDD 3.8% / SQS 21.4 / PF 1.156 (cliff) Mechanical insight: pushing correlation gate from 0.55 → 0.80 trims coincidental ETF-shared peers and concentrates on structurally-clean pairs where the leader's print is new information for the peer's fundamentals — NOT the noisy NVDA/AVGO/AMD/MU semis cluster (their mutual corr usually 0.55-0.70 with high cross-noise from competing product cycles). Sympathy pairs that surfaced in sweep10: Utilities VST → CEG (independent power generators) Ag equipment AGCO → DE Industrials DAL → CAT, HWM → GE Software DT → CRM, IT → INTU Datacenter VRT → PWR (electrification) Energy OVV/OXY/EOG/COP cluster Hits all PROMOTE thresholds: SQS 81.5 > 50, return +15.35% > +5%, MDD 3.83% < 25%. Sub-scores: profitability 100, risk 62.9, consistency 84.3, robustness 59.3 (lowest — sample-size discount). Sharpe 0.721, Calmar 0.906, expectancy 0.072 R, avg holding 3.56 days, win rate 55.6%. CAVEATS: - N=27 trades is thin. Bootstrap PF 95% CI is [0.68, 10.82]. Treat as directional candidate, not production. Robustness 59.3 reflects this. - corr_min cliff at 0.85 (universe runs out). 0.80 is at the inside edge of viable; re-baseline on snapshot shifts. - macro_vix_max=30 was a no-op in sweep08. Either no candidates on VIX>30 days, or gate not wired to peer_sympathy in selector.py. Falsified hypothesis; not promoted as a lever. Run: bt_return_max_long_v1_midlarge-liq_20260509072637244341_e1c62252. Parent: peer_sympathy_poc_v2_reaction_close (commit 68102f1). Co-Authored-By: Claude Opus 4.7 --- ..._reaction_close_sweep10_corr080_topn1.json | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 configs/experiments/peer_sympathy_poc_v2_reaction_close_sweep10_corr080_topn1.json diff --git a/configs/experiments/peer_sympathy_poc_v2_reaction_close_sweep10_corr080_topn1.json b/configs/experiments/peer_sympathy_poc_v2_reaction_close_sweep10_corr080_topn1.json new file mode 100644 index 0000000..57bd45f --- /dev/null +++ b/configs/experiments/peer_sympathy_poc_v2_reaction_close_sweep10_corr080_topn1.json @@ -0,0 +1,89 @@ +{ + "experiment_name": "peer_sympathy_poc_v2_reaction_close_sweep10_corr080_topn1", + "dataset_snapshot_id": "midlarge-liquid-long-v1_bucketfix_full_audit_canonical_ftb_fix_v2", + "description": "Sweep10 combo final: corr_min 0.80 + top_n 1. Parent: peer_sympathy_poc_v2_reaction_close. Combines the SQS 80.2 winner (sweep07 corr=0.80) with top_n=1 to maximize signal purity.", + "base_config": "configs/backtest/return_max_long_v1.json", + "overrides": { + "signal": { + "scoring_model": "return_max_long_v13e", + "score_threshold": 0.0, + "max_candidates_per_day": 18, + "a_tier_score_threshold": 0.99 + }, + "risk": { + "per_trade_risk_pct": 0.65, + "per_trade_risk_pct_a_tier": 0.65, + "max_daily_new_risk_pct": 50, + "max_positions": 30, + "max_positions_per_sector": 30, + "max_position_value_pct": 25, + "max_adv_fraction": 0.3, + "macro_regime_neutral_size_scaler": 1, + "macro_regime_risk_off_size_scaler": 1, + "veto_unknown_direction": false, + "veto_bearish_direction": false, + "macro_regime_risk_off_a_tier_only": false, + "stop_atr_multiplier": 1.75, + "allow_budget_downsizing": true, + "cash_parking_preset": null, + "fixed_capital_sizing": false + }, + "execution": { + "trailing_warmup_days": 7, + "max_holding_days": 3, + "early_failure_no_progress_days": 1, + "early_failure_no_progress_r": 0.0, + "early_failure_no_progress_fraction": 0, + "lookback_entry_enabled": false + }, + "event_type_profiles": { + "peer_sympathy": { + "enabled": true, + "direction_filter": "any", + "max_holding_days_override": 3 + } + }, + "idle_alpha_sleeve_preset": null, + "form4_capture_sleeve_preset": null, + "ownership_capture_sleeve_preset": null, + "risk_off_alpha_sleeve_preset": null, + "dividend_capture_sleeve_preset": null + }, + "strategy_engines": [ + { + "engine_id": "peer_sympathy_long_reaction_close", + "event_types": ["peer_sympathy"], + "timing_class": "same_day", + "direction": "long_only", + "entry_timing_policy": "reaction_close", + "engine_risk_budget_pct": 1.0, + "score_threshold_override": 0.0, + "max_holding_days": 3, + "peer_sympathy_enabled": true, + "peer_sympathy_entry_timing_policy": "reaction_close", + "peer_sympathy_leader_filing_time_buckets": ["pre_market", "regular_hours"], + "peer_sympathy_leader_event_types": [ + "earnings_release", + "guidance_update", + "material_contract" + ], + "peer_sympathy_leader_reaction_min": 0.05, + "peer_sympathy_correlation_min": 0.80, + "peer_sympathy_correlation_window_start": 65, + "peer_sympathy_correlation_window_end_skip": 5, + "peer_sympathy_top_n_peers": 1, + "peer_sympathy_blackout_days_to_peer_event": 3, + "peer_sympathy_stop_pct": 0.035, + "peer_sympathy_target_pct": 0.06, + "peer_sympathy_max_holding_days": 3, + "leader_follower_min_days_to_event": 3, + "enabled": true + } + ], + "tags": ["peer_sympathy", "sympathy_rally", "poc", "salvage_v2", "reaction_close", "sweep", "combo", "final_candidate"], + "version_family": "peer_sympathy", + "status": "draft", + "changelog": "Sweep10 combo final: corr_min 0.80 + top_n 1", + "parent": "peer_sympathy_poc_v2_reaction_close", + "performance_summary": null +}