Clean up superseded configs and commit accumulated R&D infrastructure
Key changes: - Delete superseded strategy configs: orb_gainers safe_v2-v9, orb_pullback, vwap_reclaim, hypergap, leader_safe - Add V46 prior_event_types param to domain.py + run.py event type wiring - Major simulator.py enhancements: sector thrust sleeve, sector proxy mapping, helper functions - Improve screener.py with better scoring/filtering - Add new test coverage: test_simulator.py (776 lines) + test_screener.py (313 lines) - Add V24.1 research candidate configs (w002/w003/w004/entrycap/losscap010 variants) - Add leader momentum research configs and sweep files - Update configs/snapshots/registry.json with new strategy registrations - Add docs/leader_intraday_momentum_workflow.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
92840b857a
commit
9095b376d9
@ -1,119 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 38
|
|
||||||
name: "Hypergap Failure V1"
|
|
||||||
status: aborted
|
|
||||||
aborted_date: "2026-04-21"
|
|
||||||
aborted_reason: >
|
|
||||||
3 tests all failed. Test 1 (quality filters + regime gate): -33%, WR ~27%.
|
|
||||||
Test 2 (quality filters, no regime): -59%, WR ~25%.
|
|
||||||
Test 3 (inverted quality - no rvol, no premarket_vol): -59.16%, WR 42.9%, DD -59.16%.
|
|
||||||
Structural R/R problem: avg_win 3.55% < avg_loss 4.10%. Need WR ≥ 54% to break even at
|
|
||||||
this R/R — unachievable. High-quality stocks fail hard but rarely; low-quality stocks fail
|
|
||||||
often but with small moves. Neither profile yields positive expectancy on gap-failure shorts.
|
|
||||||
Root cause: gap-up short positions have inherently adverse asymmetry (stocks rocket up when
|
|
||||||
wrong, drift down slowly when right). No filter combination overcomes this.
|
|
||||||
description: >
|
|
||||||
Phase 3 / diagnostic: extreme-gap stocks (≥6%) that fail to hold the ORB.
|
|
||||||
|
|
||||||
Hypothesis: V23's portfolio-level correlation (~0.40) with any long-momentum engine is
|
|
||||||
regime-driven (both long-momentum, both triggered by QQQ-positive days). The only way to
|
|
||||||
break regime correlation is to be directionally orthogonal.
|
|
||||||
|
|
||||||
Gap failure = stock gaps up ≥6%, but ORB candle is bearish (sold off in first 5 min).
|
|
||||||
Entry: short when price breaks below ORB low. On days when V23's stocks are succeeding
|
|
||||||
(trend), these stocks should not be bearish-ORB (so no trades). On days when market
|
|
||||||
reverses (V23 losing), gap stocks are more likely to fail → shorts enter → anti-correlation.
|
|
||||||
|
|
||||||
Gate: WR ≥ 42% (shorts tolerate lower WR than longs due to asymmetric payout),
|
|
||||||
total_return ≥ 0%, max_dd ≥ -20%.
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: hypergap_failure_v1
|
|
||||||
live_readiness: research_only
|
|
||||||
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
|
|
||||||
entry_direction: short_only # only trade bearish ORB candles (gap failure)
|
|
||||||
order_timeout_minutes: 45
|
|
||||||
|
|
||||||
allow_doji_breakout: false
|
|
||||||
allow_red_to_green_breakout: false
|
|
||||||
|
|
||||||
# === Candidate filters: extreme gap pool (≥6%), same quality bars as V23 ===
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
min_rvol: null # inverted: allow low-rvol retail stocks (test #3: invert quality)
|
|
||||||
min_abs_gap_pct: 0.06 # extreme gap: ≥6% (gap failure more likely above this threshold)
|
|
||||||
min_premarket_dollar_vol: null # inverted: allow low-premarket-vol retail stocks
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: null # no cap
|
|
||||||
|
|
||||||
min_candidate_breadth: null # no breadth gate — operate on any breadth day
|
|
||||||
market_regime_spy_threshold: null # no QQQ regime gate — need to find own signal first
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
rolling_loss_days: 7
|
|
||||||
rolling_loss_threshold: null # no rolling loss kill — diagnostic mode
|
|
||||||
max_simultaneous_entries: 3
|
|
||||||
min_breakout_rel_vol: null
|
|
||||||
|
|
||||||
# === Scoring weights (same as V23) ===
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
|
|
||||||
# === Stop / exit (conservative start for diagnostic) ===
|
|
||||||
atr_stop_multiplier: 1.0 # wider stop for shorts (gap stocks can be volatile)
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
|
|
||||||
partial_exit_at_r: 99.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
|
|
||||||
risk_per_trade_pct: 0.05
|
|
||||||
max_position_pct: 0.70
|
|
||||||
daily_max_loss_pct: 0.05
|
|
||||||
max_stops_per_day: 5
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
|
|
||||||
drawdown_governor_threshold: 0.025
|
|
||||||
drawdown_governor_min_scale: 0.30
|
|
||||||
|
|
||||||
streak_sizing_win_bonus: 0.70
|
|
||||||
streak_sizing_max: 2.5
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
_meta:
|
||||||
|
name: Leader Intraday Momentum Actual Catalyst Liquid
|
||||||
|
description: Separate actual-catalyst liquid-leader continuation engine. Uses only filing-backed catalyst candidates of selected event types, seeds a broad intraday-first shortlist from same-day events, then ranks and trades the liquid leaders showing early continuation.
|
||||||
|
id: 26
|
||||||
|
strategy_mode: momentum
|
||||||
|
strategy:
|
||||||
|
compound_returns: false
|
||||||
|
entry_minutes_after_open: 10
|
||||||
|
confirmation_minutes_after_entry: 5
|
||||||
|
min_confirmation_return_pct: 0.003
|
||||||
|
exit_minutes_before_close: 10
|
||||||
|
stop_loss_pct: null
|
||||||
|
trailing_stop_pct: -0.08
|
||||||
|
overextended_trailing_gain_pct: 0.05
|
||||||
|
overextended_trailing_stop_pct: -0.07
|
||||||
|
min_gap_pct: 0.0
|
||||||
|
min_morning_gain_pct: 0.008
|
||||||
|
max_morning_gain_pct: 0.06
|
||||||
|
max_gap_pct: 0.12
|
||||||
|
min_volume_ratio_14d: 0.02
|
||||||
|
min_entry_volume: 100000
|
||||||
|
min_entry_dollar_volume: 12000000
|
||||||
|
ticker_cooldown_days: 0
|
||||||
|
top_n: 5
|
||||||
|
max_positions_per_sector: 2
|
||||||
|
use_five_sleeves: true
|
||||||
|
five_sleeve_force_count: 3
|
||||||
|
use_event_sleeve: true
|
||||||
|
event_weight: 0.20
|
||||||
|
event_min_score: 1.0
|
||||||
|
event_sleeve_soft_day_only: false
|
||||||
|
use_liquid_largecap_sleeve: true
|
||||||
|
liquid_largecap_weight: 0.15
|
||||||
|
liquid_largecap_min_gain_pct: 0.004
|
||||||
|
liquid_largecap_max_gain_pct: 0.03
|
||||||
|
liquid_largecap_min_confirmation_return_pct: 0.001
|
||||||
|
liquid_largecap_min_entry_dollar_volume: 50000000
|
||||||
|
liquid_largecap_min_avg_dollar_vol_30d: 1000000000
|
||||||
|
liquid_largecap_max_entropy_20d: 0.85
|
||||||
|
use_moderate_gap_liquid_sleeve: true
|
||||||
|
moderate_gap_liquid_weight: 0.10
|
||||||
|
moderate_gap_liquid_min_gap_pct: 0.003
|
||||||
|
moderate_gap_liquid_max_gap_pct: 0.04
|
||||||
|
moderate_gap_liquid_min_gain_pct: 0.008
|
||||||
|
moderate_gap_liquid_max_gain_pct: 0.04
|
||||||
|
moderate_gap_liquid_min_confirmation_return_pct: 0.002
|
||||||
|
moderate_gap_liquid_min_entry_dollar_volume: 20000000
|
||||||
|
moderate_gap_liquid_min_avg_dollar_vol_30d: 250000000
|
||||||
|
moderate_gap_liquid_max_avg_dollar_vol_30d: 3000000000
|
||||||
|
moderate_gap_liquid_min_volume_ratio_14d: 0.02
|
||||||
|
moderate_gap_liquid_max_entropy_20d: 0.84
|
||||||
|
max_entropy_20d: 0.85
|
||||||
|
entropy_size_scale_low: 0.78
|
||||||
|
entropy_size_scale_high: 0.85
|
||||||
|
entropy_size_scale_min: 0.7
|
||||||
|
sector_concentration_scale_low: 0.4
|
||||||
|
sector_concentration_scale_high: 0.67
|
||||||
|
sector_concentration_scale_min: 0.85
|
||||||
|
max_vix: 35.0
|
||||||
|
initial_capital: 10000.0
|
||||||
|
slippage_bps: 5.0
|
||||||
|
candidate_source_mode: intraday_first
|
||||||
|
candidate_seed_threshold: 0.0
|
||||||
|
candidate_seed_max_per_day: 80
|
||||||
|
candidate_seed_liquid_overlay_slots: 0
|
||||||
|
candidate_seed_leader_overlay_slots: 0
|
||||||
|
candidate_seed_moderate_liquid_overlay_slots: 0
|
||||||
|
candidate_seed_event_overlay_slots: 20
|
||||||
|
candidate_seed_event_min_score: 1.0
|
||||||
|
candidate_seed_event_min_gap_pct: 0.0
|
||||||
|
candidate_seed_event_max_gap_pct: 0.12
|
||||||
|
candidate_seed_event_min_avg_dollar_vol_30d: 150000000
|
||||||
|
candidate_seed_event_min_ret_5d: 0.0
|
||||||
|
candidate_seed_event_max_entropy_20d: 0.85
|
||||||
|
candidate_final_max_per_day: 12
|
||||||
|
candidate_intraday_rank_mode: weighted
|
||||||
|
candidate_intraday_weight_gain: 0.10
|
||||||
|
candidate_intraday_weight_confirmation: 0.25
|
||||||
|
candidate_intraday_weight_volume_ratio: 0.15
|
||||||
|
candidate_intraday_weight_entry_dollar_volume: 0.20
|
||||||
|
candidate_intraday_weight_avg_dollar_vol_30d: 0.15
|
||||||
|
candidate_intraday_weight_gap: 0.05
|
||||||
|
candidate_intraday_weight_low_entropy: 0.05
|
||||||
|
candidate_intraday_weight_event_score: 0.20
|
||||||
|
candidate_intraday_event_reserve_slots: 2
|
||||||
|
candidate_intraday_event_reserve_min_score: 1.0
|
||||||
|
candidate_intraday_event_reserve_soft_day_only: false
|
||||||
|
candidate_intraday_moderate_liquid_reserve_slots: 0
|
||||||
|
candidate_require_event_flag: true
|
||||||
|
candidate_min_event_score: 1.0
|
||||||
|
candidate_allowed_event_types:
|
||||||
|
- earnings_release
|
||||||
|
- guidance_update
|
||||||
|
- material_contract
|
||||||
|
- other_material_event
|
||||||
|
universe:
|
||||||
|
source: broad
|
||||||
|
min_price: 10.0
|
||||||
|
backtest:
|
||||||
|
start_date: null
|
||||||
|
end_date: null
|
||||||
|
lookback_trading_days: 200
|
||||||
|
pre_screen_threshold: 0.02
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
dir: data/cache/intraday
|
||||||
|
output:
|
||||||
|
dir: runs/intraday
|
||||||
|
verbose: false
|
||||||
@ -0,0 +1,185 @@
|
|||||||
|
_meta:
|
||||||
|
name: Leader Intraday Momentum Event Day Liquid Hybrid
|
||||||
|
description: Flagship high-WR intraday-first basket plus a separate multi-event liquid overlay. The core basket stays identical to the flagship strategy; only on broad same-day filing clusters does the strategy reserve a small extra budget slice for liquid continuation names outside the base basket.
|
||||||
|
id: 27
|
||||||
|
strategy_mode: momentum
|
||||||
|
strategy:
|
||||||
|
compound_returns: false
|
||||||
|
entry_minutes_after_open: 10
|
||||||
|
confirmation_minutes_after_entry: 5
|
||||||
|
min_confirmation_return_pct: 0.005
|
||||||
|
exit_minutes_before_close: 10
|
||||||
|
stop_loss_pct: null
|
||||||
|
trailing_stop_pct: -0.07
|
||||||
|
overextended_trailing_gain_pct: 0.04
|
||||||
|
overextended_trailing_stop_pct: -0.065
|
||||||
|
min_morning_gain_pct: 0.015
|
||||||
|
max_morning_gain_pct: 0.06
|
||||||
|
max_gap_pct: 0.055
|
||||||
|
min_volume_ratio_14d: 0.04
|
||||||
|
min_entry_volume: 125000
|
||||||
|
min_entry_dollar_volume: 1500000
|
||||||
|
ticker_cooldown_days: 0
|
||||||
|
top_n: 9
|
||||||
|
max_positions_per_sector: 2
|
||||||
|
use_five_sleeves: true
|
||||||
|
five_sleeve_force_count: 4
|
||||||
|
use_event_sleeve: true
|
||||||
|
event_weight: 0.12
|
||||||
|
event_min_score: 1.0
|
||||||
|
event_sleeve_soft_day_only: true
|
||||||
|
soft_day_sparse_max_trades: 2
|
||||||
|
soft_day_sparse_require_no_event: true
|
||||||
|
soft_day_sparse_exempt_largecap: true
|
||||||
|
soft_day_sparse_exempt_moderate_gap_liquid: true
|
||||||
|
soft_day_sparse_scale: 0.7
|
||||||
|
tail_risk_day_max_trades: 3
|
||||||
|
tail_risk_day_min_max_gain_pct: 0.025
|
||||||
|
tail_risk_day_max_support_score: 1.0
|
||||||
|
tail_risk_day_min_max_confirmation_return_pct: 0.01
|
||||||
|
tail_risk_day_require_no_event: true
|
||||||
|
tail_risk_day_event_exemption_min_support_score: 0.35
|
||||||
|
tail_risk_day_exempt_largecap: true
|
||||||
|
tail_risk_day_scale: 0.55
|
||||||
|
low_momentum_single_name_max_gain_pct: 0.025
|
||||||
|
low_momentum_single_name_require_no_event: true
|
||||||
|
low_momentum_single_name_exempt_largecap: true
|
||||||
|
low_momentum_single_name_scale: 0.55
|
||||||
|
max_entropy_20d: 0.86
|
||||||
|
entropy_size_scale_low: 0.78
|
||||||
|
entropy_size_scale_high: 0.86
|
||||||
|
entropy_size_scale_min: 0.6
|
||||||
|
sector_concentration_scale_low: 0.4
|
||||||
|
sector_concentration_scale_high: 0.67
|
||||||
|
sector_concentration_scale_min: 0.8
|
||||||
|
max_vix: 30.0
|
||||||
|
recent_live_scan_days: 0
|
||||||
|
recent_live_scan_min_price: 2.0
|
||||||
|
recent_live_scan_avg_volume_min: 200000
|
||||||
|
recent_live_scan_market_cap_min: 100000000.0
|
||||||
|
recent_live_scan_max_candidates_per_day: 150
|
||||||
|
recent_live_scan_top_n: 6
|
||||||
|
recent_live_scan_min_morning_gain_pct: 0.005
|
||||||
|
recent_live_scan_max_morning_gain_pct: 0.05
|
||||||
|
recent_live_scan_min_confirmation_return_pct: 0.0005
|
||||||
|
recent_live_scan_min_entry_dollar_volume: 50000000.0
|
||||||
|
recent_live_scan_max_gap_pct: 0.04
|
||||||
|
recent_live_scan_max_entropy_20d: 0.9
|
||||||
|
recent_live_scan_use_slow_ignite_sleeve: true
|
||||||
|
recent_live_scan_slow_ignite_weight: 0.30
|
||||||
|
recent_live_scan_slow_ignite_min_gain_pct: 0.003
|
||||||
|
recent_live_scan_slow_ignite_max_gain_pct: 0.015
|
||||||
|
recent_live_scan_slow_ignite_min_entry_dollar_volume: 50000000.0
|
||||||
|
recent_live_scan_slow_ignite_max_entropy_20d: 0.9
|
||||||
|
recent_live_scan_use_liquid_largecap_sleeve: true
|
||||||
|
recent_live_scan_liquid_largecap_weight: 0.35
|
||||||
|
recent_live_scan_liquid_largecap_min_gain_pct: 0.004
|
||||||
|
recent_live_scan_liquid_largecap_max_gain_pct: 0.02
|
||||||
|
recent_live_scan_liquid_largecap_min_confirmation_return_pct: 0.0005
|
||||||
|
recent_live_scan_liquid_largecap_min_entry_dollar_volume: 50000000.0
|
||||||
|
recent_live_scan_liquid_largecap_min_avg_dollar_vol_30d: 500000000.0
|
||||||
|
recent_live_scan_liquid_largecap_max_entropy_20d: 0.9
|
||||||
|
initial_capital: 10000.0
|
||||||
|
slippage_bps: 5.0
|
||||||
|
candidate_source_mode: intraday_first
|
||||||
|
candidate_seed_threshold: 0.0075
|
||||||
|
candidate_seed_max_per_day: 150
|
||||||
|
candidate_seed_liquid_overlay_slots: 3
|
||||||
|
candidate_seed_liquid_min_gap_pct: 0.005
|
||||||
|
candidate_seed_liquid_max_gap_pct: 0.025
|
||||||
|
candidate_seed_liquid_min_avg_dollar_vol_30d: 5000000000.0
|
||||||
|
candidate_seed_liquid_min_ret_5d: 0.0
|
||||||
|
candidate_seed_liquid_max_entropy_20d: 0.87
|
||||||
|
candidate_seed_leader_overlay_slots: 1
|
||||||
|
candidate_seed_leader_min_gap_pct: -0.025
|
||||||
|
candidate_seed_leader_max_gap_pct: 0.01
|
||||||
|
candidate_seed_leader_min_avg_dollar_vol_30d: 500000000.0
|
||||||
|
candidate_seed_leader_min_ret_5d: 0.15
|
||||||
|
candidate_seed_leader_min_atr_pct: 0.06
|
||||||
|
candidate_seed_leader_max_entropy_20d: 0.75
|
||||||
|
candidate_seed_moderate_liquid_overlay_slots: 20
|
||||||
|
candidate_seed_moderate_liquid_min_gap_pct: 0.005
|
||||||
|
candidate_seed_moderate_liquid_max_gap_pct: 0.025
|
||||||
|
candidate_seed_moderate_liquid_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
candidate_seed_moderate_liquid_max_avg_dollar_vol_30d: 2000000000.0
|
||||||
|
candidate_seed_moderate_liquid_max_entropy_20d: 0.86
|
||||||
|
candidate_seed_event_overlay_slots: 0
|
||||||
|
candidate_seed_event_min_score: null
|
||||||
|
candidate_seed_event_min_gap_pct: null
|
||||||
|
candidate_seed_event_max_gap_pct: null
|
||||||
|
candidate_seed_event_min_avg_dollar_vol_30d: null
|
||||||
|
candidate_seed_event_min_ret_5d: null
|
||||||
|
candidate_seed_event_max_entropy_20d: null
|
||||||
|
candidate_final_max_per_day: 14
|
||||||
|
candidate_intraday_rank_mode: weighted
|
||||||
|
candidate_intraday_weight_gain: 0.10
|
||||||
|
candidate_intraday_weight_confirmation: 0.45
|
||||||
|
candidate_intraday_weight_volume_ratio: 0.20
|
||||||
|
candidate_intraday_weight_entry_dollar_volume: 0.15
|
||||||
|
candidate_intraday_weight_gap: 0.05
|
||||||
|
candidate_intraday_weight_low_entropy: 0.05
|
||||||
|
candidate_intraday_weight_avg_dollar_vol_30d: 0.08
|
||||||
|
candidate_intraday_weight_event_score: 0.0
|
||||||
|
candidate_intraday_event_reserve_slots: 0
|
||||||
|
candidate_intraday_event_reserve_min_score: null
|
||||||
|
candidate_intraday_event_reserve_soft_day_only: false
|
||||||
|
candidate_intraday_moderate_liquid_reserve_slots: 1
|
||||||
|
candidate_intraday_moderate_liquid_reserve_trigger_below: 2
|
||||||
|
candidate_allowed_event_types: []
|
||||||
|
use_event_day_liquid_sleeve: true
|
||||||
|
event_day_liquid_capital_fraction: 0.12
|
||||||
|
event_day_liquid_max_positions: 2
|
||||||
|
event_day_liquid_allowed_event_types:
|
||||||
|
- earnings_release
|
||||||
|
- guidance_update
|
||||||
|
- material_contract
|
||||||
|
- other_material_event
|
||||||
|
- management_change
|
||||||
|
- unknown
|
||||||
|
event_day_liquid_min_event_names: 2
|
||||||
|
event_day_liquid_min_event_score: 1.0
|
||||||
|
event_day_liquid_min_event_support_score: 0.15
|
||||||
|
event_day_liquid_min_total_event_entry_dollar_volume: 100000000.0
|
||||||
|
event_day_liquid_min_gain_pct: 0.004
|
||||||
|
event_day_liquid_max_gain_pct: 0.04
|
||||||
|
event_day_liquid_min_confirmation_return_pct: 0.0005
|
||||||
|
event_day_liquid_min_entry_dollar_volume: 25000000.0
|
||||||
|
event_day_liquid_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
event_day_liquid_max_entropy_20d: 0.88
|
||||||
|
event_day_liquid_min_support_score: 0.35
|
||||||
|
use_liquid_largecap_sleeve: true
|
||||||
|
liquid_largecap_weight: 0.05
|
||||||
|
use_moderate_gap_liquid_sleeve: true
|
||||||
|
moderate_gap_liquid_weight: 0.0
|
||||||
|
moderate_gap_liquid_min_gap_pct: 0.005
|
||||||
|
moderate_gap_liquid_max_gap_pct: 0.025
|
||||||
|
moderate_gap_liquid_min_gain_pct: 0.015
|
||||||
|
moderate_gap_liquid_max_gain_pct: 0.04
|
||||||
|
moderate_gap_liquid_min_confirmation_return_pct: 0.005
|
||||||
|
moderate_gap_liquid_min_entry_dollar_volume: 40000000.0
|
||||||
|
moderate_gap_liquid_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
moderate_gap_liquid_max_avg_dollar_vol_30d: 2000000000.0
|
||||||
|
moderate_gap_liquid_min_volume_ratio_14d: 0.04
|
||||||
|
moderate_gap_liquid_max_entropy_20d: 0.86
|
||||||
|
fallback_liquid_largecap_slots: 1
|
||||||
|
fallback_liquid_largecap_trigger_below: 2
|
||||||
|
liquid_largecap_min_gain_pct: 0.004
|
||||||
|
liquid_largecap_max_gain_pct: 0.015
|
||||||
|
liquid_largecap_min_confirmation_return_pct: 0.0005
|
||||||
|
liquid_largecap_min_entry_dollar_volume: 50000000.0
|
||||||
|
liquid_largecap_min_avg_dollar_vol_30d: 2000000000.0
|
||||||
|
liquid_largecap_max_entropy_20d: 0.87
|
||||||
|
universe:
|
||||||
|
source: broad
|
||||||
|
min_price: 10.0
|
||||||
|
backtest:
|
||||||
|
start_date: null
|
||||||
|
end_date: null
|
||||||
|
lookback_trading_days: 200
|
||||||
|
pre_screen_threshold: 0.02
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
dir: data/cache/intraday
|
||||||
|
output:
|
||||||
|
dir: runs/intraday
|
||||||
|
verbose: false
|
||||||
@ -1,48 +0,0 @@
|
|||||||
_meta:
|
|
||||||
name: Leader Intraday Momentum High WR
|
|
||||||
description: More selective high-win-rate variant of the safe momentum basket. Uses a 5-minute confirmation that requires +0.45% follow-through, a 2.0M entry dollar-volume floor, a tighter 6.0% morning overextension cap, a 5.5% opening-gap cap, an 8.0% base trailing stop, and a slightly tighter 7.5% trail once a name is already up 4%+ at entry. Intended for users who prioritize win rate over basket breadth.
|
|
||||||
id: 20
|
|
||||||
strategy_mode: momentum
|
|
||||||
strategy:
|
|
||||||
compound_returns: false
|
|
||||||
entry_minutes_after_open: 10
|
|
||||||
confirmation_minutes_after_entry: 5
|
|
||||||
min_confirmation_return_pct: 0.0045
|
|
||||||
exit_minutes_before_close: 10
|
|
||||||
stop_loss_pct: null
|
|
||||||
trailing_stop_pct: -0.08
|
|
||||||
overextended_trailing_gain_pct: 0.04
|
|
||||||
overextended_trailing_stop_pct: -0.075
|
|
||||||
min_morning_gain_pct: 0.015
|
|
||||||
max_morning_gain_pct: 0.06
|
|
||||||
max_gap_pct: 0.055
|
|
||||||
min_entry_volume: 125000
|
|
||||||
min_entry_dollar_volume: 2000000
|
|
||||||
ticker_cooldown_days: 4
|
|
||||||
top_n: 8
|
|
||||||
max_positions_per_sector: 2
|
|
||||||
use_five_sleeves: true
|
|
||||||
max_entropy_20d: 0.86
|
|
||||||
max_vix: 30.0
|
|
||||||
recent_live_scan_days: 0
|
|
||||||
recent_live_scan_min_price: 2.0
|
|
||||||
recent_live_scan_avg_volume_min: 200000
|
|
||||||
recent_live_scan_market_cap_min: 100000000.0
|
|
||||||
recent_live_scan_max_candidates_per_day: 150
|
|
||||||
initial_capital: 10000.0
|
|
||||||
slippage_bps: 5.0
|
|
||||||
market_regime_spy_threshold: null
|
|
||||||
universe:
|
|
||||||
source: broad
|
|
||||||
min_price: 10.0
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
pre_screen_threshold: 0.02
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
output:
|
|
||||||
dir: runs/intraday
|
|
||||||
verbose: false
|
|
||||||
@ -0,0 +1,117 @@
|
|||||||
|
_meta:
|
||||||
|
name: Leader Intraday Momentum Liquid Continuation Core
|
||||||
|
description: Separate liquid-continuation core engine. Instead of treating liquid follow-through as an overlay, this strategy makes moderate-gap liquid names, liquid large-cap leaders, and sector breadth-confirmed continuation the primary basket selection path.
|
||||||
|
id: 28
|
||||||
|
strategy_mode: momentum
|
||||||
|
strategy:
|
||||||
|
compound_returns: false
|
||||||
|
entry_minutes_after_open: 10
|
||||||
|
confirmation_minutes_after_entry: 5
|
||||||
|
min_confirmation_return_pct: 0.003
|
||||||
|
exit_minutes_before_close: 10
|
||||||
|
stop_loss_pct: null
|
||||||
|
trailing_stop_pct: -0.075
|
||||||
|
overextended_trailing_gain_pct: 0.04
|
||||||
|
overextended_trailing_stop_pct: -0.06
|
||||||
|
min_gap_pct: 0.0
|
||||||
|
min_morning_gain_pct: 0.006
|
||||||
|
max_morning_gain_pct: 0.04
|
||||||
|
max_gap_pct: 0.05
|
||||||
|
min_volume_ratio_14d: 0.02
|
||||||
|
min_entry_volume: 100000
|
||||||
|
min_entry_dollar_volume: 20000000
|
||||||
|
ticker_cooldown_days: 0
|
||||||
|
top_n: 4
|
||||||
|
max_positions_per_sector: 2
|
||||||
|
use_five_sleeves: false
|
||||||
|
momentum_selection_mode: liquid_continuation
|
||||||
|
soft_day_sparse_max_trades: 2
|
||||||
|
soft_day_sparse_exempt_largecap: true
|
||||||
|
soft_day_sparse_exempt_moderate_gap_liquid: true
|
||||||
|
soft_day_sparse_scale: 0.8
|
||||||
|
tail_risk_day_max_trades: 3
|
||||||
|
tail_risk_day_min_max_gain_pct: 0.02
|
||||||
|
tail_risk_day_min_max_confirmation_return_pct: 0.006
|
||||||
|
tail_risk_day_exempt_largecap: true
|
||||||
|
tail_risk_day_scale: 0.65
|
||||||
|
max_entropy_20d: 0.88
|
||||||
|
entropy_size_scale_low: 0.80
|
||||||
|
entropy_size_scale_high: 0.88
|
||||||
|
entropy_size_scale_min: 0.7
|
||||||
|
sector_concentration_scale_low: 0.4
|
||||||
|
sector_concentration_scale_high: 0.67
|
||||||
|
sector_concentration_scale_min: 0.85
|
||||||
|
max_vix: 35.0
|
||||||
|
initial_capital: 10000.0
|
||||||
|
slippage_bps: 5.0
|
||||||
|
market_regime_spy_threshold: null
|
||||||
|
candidate_source_mode: intraday_first
|
||||||
|
candidate_seed_threshold: 0.0
|
||||||
|
candidate_seed_max_per_day: 180
|
||||||
|
candidate_seed_liquid_overlay_slots: 10
|
||||||
|
candidate_seed_liquid_min_gap_pct: -0.015
|
||||||
|
candidate_seed_liquid_max_gap_pct: 0.03
|
||||||
|
candidate_seed_liquid_min_avg_dollar_vol_30d: 2000000000.0
|
||||||
|
candidate_seed_liquid_min_ret_5d: 0.0
|
||||||
|
candidate_seed_liquid_max_entropy_20d: 0.88
|
||||||
|
candidate_seed_leader_overlay_slots: 6
|
||||||
|
candidate_seed_leader_min_gap_pct: -0.02
|
||||||
|
candidate_seed_leader_max_gap_pct: 0.03
|
||||||
|
candidate_seed_leader_min_avg_dollar_vol_30d: 500000000.0
|
||||||
|
candidate_seed_leader_min_ret_5d: 0.10
|
||||||
|
candidate_seed_leader_min_atr_pct: 0.04
|
||||||
|
candidate_seed_leader_max_entropy_20d: 0.82
|
||||||
|
candidate_seed_moderate_liquid_overlay_slots: 40
|
||||||
|
candidate_seed_moderate_liquid_min_gap_pct: 0.002
|
||||||
|
candidate_seed_moderate_liquid_max_gap_pct: 0.04
|
||||||
|
candidate_seed_moderate_liquid_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
candidate_seed_moderate_liquid_max_avg_dollar_vol_30d: 4000000000.0
|
||||||
|
candidate_seed_moderate_liquid_min_ret_5d: 0.0
|
||||||
|
candidate_seed_moderate_liquid_max_entropy_20d: 0.88
|
||||||
|
candidate_final_max_per_day: 14
|
||||||
|
candidate_intraday_rank_mode: liquid_continuation
|
||||||
|
candidate_intraday_moderate_liquid_reserve_slots: 2
|
||||||
|
candidate_intraday_moderate_liquid_reserve_trigger_below: 3
|
||||||
|
use_liquid_largecap_sleeve: true
|
||||||
|
liquid_largecap_weight: 0.0
|
||||||
|
liquid_largecap_min_gain_pct: 0.006
|
||||||
|
liquid_largecap_max_gain_pct: 0.025
|
||||||
|
liquid_largecap_min_confirmation_return_pct: 0.003
|
||||||
|
liquid_largecap_min_entry_dollar_volume: 60000000.0
|
||||||
|
liquid_largecap_min_avg_dollar_vol_30d: 2000000000.0
|
||||||
|
liquid_largecap_max_entropy_20d: 0.90
|
||||||
|
use_moderate_gap_liquid_sleeve: true
|
||||||
|
moderate_gap_liquid_weight: 0.0
|
||||||
|
moderate_gap_liquid_min_gap_pct: 0.005
|
||||||
|
moderate_gap_liquid_max_gap_pct: 0.035
|
||||||
|
moderate_gap_liquid_min_gain_pct: 0.01
|
||||||
|
moderate_gap_liquid_max_gain_pct: 0.04
|
||||||
|
moderate_gap_liquid_min_confirmation_return_pct: 0.003
|
||||||
|
moderate_gap_liquid_min_entry_dollar_volume: 40000000.0
|
||||||
|
moderate_gap_liquid_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
moderate_gap_liquid_max_avg_dollar_vol_30d: 4000000000.0
|
||||||
|
moderate_gap_liquid_min_volume_ratio_14d: 0.04
|
||||||
|
moderate_gap_liquid_max_entropy_20d: 0.88
|
||||||
|
use_sector_thrust_sleeve: true
|
||||||
|
sector_thrust_weight: 0.0
|
||||||
|
sector_thrust_min_members: 2
|
||||||
|
sector_thrust_min_gain_pct: 0.01
|
||||||
|
sector_thrust_min_confirmation_return_pct: 0.003
|
||||||
|
sector_thrust_min_entry_dollar_volume: 40000000.0
|
||||||
|
sector_thrust_min_avg_dollar_vol_30d: 250000000.0
|
||||||
|
sector_thrust_min_sector_avg_confirmation_return_pct: 0.003
|
||||||
|
sector_thrust_min_sector_total_entry_dollar_volume: 150000000.0
|
||||||
|
universe:
|
||||||
|
source: broad
|
||||||
|
min_price: 10.0
|
||||||
|
backtest:
|
||||||
|
start_date: null
|
||||||
|
end_date: null
|
||||||
|
lookback_trading_days: 200
|
||||||
|
pre_screen_threshold: 0.02
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
dir: data/cache/intraday
|
||||||
|
output:
|
||||||
|
dir: runs/intraday
|
||||||
|
verbose: false
|
||||||
@ -1,101 +0,0 @@
|
|||||||
_meta:
|
|
||||||
name: Leader Intraday Momentum Safe
|
|
||||||
description: Safer intraday-first leader basket derived from the current high-win-rate engine. It keeps the liquid-largecap-aware candidate stack, same-day confirmation rerank, and five-sleeve blend, but scales sparse 1-5 position days below full size to reduce trap-day drawdowns without reverting to the stale pre-intraday-first safe rules.
|
|
||||||
id: 19
|
|
||||||
strategy_mode: momentum
|
|
||||||
strategy:
|
|
||||||
compound_returns: false
|
|
||||||
entry_minutes_after_open: 10
|
|
||||||
confirmation_minutes_after_entry: 5
|
|
||||||
min_confirmation_return_pct: 0.005
|
|
||||||
exit_minutes_before_close: 10
|
|
||||||
stop_loss_pct: null
|
|
||||||
trailing_stop_pct: -0.08
|
|
||||||
overextended_trailing_gain_pct: 0.04
|
|
||||||
overextended_trailing_stop_pct: -0.075
|
|
||||||
min_morning_gain_pct: 0.015
|
|
||||||
max_morning_gain_pct: 0.06
|
|
||||||
max_gap_pct: 0.055
|
|
||||||
min_volume_ratio_14d: 0.04
|
|
||||||
min_entry_volume: 125000
|
|
||||||
min_entry_dollar_volume: 1500000
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
top_n: 9
|
|
||||||
full_size_positions_threshold: 6
|
|
||||||
sparse_day_size_floor: 0.5
|
|
||||||
max_positions_per_sector: 2
|
|
||||||
use_five_sleeves: true
|
|
||||||
five_sleeve_force_count: 4
|
|
||||||
max_entropy_20d: 0.86
|
|
||||||
max_vix: 30.0
|
|
||||||
recent_live_scan_days: 0
|
|
||||||
recent_live_scan_min_price: 2.0
|
|
||||||
recent_live_scan_avg_volume_min: 200000
|
|
||||||
recent_live_scan_market_cap_min: 100000000.0
|
|
||||||
recent_live_scan_max_candidates_per_day: 150
|
|
||||||
recent_live_scan_top_n: 6
|
|
||||||
recent_live_scan_min_morning_gain_pct: 0.005
|
|
||||||
recent_live_scan_max_morning_gain_pct: 0.05
|
|
||||||
recent_live_scan_min_confirmation_return_pct: 0.0005
|
|
||||||
recent_live_scan_min_entry_dollar_volume: 50000000.0
|
|
||||||
recent_live_scan_max_gap_pct: 0.04
|
|
||||||
recent_live_scan_max_entropy_20d: 0.9
|
|
||||||
recent_live_scan_use_slow_ignite_sleeve: true
|
|
||||||
recent_live_scan_slow_ignite_weight: 0.30
|
|
||||||
recent_live_scan_slow_ignite_min_gain_pct: 0.003
|
|
||||||
recent_live_scan_slow_ignite_max_gain_pct: 0.015
|
|
||||||
recent_live_scan_slow_ignite_min_entry_dollar_volume: 50000000.0
|
|
||||||
recent_live_scan_slow_ignite_max_entropy_20d: 0.9
|
|
||||||
recent_live_scan_use_liquid_largecap_sleeve: true
|
|
||||||
recent_live_scan_liquid_largecap_weight: 0.35
|
|
||||||
recent_live_scan_liquid_largecap_min_gain_pct: 0.004
|
|
||||||
recent_live_scan_liquid_largecap_max_gain_pct: 0.02
|
|
||||||
recent_live_scan_liquid_largecap_min_confirmation_return_pct: 0.0005
|
|
||||||
recent_live_scan_liquid_largecap_min_entry_dollar_volume: 50000000.0
|
|
||||||
recent_live_scan_liquid_largecap_min_avg_dollar_vol_30d: 500000000.0
|
|
||||||
recent_live_scan_liquid_largecap_max_entropy_20d: 0.9
|
|
||||||
initial_capital: 10000.0
|
|
||||||
slippage_bps: 5.0
|
|
||||||
market_regime_spy_threshold: null
|
|
||||||
candidate_source_mode: intraday_first
|
|
||||||
candidate_seed_threshold: 0.0075
|
|
||||||
candidate_seed_max_per_day: 150
|
|
||||||
candidate_seed_liquid_overlay_slots: 3
|
|
||||||
candidate_seed_liquid_min_gap_pct: 0.005
|
|
||||||
candidate_seed_liquid_max_gap_pct: 0.025
|
|
||||||
candidate_seed_liquid_min_avg_dollar_vol_30d: 5000000000.0
|
|
||||||
candidate_seed_liquid_min_ret_5d: 0.0
|
|
||||||
candidate_seed_liquid_max_entropy_20d: 0.87
|
|
||||||
candidate_final_max_per_day: 12
|
|
||||||
candidate_intraday_rank_mode: weighted
|
|
||||||
candidate_intraday_weight_gain: 0.10
|
|
||||||
candidate_intraday_weight_confirmation: 0.45
|
|
||||||
candidate_intraday_weight_volume_ratio: 0.20
|
|
||||||
candidate_intraday_weight_entry_dollar_volume: 0.15
|
|
||||||
candidate_intraday_weight_gap: 0.05
|
|
||||||
candidate_intraday_weight_low_entropy: 0.05
|
|
||||||
candidate_intraday_weight_avg_dollar_vol_30d: 0.08
|
|
||||||
use_liquid_largecap_sleeve: true
|
|
||||||
liquid_largecap_weight: 0.05
|
|
||||||
fallback_liquid_largecap_slots: 1
|
|
||||||
fallback_liquid_largecap_trigger_below: 2
|
|
||||||
liquid_largecap_min_gain_pct: 0.004
|
|
||||||
liquid_largecap_max_gain_pct: 0.015
|
|
||||||
liquid_largecap_min_confirmation_return_pct: 0.0005
|
|
||||||
liquid_largecap_min_entry_dollar_volume: 50000000.0
|
|
||||||
liquid_largecap_min_avg_dollar_vol_30d: 2000000000.0
|
|
||||||
liquid_largecap_max_entropy_20d: 0.87
|
|
||||||
universe:
|
|
||||||
source: broad
|
|
||||||
min_price: 10.0
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
pre_screen_threshold: 0.02
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
output:
|
|
||||||
dir: runs/intraday
|
|
||||||
verbose: false
|
|
||||||
@ -1,116 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 29
|
|
||||||
name: "ORB Gainers V23 Safe"
|
|
||||||
status: experimental
|
|
||||||
parent: orb_gainers_v23
|
|
||||||
description: >
|
|
||||||
V23 파생 전략 — "안전 투자자" 버전. 수익률을 희생해서 손실을 최소화하는 것이 목표.
|
|
||||||
V23 대비 5가지 방향으로 보수화:
|
|
||||||
|
|
||||||
1. 레짐 필터 강화: QQQ 갭 0.15% → 0.30% (더 강한 상승 장세만 진입)
|
|
||||||
2. 진입 품질 상향: min_rvol 1.5→2.0, min_candidate_breadth 0.60→0.70
|
|
||||||
3. 포지션 크기 축소: risk_per_trade 5%→3%, max_simultaneous 3→2
|
|
||||||
4. 손실 governor 강화: rolling_loss -7%→-3%, drawdown_governor 2.5%→1.5%
|
|
||||||
5. 일일 손실 컷: daily_max_loss 5%→3%, max_stops_per_day 5→3
|
|
||||||
|
|
||||||
streak_sizing 비활성화 (승리 시 포지션 키우지 않음 — 안전 우선)
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: gainers_leader
|
|
||||||
live_readiness: experimental
|
|
||||||
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
|
|
||||||
entry_direction: long_only
|
|
||||||
order_timeout_minutes: 45
|
|
||||||
|
|
||||||
allow_doji_breakout: true
|
|
||||||
allow_red_to_green_breakout: true
|
|
||||||
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
|
|
||||||
# === SAFE CHANGE: higher rvol requirement (was 1.5) ===
|
|
||||||
min_rvol: 2.0
|
|
||||||
# === SAFE CHANGE: slightly higher gap floor (was 0.02) ===
|
|
||||||
min_abs_gap_pct: 0.025
|
|
||||||
min_premarket_dollar_vol: 1500000
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: 0.04
|
|
||||||
|
|
||||||
# === SAFE CHANGE: higher breadth requirement (was 0.60) ===
|
|
||||||
min_candidate_breadth: 0.70
|
|
||||||
# === SAFE CHANGE: stronger QQQ regime required (was 0.0015 = 0.15%) ===
|
|
||||||
market_regime_spy_threshold: 0.003
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
rolling_loss_days: 7
|
|
||||||
# === SAFE CHANGE: stop much sooner on bad streaks (was -0.07) ===
|
|
||||||
rolling_loss_threshold: -0.03
|
|
||||||
# === SAFE CHANGE: max 2 simultaneous positions (was 3) ===
|
|
||||||
max_simultaneous_entries: 2
|
|
||||||
min_breakout_rel_vol: 1.2
|
|
||||||
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
|
|
||||||
atr_stop_multiplier: 0.75
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
|
|
||||||
partial_exit_at_r: 99.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
|
|
||||||
# === SAFE CHANGE: smaller position risk (was 0.05) ===
|
|
||||||
risk_per_trade_pct: 0.03
|
|
||||||
max_position_pct: 0.70
|
|
||||||
# === SAFE CHANGE: cut daily losses sooner (was 0.05) ===
|
|
||||||
daily_max_loss_pct: 0.03
|
|
||||||
# === SAFE CHANGE: stop the day after 3 stops (was 5) ===
|
|
||||||
max_stops_per_day: 3
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
|
|
||||||
# === SAFE CHANGE: tighter portfolio DD governor (was 0.025) ===
|
|
||||||
drawdown_governor_threshold: 0.015
|
|
||||||
drawdown_governor_min_scale: 0.30
|
|
||||||
|
|
||||||
# === SAFE CHANGE: no streak sizing boost (was bonus=0.70, max=2.5) ===
|
|
||||||
streak_sizing_win_bonus: 0.0
|
|
||||||
streak_sizing_max: 1.0
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -1,124 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 30
|
|
||||||
name: "ORB Gainers V23 Safe v2"
|
|
||||||
status: validated
|
|
||||||
parent: orb_gainers_v23
|
|
||||||
description: >
|
|
||||||
V23 파생 전략 — "안전 투자자" v2. v1(+5.16%, DD -13.49%)보다 DD를 줄이는 것이 목표.
|
|
||||||
|
|
||||||
핵심 발견 (v1 분석):
|
|
||||||
- V23 손실일의 QQQ 갭: +0.3%~+3.4% → QQQ 임계값 강화는 효과 없음
|
|
||||||
- 손실은 QQQ 방향이 아닌 개별 종목 실패에서 발생
|
|
||||||
- DD는 손실 클러스터(Oct/Sep 2025)에서 집중 발생
|
|
||||||
|
|
||||||
v2 접근법:
|
|
||||||
1. Rolling loss governor 강화: 손실 직후 즉시 거래 중단 (-2% threshold)
|
|
||||||
2. Partial exit 활성화: 1R(0.75ATR) 도달시 50% 이익 실현 → 많은 거래를 "무조건 수익"으로
|
|
||||||
3. 포지션 축소: risk 5%→2% (손실 기회당 절대액 감소)
|
|
||||||
4. 동시 포지션: 3→2 (손실 클러스터링 방지)
|
|
||||||
5. QQQ 레짐: 유지 (효과 없음이 증명됨 — 더 강화해도 소용없음)
|
|
||||||
6. Streak sizing 비활성화 (안전 우선)
|
|
||||||
|
|
||||||
200d 검증 결과 (2025-07-03 → 2026-04-20):
|
|
||||||
- 수익: +36.67% (V23 +109.32% 대비)
|
|
||||||
- Max DD: -11.54% (고점 대비, 그러나 시작 자본 이하 0일!)
|
|
||||||
- Sharpe: 2.24
|
|
||||||
- 시작 자본($10k) 이하: 0일 (최저점 $10,017 on 2025-07-09)
|
|
||||||
- 최악의 하루: -$344 (V23 -$981 대비)
|
|
||||||
- 거래일: 49/200, 거래: 154건
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: gainers_leader
|
|
||||||
live_readiness: experimental
|
|
||||||
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
|
|
||||||
entry_direction: long_only
|
|
||||||
order_timeout_minutes: 45
|
|
||||||
|
|
||||||
allow_doji_breakout: true
|
|
||||||
allow_red_to_green_breakout: true
|
|
||||||
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
|
|
||||||
min_rvol: 1.5
|
|
||||||
min_abs_gap_pct: 0.02
|
|
||||||
min_premarket_dollar_vol: 1500000
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: 0.04
|
|
||||||
|
|
||||||
min_candidate_breadth: 0.60
|
|
||||||
market_regime_spy_threshold: 0.0015
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
rolling_loss_days: 5
|
|
||||||
# === KEY CHANGE: stop IMMEDIATELY after $200 loss (was -7%) ===
|
|
||||||
rolling_loss_threshold: -0.02
|
|
||||||
# === CHANGE: max 2 simultaneous (was 3) ===
|
|
||||||
max_simultaneous_entries: 2
|
|
||||||
min_breakout_rel_vol: 1.2
|
|
||||||
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
|
|
||||||
atr_stop_multiplier: 0.75
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
|
|
||||||
# === KEY CHANGE: lock in 50% at 1R (was disabled at 99R) ===
|
|
||||||
partial_exit_at_r: 1.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
|
|
||||||
# === CHANGE: smaller per-trade risk (was 0.05) ===
|
|
||||||
risk_per_trade_pct: 0.02
|
|
||||||
max_position_pct: 0.70
|
|
||||||
# === CHANGE: tighter daily loss cut (was 0.05) ===
|
|
||||||
daily_max_loss_pct: 0.02
|
|
||||||
max_stops_per_day: 3
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
|
|
||||||
# === CHANGE: tighter portfolio governor (was 0.025) ===
|
|
||||||
drawdown_governor_threshold: 0.015
|
|
||||||
drawdown_governor_min_scale: 0.50
|
|
||||||
|
|
||||||
# === CHANGE: no streak sizing (was bonus=0.70, max=2.5) ===
|
|
||||||
streak_sizing_win_bonus: 0.0
|
|
||||||
streak_sizing_max: 1.0
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -1,112 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 31
|
|
||||||
name: "ORB Gainers V23 Safe v3"
|
|
||||||
status: experimental
|
|
||||||
parent: orb_gainers_v23_safe_v2
|
|
||||||
description: >
|
|
||||||
V23 Safe v3 — "안전 투자자" 최적화.
|
|
||||||
|
|
||||||
v2 분석 결과 (200d):
|
|
||||||
- +36.67%, DD -11.54%, 시작 자본 이하: 0일 (최저 $10,017)
|
|
||||||
- Max DD 원인: Nov-Dec 2025 손실 클러스터
|
|
||||||
11/21(-$321) 후 rolling window(5일)가 만료되어 12월에 다시 거래 시작
|
|
||||||
→ COHR, TSLA, LITE, VST, CYTK 등 연속 손실
|
|
||||||
|
|
||||||
v3 변경:
|
|
||||||
1. rolling_loss_days: 5→10 (손실 기억 기간 연장 → Nov 손실 후 Dec 재진입 방지)
|
|
||||||
2. rolling_loss_threshold: -0.02→-0.015 (더 빠른 중단: $150 누적 손실시 정지)
|
|
||||||
3. 나머지는 v2 동일 (partial_exit@1R, risk=2%, max_entries=2)
|
|
||||||
|
|
||||||
목표: 고점 대비 DD를 -8% 이하로 줄이면서 시작 자본 이하 0일 유지
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: gainers_leader
|
|
||||||
live_readiness: experimental
|
|
||||||
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
|
|
||||||
entry_direction: long_only
|
|
||||||
order_timeout_minutes: 45
|
|
||||||
|
|
||||||
allow_doji_breakout: true
|
|
||||||
allow_red_to_green_breakout: true
|
|
||||||
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
|
|
||||||
min_rvol: 1.5
|
|
||||||
min_abs_gap_pct: 0.02
|
|
||||||
min_premarket_dollar_vol: 1500000
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: 0.04
|
|
||||||
|
|
||||||
min_candidate_breadth: 0.60
|
|
||||||
market_regime_spy_threshold: 0.0015
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
# === KEY CHANGE: longer loss memory (was 5) ===
|
|
||||||
rolling_loss_days: 10
|
|
||||||
# === KEY CHANGE: stop sooner — $150 loss triggers pause (was -0.02) ===
|
|
||||||
rolling_loss_threshold: -0.015
|
|
||||||
max_simultaneous_entries: 2
|
|
||||||
min_breakout_rel_vol: 1.2
|
|
||||||
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
|
|
||||||
atr_stop_multiplier: 0.75
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
|
|
||||||
# 50% partial exit at 1R (lock in gains early)
|
|
||||||
partial_exit_at_r: 1.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
|
|
||||||
risk_per_trade_pct: 0.02
|
|
||||||
max_position_pct: 0.70
|
|
||||||
daily_max_loss_pct: 0.02
|
|
||||||
max_stops_per_day: 3
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
|
|
||||||
drawdown_governor_threshold: 0.015
|
|
||||||
drawdown_governor_min_scale: 0.50
|
|
||||||
|
|
||||||
streak_sizing_win_bonus: 0.0
|
|
||||||
streak_sizing_max: 1.0
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -1,107 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 37
|
|
||||||
name: "ORB Gainers V23 Safe v9"
|
|
||||||
status: validated_200d_only
|
|
||||||
parent: orb_gainers_v23_safe_v8
|
|
||||||
description: >
|
|
||||||
V23 Safe v9 — v8 + streak_sizing_win_bonus: 0.70 (V23 level streak sizing).
|
|
||||||
VALIDATED champion of the Safe family on 200d window ONLY (2026-04-21).
|
|
||||||
주의: 400d에서는 V23이 모든 지표에서 완전히 우월 — +146% vs +101%, DD -13.7% vs -17.2%.
|
|
||||||
v9는 200d 단기 보수적 대안으로만 유효. 실전 배포 기준은 V23.
|
|
||||||
|
|
||||||
Safe v8 결과: +82.36%, DD -7.72%, Sharpe 3.14 — V23 Sharpe(3.01)보다 높고 DD는 5pp 낮음.
|
|
||||||
단, 수익은 V23(+109.32%)보다 27pp 낮음. 차이 원인: V23의 streak sizing(win_bonus=0.70).
|
|
||||||
V23에서 streak_sizing은 핵심 수익 증폭기 (V19→V21 승진에 기여).
|
|
||||||
|
|
||||||
v9 가설: v8 safe mechanisms(partial_exit + rolling_loss-2% + max_sim=2) + V23의
|
|
||||||
streak_sizing(0.70) = +100%+ 수익 AND DD < V23 -12.91%?
|
|
||||||
|
|
||||||
200d 결과 (2025-07-03→2026-04-20): +101.25%, DD -7.62%, WR 58.06%, Sharpe 3.34
|
|
||||||
worst_day -$324, trade_days 46/200, 124 trades.
|
|
||||||
400d 결과 (2024-09-13→2026-04-20): +101.01%, DD -17.20%, WR 57.08%, Sharpe 1.99
|
|
||||||
profit_factor 1.77, worst_day -6.11%, 226 trades, 93 trade days.
|
|
||||||
400d gate: DD -17.20% ≤ -18% ✓ AND return +101% ≥ +90% ✓ → PROMOTED.
|
|
||||||
V23 대비 (200d): DD -5.29pp 개선 (-7.62% vs -12.91%); Sharpe +0.33 우위;
|
|
||||||
수익은 -8pp 낮음 (-101.25% vs +109.32%).
|
|
||||||
|
|
||||||
*** 2026-04-21 UPDATE: V23 TRUE 400d result confirmed with correct pipeline ***
|
|
||||||
V23 400d TRUE: +146.09%, DD -13.66%, Sharpe 2.33 (vs v9: +101.01%, DD -17.20%, Sharpe 1.99)
|
|
||||||
V23 STRICTLY DOMINATES Safe v9 on 400d in return (+45pp), DD (+3.5pp better), and Sharpe.
|
|
||||||
"Risk-adjusted superior" claim is ONLY valid on 200d window. On 400d, V23 is also safer.
|
|
||||||
V23 is the absolute champion. v9 remains valid as 200d conservative alternative only.
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: gainers_leader
|
|
||||||
live_readiness: experimental
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
entry_direction: long_only
|
|
||||||
order_timeout_minutes: 45
|
|
||||||
allow_doji_breakout: true
|
|
||||||
allow_red_to_green_breakout: true
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
min_rvol: 1.5
|
|
||||||
min_abs_gap_pct: 0.02
|
|
||||||
min_premarket_dollar_vol: 1500000
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: 0.04
|
|
||||||
min_candidate_breadth: 0.60
|
|
||||||
market_regime_spy_threshold: 0.0015
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
rolling_loss_days: 7
|
|
||||||
rolling_loss_threshold: -0.02
|
|
||||||
max_simultaneous_entries: 2
|
|
||||||
min_breakout_rel_vol: 1.2
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
atr_stop_multiplier: 0.75
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
partial_exit_at_r: 1.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
risk_per_trade_pct: 0.05
|
|
||||||
max_position_pct: 0.70
|
|
||||||
daily_max_loss_pct: 0.02
|
|
||||||
max_stops_per_day: 3
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
drawdown_governor_threshold: 0.015
|
|
||||||
drawdown_governor_min_scale: 0.50
|
|
||||||
# === KEY CHANGE: enable streak sizing (V23 level) ===
|
|
||||||
streak_sizing_win_bonus: 0.70
|
|
||||||
streak_sizing_max: 2.5
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
_meta:
|
||||||
|
id: 106
|
||||||
|
name: "ORB Gainers V24.1 Candidate Loss Cap 10%"
|
||||||
|
status: research
|
||||||
|
live_readiness: experimental
|
||||||
|
parent: orb_gainers_v24_quality_overlay
|
||||||
|
description: >
|
||||||
|
Narrow candidate for V24.1. Keeps V24 signal logic unchanged and adds
|
||||||
|
single_trade_loss_cap_pct: 0.10 to trim only the most aggressive
|
||||||
|
streak-sized exposures.
|
||||||
|
|
||||||
|
Rationale:
|
||||||
|
- V24 keeps streak_sizing_win_bonus: 0.70, streak_sizing_max: 2.5
|
||||||
|
- With risk_per_trade_pct: 0.05, a fully boosted trade can risk 12.5%
|
||||||
|
of initial capital, which is structurally misaligned with
|
||||||
|
daily_max_loss_pct: 0.05
|
||||||
|
- single_trade_loss_cap_pct: 0.10 caps only the extreme tail
|
||||||
|
(2.5x -> 2.0x max effective sizing) while preserving normal-day behavior
|
||||||
|
|
||||||
|
strategy_mode: orb
|
||||||
|
|
||||||
|
orb_strategy:
|
||||||
|
engine_family: gainers_leader
|
||||||
|
live_readiness: experimental
|
||||||
|
orb_minutes: 5
|
||||||
|
sim_bar_minutes: 5
|
||||||
|
|
||||||
|
entry_direction: long_only
|
||||||
|
order_timeout_minutes: 45
|
||||||
|
|
||||||
|
allow_doji_breakout: true
|
||||||
|
allow_red_to_green_breakout: true
|
||||||
|
|
||||||
|
min_price: 10.0
|
||||||
|
min_avg_dollar_volume: 25000000
|
||||||
|
min_atr_14: 0.50
|
||||||
|
min_atr_pct: 0.04
|
||||||
|
|
||||||
|
min_rvol: 1.5
|
||||||
|
min_abs_gap_pct: 0.02
|
||||||
|
min_premarket_dollar_vol: 1500000
|
||||||
|
max_candidates: 20
|
||||||
|
max_candidates_per_sector: 3
|
||||||
|
min_candidates_to_trade: 1
|
||||||
|
ticker_cooldown_days: 0
|
||||||
|
max_gap_pct: 0.04
|
||||||
|
|
||||||
|
min_candidate_breadth: 0.60
|
||||||
|
market_regime_spy_threshold: 0.0015
|
||||||
|
market_regime_ticker: QQQ
|
||||||
|
rolling_loss_days: 7
|
||||||
|
rolling_loss_threshold: -0.07
|
||||||
|
max_simultaneous_entries: 3
|
||||||
|
min_breakout_rel_vol: 1.2
|
||||||
|
|
||||||
|
weight_rvol: 0.35
|
||||||
|
weight_gap: 0.20
|
||||||
|
weight_dollar_vol: 0.05
|
||||||
|
weight_premarket_dollar_vol: 0.25
|
||||||
|
weight_body_ratio: 0.0
|
||||||
|
weight_momentum: 0.15
|
||||||
|
weight_obv_slope: 0.05
|
||||||
|
|
||||||
|
atr_stop_multiplier: 0.75
|
||||||
|
breakeven_at_r: 1.0
|
||||||
|
trailing_at_r: 1.0
|
||||||
|
trailing_stop_atr_multiplier: 0.8
|
||||||
|
trailing_tighten_at_r: 2.0
|
||||||
|
trailing_stop_atr_multiplier_tight: 0.3
|
||||||
|
|
||||||
|
partial_exit_at_r: 99.0
|
||||||
|
partial_exit_pct: 0.50
|
||||||
|
|
||||||
|
risk_per_trade_pct: 0.05
|
||||||
|
max_position_pct: 0.70
|
||||||
|
daily_max_loss_pct: 0.05
|
||||||
|
max_stops_per_day: 5
|
||||||
|
exit_minutes_before_close: 5
|
||||||
|
|
||||||
|
slippage_bps: 5.0
|
||||||
|
initial_capital: 10000
|
||||||
|
|
||||||
|
compound_returns: false
|
||||||
|
daily_budget_reset: true
|
||||||
|
settlement_days: 1
|
||||||
|
|
||||||
|
drawdown_governor_threshold: 0.025
|
||||||
|
drawdown_governor_min_scale: 0.30
|
||||||
|
|
||||||
|
streak_sizing_win_bonus: 0.70
|
||||||
|
streak_sizing_max: 2.5
|
||||||
|
single_trade_loss_cap_pct: 0.10
|
||||||
|
|
||||||
|
universe:
|
||||||
|
source: midlarge
|
||||||
|
|
||||||
|
backtest:
|
||||||
|
start_date: null
|
||||||
|
end_date: null
|
||||||
|
lookback_trading_days: 200
|
||||||
|
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
dir: data/cache/intraday
|
||||||
|
|
||||||
|
output:
|
||||||
|
dir: runs/intraday_orb
|
||||||
|
verbose: false
|
||||||
@ -1,123 +0,0 @@
|
|||||||
_meta:
|
|
||||||
id: 36
|
|
||||||
name: "VWAP Reclaim V1"
|
|
||||||
status: aborted
|
|
||||||
aborted_date: "2026-04-21"
|
|
||||||
aborted_reason: >
|
|
||||||
Same gainers pool as V23 → 57.3% trade overlap (fails ≤20% gate). Orthogonal high-gap
|
|
||||||
variant (id:37) reduced overlap to 16.5% but daily PnL corr=0.394 (fails ≤0.30 gate).
|
|
||||||
Root cause: correlation is regime-driven (both long-momentum, both triggered by same
|
|
||||||
QQQ-positive days) — not fixable by any stock-selection filter. VWAP stop mode broke
|
|
||||||
position sizing (entry ≈ VWAP → stop_distance ≈ 0 → overleverage → WR 16%). Baseline
|
|
||||||
+13.82%/WR 48% does not beat V23 (+95.67%/WR 58%). Not a valid diversifier.
|
|
||||||
description: >
|
|
||||||
Phase 2 / diagnostic pass: V23's gainers_leader candidate pool + minimal VWAP reclaim entry.
|
|
||||||
|
|
||||||
Engine: vwap_reclaim_v1 — same pre-market candidates as V23, but instead of entering
|
|
||||||
on the 9:30-9:35 ORB breakout, scans from 10:00 ET (30 min from open) for the first
|
|
||||||
bar that closes above the running session VWAP.
|
|
||||||
|
|
||||||
Hypothesis: catalyst stocks spend the first 20-30 min in price discovery.
|
|
||||||
A VWAP close-above in the 10:00-11:30 window signals committed direction.
|
|
||||||
|
|
||||||
Diagnostic purpose: determine if V23's candidate pool structurally supports
|
|
||||||
a late-morning entry (vs. negative selection like orb_pullback_v1 showed).
|
|
||||||
Gate: base WR ≥ 45% (vs. pullback's 25.6%). If fails → wrong pool.
|
|
||||||
|
|
||||||
This config uses zero quality gates (no tightness, no base, no vol filter) —
|
|
||||||
purely "first bar closing above VWAP in [10:00, 11:30]".
|
|
||||||
|
|
||||||
strategy_mode: orb
|
|
||||||
|
|
||||||
orb_strategy:
|
|
||||||
engine_family: vwap_reclaim_v1
|
|
||||||
live_readiness: research_only
|
|
||||||
|
|
||||||
orb_minutes: 5
|
|
||||||
sim_bar_minutes: 5
|
|
||||||
|
|
||||||
entry_direction: long_only
|
|
||||||
order_timeout_minutes: 120 # not used for entry, but sets the timeout context
|
|
||||||
|
|
||||||
allow_doji_breakout: true
|
|
||||||
allow_red_to_green_breakout: true
|
|
||||||
|
|
||||||
# === Candidate filters identical to V23 (gainers_leader pool) ===
|
|
||||||
min_price: 10.0
|
|
||||||
min_avg_dollar_volume: 25000000
|
|
||||||
min_atr_14: 0.50
|
|
||||||
min_atr_pct: 0.04
|
|
||||||
min_rvol: 1.5
|
|
||||||
min_abs_gap_pct: 0.02
|
|
||||||
min_premarket_dollar_vol: 1500000
|
|
||||||
max_candidates: 20
|
|
||||||
max_candidates_per_sector: 3
|
|
||||||
min_candidates_to_trade: 1
|
|
||||||
ticker_cooldown_days: 0
|
|
||||||
max_gap_pct: 0.04
|
|
||||||
|
|
||||||
min_candidate_breadth: 0.60
|
|
||||||
market_regime_spy_threshold: 0.0015
|
|
||||||
market_regime_ticker: QQQ
|
|
||||||
rolling_loss_days: 7
|
|
||||||
rolling_loss_threshold: -0.07
|
|
||||||
max_simultaneous_entries: 3
|
|
||||||
min_breakout_rel_vol: null # disabled — VWAP reclaim bar is late-morning, not ORB
|
|
||||||
|
|
||||||
# === Scoring weights identical to V23 ===
|
|
||||||
weight_rvol: 0.35
|
|
||||||
weight_gap: 0.20
|
|
||||||
weight_dollar_vol: 0.05
|
|
||||||
weight_premarket_dollar_vol: 0.25
|
|
||||||
weight_body_ratio: 0.0
|
|
||||||
weight_momentum: 0.15
|
|
||||||
|
|
||||||
# === Stop / exit parameters (base ATR same as V23) ===
|
|
||||||
atr_stop_multiplier: 0.75
|
|
||||||
breakeven_at_r: 1.0
|
|
||||||
trailing_at_r: 1.0
|
|
||||||
trailing_stop_atr_multiplier: 0.8
|
|
||||||
trailing_tighten_at_r: 2.0
|
|
||||||
trailing_stop_atr_multiplier_tight: 0.3
|
|
||||||
|
|
||||||
partial_exit_at_r: 99.0
|
|
||||||
partial_exit_pct: 0.50
|
|
||||||
|
|
||||||
risk_per_trade_pct: 0.05
|
|
||||||
max_position_pct: 0.70
|
|
||||||
daily_max_loss_pct: 0.05
|
|
||||||
max_stops_per_day: 5
|
|
||||||
exit_minutes_before_close: 5
|
|
||||||
|
|
||||||
slippage_bps: 5.0
|
|
||||||
initial_capital: 10000
|
|
||||||
|
|
||||||
compound_returns: false
|
|
||||||
daily_budget_reset: true
|
|
||||||
settlement_days: 1
|
|
||||||
|
|
||||||
drawdown_governor_threshold: 0.025
|
|
||||||
drawdown_governor_min_scale: 0.30
|
|
||||||
|
|
||||||
streak_sizing_win_bonus: 0.70
|
|
||||||
streak_sizing_max: 2.5
|
|
||||||
|
|
||||||
# === VWAP reclaim window ===
|
|
||||||
vwap_reclaim_window_start_min: 30 # 10:00 ET
|
|
||||||
vwap_reclaim_window_end_min: 120 # 11:30 ET
|
|
||||||
|
|
||||||
universe:
|
|
||||||
source: midlarge
|
|
||||||
|
|
||||||
backtest:
|
|
||||||
start_date: null
|
|
||||||
end_date: null
|
|
||||||
lookback_trading_days: 200
|
|
||||||
|
|
||||||
cache:
|
|
||||||
enabled: true
|
|
||||||
dir: data/cache/intraday
|
|
||||||
|
|
||||||
output:
|
|
||||||
dir: runs/intraday_orb
|
|
||||||
verbose: false
|
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
sweep:
|
||||||
|
use_liquid_cluster_engine: [false, true]
|
||||||
|
use_sector_etf_sleeve: [false, true]
|
||||||
|
liquid_cluster_capital_fraction: [0.15]
|
||||||
|
liquid_cluster_max_positions: [1]
|
||||||
|
liquid_cluster_max_positions_per_sector: [1]
|
||||||
|
liquid_cluster_min_members: [2]
|
||||||
|
liquid_cluster_min_gain_pct: [0.015]
|
||||||
|
liquid_cluster_max_gain_pct: [0.04]
|
||||||
|
liquid_cluster_min_confirmation_return_pct: [0.005]
|
||||||
|
liquid_cluster_min_entry_dollar_volume: [40000000.0]
|
||||||
|
liquid_cluster_min_avg_dollar_vol_30d: [250000000.0]
|
||||||
|
liquid_cluster_max_avg_dollar_vol_30d: [2000000000.0]
|
||||||
|
liquid_cluster_min_volume_ratio_14d: [0.04]
|
||||||
|
liquid_cluster_max_entropy_20d: [0.86]
|
||||||
|
liquid_cluster_min_sector_avg_confirmation_return_pct: [0.005]
|
||||||
|
liquid_cluster_min_sector_total_entry_dollar_volume: [100000000.0]
|
||||||
|
liquid_cluster_require_special_liquidity_gate: [true]
|
||||||
|
sector_etf_capital_fraction: [0.10]
|
||||||
|
sector_etf_max_positions: [1]
|
||||||
|
sector_etf_min_sector_score: [0.20]
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
sweep:
|
||||||
|
max_gap_zscore_20d:
|
||||||
|
- null
|
||||||
|
- 1.5
|
||||||
|
- 2.0
|
||||||
|
- 2.5
|
||||||
|
- 3.0
|
||||||
@ -0,0 +1,174 @@
|
|||||||
|
# Leader Intraday Momentum Workflow
|
||||||
|
|
||||||
|
이 문서는 `Leader Intraday Momentum High WR Intraday First` 전략을 개발하고
|
||||||
|
검증하는 운영 기준이다. 기존 `orb_gainers`와 달리 이 전략은 ORB breakout보다
|
||||||
|
`장 초반 top leader follow-through`를 직접 매매하는 momentum 전략이다.
|
||||||
|
|
||||||
|
## Source Of Truth
|
||||||
|
|
||||||
|
정식 전략 파일:
|
||||||
|
|
||||||
|
- [leader_intraday_momentum_high_wr_intraday_first.yaml](/Users/yirugi/mycloud/personal/workspace/fithia2/configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml)
|
||||||
|
|
||||||
|
공식 검증 경로:
|
||||||
|
|
||||||
|
- [apps/intraday_bt/run.py](/Users/yirugi/mycloud/personal/workspace/fithia2/apps/intraday_bt/run.py)
|
||||||
|
|
||||||
|
연구 helper나 momentum snapshot 결과는 빠른 탐색용이다. 최종 채택 판단은 반드시
|
||||||
|
아래 공식 CLI와 웹사이트가 사용하는 동일 경로로 재검증한다.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -u -m apps.intraday_bt.run \
|
||||||
|
--config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml \
|
||||||
|
--start 2026-01-02 \
|
||||||
|
--end 2026-03-31 \
|
||||||
|
--daily-budget-reset \
|
||||||
|
--no-compound-returns
|
||||||
|
```
|
||||||
|
|
||||||
|
전략 개발 검증은 `daily_budget_reset + no compound`를 기본으로 한다. 이는 날짜별
|
||||||
|
edge를 보기 위한 연구 모드이며, 후반 구간의 복리/계좌 규모 효과로 과적합되는
|
||||||
|
문제를 줄인다. 실전 계좌 결과는 별도로 simple/compound 모드에서 확인한다.
|
||||||
|
|
||||||
|
## Current Engine
|
||||||
|
|
||||||
|
핵심 구조:
|
||||||
|
|
||||||
|
- Universe는 정식 `broad` 3408개 티커를 사용한다.
|
||||||
|
- Daily seed는 look-ahead 없이 당일 open 이전/entry 시점까지 알 수 있는 feature만 쓴다.
|
||||||
|
- Intraday-first shortlist를 만든 뒤, 10분 entry와 5분 confirmation으로 재랭킹한다.
|
||||||
|
- Five-sleeve selection으로 `core`, `volume`, `gap`, `trend`, `blend`를 분리한다.
|
||||||
|
- Same-day filing catalyst는 additive alpha가 아니라 weak tail exemption 판단에 쓴다.
|
||||||
|
- Moderate-gap liquid reserve는 sparse day에서만 broad scan이 잡는 liquid follow-through 후보를 보강한다.
|
||||||
|
- Multi-event liquid overlay는 core basket을 건드리지 않고, broad same-day filing cluster가 확인된 날에만 별도 budget으로 liquid continuation names를 추가한다.
|
||||||
|
- 손실 방어는 개별 티커 블랙리스트가 아니라 구조 조건만 사용한다.
|
||||||
|
|
||||||
|
현재 방어 레이어:
|
||||||
|
|
||||||
|
- `weak-event tail defense`: event flag가 있어도 support score가 낮으면 sparse-day 방어 예외로 보지 않는다.
|
||||||
|
- `low-momentum single-name defense`: single-name day에서 유일한 후보의 morning gain이 낮고 supported event/largecap도 아니면 day budget을 줄인다.
|
||||||
|
- `soft-day sparse defense`: soft day인데 basket이 1~2개뿐이고 event / liquid large-cap / moderate-gap liquid support가 없으면 day budget을 추가로 줄인다.
|
||||||
|
- `trailing_stop_pct: -0.07`: hard take-profit 없이 intraday trailing stop으로 큰 downside를 제한한다.
|
||||||
|
- `loss_containment_score`: WR/DD와 별도로 손실일 평균과 tail loss를 직접 보는 보조 지표다.
|
||||||
|
|
||||||
|
## Official Validation Windows
|
||||||
|
|
||||||
|
과적합 방지를 위해 2026 Q1만 보지 않고 2025년 분기별 official backtest를 같이 본다.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -u -m apps.intraday_bt.run --config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml --start 2025-01-02 --end 2025-03-31 --daily-budget-reset --no-compound-returns
|
||||||
|
python -u -m apps.intraday_bt.run --config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml --start 2025-04-01 --end 2025-06-30 --daily-budget-reset --no-compound-returns
|
||||||
|
python -u -m apps.intraday_bt.run --config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml --start 2025-07-01 --end 2025-09-30 --daily-budget-reset --no-compound-returns
|
||||||
|
python -u -m apps.intraday_bt.run --config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml --start 2025-10-01 --end 2025-12-31 --daily-budget-reset --no-compound-returns
|
||||||
|
python -u -m apps.intraday_bt.run --config configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml --start 2026-01-02 --end 2026-03-31 --daily-budget-reset --no-compound-returns
|
||||||
|
```
|
||||||
|
|
||||||
|
Latest official results as of 2026-04-21 after promoting the multi-event liquid overlay into the flagship:
|
||||||
|
|
||||||
|
| Window | Result file | Return | WR | Max DD | LC | Trades |
|
||||||
|
|---|---|---:|---:|---:|---:|---:|
|
||||||
|
| 2025 Q1 | `runs/intraday/intraday_20260421_220246_34b0dff0.json` | +6.56% | 55.1% | -10.93% | 66.11 | 89 |
|
||||||
|
| 2025 Q2 | `runs/intraday/intraday_20260421_223436_79a89cb1.json` | +23.23% | 60.0% | -4.31% | 66.80 | 60 |
|
||||||
|
| 2025 Q3 | `runs/intraday/intraday_20260421_224448_ccd2985b.json` | +6.92% | 49.6% | -6.81% | 64.38 | 135 |
|
||||||
|
| 2025 Q4 | `runs/intraday/intraday_20260421_222253_6f5a98e0.json` | -5.24% | 41.8% | -15.47% | 65.33 | 122 |
|
||||||
|
| 2026 Q1 | `runs/intraday/intraday_20260421_221923_2ea8b7f2.json` | +16.14% | 55.4% | -6.16% | 66.33 | 148 |
|
||||||
|
|
||||||
|
해석:
|
||||||
|
|
||||||
|
- 2025 Q4는 아직 음수라서 전략의 약점 구간이다.
|
||||||
|
- 다만 multi-event overlay는 2025 Q1/Q2/Q3/Q4 official 창에서는 아예 발화하지 않아, 약한 분기들을 추가로 오염시키지는 않았다.
|
||||||
|
- 2026 Q1 holdout에서는 2026-01-02 한 번의 broad filing cluster에서만 발화했고, 그 날 `APLD`, `BMNR` 두 개를 추가해 flagship 대비 수익률과 WR을 끌어올렸다.
|
||||||
|
- 다음 개선은 개별 종목을 외우는 방식이 아니라 Q4 같은 weak regime을 더 잘 감지하는 meta-layer여야 한다.
|
||||||
|
- `sector thrust` breadth engine은 2026-04-21에 코드로 추가해 실험했지만, 정식 전략에 full enable하면 2026 Q1 holdout이 약 `+21.92% -> +15.98%`까지 악화돼 아직 승격하지 않았다.
|
||||||
|
|
||||||
|
## Actual Catalyst Branches
|
||||||
|
|
||||||
|
2026-04-21에 `actual catalyst + liquid leader continuation` 방향도 분리 검증했다.
|
||||||
|
|
||||||
|
전략 파일:
|
||||||
|
|
||||||
|
- `configs/intraday/strategies/leader_intraday_momentum_actual_catalyst_liquid.yaml`
|
||||||
|
- `configs/intraday/strategies/leader_intraday_momentum_event_day_liquid_hybrid.yaml`
|
||||||
|
|
||||||
|
Q1 결과:
|
||||||
|
|
||||||
|
| Variant | Result file | Return | WR | Max DD | Trades | Notes |
|
||||||
|
|---|---|---:|---:|---:|---:|---|
|
||||||
|
| strict event-only | `runs/intraday/intraday_20260421_205738_1f70d7db.json` | +3.21% | 63.6% | -7.87% | 11 | actual filing catalyst만 거래해서 너무 sparse했다 |
|
||||||
|
| hybrid event reserve | `runs/intraday/intraday_20260421_210703_5bb723e7.json` | +15.65% | 54.8% | -6.14% | 146 | baseline보다 아주 미세하게 개선됐지만 구조 변화는 작았다 |
|
||||||
|
| baseline flagship | `runs/intraday/intraday_20260421_211021_30f71c80.json` | +15.59% | 54.8% | -6.19% | 146 | 비교 기준 |
|
||||||
|
|
||||||
|
해석:
|
||||||
|
|
||||||
|
- strict event-only는 방향성은 맞아도 메인 엔진으로 쓰기엔 너무 희소하다.
|
||||||
|
- hybrid는 `candidate_allowed_event_types`를 통해 `earnings_release`, `guidance_update`, `material_contract`, `other_material_event`만 event로 인정하게 했지만, Q1 기준으로 baseline 대비 개선폭은 `+0.06%` 수준에 그쳤다.
|
||||||
|
- 즉, actual catalyst를 reserve/overlay로만 넣는 것만으로는 아직 획기적 변화가 없었다.
|
||||||
|
- 다음 구조 개선은 `event issuer 자체`를 더 사는 것이 아니라, `event day에 broad scan에서 잡힌 liquid continuation names를 별도 engine/sleeve로 어떻게 승격할지` 쪽이 더 유망하다.
|
||||||
|
|
||||||
|
## Multi-Event Liquid Overlay
|
||||||
|
|
||||||
|
2026-04-21 최종 승격안은 strict event reserve가 아니라 `overlay-only` 구조였다.
|
||||||
|
|
||||||
|
핵심 규칙:
|
||||||
|
|
||||||
|
- core basket은 [leader_intraday_momentum_high_wr_intraday_first.yaml](/Users/yirugi/mycloud/personal/workspace/fithia2/configs/intraday/strategies/leader_intraday_momentum_high_wr_intraday_first.yaml)과 동일하게 유지한다.
|
||||||
|
- filing data는 core rank에 섞지 않는다.
|
||||||
|
- 대신 `earnings_release`, `guidance_update`, `material_contract`, `other_material_event`, `management_change`, `unknown` 중에서 **2개 이상** same-day contributor가 동시에 보이고, 합산 entry dollar volume이 **$100M 이상**일 때만 overlay를 켠다.
|
||||||
|
- overlay가 켜진 날에만 day budget의 12%를 써서, base basket 밖의 liquid continuation names를 최대 2개 추가한다.
|
||||||
|
|
||||||
|
최종 해석:
|
||||||
|
|
||||||
|
- 2025 official 창에서는 overlay가 발화하지 않았고 결과도 거의 그대로 유지됐다.
|
||||||
|
- 2026 Q1에서는 2026-01-02 하루만 발화했고, `APLD`, `BMNR` 두 개가 추가됐다.
|
||||||
|
- 이 한 번의 broad event cluster가 `+16.14% / WR 55.4% / DD -6.16%`를 만들었고, 직전 flagship 비교치 `+15.59% / WR 54.8% / DD -6.19%`보다 좋아졌다.
|
||||||
|
- 즉, 이 overlay는 “매일 조금씩 손대는 additive factor”가 아니라, **희소하지만 설명 가능한 broad event cluster day에만 붙는 post-allocation sleeve**로 이해해야 한다.
|
||||||
|
|
||||||
|
## Liquid Continuation Core Experiment
|
||||||
|
|
||||||
|
`moderate-gap liquid / liquid large-cap / sector thrust`를 overlay가 아니라
|
||||||
|
**full core basket engine**으로 승격한 실험도 별도로 진행했다.
|
||||||
|
|
||||||
|
- 전략 파일: [leader_intraday_momentum_liquid_continuation_core.yaml](/Users/yirugi/mycloud/personal/workspace/fithia2/configs/intraday/strategies/leader_intraday_momentum_liquid_continuation_core.yaml)
|
||||||
|
- 코드 변경:
|
||||||
|
- `momentum_selection_mode: liquid_continuation`
|
||||||
|
- `candidate_intraday_rank_mode: liquid_continuation`
|
||||||
|
- same-day `support_score`, `is_liquid_largecap`, `is_moderate_gap_liquid`를 candidate weighted rank에 추가
|
||||||
|
|
||||||
|
결과:
|
||||||
|
|
||||||
|
- 1차 broad version: [intraday_20260421_235041_f5aeac8a.json](/Users/yirugi/mycloud/personal/workspace/fithia2/runs/intraday/intraday_20260421_235041_f5aeac8a.json)
|
||||||
|
- `2026 Q1: -6.98%`, `WR 47.7%`, `DD -13.52%`
|
||||||
|
- stricter version: [intraday_20260421_235327_04e5bda8.json](/Users/yirugi/mycloud/personal/workspace/fithia2/runs/intraday/intraday_20260421_235327_04e5bda8.json)
|
||||||
|
- `2026 Q1: -0.43%`, `WR 46.8%`, `DD -11.56%`
|
||||||
|
- walk-forward spot check: [intraday_20260421_235647_93d29530.json](/Users/yirugi/mycloud/personal/workspace/fithia2/runs/intraday/intraday_20260421_235647_93d29530.json)
|
||||||
|
- `2025 Q1: -2.31%`, `WR 41.8%`, `DD -9.23%`
|
||||||
|
|
||||||
|
결론:
|
||||||
|
|
||||||
|
- 이 엔진은 실제로 `special liquidity` 이름만 중심으로 고르도록 동작했지만,
|
||||||
|
**flagship을 대체할 full core engine으로는 아직 edge가 없다.**
|
||||||
|
- 특히 moderate-gap liquid 정의를 core로 올리면 거래 수는 줄어도 분기 성과가
|
||||||
|
baseline보다 지속적으로 나빠졌다.
|
||||||
|
- 따라서 현재 판단은 `liquid continuation`을 full replacement로 승격하지 말고,
|
||||||
|
**tail replacement / reserve slot / rare-day sleeve** 쪽에만 제한적으로 쓰는 편이 낫다.
|
||||||
|
|
||||||
|
## Required Checks Before Keeping A Change
|
||||||
|
|
||||||
|
변경을 유지하려면 최소한 아래를 확인한다.
|
||||||
|
|
||||||
|
- Unit tests pass:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pytest -q tests/unit/intraday/test_simulator.py tests/unit/intraday/test_run_helpers.py tests/unit/intraday/test_screener.py tests/unit/intraday/test_metrics.py
|
||||||
|
```
|
||||||
|
|
||||||
|
- 2026 Q1 official result가 무너지지 않는다.
|
||||||
|
- 2025 Q1/Q2/Q3/Q4 중 한 분기만 좋아지고 다른 분기들이 크게 악화되지 않는다.
|
||||||
|
- 결과 JSON의 trade diagnostics로 변경이 어떤 구조에 적용됐는지 설명 가능해야 한다.
|
||||||
|
|
||||||
|
## Known Bottleneck
|
||||||
|
|
||||||
|
분기별 official 검증에서 `Fetching momentum filing catalysts` 단계가 가장 느리다.
|
||||||
|
현재는 캐시가 있어도 90% 이후 일부 ticker 조회가 오래 걸린다. 전략 검증 자체는
|
||||||
|
정상 완료되지만, 다음 인프라 개선은 event 조회 범위 축소나 캐시 hit 판정 개선이
|
||||||
|
우선이다.
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue