# 1단계 — 시뮬레이션

**상태 (2026-06-01):** `04_simulation_report.py` 실행 완료 · 규칙·hybrid·Option C 2차 **GO**

## 목적

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` | **+1,147%** | **dry-run·live 배분** |
| 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 확인

## 다음 단계

- **2단계 문서화:** 본 문서 + [LIVE_TRADING.md](LIVE_TRADING.md), [RISK.md](RISK.md), [OPERATIONS.md](OPERATIONS.md)
- **3단계 이전:** [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) Phase C (dry-run)
