[BE-01] autotrading 도메인 계약 정의
작업 내용 (설계 의도)
변경 사항
후행 티켓 전부가 참조하는 공통 계약을 한 티켓에 모은다. 근거: TDD “인터페이스 시그니처”.
쪼개면 후행이 서로를 기다려 직렬 사슬이 되므로 연관 병목을 하나로 묶는다. 구현체는 만들지 않는다 — 계약만 확정해 wave 2의 8개 티켓이 동시에 열리게 하는 것이 목적이다.
- enum:
ExecutionMode(PAPER/LIVE),RiskTier(T1/T2/T3 — 단계별 종목당 비율·보유 상한·일일 손실 한도율을 enum 자체가 보유),OrderProposalStatus,TradingHaltReason,SellReason - 값 객체:
TradeCandidate(신호 후보 — 다른 도메인 타입을 담지 않는다),RiskDecision,OcoOrderSpec - Gateway interface:
ConditionalOrderGateway+OcoOrderSpec(order 도메인 신규 파일 — 기존OrderGateway.kt는 수정하지 않는다)
분해 정정 (2026-08-27, 구현 중 발견): 최초 분해는 Repository interface 5종·
AutoTradingAlertGateway·TradeExecutor를 이 티켓에 넣었으나, 셋 다 시그니처가 Entity를 참조한다 (load(): AutoTradingPolicy,notifyExecuted(fill: TradingFill),buy(proposal: OrderProposal)). Entity는 wave 2(BE-0205) 산출물이므로 BE-01만으로는 컴파일되지 않는다. 따라서 Entity를 참조하는 계약은 각 애그리게이트 티켓으로 이관한다 — Repository interface는 BE-0205가 자기 Entity와 함께,AutoTradingAlertGateway는 BE-09가,TradeExecutor는 BE-10이 정의한다. BE-01은 Entity 의존이 없는 계약만 소유한다. Wave 구조와 Single Writer 검증에는 영향이 없다 (파일 교집합 여전히 ∅).
공용 테스트 헬퍼 선점 소유
이 티켓이 아래를 소유한다. 후행 wave는 소비만 하고 새로 만들지 않는다. 필요한 헬퍼가 생기면 직접 만들지 말고 이 티켓으로 되돌려 보고한다.
| 헬퍼 | 판정 기준·근거 |
|---|---|
TradeCandidateFixture | 등급 경계값(0.5 매수유망 / 0.15 상승주목)을 그대로 쓴다 — ml/app/signal.py#classify가 기준 |
AutoTradingPolicyFixture | 모드×단계×킬스위치 조합. 기본값은 PAPER·T1·off — Entity 의존이라 BE-02 가 생성(소유는 계약 티켓 규칙에 따라 여기에 기록) |
CostModelParityFixture | ml/app/cost_model.py와 교차 검증할 공통 입력·기대값 표. 수수료 0.015%·매도세 0.18%·슬리피지 0.1% 기준 — 타입 의존이라 BE-06 이 생성 |
의존
- 없음 (선행 wave)
다이어그램
처리 흐름
해당 없음 — interface·enum·값 객체 정의만 하며 실행 흐름이 없다.
클래스 의존
flowchart LR Tier[RiskTier] --> Decision[RiskDecision] Candidate[TradeCandidate] --> Decision Executor[TradeExecutor interface] Repos[Repository interface 5종] Alert[AutoTradingAlertGateway] Oco[ConditionalOrderGateway] --> Spec[OcoOrderSpec]
테스트 케이스
RiskTier.T1이 종목당 10%·보유 5종목·일일 한도 2%를 반환한다.RiskTier.T3가 종목당 20%·보유 4종목·일일 한도 3%를 반환한다.RiskTier.T1.previous()가 최하 단계이므로T1을 그대로 반환한다(경계값).RiskTier.T3.next()가 최상 단계이므로T3을 그대로 반환한다(경계값).TradeCandidate가 다른 도메인 패키지 타입을 필드로 갖지 않는다(순수성 검증).