5dfb8f3e12
Reorganize documentation following AGENTS.md v16.0 governance (traceability, reproducibility): Structure changes: - CURRENT/ (new) ├─ 00~08.md (v16.0 standards, renamed for clarity) └─ CATALOGS/ (9 CSV files: WBS, decision log, debt register, matrices, catalogs) - LEGACY/ (new, read-only archives) ├─ v11/ (original baseline + hardening analysis) ├─ v12~v15/ (.gitkeep + README for future archiving) - DECISIONS/ (new, ready for ADR usage) - TEMPLATES/ (existing, unchanged) Deletions (consolidated into CURRENT/): - v16_0/ folder (files migrated) - hardening/ folder (contents → LEGACY/v11/) - Root-level v11 files (00~07.md, CSV) Renames (for clarity): - 00_EXECUTIVE_REFERENCE_IMPLEMENTATION.md → 00_EXECUTIVE.md - 01_BRUTAL_ROLE_AUDIT.md → 01_ROLE_AUDIT.md - 02_FRONTEND_ADAPTER_CRUD_STANDARD.md → 02_FE_ADAPTER.md - 03_BACKEND_DATA_SCHEDULER_STANDARD.md → 03_BE_DATA.md - 04_ALGORITHM_MODEL_GOVERNANCE.md → 04_ALGORITHM.md - 05_PROCESS_VIBE_DEBT_CONTROL.md → 05_PROCESS_VIBE_DEBT.md - 06_VALIDATION_TRUTH.md → 06_VALIDATION.md - 07_PACKAGE_ATTACHMENT_POLICY.md → 07_PACKAGE_POLICY.md Updates: - docs/INDEX.md (complete rewrite with navigation) - LEGACY/ folders with README + .gitkeep Benefits: ✅ Clear version management (v16.0 is active, v11~v15 read-only) ✅ No version mixing in root ✅ CURRENT/ as single point of reference for active docs ✅ CATALOGS/ consolidates all data matrices ✅ LEGACY/ preserves history without clutter ✅ Traceability: decision log, tech debt, WBS all linked ✅ DECISIONS/ ready for ADR pattern (future use) Sync with root: - CLAUDE.md references: docs/CURRENT/, docs/INDEX.md ✅ - AGENTS.md references: docs/CURRENT/, traceability ✅ - README.md: Document guide links updated ✅ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
3.1 KiB
3.1 KiB
02. 알고리즘 리팩터링·고도화 기준
1. 생산 모델 경계
생산 엔진은 수익률 최대화 함수가 아니라 다음의 순서가 보존된 결정 상태기계다.
HARD_IMPAIRMENT
→ PORTFOLIO_SURVIVAL
→ DYNAMIC_PROFIT_FLOOR
→ CONCENTRATION_LIQUIDITY
→ OPPORTUNITY_COST
→ REENTRY_OPTION
상위 정책이 행동을 결정하면 하위 점수는 이를 상쇄하지 못한다. 모든 정책은 PolicyId, 입력 EvidenceId, ModelVersion, ConfigVersion, 허용오차와 반대증거를 남긴다.
2. Scalar Position 제거
기존 position: float 하나로는 Core와 Tactical, 기존 lot과 재진입 lot을 분리할 수 없다. 다음 모델로 전환한다.
Portfolio
└─ PositionLot (원가·수량·개설/종료·세금 lot)
└─ CycleState (Entry, Peak, Floor, BreachCount, LastSell, LastBuy)
└─ ProtectionState / ReentryWatch
- 부분매도는 특정 Lot/Cycle에 귀속된다.
- 재진입은 새
CycleId와 새 Lot을 만든다. - Strategic Core는 정책상 보호 대상 비중과 Tactical 비중을 분리한다.
- Hard Impairment는 자동 재진입을 금지한다.
3. Functional Core / Imperative Shell
Pure Core
SellPolicyChain.Evaluate(input)ReentryPolicy.Evaluate(input)PortfolioConstraintPolicy.Evaluate(input)ExpectedUtilityCalculator.Calculate(input)
Imperative Shell
- PIT data query
- transaction, Dapper SQL
- EvidenceSnapshot 저장
- Outbox 발행
- Hangfire schedule/retry
- SignalR/Telegram 통지
4. 기대효용 계산 분해
한 개의 opaque score 대신 구성요소를 별도로 저장한다.
- Hold expected return distribution P10/P50/P90
- ES95와 영구가치훼손 확률×LGD
- marginal portfolio risk
- liquidity/slippage/tax/FX
- replacement lower confidence edge
- reentry option loss
Opportunity sell은 순우위의 신뢰하단이 0을 넘고 IPS·유동성·세금 제약을 통과할 때만 허용한다.
5. 실행 시뮬레이션
- 결정: 시장 종가 후
- 주문의도: 다음 거래가능 세션
- Fill: open/VWAP/limit 모델 중 승인된 시나리오
- 부분체결, gap, ADV participation, spread, FX, 세금, 수수료를 별도 이벤트로 기록
- SignalDecision과 Fill은 분리해 추천 성과·실행 성과·고객 행동을 attribution한다.
6. 일평가
일평가는 단타 적중률이 아니다.
| 영역 | 핵심 |
|---|---|
| 운영 무결성 | duplicate, lookahead, DQ hold, 미승인 공개, reconciliation |
| 예측 | coverage, calibration, Brier/log loss |
| 매도 | ES/MDD 감소, permanent loss 회피, gain capture, false-exit cost |
| 재진입 | capture, delay cost, duplicate stage, expiry |
| 비용후 효용 | 20/63/126/252 거래일 |
| 모델리스크 | PBO, DSR, parameter stability, regime drift |
7. 변경 규칙
임계값·수식·우선순위를 바꾸는 PR은 반드시 다음을 포함한다.
- Policy ID와 변경 사유
- Characterization/Golden diff
- Frozen OOS와 cost×2 결과
- market/asset/regime별 영향
- false-exit·reentry·ES 영향
- ModelCard와 rollback 기준
- Quant/Risk 승인