refactor: GT·시뮬·운영 3축 정리 및 hybrid 실거래 정합

Phase C/dry-run·미사용 모듈·재생성 HTML을 제거하고, 운영 체결을
sim_causal_hybrid와 동일한 hybrid 로직으로 통합한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
xavis
2026-06-03 23:50:28 +09:00
parent a16c942be4
commit d7848df6f7
85 changed files with 177180 additions and 196131 deletions

View File

@@ -1,107 +1,67 @@
# 2~3단계 — dry-run·실거래 (hybrid primary)
# 3단계 — 실거래 (hybrid primary)
## 운영 모델 (시뮬과 동일)
dry-run(Phase C)과 실거래(Phase B) 모두 **시뮬 `sim_primary` = `sim_causal_hybrid`** 와 같은 경로이다.
실거래는 **시뮬 `sim_causal_hybrid`** 와 같은 배분 경로만 사용합니다. dry-run·모의 체결은 제거되었습니다.
| 구분 | 내용 |
|------|------|
| 신호 | `matched_rules.json``monitor_rules` 2개 |
| 매수 규칙 | `buy_compound_tight` |
| 매도 규칙 | `sell_mtf_cross_all_tf` |
| 매도 규칙 | `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` (`build_monitor_hybrid_sized_trades`, `enhanced=False`) `live_trader.py`
코드: `deepcoin/ops/hybrid_sim_execution.py``live_trader.py` (`LIVE_TRADING_ENABLED=1` 필수)
## 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
# .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 로그만 (선택)
python scripts/06_verify_live.py # 설정·tier·규칙·한도
python scripts/check_balance.py # 빗썸 KRW·보유 확인
```
- 06은 발화 시 **모의 계좌**(`paper_portfolio.json`)만 갱신, **빗썸 API 주문 없음**
- 체결 배분은 시뮬과 동일하게 `signal_history` 전체를 `replay_paper_portfolio`로 재생
- 구버전 paper는 `paper_fires.jsonl``would_trade=true`로 이력 복원 가능
## 실거래 실행
상세: [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) 숙지
### 실행
`.env``LIVE_TRADING_ENABLED=1` 확인 후:
```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 # 상시
python scripts/06_execute_live.py --once # 1회
python scripts/06_execute_live.py # 상시 루프
```
## 환경 변수
## 환경 변수 (운영 예)
| 변수 | 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 |
| `GT_INITIAL_CASH_KRW` | **400000** | **400000** | 시뮬·paper·hybrid 배분 시작 자금 |
| `LIVE_ORDER_KRW` | **40000** | **40000** | 초기×10% · fallback 참고 |
| `MONITOR_ALERT_KRW_AMOUNT` | **40000** | **40000** | 알림 참고(초기×10%) |
| `LIVE_DAILY_KRW_MAX` | **4000000** (초기×10) | **400000** | C: hybrid 여유 · B-1: 1일 1배 |
| `LIVE_DAILY_LOSS_LIMIT_KRW` | **20000** | **40000** | C: 초기×5% · B-1: ×10% |
| `LIVE_COOLDOWN_MIN` | **3** (1봉) | **3** | `MATCH_PRIMARY_INTERVAL`과 동일 |
| `LIVE_MAX_TRADES_PER_DAY` | **999** (시뮬 정합) | 15 | C: 횟수 제한 없음 |
| `MONITOR_LOOP_SLEEP_SEC` | 180 | 180 | 루프 3분 = 3분봉 주기 |
| `MATCH_LIVE_CACHE_SEC` | **180** | **180** | live_eval 캐시 ≤ 루프 주기 |
| `MONITOR_ALERT_COOLDOWN_MIN` | **3** (1봉) | **3** | 규칙당 알림 최소 간격 |
| 변수 | | 설명 |
|------|-----|------|
| `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 | 일 최대 체결 수 |
Phase별 전체 블록: [env.recommended.md](../05_ops/env.recommended.md)
전체: [env.recommended.md](../05_ops/env.recommended.md)
## 주문·배분 동작
- **공통:** 발화 이력 → `size_monitor_signals` / `replay_paper_portfolio` (시뮬 `sim_causal_hybrid`와 동일)
- **매수:** EV/WF 통과 규칙만`_can_trade` (live: 일한도·3분 쿨다운 / dry-run: 쿨다운만) → planned `amount_krw` 시장가 매수
- **매도:** 시뮬 분할 `sell_qty` (leg 마지막 매도는 잔량 전량) → 시장가 매도
- **스킵:** 시뮬 배분 0, 보유 없음, 일한도, 미승인 규칙, 규칙 쿨다운(3분)
- 발화 이력 → `plan_live_hit` / `replay_hybrid_signals` (인과, 현금·보유 제약)
- **매수:** EV/WF 통과 규칙만, 가용 현금 범위, 일한도·쿨다운
- **매도:** 보유 수량 필요, 시뮬 분할 `sell_qty` 기준 시장가 매도
## 로그
| 경로 | 내용 |
|------|------|
| `data/ops/live_trades.jsonl` | 06 실주문 (JSONL) |
| `data/ops/paper_fires.jsonl` | Phase C 모의 체결 시도 |
| `data/ops/paper_portfolio.json` | dry-run 모의 잔고·`signal_history` |
| `data/ops/live_signal_history.json` | live 발화 이력 (시뮬 배분용) |
| `docs/05_ops/live_verification_*.md` | Phase C/B 일별 기록 |
| `data/ops/live_trades.jsonl` | 실주문 기록 |
| `data/ops/live_signal_history.json` | 발화 이력 (배분 정합) |
| `docs/05_ops/live_verification_*.md` | `06_verify_live.py` 점검 기록 |
## 4단계 연결
## Kill switch
오픈 후 **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. `06_execute_live` 프로세스 중지
2. 빗썸 앱에서 수동 청산