Implement multi-engine PEAD strategy research workflow
parent
2395a0c0c3
commit
9ec0b26e10
@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_portfolio_v2",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Portfolio V2: split PEAD earnings into specialist engines by timing and direction, with same-day long using reaction-close entry and after-close short kept as shadow.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any"},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_v1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 3,
|
||||||
|
"engine_risk_budget_pct": 0.40,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close_v1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 3,
|
||||||
|
"engine_risk_budget_pct": 0.35,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_v1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 5,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_v1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 3,
|
||||||
|
"engine_risk_budget_pct": 0.10,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "portfolio_v2", "specialist_engines"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step22_sdlong_close5",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 22: Preserve step14 profitable buckets, switch same-day longs to reaction-close entry with 5-day hold, and remove after-close shorts from active book.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close5",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 5,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step22", "same_day_long_close5"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step23_sdlong_close7",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 23: Same as step22 but keep same-day reaction-close longs on the original 7-day hold.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step23", "same_day_long_close7"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step24_sdlong_close5_nofrac",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 24: Step22 plus full exit at target, combining the best same-day long entry change with the best return-side exit tweak.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close5",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 5,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step24", "same_day_long_close5", "nofrac"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step25_positive_buckets",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 25: Keep only the two positive step14 buckets: same-day shorts and after-close longs.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step25", "positive_buckets"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step26_positive_buckets_nofrac",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 26: Step25 plus full exit at target to maximize realized gains in the two positive buckets.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step26", "positive_buckets", "nofrac"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step27_sdlong_close7_budget25",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 27: Step23 with a smaller 25% daily risk sleeve for same-day reaction-close longs to reduce crowding.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step27", "same_day_long_close7", "budget25"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step28_sdlong_close7_budget12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 28: Step23 with an even tighter 12.5% daily risk sleeve for same-day reaction-close longs.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step28", "same_day_long_close7", "budget12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step29_sdlong_close7_budget25_nofrac",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 29: Step27 plus full exit at target to combine better sleeve budgeting with the best return-side exit tweak.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_shadow",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step29", "same_day_long_close7", "budget25", "nofrac"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step30_balanced_sleeves_nofrac",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 30: Keep all earnings sleeves but downweight the weaker long-close and after-close short buckets, with full exit at target.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step30", "balanced_sleeves", "nofrac"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step31_balanced_sleeves_nofrac_acshort12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 31: Step30 with a smaller after-close short sleeve to keep trade count support while trimming the weaker bucket further.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step31", "balanced_sleeves", "nofrac", "acshort12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step32_balanced_sleeves_nofrac_sdlong50",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 32: Step30 with a larger same-day long close sleeve to test whether the improved entry can carry more capital without breaking the portfolio.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.5,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step32", "balanced_sleeves", "nofrac", "sdlong50"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step33_balanced_sleeves_nofrac_acshort6",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 33: Step31 with an even smaller after-close short sleeve to test if the trade-count support remains while cutting more drag.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.0625,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step33", "balanced_sleeves", "nofrac", "acshort6"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step34_balanced_sleeves_nofrac_aclong25",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 34: Step31 with the after-close long sleeve capped to two trades per day, testing whether the weaker bucket improves when only the top-ranked names survive.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_top2",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step34", "balanced_sleeves", "nofrac", "aclong25"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step35_balanced_sleeves_nofrac_aclong12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 35: Step31 with the after-close long sleeve capped to one trade per day, forcing the portfolio to lean harder on the stronger same-day sleeves.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_top1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step35", "balanced_sleeves", "nofrac", "aclong12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step36_balanced_sleeves_nofrac_aclong12_sdlong12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 36: Step35 plus a one-trade-per-day cap on the same-day long close sleeve, keeping only the single best close-entry long when multiple names trigger together.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_top1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_top1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step36", "balanced_sleeves", "nofrac", "aclong12", "sdlong12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step37_balanced_sleeves_aclong_vol3",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 37: Keep the step31 balanced sleeve structure, but require stronger volume confirmation for after-close long candidates only.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_vol3",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"pead_volume_threshold_override": 3.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step37", "balanced_sleeves", "aclong", "vol3"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step38_balanced_sleeves_aclong_vol4",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 38: Step37 with an even stricter after-close long volume gate, testing whether only the highest-conviction overnight reactions should remain in that sleeve.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_vol4",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"pead_volume_threshold_override": 4.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step38", "balanced_sleeves", "aclong", "vol4"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step39_balanced_sleeves_sdlong12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 39: Keep the robust step31 sleeve mix, but cap same-day long close entries to one trade per day while leaving after-close longs unchanged.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_long_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_top1",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step39", "balanced_sleeves", "sdlong12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step40_short_core_sdlong12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 40: Remove the unstable after-close long sleeve and keep a short-led portfolio with a small same-day close-entry long overlay.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step40", "short_core", "sdlong12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step41_short_core_sdlong12_acshort50",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 41: Step40 with a larger after-close short sleeve, leaning harder into the more stable short continuation buckets.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.5,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step41", "short_core", "sdlong12", "acshort50"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step42_short_core_only",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 42: Pure short-led portfolio using only same-day and after-close short sleeves.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step42", "short_core", "short_only"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step43_short_core_sdlong25",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 43: Keep the step40 short-core structure but restore a larger same-day long close sleeve after removing after-close longs.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step43", "short_core", "sdlong25"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step44_short_core_macro50",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 44: Apply a 50% size scaler in unfavorable SPY-below-SMA regimes on top of the step40 short-core structure.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 0.5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step44", "short_core", "macro50"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step45_short_core_macro_block",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 45: Hard block all new entries in unfavorable SPY-below-SMA regimes on top of the step40 short-core structure.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step45", "short_core", "macro_block"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step46_short_core_macro_block_acshort12",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 46: Step45 with a smaller after-close short sleeve, testing whether the macro block leaves that bucket oversized on train.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step46", "short_core", "macro_block", "acshort12"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step47_short_core_macro_block_sdlong25",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 47: Step45 with a larger same-day long close sleeve, testing whether the macro block makes that overlay scalable again.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step47", "short_core", "macro_block", "sdlong25"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step48_short_core_macro_block_nolong",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 48: Step45 without the same-day long sleeve, testing whether the macro-blocked short core is strong enough on its own.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step48", "short_core", "macro_block", "nolong"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step49_same_day_short_macro_block",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 49: Pure same-day short sleeve under the macro block, testing whether the simplest engine dominates the portfolio.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step49", "same_day_short", "macro_block"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step50_same_day_short_long_macro_block",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 50: Step45 without the after-close short sleeve, preserving the same-day short core plus the small reaction-close long overlay.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step50", "same_day", "macro_block"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step51_short_core_macro_block_crashcap",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 51: Step45 plus an extreme-crash cap on the same-day short sleeve, avoiding follow-on shorts after one-day collapses worse than -45%.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14_capped",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"reaction_day_return_min": -0.45,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_small",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step51", "short_core", "macro_block", "crashcap"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step52_short_core_macro_block_crashcap_gap10",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 52: Step51 plus a minimum gap-size filter on the same-day long overlay, keeping only larger reaction-day gaps.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14_capped",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"reaction_day_return_min": -0.45,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_gap10",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"gap_size_min": 0.10,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step52", "short_core", "macro_block", "crashcap", "gap10"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"experiment_name": "pead_midcap_step53_short_core_macro_block_crashcap_gap14",
|
||||||
|
"dataset_snapshot_id": "midcap-filtered",
|
||||||
|
"description": "Step 53: Step51 plus a stricter minimum gap-size filter on the same-day long overlay, concentrating the long sleeve into only the most forceful gappers.",
|
||||||
|
"base_config": "configs/backtest/defaults.json",
|
||||||
|
"overrides": {
|
||||||
|
"strategy_engine_selection_mode": "global_score",
|
||||||
|
"event_type_profiles": {
|
||||||
|
"earnings_release": {"enabled": true, "direction_filter": "any", "max_holding_days_override": 7},
|
||||||
|
"guidance_update": {"enabled": false},
|
||||||
|
"management_change": {"enabled": false},
|
||||||
|
"material_contract": {"enabled": false},
|
||||||
|
"unknown": {"enabled": false},
|
||||||
|
"other_material_event": {"enabled": false}
|
||||||
|
},
|
||||||
|
"signal": {
|
||||||
|
"scoring_model": "pead",
|
||||||
|
"pead_reaction_threshold": 0.10,
|
||||||
|
"pead_volume_threshold": 2.0,
|
||||||
|
"score_threshold": 0.65,
|
||||||
|
"max_candidates_per_day": 3
|
||||||
|
},
|
||||||
|
"execution": {
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"target_1_fraction": 1.0
|
||||||
|
},
|
||||||
|
"risk": {
|
||||||
|
"max_positions": 8,
|
||||||
|
"max_positions_per_sector": 8,
|
||||||
|
"max_daily_new_risk_pct": 0.04,
|
||||||
|
"cooldown_after_loss_streak": 0,
|
||||||
|
"cooldown_days": 0,
|
||||||
|
"veto_oneoff_penalty": 1.0,
|
||||||
|
"veto_unknown_direction": false,
|
||||||
|
"veto_bearish_direction": false,
|
||||||
|
"macro_regime_enabled": true,
|
||||||
|
"macro_regime_size_scaler": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strategy_engines": [
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_short_step14_capped",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 1.0,
|
||||||
|
"reaction_day_return_min": -0.45,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_after_close_short_core",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "after_close",
|
||||||
|
"direction": "short_only",
|
||||||
|
"entry_timing_policy": "next_open",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.25,
|
||||||
|
"shadow_only": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"engine_id": "earnings_same_day_long_close7_gap14",
|
||||||
|
"event_types": ["earnings_release"],
|
||||||
|
"timing_class": "same_day",
|
||||||
|
"direction": "long_only",
|
||||||
|
"entry_timing_policy": "reaction_close",
|
||||||
|
"max_holding_days": 7,
|
||||||
|
"engine_risk_budget_pct": 0.125,
|
||||||
|
"gap_size_min": 0.14,
|
||||||
|
"shadow_only": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"splits": [],
|
||||||
|
"tags": ["pead", "midcap", "step53", "short_core", "macro_block", "crashcap", "gap14"],
|
||||||
|
"notes": null
|
||||||
|
}
|
||||||
@ -1,58 +1,84 @@
|
|||||||
# Strategy Improvement Leaderboard
|
# Strategy Improvement Leaderboard
|
||||||
_Updated: 2026-03-17T04:06:21.261225+00:00_
|
_Updated: 2026-03-17T07:57:00.128792+00:00_
|
||||||
|
|
||||||
| # | Experiment | SQS | PF | Ret% | WR | Sharpe | DD% | Trades | Date |
|
| # | Experiment | SQS | PF | Ret% | WR | Sharpe | DD% | Trades | Date |
|
||||||
|---|-----------|-----|-----|------|-----|--------|-----|--------|------|
|
|---|-----------|-----|-----|------|-----|--------|-----|--------|------|
|
||||||
| 1 | pead_midcap_step14_score65 | 64.2 | 1.22 | +0.7 | 57% | 1.3 | 0.9 | 72 | 2026-03-17 |
|
| 1 | pead_midcap_step35_balanced_sleeves_nofrac_aclong12 | 90.4 | 2.01 | +2.2 | 61% | 4.2 | 0.4 | 56 | 2026-03-17 |
|
||||||
| 2 | pead_midcap_step18_nofrac | 63.2 | 1.23 | +0.8 | 52% | 1.4 | 0.9 | 64 | 2026-03-17 |
|
| 2 | pead_midcap_step36_balanced_sleeves_nofrac_aclong12_sdlong12 | 90.3 | 2.06 | +2.1 | 61% | 4.5 | 0.4 | 54 | 2026-03-17 |
|
||||||
| 3 | pead_midcap_step19_hold5 | 62.9 | 1.20 | +0.7 | 57% | 1.2 | 0.9 | 72 | 2026-03-17 |
|
| 3 | pead_midcap_step44_short_core_macro50 | 87.9 | 2.01 | +1.3 | 57% | 2.6 | 0.7 | 58 | 2026-03-17 |
|
||||||
| 4 | pead_midcap_step20_best3 | 62.0 | 1.22 | +0.7 | 52% | 1.3 | 0.9 | 64 | 2026-03-17 |
|
| 4 | pead_midcap_step47_short_core_macro_block_sdlong25 | 87.0 | 3.43 | +1.3 | 68% | 3.3 | 0.3 | 25 | 2026-03-17 |
|
||||||
| 5 | pead_midcap_step17_target2 | 59.4 | 1.18 | +0.6 | 53% | 1.1 | 0.8 | 66 | 2026-03-17 |
|
| 5 | pead_midcap_step45_short_core_macro_block | 86.7 | 3.78 | +1.2 | 70% | 3.4 | 0.3 | 23 | 2026-03-17 |
|
||||||
| 6 | pead_midcap_step13_best | 57.7 | 1.12 | +0.4 | 55% | 0.8 | 0.9 | 75 | 2026-03-16 |
|
| 6 | pead_midcap_step51_short_core_macro_block_crashcap | 86.7 | 4.19 | +1.2 | 73% | 3.6 | 0.2 | 22 | 2026-03-17 |
|
||||||
| 7 | pead_midcap_step16_react7_score65 | 53.2 | 0.97 | -0.1 | 56% | -0.2 | 1.6 | 89 | 2026-03-17 |
|
| 7 | pead_midcap_step46_short_core_macro_block_acshort12 | 86.6 | 4.52 | +1.3 | 71% | 3.6 | 0.3 | 21 | 2026-03-17 |
|
||||||
| 8 | pead_midcap_step5_maxcand3 | 52.5 | 0.95 | -0.2 | 54% | -0.4 | 1.4 | 96 | 2026-03-16 |
|
| 8 | pead_midcap_step52_short_core_macro_block_crashcap_gap10 | 86.3 | 3.35 | +1.0 | 77% | 3.0 | 0.2 | 22 | 2026-03-17 |
|
||||||
| 9 | pead_midcap_step15_react7 | 51.7 | 0.94 | -0.3 | 55% | -0.5 | 1.6 | 91 | 2026-03-17 |
|
| 9 | pead_midcap_step48_short_core_macro_block_nolong | 85.7 | 3.40 | +0.8 | 80% | 2.4 | 0.4 | 20 | 2026-03-17 |
|
||||||
| 10 | pead_midcap_step11_score60 | 50.2 | 1.02 | +0.1 | 52% | 0.2 | 0.9 | 77 | 2026-03-16 |
|
| 10 | pead_midcap_step40_short_core_sdlong12 | 82.1 | 1.77 | +1.5 | 58% | 2.2 | 1.1 | 55 | 2026-03-17 |
|
||||||
| 11 | pead_midcap_step12_vol2x | 50.2 | 1.02 | +0.1 | 52% | 0.1 | 0.9 | 77 | 2026-03-16 |
|
| 11 | pead_midcap_step34_balanced_sleeves_nofrac_aclong25 | 81.3 | 1.62 | +1.8 | 56% | 3.8 | 0.6 | 62 | 2026-03-17 |
|
||||||
| 12 | pead_midcap_step3_10pct | 49.8 | 1.00 | +0.0 | 50% | 0.0 | 1.4 | 98 | 2026-03-16 |
|
| 12 | pead_midcap_step43_short_core_sdlong25 | 78.9 | 1.66 | +1.5 | 57% | 2.0 | 1.3 | 58 | 2026-03-17 |
|
||||||
| 13 | pead_midcap_step10_short | 49.2 | 1.00 | -0.0 | 52% | -0.0 | 0.9 | 79 | 2026-03-16 |
|
| 13 | pead_midcap_step31_balanced_sleeves_nofrac_acshort12 | 77.9 | 1.49 | +1.6 | 55% | 3.2 | 0.7 | 64 | 2026-03-17 |
|
||||||
| 14 | pead_midcap_step2_notrail | 41.4 | 0.93 | -0.3 | 67% | -0.4 | 1.7 | 54 | 2026-03-16 |
|
| 14 | pead_midcap_step39_balanced_sleeves_sdlong12 | 77.9 | 1.50 | +1.5 | 55% | 3.4 | 0.5 | 62 | 2026-03-17 |
|
||||||
| 15 | pead_midcap_step1_fixedr | 39.7 | 0.91 | -0.5 | 47% | -0.7 | 1.5 | 95 | 2026-03-16 |
|
| 15 | pead_midcap_step30_balanced_sleeves_nofrac | 75.2 | 1.41 | +1.4 | 54% | 2.8 | 0.8 | 67 | 2026-03-17 |
|
||||||
| 16 | pead_midcap_combo_10pct_maxcand3 | 39.2 | 0.97 | -0.1 | 51% | -0.2 | 0.9 | 79 | 2026-03-16 |
|
| 16 | pead_midcap_step33_balanced_sleeves_nofrac_acshort6 | 73.9 | 1.47 | +1.2 | 52% | 2.3 | 0.7 | 48 | 2026-03-17 |
|
||||||
| 17 | pead_midcap_step6_drift | 37.0 | 0.86 | -0.9 | 43% | -1.6 | 1.7 | 100 | 2026-03-16 |
|
| 17 | pead_midcap_step37_balanced_sleeves_aclong_vol3 | 73.6 | 1.38 | +1.2 | 54% | 2.5 | 0.8 | 63 | 2026-03-17 |
|
||||||
| 18 | pead_midcap_step7_fixedr | 35.4 | 0.94 | -0.2 | 45% | -0.4 | 1.0 | 71 | 2026-03-16 |
|
| 18 | pead_midcap_step41_short_core_sdlong12_acshort50 | 72.6 | 1.53 | +1.2 | 56% | 1.6 | 1.3 | 59 | 2026-03-17 |
|
||||||
| 19 | pead_midcap_step4_longonly | 32.6 | 0.84 | -0.8 | 45% | -1.2 | 1.4 | 78 | 2026-03-16 |
|
| 19 | pead_midcap_step42_short_core_only | 66.3 | 1.44 | +0.8 | 63% | 1.2 | 1.2 | 46 | 2026-03-17 |
|
||||||
| 20 | pead_midcap_step8_nft | 31.3 | 0.65 | -1.8 | 41% | -3.0 | 2.2 | 71 | 2026-03-16 |
|
| 20 | pead_midcap_step14_score65 | 64.2 | 1.22 | +0.7 | 57% | 1.3 | 0.9 | 72 | 2026-03-17 |
|
||||||
| 21 | pead_midcap_step9_stop2 | 31.1 | 0.77 | -1.7 | 45% | -1.8 | 2.5 | 71 | 2026-03-16 |
|
| 21 | pead_midcap_step18_nofrac | 63.2 | 1.23 | +0.8 | 52% | 1.4 | 0.9 | 64 | 2026-03-17 |
|
||||||
|
| 22 | pead_midcap_step19_hold5 | 62.9 | 1.20 | +0.7 | 57% | 1.2 | 0.9 | 72 | 2026-03-17 |
|
||||||
|
| 23 | pead_midcap_step20_best3 | 62.0 | 1.22 | +0.7 | 52% | 1.3 | 0.9 | 64 | 2026-03-17 |
|
||||||
|
| 24 | pead_midcap_step17_target2 | 59.4 | 1.18 | +0.6 | 53% | 1.1 | 0.8 | 66 | 2026-03-17 |
|
||||||
|
| 25 | pead_midcap_step27_sdlong_close7_budget25 | 57.9 | 1.17 | +0.6 | 54% | 0.9 | 1.3 | 68 | 2026-03-17 |
|
||||||
|
| 26 | pead_midcap_step13_best | 57.7 | 1.12 | +0.4 | 55% | 0.8 | 0.9 | 75 | 2026-03-16 |
|
||||||
|
| 27 | pead_midcap_step23_sdlong_close7 | 55.1 | 1.13 | +0.5 | 54% | 0.7 | 1.4 | 69 | 2026-03-17 |
|
||||||
|
| 28 | pead_midcap_step38_balanced_sleeves_aclong_vol4 | 54.2 | 1.12 | +0.4 | 51% | 0.8 | 0.9 | 61 | 2026-03-17 |
|
||||||
|
| 29 | pead_midcap_step16_react7_score65 | 53.2 | 0.97 | -0.1 | 56% | -0.2 | 1.6 | 89 | 2026-03-17 |
|
||||||
|
| 30 | pead_midcap_step5_maxcand3 | 52.5 | 0.95 | -0.2 | 54% | -0.4 | 1.4 | 96 | 2026-03-16 |
|
||||||
|
| 31 | pead_midcap_portfolio_v2 | 52.0 | 1.08 | +0.3 | 51% | 0.5 | 1.8 | 70 | 2026-03-17 |
|
||||||
|
| 32 | pead_midcap_step15_react7 | 51.7 | 0.94 | -0.3 | 55% | -0.5 | 1.6 | 91 | 2026-03-17 |
|
||||||
|
| 33 | pead_midcap_step11_score60 | 50.2 | 1.02 | +0.1 | 52% | 0.2 | 0.9 | 77 | 2026-03-16 |
|
||||||
|
| 34 | pead_midcap_step12_vol2x | 50.2 | 1.02 | +0.1 | 52% | 0.1 | 0.9 | 77 | 2026-03-16 |
|
||||||
|
| 35 | pead_midcap_step3_10pct | 49.8 | 1.00 | +0.0 | 50% | 0.0 | 1.4 | 98 | 2026-03-16 |
|
||||||
|
| 36 | pead_midcap_step10_short | 49.2 | 1.00 | -0.0 | 52% | -0.0 | 0.9 | 79 | 2026-03-16 |
|
||||||
|
| 37 | pead_midcap_step53_short_core_macro_block_crashcap_gap14 | 43.1 | 4.60 | +1.1 | 84% | 3.5 | 0.2 | 19 | 2026-03-17 |
|
||||||
|
| 38 | pead_midcap_step50_same_day_short_long_macro_block | 41.9 | 3.21 | +0.8 | 60% | 2.7 | 0.4 | 15 | 2026-03-17 |
|
||||||
|
| 39 | pead_midcap_step2_notrail | 41.4 | 0.93 | -0.3 | 67% | -0.4 | 1.7 | 54 | 2026-03-16 |
|
||||||
|
| 40 | pead_midcap_step1_fixedr | 39.7 | 0.91 | -0.5 | 47% | -0.7 | 1.5 | 95 | 2026-03-16 |
|
||||||
|
| 41 | pead_midcap_combo_10pct_maxcand3 | 39.2 | 0.97 | -0.1 | 51% | -0.2 | 0.9 | 79 | 2026-03-16 |
|
||||||
|
| 42 | pead_midcap_step49_same_day_short_macro_block | 38.9 | 2.40 | +0.4 | 70% | 1.6 | 0.4 | 10 | 2026-03-17 |
|
||||||
|
| 43 | pead_midcap_step6_drift | 37.0 | 0.86 | -0.9 | 43% | -1.6 | 1.7 | 100 | 2026-03-16 |
|
||||||
|
| 44 | pead_midcap_step7_fixedr | 35.4 | 0.94 | -0.2 | 45% | -0.4 | 1.0 | 71 | 2026-03-16 |
|
||||||
|
| 45 | pead_midcap_step4_longonly | 32.6 | 0.84 | -0.8 | 45% | -1.2 | 1.4 | 78 | 2026-03-16 |
|
||||||
|
| 46 | pead_midcap_step8_nft | 31.3 | 0.65 | -1.8 | 41% | -3.0 | 2.2 | 71 | 2026-03-16 |
|
||||||
|
| 47 | pead_midcap_step9_stop2 | 31.1 | 0.77 | -1.7 | 45% | -1.8 | 2.5 | 71 | 2026-03-16 |
|
||||||
|
|
||||||
## Recent Entries
|
## Recent Entries
|
||||||
### IMP-0021 (2026-03-17) — pead_midcap_step20_best3
|
### IMP-0047 (2026-03-17) — pead_midcap_step53_short_core_macro_block_crashcap_gap14
|
||||||
Hypothesis: Combine all marginally positive changes: score 0.65 + nofrac 1.0 + hold 5d
|
Hypothesis: A stricter same-day long gap filter might further concentrate the overlay into only the strongest continuation setups.
|
||||||
Verdict: **NEUTRAL** (SQS 62.0)
|
Verdict: **WORSE** (SQS 43.1)
|
||||||
Reasoning: Test SQS 62.0 < 64.2. Return +0.72% similar to +0.73%. Combo did not beat step14 alone. Over-optimization reduces robustness.
|
Reasoning: The stricter gap filter over-concentrated the overlay, dropped total trade count below a healthy level, and cratered test SQS.
|
||||||
Next: Step14 (score 0.65) remains the best. Simple is better.
|
Next: Use moderate overlay filters only; the strict version is too sparse.
|
||||||
|
|
||||||
### IMP-0020 (2026-03-17) — pead_midcap_step19_hold5
|
### IMP-0046 (2026-03-17) — pead_midcap_step52_short_core_macro_block_crashcap_gap10
|
||||||
Hypothesis: Shorter 5d hold reduces exposure since avg hold is 3.28d. Less time for reversals.
|
Hypothesis: The same-day long overlay may work better when restricted to larger reaction-day gap moves.
|
||||||
Verdict: **NEUTRAL** (SQS 62.9)
|
Verdict: **NEUTRAL** (SQS 86.3)
|
||||||
Reasoning: Test SQS 62.9 vs 64.2. Return +0.67% vs +0.73%. Valid SQS 77.4 was strong. Similar trade count (72). Marginal effect.
|
Reasoning: A 10% gap filter made train and valid much stronger but gave back some test performance, so this is a balanced alternative rather than a clear new leader.
|
||||||
Next: Hold5d marginal positive on valid but neutral on test
|
Next: If optimizing for robustness across splits, keep exploring overlay quality gates around this variant.
|
||||||
|
|
||||||
### IMP-0019 (2026-03-17) — pead_midcap_step18_nofrac
|
### IMP-0045 (2026-03-17) — pead_midcap_step51_short_core_macro_block_crashcap
|
||||||
Hypothesis: Full exit at target (fraction 1.0) prevents trailing stop from eating profits on partial positions
|
Hypothesis: Extreme one-day crash continuations are too stretched for the same-day short sleeve and should be excluded.
|
||||||
Verdict: **NEUTRAL** (SQS 63.2)
|
Verdict: **BETTER** (SQS 86.7)
|
||||||
Reasoning: Test SQS 63.2 vs 64.2. Return +0.78% slightly better than +0.73%. Within noise. Fewer trades (64 vs 72). Marginal effect.
|
Reasoning: Capping same-day shorts at -45% reaction preserved train and valid while modestly improving test return, PF, drawdown, and Sharpe versus step45.
|
||||||
Next: Nofrac marginal positive on return but not SQS
|
Next: Combine the crash cap with a quality filter on the same-day long overlay.
|
||||||
|
|
||||||
### IMP-0018 (2026-03-17) — pead_midcap_step17_target2
|
### IMP-0044 (2026-03-17) — pead_midcap_step50_same_day_short_long_macro_block
|
||||||
Hypothesis: Wider target (ATR 2.0) improves R:R ratio from 3:1.5 to 3:2 with step14 stronger signals
|
Hypothesis: The same-day long overlay may matter, but the after-close short sleeve may be removable.
|
||||||
Verdict: **WORSE** (SQS 59.4)
|
Verdict: **WORSE** (SQS 41.9)
|
||||||
Reasoning: Test SQS 59.4 < 64.2. Return +0.59% < +0.73%. Wider target reduced trade count (66 vs 72) without improving win rate. R:R improvement not impactful.
|
Reasoning: Dropping the after-close short sleeve reduced both valid and test performance, so step45 still benefits from carrying all three active sleeves.
|
||||||
Next: Target tuning not effective for PEAD
|
Next: Refine sleeve quality rather than deleting sleeves wholesale.
|
||||||
|
|
||||||
### IMP-0017 (2026-03-17) — pead_midcap_step16_react7_score65
|
### IMP-0043 (2026-03-17) — pead_midcap_step49_same_day_short_macro_block
|
||||||
Hypothesis: Combine wider funnel (react 0.07) with stricter quality gate (score 0.65) for best of both
|
Hypothesis: The pure same-day short engine might dominate the portfolio and make other sleeves unnecessary.
|
||||||
Verdict: **WORSE** (SQS 53.2)
|
Verdict: **WORSE** (SQS 38.9)
|
||||||
Reasoning: Test SQS 53.2 < 57.7. Return -0.13% negative. Valid SQS 92.7 was excellent but didn't transfer to OOS. Overfitting risk.
|
Reasoning: The single-sleeve version collapsed SQS because trade count and robustness fell too far, even though the kept trades were profitable.
|
||||||
Next: Combination of wider funnel + higher score did not help OOS
|
Next: Keep the supporting sleeves and test smaller structural adjustments instead.
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue