# Milestone: Backtest Engine Baseline ## 위치 - Roadmap: `agent-roadmap/ROADMAP.md` - Phase: `agent-roadmap/phase/backtest-loop/PHASE.md` ## 목표 정규화된 일봉 데이터를 사용해 전략 실행, portfolio state, result summary가 재현 가능한 backtest loop를 만든다. 이 milestone은 백테스트 기반을 ALT 확장의 중심축으로 고정한다. ## 상태 [완료] ## 구현 잠금 - 상태: 해제 - 결정 필요: 없음 ## 범위 - daily bar 기반 strategy execution skeleton - deterministic backtest run lifecycle - starting cash, ending equity, trades/positions summary - result persistence and query - fixture data 기반 검증 ## 기능 ### Epic: [backtest-engine] Deterministic backtest engine 일봉 기반 전략 실행, portfolio state, result 저장과 fixture 검증 흐름을 묶는다. - [x] [run-lifecycle] backtest run의 pending/running/succeeded/failed/canceled lifecycle이 있다. 검증: worker가 backtest 실행을 소유하고 API는 실행 요청/조회 경계만 담당한다. - [x] [strategy-port] strategy를 engine에 주입할 port 또는 interface가 있다. - [x] [portfolio-state] cash, position, equity를 계산하는 최소 portfolio state가 있다. - [x] [result-store] backtest result가 저장되고 조회된다. 검증: 결과가 contracts/client에서 조회 가능한 형태로 연결될 수 있다. - [x] [fixture-test] fixture daily bars로 deterministic test가 통과한다. 검증: 동일한 fixture와 strategy 입력으로 동일한 result가 나오고 `bin/test`와 `bin/lint`가 통과한다. ## 완료 리뷰 - 상태: 승인됨 - 요청일: 2026-05-30 - 완료 근거: 모든 기능 Task와 검증 조건이 충족되었다. worker backtest handler가 pending/running/succeeded/failed/canceled 전이를 소유하고, contracts/client에는 backtest 요청/조회 payload와 parser boundary가 있다. `bin/test`와 `bin/lint`가 통과했다. - 리뷰 필요: - [x] 사용자가 완료 결과를 확인했다 - [x] archive 이동을 승인했다 - 리뷰 코멘트: 2026-05-30 사용자 요청으로 완료 처리하고 archive로 이동한다. ## 범위 제외 - 실시간 전략 실행 - paper/live order routing - 고급 리스크 모델 - 고급 성과 분석 지표 전체 ## 작업 컨텍스트 - 관련 경로: `packages/domain/backtest/`, `services/worker/`, `packages/contracts/proto/alt/v1/backtest.proto` - 표준선(선택): Go는 Hexagonal Architecture, light CQRS, domain event 표현을 기본 설계 프레임으로 삼는다. - 선행 작업: Korea Daily Data Foundation - 후속 작업: Backtest Analysis Surface - 진행 근거(2026-05-30): `[strategy-port]`, `[portfolio-state]`는 `packages/domain/backtest/types.go`, `packages/domain/backtest/types_test.go`, `go test ./packages/domain/...`로 확인했다. - 진행 근거(2026-05-30): `[run-lifecycle]`은 `services/worker/internal/jobs/backtest_jobs.go`, `services/worker/internal/jobs/backtest_jobs_test.go`, `services/api/internal/contracts/parser_map.go`, `packages/contracts/proto/alt/v1/backtest.proto`, `go test ./services/worker/internal/jobs/...`로 확인했다. - 진행 근거(2026-05-30): `[result-store]`는 `services/worker/internal/storage/ports.go`, `services/worker/internal/storage/postgres/store.go`, `services/worker/internal/storage/postgres/mapping_test.go`, `packages/contracts/proto/alt/v1/backtest.proto`, `apps/client/lib/src/contracts/alt_contracts.dart`로 확인했다. - 진행 근거(2026-05-30): `[fixture-test]`는 `services/worker/internal/backtest/fixture_test.go`, `services/worker/internal/backtest/engine_test.go`, `bin/test`, `bin/lint`로 확인했다. - 확인 필요: 없음