# 02. 알고리즘 리팩터링·고도화 기준 ## 1. 생산 모델 경계 생산 엔진은 수익률 최대화 함수가 아니라 다음의 순서가 보존된 **결정 상태기계**다. ```text 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을 분리할 수 없다. 다음 모델로 전환한다. ```text 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은 반드시 다음을 포함한다. 1. Policy ID와 변경 사유 2. Characterization/Golden diff 3. Frozen OOS와 cost×2 결과 4. market/asset/regime별 영향 5. false-exit·reentry·ES 영향 6. ModelCard와 rollback 기준 7. Quant/Risk 승인