Merge pull request 'workflow: session handover gate 실행환경 모드 분리 (#353)' (#354) from feature/issue-353-ci-handover-mode-v2 into feature/v3-session-policy-stream
All checks were successful
Gitea CI / test (push) Successful in 37s
All checks were successful
Gitea CI / test (push) Successful in 37s
Reviewed-on: #354
This commit was merged in pull request #354.
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!--
|
||||
Doc-ID: DOC-REQ-001
|
||||
Version: 1.0.0
|
||||
Version: 1.0.1
|
||||
Status: active
|
||||
Owner: strategy
|
||||
Updated: 2026-02-26
|
||||
Updated: 2026-03-01
|
||||
-->
|
||||
|
||||
# 요구사항 원장 (Single Source of Truth)
|
||||
@@ -37,3 +37,4 @@ Updated: 2026-02-26
|
||||
- `REQ-OPS-001`: 타임존은 모든 시간 필드에 명시(KST/UTC)되어야 한다.
|
||||
- `REQ-OPS-002`: 문서의 수치 정책은 원장에서만 변경한다.
|
||||
- `REQ-OPS-003`: 구현 태스크는 반드시 테스트 태스크를 동반한다.
|
||||
- `REQ-OPS-004`: 원본 계획 문서(`v2`, `v3`)는 `docs/ouroboros/source/` 경로를 단일 기준으로 사용한다.
|
||||
|
||||
@@ -51,6 +51,7 @@ Updated: 2026-02-26
|
||||
- `TASK-OPS-001` (`REQ-OPS-001`): 시간 필드/로그 스키마의 타임존 표기 강제 규칙 구현
|
||||
- `TASK-OPS-002` (`REQ-OPS-002`): 정책 수치 변경 시 `01_requirements_registry.md` 선수정 CI 체크 추가
|
||||
- `TASK-OPS-003` (`REQ-OPS-003`): `TASK-*` 없는 `REQ-*` 또는 `TEST-*` 없는 `REQ-*`를 차단하는 문서 검증 게이트 유지
|
||||
- `TASK-OPS-004` (`REQ-OPS-004`): v2/v3 원본 계획 문서 위치를 `docs/ouroboros/source/`로 표준화하고 링크 일관성 검증
|
||||
|
||||
## 커밋 규칙
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ Updated: 2026-02-26
|
||||
- `TEST-ACC-007` (`REQ-OPS-001`): 시간 관련 필드는 타임존(KST/UTC)이 누락되면 검증 실패한다.
|
||||
- `TEST-ACC-008` (`REQ-OPS-002`): 정책 수치 변경이 원장 미반영이면 검증 실패한다.
|
||||
- `TEST-ACC-009` (`REQ-OPS-003`): `REQ-*`가 `TASK-*`/`TEST-*` 매핑 없이 존재하면 검증 실패한다.
|
||||
- `TEST-ACC-019` (`REQ-OPS-004`): v2/v3 원본 계획 문서 링크는 `docs/ouroboros/source/` 경로 기준으로만 통과한다.
|
||||
|
||||
## 테스트 계층
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<!--
|
||||
Doc-ID: DOC-ROOT-001
|
||||
Version: 1.0.0
|
||||
Version: 1.0.1
|
||||
Status: active
|
||||
Owner: strategy
|
||||
Updated: 2026-02-26
|
||||
Updated: 2026-03-01
|
||||
-->
|
||||
|
||||
# The Ouroboros 실행 문서 허브
|
||||
|
||||
이 폴더는 `ouroboros_plan_v2.txt`, `ouroboros_plan_v3.txt`를 구현 가능한 작업 지시서 수준으로 분해한 문서 허브다.
|
||||
이 폴더는 `source/ouroboros_plan_v2.txt`, `source/ouroboros_plan_v3.txt`를 구현 가능한 작업 지시서 수준으로 분해한 문서 허브다.
|
||||
|
||||
## 읽기 순서 (Routing)
|
||||
|
||||
@@ -40,5 +40,5 @@ python3 scripts/validate_ouroboros_docs.py
|
||||
|
||||
## 원본 계획 문서
|
||||
|
||||
- [v2](/home/agentson/repos/The-Ouroboros/ouroboros_plan_v2.txt)
|
||||
- [v3](/home/agentson/repos/The-Ouroboros/ouroboros_plan_v3.txt)
|
||||
- [v2](./source/ouroboros_plan_v2.txt)
|
||||
- [v3](./source/ouroboros_plan_v3.txt)
|
||||
|
||||
165
docs/ouroboros/source/ouroboros_plan_v2.txt
Normal file
165
docs/ouroboros/source/ouroboros_plan_v2.txt
Normal file
@@ -0,0 +1,165 @@
|
||||
[The Ouroboros] 운영/전략 계획서 v2
|
||||
작성일: 2026-02-26
|
||||
상태: 코드 구현 전 설계안(전략/검증 중심)
|
||||
|
||||
==================================================
|
||||
0) 목적
|
||||
==================================================
|
||||
고정 익절(+3%) 중심 로직에서 벗어나, 다음을 만족하는 실전형 청산 체계로 전환한다.
|
||||
- 수익 구간 보호 (손익 역전 방지)
|
||||
- 변동성 적응형 청산
|
||||
- 예측 모델의 확률 신호를 보조적으로 결합
|
||||
- 과적합 방지를 최우선으로 한 검증 프레임워크
|
||||
|
||||
==================================================
|
||||
1) 핵심 설계 원칙
|
||||
==================================================
|
||||
1. 예측 성능과 전략 성능을 분리 평가
|
||||
- 예측 성능: PR-AUC, Brier, Calibration
|
||||
- 전략 성능: Net PnL, Sharpe, MDD, Profit Factor, Turnover
|
||||
|
||||
2. 시계열 검증 규율 강제
|
||||
- Walk-forward 분할
|
||||
- Purge/Embargo 적용
|
||||
- Random split 금지
|
||||
|
||||
3. 실거래 리얼리즘 우선
|
||||
- 거래비용/슬리피지/체결실패 반영 없는 백테스트 결과는 채택 금지
|
||||
|
||||
==================================================
|
||||
2) 매도 상태기계 (State Machine)
|
||||
==================================================
|
||||
상태:
|
||||
- HOLDING
|
||||
- BE_LOCK
|
||||
- ARMED
|
||||
- EXITED
|
||||
|
||||
정의:
|
||||
- HOLDING: 일반 보유 상태
|
||||
- BE_LOCK: 일정 수익권 진입 시 손절선을 본전(또는 비용 반영 본전)으로 상향
|
||||
- ARMED: 추세 추적(피크 추적) 기반 청산 준비 상태
|
||||
- EXITED: 청산 완료
|
||||
|
||||
전이 규칙(개념):
|
||||
- HOLDING -> BE_LOCK: unrealized_pnl_pct >= be_arm_pct
|
||||
- BE_LOCK -> ARMED: unrealized_pnl_pct >= arm_pct
|
||||
- ARMED -> EXITED: 아래 조건 중 하나 충족
|
||||
1) hard stop 도달
|
||||
2) trailing stop 도달 (peak 대비 하락)
|
||||
3) 모델 하락확률 + 유동성 약화 조건 충족
|
||||
|
||||
상태 전이 구현 규칙(필수):
|
||||
- 매 틱/바 평가 시 "현재 조건이 허용하는 최상위 상태"로 즉시 승격
|
||||
- 순차 if-else로 인한 전이 누락 금지 (예: 갭으로 BE_LOCK/ARMED 동시 충족)
|
||||
- EXITED 조건은 모든 상태보다 우선 평가
|
||||
- 상태 전이 로그에 이전/이후 상태, 전이 사유, 기준 가격/수익률 기록
|
||||
|
||||
==================================================
|
||||
3) 청산 로직 구성 (4중 안전장치)
|
||||
==================================================
|
||||
A. Hard Stop
|
||||
- 계좌/포지션 보호용 절대 하한
|
||||
- 항상 활성화
|
||||
|
||||
B. Dynamic Stop (Break-even Lock)
|
||||
- BE_LOCK 진입 시 손절선을 본전 이상으로 상향
|
||||
- "수익 포지션이 손실로 반전"되는 구조적 리스크 차단
|
||||
|
||||
C. ATR 기반 Trailing Stop
|
||||
- 고정 trail_pct 대신 변동성 적응형 사용
|
||||
- 예시: ExitPrice = PeakPrice - (k * ATR)
|
||||
|
||||
D. 모델 확률 신호
|
||||
- 하락전환 확률(pred_prob)이 임계값 이상일 때 청산 가중
|
||||
- 단독 트리거가 아닌 trailing/리스크 룰 보조 트리거로 사용
|
||||
|
||||
==================================================
|
||||
4) 라벨링 체계 (Triple Barrier)
|
||||
==================================================
|
||||
목표:
|
||||
고정 H-window 라벨 편향을 줄이고, 금융 시계열의 경로 의존성을 반영한다.
|
||||
|
||||
라벨 정의:
|
||||
- Upper barrier (익절)
|
||||
- Lower barrier (손절)
|
||||
- Time barrier (만기)
|
||||
|
||||
규칙:
|
||||
- 세 장벽 중 "먼저 터치한 장벽"으로 라벨 확정
|
||||
- 라벨은 entry 시점 이후 데이터만 사용해 생성
|
||||
- 피처 생성 구간과 라벨 구간을 엄격 분리해 look-ahead bias 방지
|
||||
|
||||
==================================================
|
||||
5) 검증 프레임워크
|
||||
==================================================
|
||||
5.1 분할 방식
|
||||
- Fold 단위 Walk-forward
|
||||
- Purge/Embargo로 인접 샘플 누수 차단
|
||||
|
||||
5.2 비교군(Baseline) 구조
|
||||
- B0: 기존 고정 손절/익절
|
||||
- B1: 모델 없는 trailing only
|
||||
- M1: trailing + 모델 확률 결합
|
||||
|
||||
5.3 채택 기준
|
||||
- M1이 B0/B1 대비 OOS(Out-of-sample)에서 일관된 우위
|
||||
- 단일 구간 성과가 아닌 fold 분포 기준으로 판단
|
||||
|
||||
==================================================
|
||||
6) 실행 아키텍처 원칙
|
||||
==================================================
|
||||
1. 저지연 실행 경로
|
||||
- 실시간 청산 판단은 경량 엔진(룰/GBDT) 담당
|
||||
- LLM은 레짐 판단/비중 조절/상위 의사결정 보조
|
||||
|
||||
2. 체결 현실 반영
|
||||
- 세션 유동성에 따른 슬리피지 페널티 차등 적용
|
||||
- 미체결/재호가/재접수 시나리오를 백테스트에 반영
|
||||
|
||||
==================================================
|
||||
7) 운영 리스크 관리
|
||||
==================================================
|
||||
승격 단계:
|
||||
- Offline backtest -> Paper shadow -> Small-capital live
|
||||
|
||||
중단(Kill Switch):
|
||||
- rolling Sharpe 악화
|
||||
- MDD 한도 초과
|
||||
- 체결 실패율/슬리피지 급등
|
||||
|
||||
Kill Switch 실행 순서(원자적):
|
||||
1) 모든 신규 주문 차단 플래그 ON
|
||||
2) 모든 미체결 주문 취소 요청
|
||||
3) 취소 결과 재조회(실패 건 재시도)
|
||||
4) 포지션 리스크 재계산 후 강제 축소/청산 판단
|
||||
5) 상태/로그 스냅샷 저장 및 운영 경보 발송
|
||||
|
||||
원칙:
|
||||
- 모델이 실패해도 hard stop 기반 보수 모드로 즉시 디그레이드 가능해야 함
|
||||
|
||||
==================================================
|
||||
8) 고정 파라미터(초기안)
|
||||
==================================================
|
||||
(15분봉 단기 스윙 기준 제안)
|
||||
- KR: be_arm_pct=1.2, arm_pct=2.8, atr_period=14, atr_multiplier_k=2.2,
|
||||
time_barrier_bars=26, p_thresh=0.62
|
||||
- US: be_arm_pct=1.0, arm_pct=2.4, atr_period=14, atr_multiplier_k=2.0,
|
||||
time_barrier_bars=32, p_thresh=0.60
|
||||
|
||||
민감도 범위(초기 탐색):
|
||||
- be_arm_pct: KR 0.9~1.8 / US 0.7~1.5
|
||||
- arm_pct: KR 2.2~3.8 / US 1.8~3.2
|
||||
- atr_multiplier_k: KR 1.8~2.8 / US 1.6~2.4
|
||||
- time_barrier_bars: KR 20~36 / US 24~48
|
||||
- p_thresh: 0.55~0.70
|
||||
|
||||
==================================================
|
||||
9) 구현 전 체크리스트
|
||||
==================================================
|
||||
- 파라미터 튜닝 시 nested leakage 방지
|
||||
- 수수료/세금/슬리피지 전부 반영 여부 확인
|
||||
- 세션/타임존/DST 처리 일관성 확인
|
||||
- 모델 버전/설정 해시/실험 로그 재현성 확보
|
||||
|
||||
끝.
|
||||
185
docs/ouroboros/source/ouroboros_plan_v3.txt
Normal file
185
docs/ouroboros/source/ouroboros_plan_v3.txt
Normal file
@@ -0,0 +1,185 @@
|
||||
[The Ouroboros] 운영확장 v3
|
||||
작성일: 2026-02-26
|
||||
상태: v2 확장판 / 야간·프리마켓 포함 글로벌 세션 운영 설계안
|
||||
|
||||
==================================================
|
||||
0) 목적
|
||||
==================================================
|
||||
"24시간 무중단 자산 증식" 비전을 위해 거래 세션 범위를 KR 정규장 중심에서
|
||||
NXT/미국 확장 세션까지 확대한다. 핵심은 다음 3가지다.
|
||||
- 세션 인지형 의사결정
|
||||
- 세션별 리스크/비용 차등 적용
|
||||
- 시간장벽의 현실적 재정의
|
||||
|
||||
==================================================
|
||||
1) 세션 모델 (Session-aware Engine)
|
||||
==================================================
|
||||
KR 세션:
|
||||
- NXT_PRE : 08:00 ~ 08:50 (KST)
|
||||
- KRX_REG : 09:00 ~ 15:30 (KST)
|
||||
- NXT_AFTER : 15:30 ~ 20:00 (KST)
|
||||
|
||||
US 세션(KST 관점 운영):
|
||||
- US_DAY : 10:00 ~ 18:00
|
||||
- US_PRE : 18:00 ~ 23:30
|
||||
- US_REG : 23:30 ~ 06:00
|
||||
- US_AFTER : 06:00 ~ 07:00
|
||||
|
||||
원칙:
|
||||
- 모든 피처/신호/주문/로그에 session_id를 명시적으로 포함
|
||||
- 세션 전환 시 상태 업데이트 및 리스크 파라미터 재로딩
|
||||
|
||||
==================================================
|
||||
2) 캘린더/휴장/DST 고정 소스
|
||||
==================================================
|
||||
KR:
|
||||
- 기본: pykrx 또는 FinanceDataReader (KRX 기준)
|
||||
- 예외: 연휴/임시 휴장/NXT 특이 운영은 KIS 공지 기반 보완
|
||||
|
||||
US:
|
||||
- pandas_market_calendars (NYSE 기준)
|
||||
- 2026 DST:
|
||||
- 시작: 2026-03-08
|
||||
- 종료: 2026-11-01
|
||||
|
||||
정합성 규칙:
|
||||
- 스케줄 충돌 시 "거래소 캘린더 > 로컬 추정" 우선
|
||||
- 시장 상태(open/close/half-day)는 주문 엔진 진입 전 최종 검증
|
||||
|
||||
KIS 점검시간 회피 정책(필수):
|
||||
- 브로커 점검/장애 블랙아웃 윈도우는 운영 설정으로 별도 관리
|
||||
- 블랙아웃 구간에는 신규 주문 전송 금지, 취소/정정도 정책적으로 제한
|
||||
- 신호는 유지하되 주문 의도는 Queue에 적재, 복구 후 유효성 재검증 뒤 실행
|
||||
- 복구 직후에는 잔고/미체결/체결내역을 우선 동기화한 뒤 주문 엔진 재가동
|
||||
|
||||
==================================================
|
||||
3) 시간장벽 재정의
|
||||
==================================================
|
||||
v2의 time_barrier_bars 고정값을 v3에서 다음으로 확장:
|
||||
- max_holding_minutes (시장별 기본 만기)
|
||||
- 봉 개수는 세션 길이/간격으로 동적 계산
|
||||
|
||||
기본값:
|
||||
- KR: max_holding_minutes = 2160 (약 3거래일, NXT 포함 관점)
|
||||
- US: max_holding_minutes = 4320 (약 72시간)
|
||||
|
||||
운영 주의:
|
||||
- 고정 "일중 청산"보다 "포지션 유지 시간" 기준 만기 적용
|
||||
- 세션 종료 강제청산 규칙과 충돌 시 우선순위 명시 필요
|
||||
|
||||
==================================================
|
||||
4) 세션별 비용/슬리피지 모델 (보수적)
|
||||
==================================================
|
||||
KRX_REG:
|
||||
- 슬리피지: 2~3틱 (약 0.05%)
|
||||
- 수수료+세금: 0.20% ~ 0.23%
|
||||
|
||||
NXT_AFTER:
|
||||
- 슬리피지: 5~8틱 (약 0.15%)
|
||||
- 수수료+세금: 0.20% ~ 0.23%
|
||||
|
||||
US_REG:
|
||||
- 슬리피지: 2~3틱 (약 0.03%)
|
||||
- 수수료+기타 비용: 0.07% ~ 0.15%
|
||||
|
||||
US_PRE / US_DAY:
|
||||
- 슬리피지: 10틱+ (약 0.3% ~ 0.5%)
|
||||
- 수수료+기타 비용: 0.07% ~ 0.15%
|
||||
|
||||
원칙:
|
||||
- 백테스트 체결가는 세션별 보수 가정 적용
|
||||
- 저유동 세션은 자동 보수 모드(p_thresh 상향, atr_k 상향) 권장
|
||||
- 백테스트 체결가 기본은 "불리한 방향 체결" 가정 (단순 close 체결 금지)
|
||||
|
||||
세션별 주문 유형 강제(필수):
|
||||
- KRX_REG / US_REG: 지정가 우선, 시장가 제한적 허용
|
||||
- NXT_AFTER / US_PRE / US_DAY / US_AFTER: 시장가 금지
|
||||
- 저유동 세션은 최우선 지정가 또는 IOC/FOK(가격 보호 한도 포함)만 허용
|
||||
- 주문 실패 시 재호가 간격/횟수 상한을 두고, 초과 시 주문 철회
|
||||
|
||||
==================================================
|
||||
5) 포지션/잔고 통합 규칙 (KIS 특성 반영)
|
||||
==================================================
|
||||
문제:
|
||||
- KRX/NXT 잔고 조회가 venue 단위로 분리되거나 반영 지연 가능
|
||||
|
||||
규칙:
|
||||
- 종목 식별은 동일 종목코드(또는 ISIN) 기준 통합 포지션으로 관리
|
||||
- 다만 주문 가능 수량은 venue별 API 응답을 최종 기준으로 사용
|
||||
- 매도 가능 수량 검증은 주문 직전 재조회로 확정
|
||||
|
||||
==================================================
|
||||
6) 마감 강제청산/오버나잇 예외 규칙
|
||||
==================================================
|
||||
기본 원칙:
|
||||
- 모든 포지션에 대해 세션 종료 10분 전 REDUCE_ALL 검토
|
||||
|
||||
오버나잇 예외 허용 (모두 충족 시):
|
||||
1) ARMED 상태 (예: +2.8% 이상)
|
||||
2) 모델 하락확률 < 0.30
|
||||
3) 포트폴리오 현금 비중 >= 50%
|
||||
|
||||
갭 리스크 통제:
|
||||
- 다음 개장 시 hard stop를 시가 기준으로 재산정
|
||||
- 조건 위반 시 즉시 청산 우선
|
||||
|
||||
Kill Switch 연동:
|
||||
- MDD/실패율 임계치 초과 시 "미체결 전량 취소 -> 신규 주문 차단 -> 리스크 축소" 순서 강제
|
||||
|
||||
==================================================
|
||||
7) 데이터 저장/용량 정책
|
||||
==================================================
|
||||
핵심 테이블(계획):
|
||||
- feature_snapshots
|
||||
- position_states
|
||||
- model_predictions
|
||||
|
||||
저장 규칙:
|
||||
- feature_hash 기반 중복 제거
|
||||
- 가격 변화가 작아도 session_id 변경 시 강제 스냅샷
|
||||
- 월 단위 DB 로테이션 권장 (예: trading_YYYY_MM.db)
|
||||
|
||||
==================================================
|
||||
8) 환율/정산 리스크 정책 (US 필수)
|
||||
==================================================
|
||||
원칙:
|
||||
- USD 노출은 전략 손익과 별도로 환율 손익을 분리 추적
|
||||
- 원화 주문 서비스 사용 시 가환율 체결/익일 정산 리스크를 예수금 규칙에 반영
|
||||
|
||||
운영 규칙:
|
||||
- 환전 시점 정책(사전 환전/수시 환전)을 고정하고 로그에 기록
|
||||
- 최소 USD 버퍼와 KRW 버퍼를 각각 설정해 주문 가능금 부족 리스크 완화
|
||||
- 환율 급변 구간에는 포지션 한도 축소 또는 신규 진입 제한
|
||||
|
||||
==================================================
|
||||
9) v3 실험 매트릭스 (우선 3선)
|
||||
==================================================
|
||||
EXP-KR-01:
|
||||
- 시장: KR
|
||||
- 포커스: NXT 야간 특화
|
||||
- 제안: time barrier 확장(예: 48 bars 상당), p_thresh 상향(0.65)
|
||||
|
||||
EXP-US-01:
|
||||
- 시장: US
|
||||
- 포커스: 21h 준연속 운용
|
||||
- 제안: time barrier 확장(예: 80 bars 상당), atr_k 상향(2.5)
|
||||
|
||||
EXP-HYB-01:
|
||||
- 시장: Global
|
||||
- 포커스: KR 낮 + US 밤 연계
|
||||
- 제안: 레짐 기반 자산배분 자동조절
|
||||
|
||||
==================================================
|
||||
10) 코드 착수 전 최종 확정 체크
|
||||
==================================================
|
||||
1) 세션별 공식 캘린더 소스/우선순위
|
||||
2) 세션별 슬리피지/비용 테이블 수치
|
||||
3) 시장별 max_holding_minutes
|
||||
4) 마감 강제청산 예외 조건 임계값
|
||||
5) 블랙아웃(점검/장애) 시간대와 주문 큐 처리 규칙
|
||||
6) 세션별 허용 주문 유형(시장가 허용 범위 포함)
|
||||
7) 환전/정산 정책 및 통화 버퍼 임계값
|
||||
|
||||
모든 항목 확정 후 Step 1 구현(코드)로 이동.
|
||||
|
||||
끝.
|
||||
Reference in New Issue
Block a user