# return_max_long_v12.61 — 전략 완전 해설 **SQS: 67.8** | 등록: 2026-03-30 | 저널: IMP-0893 --- ## 한 줄 요약 이벤트 드리븐 롱 온리 전략. `earnings_release`, `guidance_update`, `material_contract`, `other_material_event`, `management_change`, `unknown` 6종 이벤트를 23개 엔진으로 처리하며, OOT 손실 유발 2개 엔진을 비활성화하고 저위험 슬리브를 소폭 증량한 **sparse OOT 방어형** 구성이다. --- ## 계보 ``` v12.4 SQS 51.7 management_change 엔진 추가 (v11.49 donor graft) v12.8 SQS 51.7 reaction_close_long_core macro_vix_max 25로 타이트화 (OOT 방어) v12.13 SQS 51.2 bullish_raised 2개 엔진 동시 비활성화 테스트 v12.25 SQS 51.3 (파생 실험) v12.31 SQS 51.3 (파생 실험) v12.36 SQS 51.0 next_open_long_unknown_ome_orderly에 entropy 필터 추가 v12.42 SQS 59.2 reaction_close_long_core close_location_min 상향 (OOT tail 감소) v12.59 SQS 60.3 guidance_unknown_orderly 소폭 증량 (de-risk 브랜치에서 CW 회복) v12.61 SQS 67.8 earnings_mixed_inline_orderly 소폭 증량 → 최고 SQS ``` **v12.61의 핵심 변경**: `earnings_mixed_inline_orderly`의 `per_trade_risk_pct_override`를 0.035 → 0.045로 증량. OOT 손실에 기여하지 않는 슬리브만 증량하여 test/CW를 개선하면서 sparse OOT gains를 보존하는 전략. --- ## 비활성화된 엔진 | 엔진 | 비활성화 이유 | |------|------------| | `reaction_close_long_bullish_raised_priority` | sparse OOT에서 bullish-raised tax 집중 — OOT 손실 유발 | | `next_open_long_bullish_raised_recovery_oneoff_largecap_tight` | 동일 계열 tail risk — 희소 OOT에서 리스크 대비 기여 미미 | --- ## 설정 전체 ### 데이터셋 ``` dataset_snapshot_id: midlarge-liquid-long-v1_bucketfix_full_audit_tier3tech scoring_model: return_max_long_v13e ``` ### 신호 (Signal) | 파라미터 | 값 | 의미 | |---------|---|------| | `score_threshold` | 0.45 | 일반 진입 최소 점수 | | `a_tier_score_threshold` | 0.58 | A-tier 분류 최소 점수 | | `max_candidates_per_day` | 18 | 일일 최대 후보 수 | ### 리스크 (Risk) | 파라미터 | 값 | 의미 | |---------|---|------| | `per_trade_risk_pct` | 0.069 (6.9%) | 기본 트레이드당 리스크 | | `per_trade_risk_pct_a_tier` | 0.0759 (7.59%) | A-tier 트레이드당 리스크 | | `max_daily_new_risk_pct` | 1.5% | 일일 최대 신규 리스크 한도 | | `max_positions` | 24 | 최대 동시 포지션 수 | | `max_positions_per_sector` | 5 | 섹터별 최대 포지션 수 | | `max_position_value_pct` | 1.5% | 포지션당 최대 자산 비중 | | `max_adv_fraction` | 0.20 | ADV 대비 최대 주문 비중 | | `stop_atr_multiplier` | 1.45 | ATR 기반 스탑 배율 | | `macro_regime_neutral_size_scaler` | 1.0 | 중립 레짐 사이징 배율 | | `macro_regime_risk_off_size_scaler` | 1.0 | Risk-off 레짐 사이징 배율 | | `veto_unknown_direction` | false | unknown 방향 이벤트 허용 | | `macro_regime_risk_off_a_tier_only` | false | Risk-off 시 A-tier only 아님 | | `allow_budget_downsizing` | true | 예산 부족 시 사이징 하향 허용 | ### 실행 (Execution) | 파라미터 | 값 | 의미 | |---------|---|------| | `max_holding_days` | 12 | 최대 보유 기간 | | `trailing_warmup_days` | 6 | 트레일링 스탑 시작 대기일 | | `a_tier_target_1_r` | 3.5R | A-tier 1차 목표 | | `a_tier_target_1_fraction` | 0.0 | A-tier 1차 목표 청산 비중 (0 = 전량 유지) | | `non_a_tier_target_1_r` | 2.25R | 일반 1차 목표 | | `non_a_tier_target_1_fraction` | 0.2 | 일반 1차 목표 청산 비중 (20%) | | `early_failure_no_progress_days` | 1 | 진전 없음 판단 대기일 | | `early_failure_no_progress_r` | 0.15R | 진전 없음 기준 (0.15R 미만) | | `early_failure_no_progress_fraction` | 1.0 | 진전 없음 시 전량 청산 | ### 이벤트 타입 프로파일 | 타입 | 활성화 | direction_filter | max_holding_days_override | |------|--------|-----------------|--------------------------| | `material_contract` | ✅ | any | 20일 | | `other_material_event` | ✅ | any | 20일 | | `unknown` | ✅ | any | 12일 | --- ## 23개 전략 엔진 ### 활성화된 엔진 (23개) 엔진은 timing_class 기준 두 그룹으로 나뉜다. **same_day (reaction_close 계열)** — 이벤트 당일 장 마감 전 진입, 다음 날 오픈 전에 분류 완료 | 엔진 | 이벤트 타입 | VIX 상한 | close_location ≥ | volume_ratio ≥ | 리스크 | 목표 | |------|-----------|---------|-----------------|---------------|--------|------| | `reaction_close_long_core` | earnings, guidance | **25** | 0.60 | 1.0 | 4.5% | 기본 | | `reaction_close_long_residual_lowclose_gap_d3` | earnings, guidance | 30 | 0.35 | 1.25 | 기본 | 3.0R | | `reaction_close_long_residual_smallcap_gap` | earnings, guidance | 30 | 0.45 | 1.25 | 기본 | 3.0R | | `reaction_close_long_extreme_orderly` | earnings, guidance | 30 | **0.83** | **6.0** | 기본 | 99R (트레일) | | `reaction_close_long_unknown_strong` | unknown | 30 | 0.50 | 1.0 | 2.0% | 기본 | **after_close / any (next_open 계열)** — 장 마감 후 이벤트, 다음 날 오픈 진입 | 엔진 | 이벤트 타입 | VIX 상한 | close_location ≥ | volume_ratio ≥ | 리스크 | 목표 | 기타 필터 | |------|-----------|---------|-----------------|---------------|--------|------|---------| | `next_open_long_unknown_material_patient` | material_contract | 30 | 0.50 | 0.8 | 기본 | 5.0R | — | | `next_open_long_bullish_raised_recovery` | earnings | 30 | 0.03 | 1.2 | **0.35%** | 5.0R | — | | `next_open_long_unknown_inline_hivol` | earnings | 30 | 0.74 | 2.1 | 기본 | 5.0R | — | | `next_open_long_guidance_unknown_orderly` | guidance | 30 | **0.90** | 0.8 | 4.5% | **6.0R** | — | | `next_open_long_earnings_mixed_inline_orderly` | earnings | 30 | 0.50 | 1.0 | **4.5%** | 5.0R | — | | `next_open_long_unknown_material_orderly` | material_contract | 30 | 0.50 | 0.9 | 1.5% | 5.0R | — | | `next_open_long_other_material_mixed_orderly` | other_material | 30 | 0.45 | 1.0 | 3.5% | 5.0R | — | | `next_open_long_guidance_unknown_premarket_orderly` | guidance | 30 | 0.35 | 0.75 | 1.5% | 5.0R | — | | `next_open_long_unknown_ome_orderly` | other_material | 30 | 0.55 | 1.0 | 6.0% | 5.0R | entropy ≤ 1.98 | | `next_open_long_mixed_ome_orderly` | other_material | 30 | 0.50 | 0.8 | 1.5% | 5.0R | entropy ≤ 1.90 | | `next_open_long_bullish_raised_recovery_broad_oneoff` | earnings | 30 | 0.30 | 1.3 | 2.5% | 5.0R | — | | `next_open_long_other_material_unknown_orderly` | other_material | 30 | 0.35 | 0.75 | **0.3%** | 5.0R | entropy ≤ 1.65 | | `next_open_long_material_contract_mixed_micro_postmarket` | material_contract | 30 | 0.60 | 0.5 | 1.5% | 5.0R | entropy ≤ 2.05 | | `next_open_long_guidance_mixed_micro_postmarket_tight` | guidance | 30 | 0.65 | 0.6 | 0.8% | 5.0R | entropy ≤ 1.65 | | `next_open_long_guidance_mixed_micro_postmarket` | guidance | 30 | 0.55 | 0.5 | 1.4% | 5.0R | entropy ≤ 1.70 | | `next_open_long_earnings_unknown_inline_postmarket_strict` | earnings | 30 | 0.10 | 1.2 | 0.8% | 5.0R | entropy ≤ 1.90 | | `next_open_long_bullish_raised_strong` | earnings | — | **0.96** | 1.2 | 1.5% | 5.0R | — | | `next_open_long_management_change_unknown_premarket` | management_change | — | — | — | 기본 | 기본 | — | ### 비활성화된 엔진 (2개) | 엔진 | 비활성화 이유 | |------|------------| | `reaction_close_long_bullish_raised_priority` | OOT bullish-raised 손실 집중 | | `next_open_long_bullish_raised_recovery_oneoff_largecap_tight` | 희소 OOT tail risk | --- ## 성과 ### Full Split (학습/검증/테스트) | 구분 | 기간 | 거래수 | 수익률 | Sharpe | Win% | MaxDD | R² | |------|------|-------|-------|--------|-----|-------|---| | Train | 2022-03-02 ~ 2024-03-04 | 102 | +167.4% | 2.80 | 68.6% | 6.6% | 0.823 | | Valid | 2024-03-05 ~ 2025-03-06 | 25 | +74.4% | 3.90 | 100% | 5.6% | 0.907 | | Test | 2025-03-07 ~ 2026-03-24 | 24 | +71.7% | 7.46 | 100% | 1.6% | 0.935 | **SQS: 67.8** (공개 리더보드 기준) ### Walk-Forward Validation (12 폴드, 2022~2026) **테스트 집계** | 지표 | 값 | |-----|---| | 평균 수익률 | +19.64% | | 중앙값 수익률 | +15.01% | | 최저 수익률 | +2.95% | | 양수 폴드 비율 | **100%** (12/12) | | 평균 Profit Factor | 20.52 | | 평균 MaxDD | 2.96% | | 평균 거래수 | 11.8 | | 평균 Win Rate | 80.67% | **폴드별 테스트 결과** | 폴드 | 테스트 기간 | 수익률 | Sharpe | Win% | 거래수 | |-----|-----------|-------|--------|-----|-------| | 0 | 2023-03~2023-06 | +8.0% | 1.04 | 83% | 6 | | 1 | 2023-06~2023-09 | +3.0% | 0.54 | 44% | 9 | | 2 | 2023-09~2023-12 | +9.0% | 1.01 | 80% | 10 | | 3 | 2023-12~2024-03 | +32.5% | 2.04 | 88% | 16 | | 4 | 2024-03~2024-06 | +15.8% | 1.07 | 58% | 12 | | 5 | 2024-06~2024-09 | +11.3% | 0.93 | 67% | 15 | | 6 | 2024-09~2024-12 | +14.2% | 1.90 | 78% | 9 | | 7 | 2024-12~2025-03 | +17.5% | 1.87 | 70% | 20 | | 8 | 2025-03~2025-06 | +9.0% | 1.41 | 100% | 7 | | 9 | 2025-06~2025-09 | +44.8% | 2.78 | 100% | 12 | | 10 | 2025-09~2025-12 | +23.3% | 3.45 | 100% | 11 | | 11 | 2025-12~2026-03 | +47.5% | 6.68 | 100% | 15 | --- ## 설계 포인트 ### 1. OOT 방어 구조 `reaction_close_long_bullish_raised_priority`와 `next_open_long_bullish_raised_recovery_oneoff_largecap_tight` 비활성화는 v12 계열 전체의 핵심 설계다. Sparse OOT(2020-2021 데이터)에서 bullish-raised 계열이 손실을 집중시키는 경향이 확인되어, 이 두 슬리브를 제거하면서 나머지 bullish-raised 엔진(`next_open_long_bullish_raised_recovery`, `next_open_long_bullish_raised_recovery_broad_oneoff`, `next_open_long_bullish_raised_strong`)은 유지했다. ### 2. de-risk 브랜치 증량 전략 `reaction_close_long_core`의 `macro_vix_max=25` 타이트화(v12.8)로 고변동 환경에서의 노출을 줄이고, 그 빈 예산을 OOT에서 손실을 내지 않는 저위험 슬리브들(guidance_unknown_orderly, earnings_mixed_inline_orderly)로 채웠다. v12.59에서 guidance, v12.61에서 earnings_mixed를 각각 소폭 증량하여 SQS를 60.3 → 67.8로 끌어올렸다. ### 3. Entropy 필터 `other_material_event`와 일부 소형주 지도계열 엔진에 `pre_event_entropy_60d_max` 제약을 추가. 이벤트 전 60일 엔트로피가 높으면(≥1.65~2.05) 노이즈성 이벤트 가능성이 높아 필터링한다. ### 4. 비대칭 사이징 엔진별 `per_trade_risk_pct_override`가 0.3%~6.9%로 크게 차이난다. 높은 리스크 엔진은 신호 품질이 높고 검증된 슬리브(`reaction_close_long_core` 4.5%, `next_open_long_unknown_ome_orderly` 6.0%), 낮은 리스크 엔진은 탐색적이거나 sparse 환경에서 불확실한 슬리브(`next_open_long_bullish_raised_recovery` 0.35%, `next_open_long_other_material_unknown_orderly` 0.3%). ### 5. A-tier 목표 구조 A-tier 엔진은 `target_1_r=3.5R`에서 청산 비중 0% → 전량 트레일링으로 넘어간다. 일반 엔진은 `2.25R`에서 20% 청산 후 나머지를 트레일링. 강한 신호일수록 조기 청산 없이 더 달린다. --- ## 활용 가이드 ```bash # Full split 재실행 python apps/backtester/run.py \ --manifest configs/experiments/return_max_long_v12.61.json \ --snapshot-dir data/parquet/midlarge-liquid-long-v1_bucketfix_full_audit_tier3tech \ --output-root runs/v12.61_fullsplit # 시나리오 테스트 fithia2 scenario-test --config return_max_long_v12.61 # 과적합 검사 fithia2 overfit-check --config return_max_long_v12.61 --quick ``` --- ## 연관 실험 | 실험 | 관계 | SQS | |------|------|-----| | `return_max_long_v12.59` | 직계 부모 | 60.3 | | `return_max_long_v12.42` | 조부 | 59.2 | | `return_max_long_v12.8` | v12 OOT 방어 출발점 | 51.7 | | `return_max_long_v11.49` | management_change 엔진 donor | — | | `return_max_long_v7.70` | 현재 챔피언 | 76.9 |