Phase C dry-run·문서화·DB 증분 저장 및 운영 env 동기화

- 1분봉 다운로드 제외, MONITOR_PERSIST로 05/06 수집 시 coins.db INSERT
- Phase C paper_fires 로그·07 모의 리포트, hybrid 시뮬 산출물·reference 문서 갱신
- .env Phase C(LIVE=0), bootstrap dotenv override=True

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dsyoon
2026-06-01 23:32:47 +09:00
parent 3cbfa40aab
commit b9ee241d14
19 changed files with 877 additions and 333 deletions

View File

@@ -1,48 +1,99 @@
# 3단계 — 오픈 (실거래)
# 2~3단계 — dry-run·실거래 (hybrid primary)
## 정의
## 운영 모델 (시뮬과 동일)
**실제 KRW가 빗썸 주문으로 나가는 단계**입니다. 05 텔레그램 알림만으로는 3단계가 아닙니다.
dry-run(Phase C)과 실거래(Phase B) 모두 **시뮬 `sim_primary` = `sim_causal_hybrid`** 와 같은 경로이다.
## 선행 조건
| 구분 | 내용 |
|------|------|
| 신호 | `matched_rules.json``monitor_rules` 2개 |
| 매수 규칙 | `buy_compound_tight` |
| 매도 규칙 | `sell_mtf_cross_all_tf` |
| 배분 | hybrid DD tier + past-leg, **`enhanced=False`** |
| 금지 | `sim_tier_enhanced` (conviction), GT oracle 타점 |
1. `python scripts/04_simulation_report.py`**Go/No-Go: GO**
2. [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) — Phase C 완료 후 B-1
3. [env.recommended.md](../05_ops/env.recommended.md) — Phase별 `.env`
4. 본 문서·`RISK.md`·`OPERATIONS.md` 숙지
코드: `deepcoin/ops/live_trader.py` (`GT_SIGNAL_CAUSAL=1``plan_buy_amount_krw(..., enhanced=False)`)
## 실행
## Phase C — dry-run (주문 없음, 3단계 전)
**정의:** 빗썸 **시장가 주문 없음**. 신호·tier·알림·로그만 검증.
| 항목 | 설정 |
|------|------|
| `LIVE_TRADING_ENABLED` | **0** |
| 스크립트 | `05_run_monitor.py`, `06_verify_live_dryrun.py`, `06_execute_live.py --once` |
| 기간 | 배포 체크리스트 기준 ~Phase C 종료(금요일 Go/No-Go) |
```bash
# Phase A: hybrid tier·한도 점검 (주문 없음)
python scripts/06_verify_live_dryrun.py
# .env: LIVE_TRADING_ENABLED=0, GT_SIGNAL_CAUSAL=1, SIM_PRIMARY_SIZING=auto
python scripts/01_download.py # 1일 1회
python scripts/06_verify_live_dryrun.py # 설정·tier·규칙 점검
python scripts/05_run_monitor.py # 텔레그램 알림 (상시)
python scripts/06_execute_live.py --once # dry_run 로그만 (선택)
```
# 반드시 LIVE_TRADING_ENABLED=1 일 때만 주문
python scripts/06_execute_live.py --once # 1회 점검
python scripts/06_execute_live.py # 상시 (알림+주문)
- 06은 발화 시 `dry_run (LIVE_TRADING_ENABLED=0)` 만 기록, **API 매수·매도 호출 없음**
- 잔고 조회는 알림·tier 계산용으로 API를 쓸 수 있음
상세: [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) §4 · [env.recommended.md](../05_ops/env.recommended.md) Phase C
## Phase B — 실거래 (3단계 오픈)
**정의:** 실제 KRW가 빗썸 주문으로 나간다. 05 알림만으로는 3단계가 아니다.
### 선행 조건
1. [SIMULATION.md](SIMULATION.md) — 시뮬 **GO** (완료)
2. Phase C **GO** (5일 모니터·verify·알림 안정)
3. [env.recommended.md](../05_ops/env.recommended.md) Phase B-1 `.env`
4. [RISK.md](RISK.md), [OPERATIONS.md](OPERATIONS.md) 숙지
### 실행
```bash
python scripts/06_verify_live_dryrun.py # B-1 당일 재확인
# LIVE_TRADING_ENABLED=1 확인 후
python scripts/06_execute_live.py --once
python scripts/06_execute_live.py # 상시
```
## 환경 변수
| 변수 | 기본 | 설명 |
|------|------|------|
| `LIVE_TRADING_ENABLED` | 0 | **1**일 때만 실주문 |
| `LIVE_ORDER_KRW` | 100000 | 1회 주문 금액(원) |
| `LIVE_DAILY_KRW_MAX` | 300000 | 일일 총 주문 한도 |
| `LIVE_COOLDOWN_MIN` | 180 | 동일 규칙 재주문 최소 간격(분) |
| `LIVE_MAX_TRADES_PER_DAY` | 10 | 일일 최대 체결 시도 |
| `LIVE_DAILY_LOSS_LIMIT_KRW` | 50000 | 일 손실 한도(추가 주문 중단) |
| 변수 | Phase C | Phase B-1 (예) | 설명 |
|------|---------|----------------|------|
| `LIVE_TRADING_ENABLED` | 0 | 1 | 1일 때만 실주문 |
| `GT_SIGNAL_CAUSAL` | 1 | 1 | hybrid sizing |
| `SIM_PRIMARY_SIZING` | auto | auto | primary=hybrid |
| `LIVE_ORDER_KRW` | 100000 | 100000 | 매도·비-hybrid fallback 참고 |
| `LIVE_DAILY_KRW_MAX` | 300000 | 1,000,000 | **sim 대비 체결 상한** |
| `LIVE_COOLDOWN_MIN` | 180 | 180 | 규칙별 재주문 간격 |
| `LIVE_MAX_TRADES_PER_DAY` | 10 | 10 | 일 최대 시도 |
| `LIVE_DAILY_LOSS_LIMIT_KRW` | 50000 | 50000 | 일 손실 한도 |
| `MONITOR_LOOP_SLEEP_SEC` | 180 | 180 | 05/06 루프 주기 |
| `MONITOR_ALERT_COOLDOWN_MIN` | 180 | 180 | 텔레그램 중복 방지 |
## 주문 규칙
Phase별 전체 블록: [env.recommended.md](../05_ops/env.recommended.md)
- `matched_rules.json`**`monitor_rules`** 만 사용 (매수·매도 각 1개)
- 매수: 시장가 매수 (`buyCoinMarket`)
- 매도: 보유 수량 기준 시장가 매도 (`sellCoinMarket`)
## 주문·배분 동작
- **매수:** EV/WF 통과 규칙만 hybrid tier 원화 산출 → `_can_trade` (일한도·쿨다운) → 시장가 매수
- **매도:** 보유 WLD 전량 기준 시장가 매도 (`LIVE_ORDER_KRW`는 매도 경로에서 수량 우선)
- **스킵:** 현금 부족, 일한도, hybrid planned > `LIVE_DAILY_KRW_MAX`, 미승인 규칙
## 로그
- `data/ops/live_trades.jsonl` — 주문 시도·결과
| 경로 | 내용 |
|------|------|
| `data/ops/live_trades.jsonl` | 06 주문·dry-run 시도 (JSONL) |
| `docs/05_ops/live_verification_*.md` | Phase C/B 일별 기록 |
## 4단계 연결
오픈 후 **1~2주** 실계좌 PnL·슬리피지·장애를 `docs/05_ops/live_verification_*.md`에 기록합니다.
오픈 후 **1~2주** 실계좌 PnL·슬리피지·장애를 verification 문서에 기록 → B-2 한도 검토.
## 관련 문서
- [SIMULATION.md](SIMULATION.md) — Go/No-Go·`sim_primary`
- [OPERATIONS.md](OPERATIONS.md) — 일상 루틴·장애
- [RISK.md](RISK.md) — Kill switch·한도

View File

@@ -1,42 +1,143 @@
# 운영 가이드
## 로드맵과 현재 위치 (2026-06-01)
| 순서 | 단계 | 상태 |
|------|------|------|
| 1 | 시뮬레이션 | **완료** (GO) — [SIMULATION.md](SIMULATION.md) |
| 2 | 문서화 | **본 문서군** — SIMULATION / LIVE / RISK / OPERATIONS |
| 3 | 오픈 (실거래) | Phase C 후 B-1 — [LIVE_TRADING.md](LIVE_TRADING.md) |
| 4 | 실계좌 검증 | 1~2주 |
| 5 | 지속 운영 | 06 상시 + 월간 재시뮬 |
배포 모델: **hybrid primary** (= 시뮬 `sim_causal_hybrid`). 상세: [LIVE_TRADING.md](LIVE_TRADING.md)
---
## 단계별 스크립트
| 단계 | 스크립트 |
|------|----------|
| 데이터 | `01_download.py` |
| GT | `02_ground_truth.py` |
| 분석 | `03_analyze_enrich.py`, `03_analyze_trades.py` |
| 매칭 | `04_match_rules.py` |
| 시뮬 | `04_simulation_report.py` |
| 알림 | `05_run_monitor.py` |
| 실거래 | `06_execute_live.py` |
| 단계 | 스크립트 | 산출·역할 |
|------|----------|-----------|
| 01 | `01_download.py` | `coins.db` (3~1440분, 1분 제외) |
| (자동) | 05/06·`load_frames_from_db` | API 수집 시 `MONITOR_PERSIST_CANDLES=1`이면 **즉시 DB INSERT** |
| 02 | `02_ground_truth.py` | GT JSON·차트 |
| 03 | `03_analyze_enrich.py` | `docs/03_analysis/latest/` |
| 03b | `03_analyze_trades.py` | GT MTF 스냅샷 CSV |
| 03c | `03_gt_mtf_profile.py` | GT 프로필 (04 입력) |
| 04 | `04_match_rules.py` | `matched_rules.json` |
| 04 시뮬 | `04_simulation_report.py` | Go/No-Go 리포트 |
| 05 | `05_run_monitor.py` | 알림 (주문 없음) |
| 06 | `06_execute_live.py` | 알림+주문 (LIVE=1) |
| 점검 | `06_verify_live_dryrun.py` | hybrid·한도·규칙 PASS |
| 환경 | `verify_env.py` | `.env`·경로 검증 |
## 일상 운영 (5단계 이후)
구조: [STRUCTURE.md](STRUCTURE.md)
1. `01_download.py` — 일 1회 권장
2. `06_execute_live.py` — 상시 (`LIVE_TRADING_ENABLED=1`)
3. 주간 — `04_simulation_report.py`로 EV·Go 재확인
---
## Phase C — 지금~금요일 (dry-run, 주문 없음)
### `.env` 핵심
```env
LIVE_TRADING_ENABLED=0
GT_SIGNAL_CAUSAL=1
SIM_PRIMARY_SIZING=auto
MONITOR_LOOP_SLEEP_SEC=180
MONITOR_ALERT_COOLDOWN_MIN=180
```
전체: [env.recommended.md](../05_ops/env.recommended.md)
### 매일 루틴
| 순서 | 명령 | 빈도 |
|------|------|------|
| 1 | `python scripts/01_download.py` | 1일 1회 |
| 2 | `python scripts/06_verify_live_dryrun.py` | 1일 1회 |
| 3 | `python scripts/06_execute_live.py` | 상시 (`LIVE=0`, 발화→`paper_fires.jsonl`) |
| 4 | 금요일 | `python scripts/07_phase_c_paper_report.py` (모의 forward % 참고) |
실계좌 수익률은 dry-run에서 나오지 않음. B-1 전 C Go 판정 후 `LIVE_TRADING_ENABLED=1`.
### 일별 기록
- 파일: `docs/05_ops/live_verification_20260601.md`
- 금요일: [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) §4.4 C Go/No-Go
---
## Phase B-1 — 실거래 시작 (C GO 이후)
1. [env.recommended.md](../05_ops/env.recommended.md) Phase B-1 블록 적용
2. `LIVE_TRADING_ENABLED=1` 확인
3. `06_verify_live_dryrun.py` → PASS
4. `06_execute_live.py --once``live_trades.jsonl` 확인
5. `06_execute_live.py` 상시
체크리스트: [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) §5
---
## Phase B-2 이후 (검증 통과 시)
- `LIVE_DAILY_KRW_MAX` 등 한도 상향 (리스크 문서·본인 판단)
- 주간 `04_simulation_report.py`로 EV·hybrid Go 재확인
---
## 텔레그램
- 05/06: 규칙 발화·**체결 결과** (06)
- `MONITOR_ALERT_COOLDOWN_MIN` / `LIVE_COOLDOWN_MIN` 으로 중복 완화
| 스크립트 | 내용 |
|----------|------|
| 05 | 규칙 발화·MTF 요약 (주문 없음) |
| 06 | 발화 + 체결/dry-run 결과 (`LIVE=1` 시 체결) |
중복 완화: `MONITOR_ALERT_COOLDOWN_MIN`, `LIVE_COOLDOWN_MIN`
---
## 장애 대응
| 증상 | 조치 |
|------|------|
| 주문 실패 | 로그·빗썸 API 키·잔고 확인, `LIVE_TRADING_ENABLED=0` |
| 알림만 오고 주문 없음 | `LIVE_TRADING_ENABLED` 확인 |
| 과다 알림 | 쿨다운 증가·`monitor_rules` 축소 |
| 주문 실패 | `live_trades.jsonl`, API 키·잔고 `LIVE_TRADING_ENABLED=0` |
| 알림만, 주문 없음 | C: 정상. B: `LIVE_TRADING_ENABLED` 확인 |
| verify FAIL | `.env`, `matched_rules` 2개, `GT_SIGNAL_CAUSAL=1` |
| hybrid 금액 0 | 현금·EV/WF·tier 스킵 로그 확인 |
| 과다 알림 | 쿨다운 증가 |
| 시뮬과 수익 괴리 | 일한도·슬리피지 — [RISK.md](RISK.md) |
## 오픈 체크리스트 (3단계 당일)
---
- [ ] [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) Phase C Go
- [ ] [env.recommended.md](../05_ops/env.recommended.md) Phase B-1 적용
- [ ] 시뮬 Go/No-Go **GO**
- [ ] `.env` 한도 확인
- [ ] `LIVE_TRADING_ENABLED=1` 의도적 설정
- [ ] `--once` 1회 테스트
- [ ] `live_trades.jsonl` 기록 확인
## 데이터·산출물 경로
| 경로 | 용도 |
|------|------|
| `data/coins.db` 또는 루트 `coins.db` | OHLCV |
| `data/ground_truth/ground_truth_trades.json` | GT |
| `docs/04_matching/matched_rules.json` | 운영 규칙 |
| `docs/04_matching/simulation_report.html` | 시뮬 리포트 |
| `data/ops/live_trades.jsonl` | 06 로그 |
---
## 오픈 당일 체크리스트 (3단계)
- [ ] Phase C **GO**
- [ ] 시뮬·hybrid Go/No-Go **GO**
- [ ] Phase B-1 `.env`
- [ ] `06_verify_live_dryrun.py` PASS
- [ ] `LIVE_TRADING_ENABLED=1` 의도 확인
- [ ] `--once``live_trades.jsonl`
- [ ] [RISK.md](RISK.md) Kill switch 숙지
---
## 관련 문서
- [ROADMAP.md](ROADMAP.md)
- [SIMULATION.md](SIMULATION.md)
- [LIVE_TRADING.md](LIVE_TRADING.md)
- [RISK.md](RISK.md)
- [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md)

View File

@@ -1,25 +1,62 @@
# 리스크 — 실거래
# 리스크 — dry-run·실거래
## 원칙
## 모델 리스크 (배포 경로)
- 소액 파일럿만 허용 (`LIVE_ORDER_KRW`, `LIVE_DAILY_KRW_MAX`)
- 손실 한도 초과 시 **당일 추가 주문 중단**
- API·네트워크 오류 시 주문 중단·로그 기록
| 경로 | 리스크 수준 | 조치 |
|------|-------------|------|
| **hybrid primary** (`sim_causal_hybrid`) | 배포 허용 | Phase C 검증 후 B-1 소액 |
| GT oracle (+4,291%) | **운영 금지** | 벤치마크만 참고 (미래 정보) |
| conviction (`sim_tier_enhanced`) | **코드·env 모두 금지** | `enhanced=False` 고정 |
| sim 고수익 ≠ 실현 | **구조적 갭** | `LIVE_DAILY_KRW_MAX`·슬리피지·부분 체결 |
시뮬 Option C **GO**는 과거 데이터·가정 하의 결과이며, 실계좌 수익을 보장하지 않는다.
## 자금·한도
### 원칙
- 파일럿만 허용: Phase B-1은 **소액** (`LIVE_ORDER_KRW`, `LIVE_DAILY_KRW_MAX` 보수적)
- hybrid 1회 planned 매수가 `LIVE_DAILY_KRW_MAX`를 넘으면 **주문 스킵** (시뮬은 제한 없음)
- 일 손실 한도 초과 시 **당일 추가 주문 중단**
### Phase별 한도 예 (`.env` 조정 필수)
| Phase | `LIVE_TRADING_ENABLED` | 일한도 예 | 비고 |
|-------|------------------------|-----------|------|
| C (dry-run) | 0 | 30만 (dry-run 참고) | 주문 없음 |
| B-1 | 1 | 100만 | sim 대비 보수 |
| B-2 | 1 | 500만+ | B-1 검증 후만 |
본인 자금·위험 성향에 맞게 **반드시** 낮춰 시작한다.
## 시장·기술 리스크
| 리스크 | 영향 | 완화 |
|--------|------|------|
| API 장애·레이트리밋 | 시세·주문 실패 | 재시도·`LIVE_TRADING_ENABLED=0` |
| 슬리피지·호가 | sim 대비 수익 하락 | B-1 소액·verification 기록 |
| DB·봉 지연 | 규칙 오판 | `01_download` 일 1회 |
| 과다 발화 | 수수료·알림 피로 | 쿨다운·규칙 수(`MATCH_MONITOR_MAX_PER_SIDE`) |
| 단일 종목(WLD) | 집중 리스크 | 포지션·일한도 상한 |
## Kill switch
| 방법 | 동작 |
|------|------|
| `.env` | `LIVE_TRADING_ENABLED=0` 설정 후 프로세스 재시작 |
| 프로세스 | `06_execute_live.py` 중지 |
| 빗썸 | 앱/웹에서 수동 청산 |
| `.env` | `LIVE_TRADING_ENABLED=0` 05/06 프로세스 재시작 |
| 프로세스 | `06_execute_live.py` 중지 (05만 남기면 알림만) |
| 빗썸 | 앱/웹 수동 청산 |
## 한도 (기본값 예시)
긴급 시 **주문 프로세스 중지 → LIVE_TRADING_ENABLED=0** 순서를 권장한다.
- 1회 10만 원 · 일 30만 원 · 일 손실 5만 원 초과 시 중단
## 검증·재평가
운영 전 본인 자금에 맞게 **반드시** 조정하세요.
| 주기 | 작업 |
|------|------|
| Phase C (~5일) | 발화·알림·verify PASS — [DEPLOYMENT_CHECKLIST](../05_ops/DEPLOYMENT_CHECKLIST.md) |
| B-1 (1~2주) | `live_verification_*.md` PnL·MDD·슬리피지 |
| 월 1회 | `04_simulation_report.py` Go 재확인 |
## 면책
실거래 손익은 전적으로 운영자 책임입니다. 본 저장소는 투자 자문이 아니다.
실거래·dry-run 관찰 손익은 전적으로 운영자 책임다. 본 저장소는 투자 자문이 아니다.

View File

@@ -4,21 +4,33 @@
| 단계 | 내용 | 실행 |
|------|------|------|
| 01~03c | DB, GT, enrich, GT MTF 스냅샷, **전 TF 프로필(매수/매도 대조)** | `01`~`03_gt_mtf_profile.py` |
| 01~03c | DB, GT, enrich, GT MTF 스냅샷, 전 TF 프로필 | `01`~`03_gt_mtf_profile.py` |
| 04 | GT 프로필 + leg_gt EV + holdout | `04_match_rules.py` |
| 05 | 텔레그램 알림 (주문 없음) | `05_run_monitor.py` |
| 05 (기능) | 텔레그램 알림 스크립트 | `05_run_monitor.py` |
| **1** | **시뮬레이션** walk-forward·Go/No-Go | `04_simulation_report.py`**GO** |
| **2** | **문서화** | [SIMULATION.md](SIMULATION.md), [LIVE_TRADING.md](LIVE_TRADING.md), [RISK.md](RISK.md), [OPERATIONS.md](OPERATIONS.md) |
## 남은 작업 (합의 순서)
| 순서 | 단계 | 내용 | 실행 |
|------|------|------|------|
| **1** | 시뮬레이션 | walk-forward·민감도·Go/No-Go | `04_simulation_report.py` |
| **2** | 문서화 | SIMULATION, LIVE, RISK, OPERATIONS | `docs/reference/` |
| **3** | 오픈 | **실거래** (소액) | `06_execute_live.py` |
| **3** | 오픈 (B-1) | 실거래 소액 · hybrid | `06_execute_live.py`**기동** (`LIVE_TRADING_ENABLED=1`) |
| **(병행)** | Phase C 알림 | 선택 | `05_run_monitor.py` |
| **4** | 검증 | 실계좌 1~2주 | `docs/05_ops/live_verification_*.md` |
| **5** | 지속 | 실거래 유지·월간 재시뮬 | 06 상시 |
| **5** | 지속 | 실거래·월간 재시뮬 | 06 상시 |
가이드: [SIMULATION.md](SIMULATION.md) · [LIVE_TRADING.md](LIVE_TRADING.md)
운영 모델: **sim_primary = hybrid** (`sim_causal_hybrid`). [LIVE_TRADING.md](LIVE_TRADING.md)
## 가이드 맵
| 문서 | 용도 |
|------|------|
| [SIMULATION.md](SIMULATION.md) | 1단계 결과·Go/No-Go·portfolio_compare |
| [LIVE_TRADING.md](LIVE_TRADING.md) | Phase C dry-run · Phase B live |
| [RISK.md](RISK.md) | 한도·Kill switch·sim vs 실현 갭 |
| [OPERATIONS.md](OPERATIONS.md) | 일상 루틴·장애·체크리스트 |
| [DEPLOYMENT_CHECKLIST.md](../05_ops/DEPLOYMENT_CHECKLIST.md) | C→B 일정·Go 기준 |
| [env.recommended.md](../05_ops/env.recommended.md) | Phase별 `.env` |
## 디렉터리

View File

@@ -1,8 +1,11 @@
# 1단계 — 시뮬레이션
**상태 (2026-06-01):** `04_simulation_report.py` 실행 완료 · 규칙·hybrid·Option C 2차 **GO**
## 목적
`monitor_rules`과적합이 아닌지 검증하고, **Ground Truth와 동일한 자본 배분 원칙**으로 holdout 체결 수익을 비교합니다.
1. `monitor_rules`holdout·walk-forward·수수료 스트레스를 통과하는지 검증한다.
2. 운영에 쓸 **배분 경로(primary)** 를 정한다. (실전 = **hybrid**, GT oracle 아님)
## 실행
@@ -15,40 +18,95 @@ python scripts/04_simulation_report.py
| 파일 | 내용 |
|------|------|
| `docs/04_matching/simulation_report.json` | Go/No-Go, `portfolio_compare`, `gt_model` |
| `docs/04_matching/simulation_report.html` | 카드 3줄: **GT · 시뮬(총자산%) · 시뮬(고정₩/회)** |
| `docs/04_matching/simulation_report.json` | Go/No-Go, `portfolio_compare`, walk-forward |
| `docs/04_matching/simulation_report.html` | GT·시뮬 경로별 카드·차트 |
## 포트폴리오 비교 (`portfolio_compare`)
## 배포 모델 (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_sized` | holdout 발화 + **총자산×비중×EV/WF·leg상위** (`position_sizing`) |
| `sim_fixed_order` | 동일 발화 + **고정 `LIVE_ORDER_KRW`/회** (baseline) |
## 시뮬 매수 배분 (GT와 동일 원칙)
- **통과 규칙만** 대형: holdout EV·PF, walk-forward, 수수료 2× 스트레스 (`load_ev_wf_approved_rule_ids`)
- **leg 상위** `GT_LARGE_LEG_TOP_PCT` + 근접 GT leg 매칭 → `LIVE_BUY_PCT_LARGE`
- 그 외 → `LIVE_BUY_PCT_SMALL`
- 일한도·일최대거래: `select_capped_fires` (동적 planned 원화로 `LIVE_DAILY_KRW_MAX` 적용)
| `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 | 양수 월 비율 ≥ `SIM_GO_WF_POSITIVE_RATIO` |
| 수수료 스트레스 | 수수료 2× 후 EV≥0 |
| 실거래 한도 | 동적 매수액 기준 일한도 시뮬 |
| 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차 — 체결가 불리 가정 후 흑자 여부 |
## Go/No-Go
## 시뮬 vs 실운영 (기대 갭)
- **GO**: monitor_rules 전 규칙 checks 통과
- **NO-GO**: 04 재선별 후 재실행
시뮬 hybrid는 **일한도 없이** 복리·전액 배분을 가정한다. 실거래는 `LIVE_DAILY_KRW_MAX` 등으로 체결이 잘리므로 **수익률이 sim_primary와 같지 않을 수 있다**. (배포 체크리스트 D6: 실현=sim 미달)
## 환경 변수
- `SIM_GO_*`, `SIM_WALK_FORWARD_MIN_MONTHS`, `SIM_FEE_STRESS_MULT`
- `LIVE_ORDER_KRW`, `LIVE_DAILY_KRW_MAX` (고정 baseline·한도)
- `LIVE_BUY_PCT_LARGE`, `LIVE_BUY_PCT_SMALL` (시뮬·실거래 비율 매수)
| 변수 | 용도 |
|------|------|
| `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)