# 3단계 — 실거래 (hybrid primary)

## 운영 모델 (시뮬과 동일)

실거래는 **시뮬 `sim_causal_hybrid`** 와 같은 배분 경로만 사용합니다. dry-run·모의 체결은 제거되었습니다.

| 구분 | 내용 |
|------|------|
| 신호 | `matched_rules.json` → `monitor_rules` 2개 |
| 매수 규칙 | `buy_compound_tight` |
| 매도 규칙 | `sell_mtf_cross_all_tf` (주봉 w1 조건 포함) |
| 배분 | hybrid DD tier + past-leg, **`enhanced=False`** |
| 이력 | `LIVE_HYBRID_BOOTSTRAP_FIRES=1` → `fire_outcomes` monitor 발화 + 운영 체결분 |
| 체결 엔진 | `plan_live_hit` = `replay_hybrid_signals` (= `build_monitor_hybrid_sized_trades`) |
| 매수 필터 | 시뮬과 동일 — monitor 발화 전체 (`approved_buy_rules=None`) |
| 금지 | `sim_tier_enhanced` (conviction), GT oracle 타점 |

코드: `deepcoin/ops/hybrid_sim_execution.py` → `live_trader.py` (`LIVE_TRADING_ENABLED=1` 필수)

## 기동 전 점검

```bash
python scripts/06_verify_live.py          # 설정·tier·규칙·한도
python scripts/check_balance.py         # 빗썸 KRW·보유 확인
```

## 실거래 실행

`.env` 에 `LIVE_TRADING_ENABLED=1` 확인 후:

```bash
python scripts/06_execute_live.py --once   # 1회
python scripts/06_execute_live.py          # 상시 루프
```

## 환경 변수 (운영 예)

| 변수 | 예 | 설명 |
|------|-----|------|
| `LIVE_TRADING_ENABLED` | 1 | 0이면 06 기동 불가 |
| `GT_SIGNAL_CAUSAL` | 1 | hybrid sizing (과거만) |
| `GT_INITIAL_CASH_KRW` | 400000 | 시뮬·배분 기준 |
| `LIVE_DAILY_KRW_MAX` | 400000 | 일 주문 한도 |
| `LIVE_DAILY_LOSS_LIMIT_KRW` | 40000 | 일 손실 한도 |
| `LIVE_COOLDOWN_MIN` | 3 | 규칙당 쿨다운(분) |
| `LIVE_MAX_TRADES_PER_DAY` | 15 | 일 최대 체결 수 |

전체: [env.recommended.md](../05_ops/env.recommended.md)

## 주문·배분 동작

- 발화 이력 → `plan_live_hit` / `replay_hybrid_signals` (인과, 현금·보유 제약)
- **매수:** EV/WF 통과 규칙만, 가용 현금 범위, 일한도·쿨다운
- **매도:** 보유 수량 필요, 시뮬 분할 `sell_qty` 기준 시장가 매도

## 로그

| 경로 | 내용 |
|------|------|
| `data/ops/live_trades.jsonl` | 실주문 기록 |
| `data/ops/live_signal_history.json` | 발화 이력 (배분 정합) |
| `docs/05_ops/live_verification_*.md` | `06_verify_live.py` 점검 기록 |

## Kill switch

1. `06_execute_live` 프로세스 중지
2. 빗썸 앱에서 수동 청산
