Wire pct-trailing end-to-end for EarningsRunup; tune v2 risk profile
Fix EarningsRunup trailing config that was previously captured in
Candidate.features only. Add activation-gated pct trailing to
update_trailing_stop with entry-relative giveback semantics
("lock in peak − giveback% of entry"). Plumb through
Candidate → ExecutionConfig → simulator. Default None preserves
legacy pct_X behavior — no impact on engines that don't opt in.
Add earnings_runup_poc_v2_tuned config: per_trade_risk_pct 0.65→0.30,
max_positions 30→8, max_positions_per_sector 30→4, macro_vix_max=30,
trailing_warmup_days 7→0 (activation gate replaces warmup).
v2 backtest (4y, 121 trades) vs v1 baseline (119 trades):
Total return: +37.27% → +254.69%
Max drawdown: 53.23% → 23.97%
SQS: 45.2 → 69.7
Robustness: 50.1 → 100.0
Risk score: 23.5 → 35.0
STOP r-mult: −0.41 → +0.65 (trailing-locked winners)
Promotion thresholds met: MDD < 25%, return preserved, SQS > 55.
Recommend integration as PEAD sleeve adjunct (orthogonal entry timing:
pre-print attention runup vs post-print drift) rather than standalone.
7 new pct-trailing tests: activation gate, ratchet, no-ratchet-down,
reversal-stop, legacy compat, end-to-end engine wiring. 28 passed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
main
parent
956cc78f1b
commit
465e248cb4
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "earnings_runup_poc_v2_tuned",
|
||||||
|
"dataset_snapshot_id": "midlarge-liquid-long-v1_bucketfix_full_audit_canonical_ftb_fix_v2",
|
||||||
|
"description": "EarningsRunup PoC v2 with risk-tuned exits. v1 baseline: +37.27% return, MDD 53.23% (raw) / 44.46% (SQS risk component), SQS 45.2. Changes: (a) wire pct-trailing end-to-end via new trailing_pct_activation/trailing_pct_giveback fields → trailing only arms after +5% peak P&L, then locks in (peak_pnl - 3%) of entry; (b) per_trade_risk_pct 0.65 → 0.30 (halve sizing); (c) max_positions 30 → 8 (concentration cap); (d) macro_vix_max 30 (skip earnings runup setups in macro stress). Goal: cut MDD from ~53% to <25% while preserving the +37% return signal.",
|
||||||
|
"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.30,
|
||||||
|
"per_trade_risk_pct_a_tier": 0.30,
|
||||||
|
"max_daily_new_risk_pct": 50,
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 4,
|
||||||
|
"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": 3,
|
||||||
|
"allow_budget_downsizing": true,
|
||||||
|
"cash_parking_preset": null,
|
||||||
|
"fixed_capital_sizing": false
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"trailing_warmup_days": 0,
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"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": {
|
||||||
|
"earnings_runup_preevent": {
|
||||||
|
"enabled": true,
|
||||||
|
"direction_filter": "any",
|
||||||
|
"max_holding_days_override": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "earnings_runup_preevent_long",
|
||||||
|
"event_types": ["earnings_runup_preevent"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"score_threshold_override": 0.0,
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"macro_vix_max": 30.0,
|
||||||
|
"earnings_runup_enabled": true,
|
||||||
|
"earnings_runup_days_to_earnings_min": 3,
|
||||||
|
"earnings_runup_days_to_earnings_max": 7,
|
||||||
|
"earnings_runup_attention_zscore_20d_min": 1.5,
|
||||||
|
"earnings_runup_dollar_volume_zscore_20d_min": 1.0,
|
||||||
|
"earnings_runup_min_avg_dollar_volume": 50000000.0,
|
||||||
|
"earnings_runup_stop_pct": 0.04,
|
||||||
|
"earnings_runup_target_pct": 0.08,
|
||||||
|
"earnings_runup_trailing_activate_pct": 0.05,
|
||||||
|
"earnings_runup_trailing_giveback_pct": 0.03,
|
||||||
|
"earnings_runup_calendar_buffer_days": 1,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": ["earnings_runup", "preevent_drift", "poc", "risk_tuned"],
|
||||||
|
"version_family": "earnings_runup",
|
||||||
|
"status": "draft",
|
||||||
|
"changelog": "v2: wire pct-trailing end-to-end (5% activation / 3% entry-relative giveback); cut per_trade_risk 0.65→0.30; cap max_positions 30→8; add macro_vix_max=30.",
|
||||||
|
"parent": "earnings_runup_poc_v1",
|
||||||
|
"performance_summary": null
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue