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:
@@ -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·한도
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 관찰 손익은 전적으로 운영자 책임이다. 본 저장소는 투자 자문이 아니다.
|
||||
|
||||
@@ -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` |
|
||||
|
||||
## 디렉터리
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user