Phase C→B 배포 문서·dry-run 검증을 추가하고 운영 env를 동기화한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
xavis
2026-06-01 17:04:07 +09:00
parent d385456867
commit 3cbfa40aab
12 changed files with 830 additions and 12 deletions

View File

@@ -0,0 +1,270 @@
# DeepCoin 배포 체크리스트 (C → B)
- **목표:** 초기 ₩1,000,000 → **+1,000% 이상** (인과적 hybrid primary 경로)
- **일정:** **금요일까지 Phase C** (알림·dry-run 사전 테스트) → **토요일부터 Phase B-1** (소액 실거래)
- **기준일:** 2026-06-01 (월) 작성 · C 종료 2026-06-05 (금) · B-1 시작 2026-06-06 (토)
---
## 1. 현재 설계 (한 장 요약)
```text
[Ground Truth] 사후 ZigZag 타점 → +4,291% (벤치마크·미래 허용)
[Monitor 규칙] buy_compound_tight + sell_mtf_cross_all_tf (과거 지표만)
[배분 hybrid] DD tier + past-leg tier (enhanced=False) → sim +1,121%
[06 live_trader] LIVE_TRADING_ENABLED=1 일 때만 빗썸 주문
```
| 리포트 경로 | PnL | 배포 |
|-------------|-----|------|
| GT oracle | +4,291% | 아님 (상한) |
| **sim_primary (hybrid)** | **+1,121%** | **예** |
| sim_sized | +75% | 아님 |
| sim_causal_gt | +15% | 아님 |
| sim_tier_enhanced (conviction) | -51% | **금지** |
| sim_fixed_order | -94% | 비교용 |
---
## 2. 요청 항목 대비 달성 현황
### A. Ground Truth · 매수 배분
| # | 요청 | 상태 |
|---|------|------|
| A1 | GT 재생성 | 완료 |
| A2 | 1회 10만 캡 제거 | 완료 |
| A3 | 총자산×배분, 한도=보유 현금 | 완료 |
| A4 | GT HTML | 완료 |
### B. 시뮬 개선
| # | 요청 | 상태 |
|---|------|------|
| B1 | GT 일반화 | 부분 (monitor 규칙이 primary) |
| B2 | sim 매수 상한 제거 | 완료 (hybrid) |
| B3 | 전기간 복리 carry | 완료 |
| B4 | GT 배분 분석·DD 캘리브 | 완료 (large 5%, medium 2%) |
| B5 | sim 상한 제거 | hybrid 완료 |
| B6 | LIVE_DAILY_KRW_MAX sim 제거 | sim hybrid 완료 / **live는 Phase B에서 조정** |
| B7 | GT식 large leg | 완료 |
| B8 | 복리 구조 | hybrid 완료 / conviction 실패 |
### C. 인과성
| # | 요청 | 상태 |
|---|------|------|
| C1 | GT=미래 OK, sim=과거만 | 완료 |
| C2 | 인과 sim 재실행 | 완료 |
| C3 | 복리 총자산 배분 | 완료 |
| C4 | HTML 비교 | 완료 |
### D. +1,000% 목표
| # | 요청 | 상태 |
|---|------|------|
| D1 | 1000% 설계 | 완료 |
| D2 | Option C 300% | 완료 (+1,121%) |
| D3 | Phase2 +1000% Go | **시뮬 Go** |
| D4 | holdout/fee/WF | 완료 |
| D5 | 슬리피지 | Go이나 +28%로 급감 (주의) |
| D6 | 실현=sim | **미달** (mark·슬리피지·live 한도) |
### E. 배포·운영
| # | 요청 | 상태 |
|---|------|------|
| E1 | live_trader hybrid 정합 | 완료 |
| E2 | conviction 배포 | 금지 |
| E3 | git push | 완료 |
| E4 | Phase A dry-run | 완료 |
| E5 | Phase C (알림) | **진행 중** |
| E6 | Phase B (live) | 토요일 예정 |
---
## 3. Phase 로드맵 (C → B-1 → B-2)
```text
Phase C (월~금) 알림만 · 주문 없음 · 신호·슬리피지 관찰
↓ 금요일 Go 판정
Phase B-1 (토~ ) LIVE ON · 소~중간 한도 · hybrid tier 부분 체결
↓ 2~4주 검증
Phase B-2 (검증 후) sim에 근접한 한도 · +1000% 경로 추격 (리스크↑)
```
| Phase | 기간 | 스크립트 | LIVE_TRADING | 목적 |
|-------|------|----------|--------------|------|
| **C** | ~금 6/5 | `05_run_monitor.py` | **0** | 신호 품질·빈도·텔레그램 |
| **B-1** | 토 6/6~ | `06_execute_live.py` | **1** | 소액 실체결·tier·로그 검증 |
| **B-2** | B-1 Go 후 | `06_execute_live.py` | **1** | sim hybrid에 근접한 배분 |
---
## 4. Phase C — 금요일까지 사전 테스트
### 4.1 `.env` (Phase C)
`.env`에 아래를 적용하세요. 전체 예시는 `docs/05_ops/env.recommended.md` 참고.
```env
# === Phase C: 알림만 (금~금) ===
LIVE_TRADING_ENABLED=0
GT_SIGNAL_CAUSAL=1
SIM_PRIMARY_SIZING=auto
MONITOR_ALERT_COOLDOWN_MIN=180
MONITOR_LOOP_SLEEP_SEC=180
```
### 4.2 매일 실행
```bash
# 프로젝트 루트, xavis conda
python scripts/01_download.py # 1일 1회 (봉 갱신)
python scripts/06_verify_live_dryrun.py # tier·설정 점검 (1일 1회)
python scripts/05_run_monitor.py # 상시 알림 (또는 --once 수동)
python scripts/06_execute_live.py --once # dry-run (주문 없음, 선택)
```
### 4.3 Phase C 일별 기록 (금요일까지)
| 날짜 | download | verify | monitor | 발화 buy | 발화 sell | 메모 |
|------|----------|--------|---------|----------|-----------|------|
| 6/1 (월) | | PASS | | | | Phase A 완료 |
| 6/2 (화) | | | | | | |
| 6/3 (수) | | | | | | |
| 6/4 (목) | | | | | | |
| 6/5 (금) | | | | | | **C Go/No-Go** |
기록 파일: `docs/05_ops/live_verification_20260601.md` (매일 갱신)
### 4.4 Phase C 금요일 Go/No-Go 기준
**GO (토요일 B-1 진행)** — 아래 **전부** 충족:
- [ ] 5일간 `05` 크래시·API 오류 없음
- [ ] monitor 규칙 2개만 발화 (`buy_compound_tight`, `sell_mtf_cross_all_tf`)
- [ ] `06_verify_live_dryrun.py` PASS
- [ ] 텔레그램 알림 수신 정상
- [ ] 발화 빈도가 비정상적으로 과다/과소 아님 (참고: sim 전기간 buy ~1,608 / 365일)
- [ ] 빗썸 API 키·잔고 조회 정상
**NO-GO** — 하나라도 해당 시 토요일 live 연기:
- API/DB 장애 지속
- 규칙 외 신호
- verify FAIL
---
## 5. Phase B-1 — 토요일부터 소액 실거래
### 5.1 `.env` (Phase B-1)
```env
# === Phase B-1: 소액 live (토~) ===
LIVE_TRADING_ENABLED=1
GT_SIGNAL_CAUSAL=1
SIM_PRIMARY_SIZING=auto
# hybrid tier: large 구간 일부 체결 가능, sim보다 보수적
LIVE_ORDER_KRW=100000
LIVE_DAILY_KRW_MAX=1000000
LIVE_MAX_TRADES_PER_DAY=15
LIVE_COOLDOWN_MIN=180
LIVE_DAILY_LOSS_LIMIT_KRW=100000
LIVE_SLIPPAGE_PCT=0.05
```
| 변수 | B-1 값 | 의미 |
|------|--------|------|
| `LIVE_DAILY_KRW_MAX` | **1,000,000** | 일 100만 (sim full tier보다 낮음) |
| `LIVE_DAILY_LOSS_LIMIT_KRW` | **100,000** | 일 -10만 시 당일 중단 |
| `LIVE_MAX_TRADES_PER_DAY` | 15 | sim 거래 빈도 대비 여유 |
### 5.2 토요일 오픈 당일
```bash
python scripts/06_verify_live_dryrun.py
python scripts/06_execute_live.py --once # 1회 수동 확인
python scripts/06_execute_live.py # 상시 (systemd/cron)
```
- [ ] `data/ops/live_trades.jsonl` 체결·dry_run 기록
- [ ] `data/ops/live_sizing_state.json` leg 상태 갱신
- [ ] Kill switch: `LIVE_TRADING_ENABLED=0` + 프로세스 중지
### 5.3 Phase B-1 Go/No-Go (2~4주 후)
**B-2 승격 후보:**
- [ ] 일 손실 한도 위반 없음
- [ ] hybrid planned vs 실체결 금액 오차 허용 범위
- [ ] 슬리피지·스킵 사유 기록
- [ ] 실계좌 PnL이 sim 대비 **완전히 다르더라도** tier 동작이 의도대로
---
## 6. Phase B-2 — sim hybrid 근접 (검증 후)
> +1,000% 경로 추격. **본인 리스크 허용 범위에서만** 적용.
```env
# === Phase B-2: sim 정합 (B-1 Go 후) ===
LIVE_TRADING_ENABLED=1
LIVE_DAILY_KRW_MAX=5000000
LIVE_MAX_TRADES_PER_DAY=30
LIVE_DAILY_LOSS_LIMIT_KRW=300000
LIVE_COOLDOWN_MIN=120
```
- large tier 1회 ~총자산 100% 매수 가능 → **MDD sim 19%·슬리피지 +28% 스트레스 참고**
- conviction tier(`enhanced=True`) **절대 사용 금지**
---
## 7. Kill switch
| 방법 | 동작 |
|------|------|
| `.env` | `LIVE_TRADING_ENABLED=0` 후 프로세스 재시작 |
| 프로세스 | `06_execute_live.py` 중지 |
| 빗썸 | 앱/웹 수동 청산 |
---
## 8. +1,000% 목표 현실 점검
| 항목 | sim | live (B-1) | live (B-2) |
|------|-----|------------|------------|
| hybrid large tier | 대부분 체결 | **일한도로 일부 스킵** | sim에 근접 |
| 복리 | 전기간 | 동일 로직 | 동일 |
| 슬리피지 | 5% 스트레스 +28% | **실측 필요** | 실측 필요 |
| 미청산 mark | +1,121%에 포함 | **실현 PnL 별도** | 동일 |
**+1,000%는 B-2까지 올라가도 보장되지 않습니다.** B-1에서 tier·슬리피지·PnL을 먼저 검증하세요.
---
## 9. 관련 문서·스크립트
| 경로 | 용도 |
|------|------|
| `docs/05_ops/env.recommended.md` | Phase별 `.env` 전체 예시 |
| `docs/05_ops/live_verification_*.md` | 일별 검증 기록 |
| `docs/reference/LIVE_TRADING.md` | 06 실거래 가이드 |
| `docs/reference/RISK.md` | 리스크·한도 |
| `scripts/06_verify_live_dryrun.py` | Phase A/C 점검 |
| `scripts/05_run_monitor.py` | Phase C 알림 |
| `scripts/06_execute_live.py` | Phase B 주문 |
---
## 10. 변경 이력
| 날짜 | 내용 |
|------|------|
| 2026-06-01 | C→B-1→B-2 로드맵·체크리스트 최초 작성 |

View File

@@ -0,0 +1,158 @@
# Phase별 `.env` 권장값
프로젝트 루트 `.env`**해당 Phase 블록만** 반영하세요. API 키·토큰은 기존 값 유지.
**일정:** Phase C ~2026-06-05 (금) → Phase B-1 ~2026-06-06 (토)부터
---
## 공통 (C·B 모두 동일)
```env
SYMBOL=WLD
CHART_LOOKBACK_DAYS=365
# 인과 sim · hybrid live sizing (필수)
GT_SIGNAL_CAUSAL=1
SIM_CAUSAL_TIER=1
SIM_PRIMARY_SIZING=auto
# hybrid DD (캘리브 결과 — 변경 시 04_hybrid_dd_calibrate 재실행)
# docs/04_matching/hybrid_dd_calibration.json 과 동기
CAUSAL_GT_DD_LARGE_PCT=5.0
CAUSAL_GT_DD_MEDIUM_PCT=2.0
# GT tier (sim·live hybrid)
GT_BUY_PCT_LARGE_LEG=1.0
GT_BUY_PCT_SMALL_LEG=0.05
GT_BUY_PCT_MEDIUM_LEG=0.25
GT_LARGE_LEG_TOP_PCT=0.2
GT_MIN_ORDER_KRW=5000
# monitor 규칙 (04 matched_rules — 코드에서 로드, env 변경 불필요)
MATCH_MONITOR_MAX_PER_SIDE=1
# conviction tier — 코드 기본 enhanced=False 유지, env로 켜지 않음
SIM_TIER_CONVICTION_DD_PCT=10.0
```
---
## Phase C — 알림만 (월~금, 주문 없음)
**적용 기간:** ~2026-06-05
**실행:** `python scripts/05_run_monitor.py`
```env
# === Phase C ===
LIVE_TRADING_ENABLED=0
# 05 알림
MONITOR_ALERT_COOLDOWN_MIN=180
MONITOR_ALERT_KRW_AMOUNT=100000
MONITOR_LOOP_SLEEP_SEC=180
# 06 dry-run용 (C에서도 06 --once 가능, 주문 없음)
LIVE_ORDER_KRW=100000
LIVE_DAILY_KRW_MAX=300000
LIVE_COOLDOWN_MIN=180
LIVE_MAX_TRADES_PER_DAY=10
LIVE_DAILY_LOSS_LIMIT_KRW=50000
LIVE_SLIPPAGE_PCT=0.05
LIVE_BUY_PCT_LARGE=1.0
LIVE_BUY_PCT_SMALL=0.05
```
### Phase C 확인 명령
```bash
python scripts/06_verify_live_dryrun.py
python scripts/05_run_monitor.py --once
python scripts/06_execute_live.py --once
```
---
## Phase B-1 — 소액 실거래 (토요일~)
**적용 시점:** 2026-06-06 (토) 00:00 이후 (금요일 C Go 후)
**실행:** `python scripts/06_execute_live.py`
```env
# === Phase B-1 ===
LIVE_TRADING_ENABLED=1
LIVE_ORDER_KRW=100000
LIVE_DAILY_KRW_MAX=1000000
LIVE_MAX_TRADES_PER_DAY=15
LIVE_COOLDOWN_MIN=180
LIVE_DAILY_LOSS_LIMIT_KRW=100000
LIVE_SLIPPAGE_PCT=0.05
LIVE_BUY_PCT_LARGE=1.0
LIVE_BUY_PCT_SMALL=0.05
MONITOR_ALERT_COOLDOWN_MIN=180
MONITOR_LOOP_SLEEP_SEC=180
```
| 항목 | 값 | 설명 |
|------|-----|------|
| 초기 자금 | ₩1,000,000 | 빗썸 가용 KRW |
| 일 매수 한도 | ₩1,000,000 | large tier 일부 가능, sim(무한)보다 보수 |
| 일 손실 중단 | ₩100,000 | -10% 일손실 시 당일 추가 주문 중단 |
| 1회 참고 | ₩100,000 | 매도 시 참고; **매수는 hybrid tier가 산출** |
### B-1 오픈 당일
```bash
python scripts/06_verify_live_dryrun.py
python scripts/06_execute_live.py --once
python scripts/06_execute_live.py
```
---
## Phase B-2 — sim hybrid 근접 (B-1 Go 후, 2~4주)
> +1,000% 경로. **리스크·MDD·슬리피지 감수 가능할 때만.**
```env
# === Phase B-2 ===
LIVE_TRADING_ENABLED=1
LIVE_ORDER_KRW=100000
LIVE_DAILY_KRW_MAX=5000000
LIVE_MAX_TRADES_PER_DAY=30
LIVE_COOLDOWN_MIN=120
LIVE_DAILY_LOSS_LIMIT_KRW=300000
LIVE_SLIPPAGE_PCT=0.05
LIVE_BUY_PCT_LARGE=1.0
LIVE_BUY_PCT_SMALL=0.05
```
| sim 대비 | B-1 | B-2 |
|----------|-----|-----|
| 일한도 | 100만 | 500만 |
| large tier 1회 ~100% | 종종 스킵 | 대부분 가능 |
| +1000% 가능성 | 낮음 | sim에 근접 (보장 없음) |
---
## 절대 변경하지 말 것
```env
# conviction tier 배포 금지 — live_trader는 enhanced=False 고정
# GT_SIGNAL_CAUSAL=0 ← hybrid sizing 꺼짐, sim과 불일치
# SIM_PRIMARY_SIZING=causal_tier ← 구 +75% 경로
```
---
## Phase 전환 체크
| 전환 | 조건 | `.env` 변경 |
|------|------|-------------|
| C → B-1 | 금요일 C Go | `LIVE_TRADING_ENABLED=1`, B-1 한도 |
| B-1 → B-2 | 2~4주 검증 Go | `LIVE_DAILY_KRW_MAX` 등 B-2 값 |
상세: [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md)

View File

@@ -0,0 +1,57 @@
# Live Phase A — dry-run 검증
- 일시: 2026-06-01 16:37:13
- 결과: **PASS**
- **배포 일정:** Phase C ~6/5 (금) → Phase B-1 ~6/6 (토)
- **체크리스트:** [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md)
- **`.env` 권장:** [env.recommended.md](./env.recommended.md)
## Plan (목적)
- hybrid primary(`enhanced=False`) live_trader 경로가 시뮬과 정합인지 확인
- conviction tier(`enhanced=True`) 미사용 확인
- 실거래 한도가 hybrid tier와 어떻게 상호작용하는지 기록
## Do (실행)
```bash
python scripts/06_verify_live_dryrun.py
python scripts/06_execute_live.py --once
```
## Check (점검 결과)
- GT_SIGNAL_CAUSAL=True · live_sizing=ON · LIVE_TRADING_ENABLED=False
- monitor_rules: buy_compound_tight, sell_mtf_cross_all_tf
- hybrid DD: dd_large=5.0%, dd_medium=2.0%
- 현재 발화: 없음 (신호 대기)
- 06 dry-run: 주문 없음, live=OFF
### hybrid tier 사이징 (시나리오)
| 시나리오 | hybrid | conviction (배포 금지) |
|----------|--------|------------------------|
| 신규·DD 1% | ₩50,000 | ₩50,000 |
| 신규·DD 6% | ₩999,500 | ₩999,500 |
| 복리 500만·large leg | ₩4,997,501 | ₩4,997,501 |
- live_trader는 `enhanced=False` → hybrid primary와 동일 경로
- conviction은 DD 10% 이상·weight 분할 생략 시 시뮬과 크게 괴리 (별도 경로)
### 실거래 한도 (중요)
- 현재 시장 DD 구간에서 hybrid 1회 매수액 ≈ **₩999,500** (현금 100만 기준)
- `LIVE_DAILY_KRW_MAX=300,000`**일 주문 한도 초과로 매수 스킵**
- 파일럿 단계에서는 한도가 의도적으로 시뮬(+1121%)보다 보수적임
## Act (다음 단계)
1. **Phase C (월~6/5 금):** `05_run_monitor.py` 상시 · `06_verify_live_dryrun.py` 1일 1회
2. **금요일 C Go/No-Go** — [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md) §4.4
3. **토 6/6~ Phase B-1:** [env.recommended.md](./env.recommended.md) 적용 후 `LIVE_TRADING_ENABLED=1`
4. 2~4주 후 B-2 승격 검토
## Kill switch
- `LIVE_TRADING_ENABLED=0` + 06 프로세스 중지
- 빗썸 앱 수동 청산