# Simulation (시뮬레이션) 설계: [ARCHITECTURE.md](ARCHITECTURE.md). Ground Truth **이후**, Operations **이전** 단계입니다. ## 목적 1. `monitor_rules`가 holdout·walk-forward·수수료 스트레스를 통과하는지 검증한다. 2. 운영에 쓸 **배분 경로(primary)** 를 정한다. (실전 = **hybrid**, GT oracle 아님) ## 실행 ```bash python scripts/04_match_rules.py # 선행 python scripts/04_simulation_report.py ``` ## 산출물 | 파일 | 내용 | |------|------| | `docs/04_matching/simulation_report.json` | Go/No-Go, `portfolio_compare`, walk-forward | | `docs/04_matching/simulation_report.html` | GT·시뮬 경로별 카드·차트 | ## 배포 모델 (primary) | 경로 | `portfolio_compare` 키 | 전기간 PnL (최근 실행) | 운영 | |------|------------------------|------------------------|------| | GT oracle (사후 ZigZag) | `ground_truth_chrono` | +4,291% | **미사용** (미래 허용 벤치마크) | | **권장 primary** | `sim_primary` = `sim_causal_hybrid` | (리포트 참고) | **Operations 배분** | | causal tier only | `sim_sized` | +75% | 미사용 | | 인과 GT leg 엔진 | `sim_causal_gt` | +15% | 미사용 | | conviction tier | `sim_tier_enhanced` | -51% | **금지** | | 고정 금액 baseline | `sim_fixed_order` | -94% | 비교용 | - `primary_sizing`: **hybrid** (`go_no_go_hybrid.primary_sizing`) - hybrid: monitor 발화 + **DD tier + past-leg tier**, `enhanced=False` - 코드: `deepcoin/ground_truth/causal_gt_hybrid.py`, `deepcoin/matching/simulation.py` ## Go/No-Go (최근 실행 요약) ### 규칙 (`go_no_go`) | rule_id | holdout EV | WF+ 비율 | fee 2× EV | 결과 | |---------|------------|----------|-----------|------| | `buy_compound_tight` | 5.66 | 0.75 | 4.99 | PASS | | `sell_mtf_cross_all_tf` | 7.13 | 1.00 | 7.12 | PASS | → **GO** ### hybrid primary (`go_no_go_hybrid`) | 검사 | 값 | 결과 | |------|-----|------| | monitor_rules_go | - | PASS | | hybrid_holdout_pnl | +62.35% | PASS | | hybrid_max_mdd | 19.22% | PASS | | hybrid_fee_stress_pnl | +975.74% | PASS | | option_c_target_300pct (optional) | +1,147% | PASS | → **GO** · `primary_sizing=hybrid` ### Option C 2차 (`go_no_go_option_c_phase2`) - 전기간 +1,000% 목표, GT capture ≥23%, WF 양수 월 비율, 슬리피지 스트레스 등 → **GO** 재실행 후 수치는 `simulation_report.json`을 기준으로 한다. ## 포트폴리오 비교 (`portfolio_compare`) — 읽는 법 | 키 | 설명 | |----|------| | `ground_truth_chrono` | GT 타점·`amount_krw` 시각순 체결 (상한 벤치마크) | | `sim_primary` / `sim_causal_hybrid` | **운영 배분과 동일** (monitor + hybrid tier) | | `sim_sized` | EV/WF·leg 가중 복리 (구 경로) | | `sim_hybrid_holdout` | hybrid 전기간 복리 후 **holdout 구간** 자산 증감 | | `sim_hybrid_fee_stress` | 수수료 스트레스 hybrid | | `hybrid_dd_params` | `dd_large_pct`, `dd_medium_pct` (캘리브 JSON과 동기) | ## 검증 항목 | 항목 | 설명 | |------|------| | Holdout | 규칙별 EV≥0, PF≥1 | | Walk-forward | 월별 EV·`SIM_GO_WF_POSITIVE_RATIO` | | 수수료 스트레스 | `SIM_FEE_STRESS_MULT` (기본 2×) | | hybrid | holdout PnL, MDD, fee stress, (선택) +300% | | 슬리피지 | Option C 2차 — 체결가 불리 가정 후 흑자 여부 | ## 시뮬 vs 실운영 (기대 갭) 시뮬 hybrid는 **일한도 없이** 복리·전액 배분을 가정한다. 실거래는 `LIVE_DAILY_KRW_MAX` 등으로 체결이 잘리므로 **수익률이 sim_primary와 같지 않을 수 있다**. (배포 체크리스트 D6: 실현=sim 미달) ## 환경 변수 | 변수 | 용도 | |------|------| | `SIM_GO_*`, `SIM_FEE_STRESS_MULT`, `SIM_WALK_FORWARD_MIN_MONTHS` | 규칙 Go/No-Go | | `SIM_PRIMARY_SIZING` | `auto` \| `hybrid` \| `causal_tier` (권장: **auto** → hybrid) | | `GT_SIGNAL_CAUSAL` | 1 — hybrid live sizing 활성 | | `CAUSAL_GT_DD_LARGE_PCT`, `CAUSAL_GT_DD_MEDIUM_PCT` | hybrid tier (캘리브와 동기) | | `GT_BUY_PCT_*`, `GT_LARGE_LEG_TOP_PCT` | tier 비중 | ## NO-GO 시 1. `04_match_rules.py` 재실행 (프로필·선별) 2. `04_simulation_report.py` 재실행 3. `go_no_go` / `go_no_go_hybrid` checks 확인 ## 다음 단계 - **Operations:** [LIVE_TRADING.md](LIVE_TRADING.md), [OPERATIONS.md](OPERATIONS.md), [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md)