[BE-13] RunAutoTradingCycleUseCase
작업 내용 (설계 의도)
변경 사항
자동매매 사이클의 진입 UseCase를 만든다. 크로스 컨텍스트 조합이 이 티켓의 핵심 책임이다 — signal·stock·account 도메인의 데이터를 autotrading이 직접 읽지 않고, application이 소유 도메인 DomainService를 호출해 받은 뒤 매퍼가 TradeCandidate로 변환한다(no-crosscontext-raw-read).
- 신호:
signalDomainService에서 최신 스냅샷 조회 - 현재가:
stockDomainService (stock_price_cache) - 계좌:
accountDomainService (LIVE 모드에서만) - 유니버스 필터: KRX 6자리 숫자 심볼만 통과시킨다(PRD FR-16 — 미국 82종목 배제)
- 장 운영일·시간 확인: 휴장·시간 외에는 주문을 만들지 않고, 장 마감 5분 전부터 신규 진입을 중단한다
execute()는 10줄 이내로 유지하고 비즈니스 로직을 담지 않는다. 사이클 중복 실행은 trading_days 행 비관적 락으로 막는다.
의존
- BE-11 (AutoTradingDomainService)
다이어그램
처리 흐름
sequenceDiagram participant UC as RunAutoTradingCycleUseCase participant Sig as signal DomainService participant Stk as stock DomainService participant Map as TradeCandidateMapper participant Svc as AutoTradingDomainService UC->>Sig: 최신 시그널 스냅샷 UC->>Stk: 현재가 조회 UC->>Map: 매핑 (KRX 필터) Map-->>UC: List of TradeCandidate UC->>Svc: runCycle(candidates)
클래스 의존
flowchart LR UC[RunAutoTradingCycleUseCase] --> Sig[signal DomainService] UC --> Stk[stock DomainService] UC --> Map[TradeCandidateMapper] UC --> Svc[AutoTradingDomainService] Map --> Cand[TradeCandidate]
테스트 케이스
- 신호 스냅샷이
TradeCandidate로 변환돼 도메인 서비스에 전달된다. - 미국 종목(6자리 숫자가 아닌 심볼)이 후보에서 제외된다.
- 휴장일에는 후보를 만들지 않는다.
- 장 마감 5분 전 이후에는 신규 진입 후보를 만들지 않는다(경계값).
- 이전 사이클이 진행 중이면 즉시 반환한다(중복 실행 방지).
execute()가 다른 도메인의 Repository를 직접 참조하지 않는다(레이어 검증).