# Milestone: Backtest Multi-Timeframe Coverage ## 위치 - Roadmap: `agent-roadmap/ROADMAP.md` - Phase: `agent-roadmap/phase/backtest-loop/PHASE.md` ## 목표 월봉, 일봉, 분봉을 ALT 백테스트의 기본 분석 timeframe으로 정리한다. 현재 일봉 중심으로 닫힌 data import/store/backtest/headless smoke를 multi-timeframe 기준으로 확장하고, 지원하지 않는 provider/timeframe 조합은 조용히 실패하지 않고 명시적으로 거부하거나 대체 생성 경로를 남긴다. ## 상태 [계획] ## 승격 조건 - 없음 ## 구현 잠금 - 상태: 해제 - SDD: 필요 - SDD 문서: `agent-roadmap/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md` - SDD 사유: timeframe contract/proto, provider capability, DB 저장 key, aggregation provenance, backtest fill policy와 field smoke가 함께 바뀐다. - 잠금 해제 조건: 아래 체크리스트 - [x] SDD 잠금이 해제되어 있다. - [x] SDD 사용자 리뷰가 없거나 승인/해결되었다. - [x] Acceptance Scenario가 Milestone 기능 Task와 연결되어 있다. - [x] Evidence Map이 plan의 `Spec Targets`와 완료 시 `Spec Completion`으로 검증 가능하게 연결되어 있다. - 결정 필요: 없음 - 결정 반영: - D01: 분봉 1차 import/backtest 검증 baseline은 `1m`/`5m`를 함께 포함한다. - D02: 월봉 source of truth는 provider 월봉과 병행하지 않고 일봉 기반 deterministic aggregation 하나로 둔다. ## 범위 - contracts/proto, Go domain, CLI scenario vocabulary에서 월봉, 일봉, 분봉 timeframe을 백테스트 기본 분석 단위로 정리 - provider capability matrix가 timeframe별 지원 여부와 거부 사유를 표현하도록 보강 - 분봉 provider import 또는 명시적 미지원 거부 경계 - 월봉 일봉 기반 deterministic aggregation 경계와 provenance 기록 - `bars` 저장/조회, freshness/gap/duplicate/readiness 확인이 월/일/분 timeframe을 구분해 동작하도록 검증 - backtest run selector, engine input, result handoff가 월/일/분봉 시나리오를 headless로 검증할 수 있게 하는 흐름 ## 기능 ### Epic: [timeframe-contract] Timeframe contract 월봉, 일봉, 분봉을 사용자 입력, contracts, domain, CLI output에서 같은 의미로 다루게 한다. - [ ] [timeframe-vocab] proto/domain/CLI scenario에 monthly/daily/minute timeframe vocabulary를 정리하고 기존 `daily`, `minute_1`, `minute_5` 매핑과 호환성을 유지한다. 검증: contracts/domain/CLI mapping test가 monthly와 minute baseline을 포함한다. - [ ] [capability-matrix] provider, market, venue, asset type, timeframe별 지원/미지원 사유를 capability matrix로 표현한다. 검증: KIS KR/US daily, minute, monthly 조합의 accepted/rejected case가 명시적으로 통과한다. ### Epic: [data-coverage] Multi-timeframe data coverage 백테스트 입력 데이터가 월/일/분 timeframe별로 수집 또는 생성되고 저장될 수 있게 한다. - [ ] [minute-ingest] 분봉 provider import 경계를 추가하거나, provider 미지원 조합을 typed error로 거부한다. 검증: minute import success 또는 rejected fixture가 stable text/JSONL로 남는다. - [ ] [monthly-bars] 월봉을 일봉 aggregation으로 생성하고, 생성 기준과 provenance를 저장/출력한다. 검증: 동일 daily fixture에서 deterministic monthly OHLCV가 생성된다. - [ ] [store-query] `bars` 저장/조회와 backtest bar source가 timeframe별 key를 유지하고 월/일/분 데이터를 섞지 않는다. 검증: 동일 instrument의 monthly/daily/minute bars가 독립 조회된다. ### Epic: [backtest-semantics] Backtest semantics 전략 실행과 결과 handoff가 timeframe 차이를 명시적으로 다룬다. - [ ] [run-selector] backtest scenario matrix가 monthly/daily/minute timeframe을 표현하고 각 timeframe의 입력 기간을 검증한다. 검증: matrix expand test와 dry-run validation이 monthly/daily/minute run id를 생성한다. - [ ] [fill-policy] daily 전용 fill policy를 multi-timeframe 용어로 재정리하고, timeframe별 체결/next-bar 규칙을 명시한다. 검증: fixture backtest가 monthly/daily/minute 각각 deterministic result를 낸다. - [ ] [freshness-readiness] collection freshness와 readiness output이 월/일/분 timeframe별 latest/missing/gap/duplicate 상태를 구분한다. 검증: monthly/daily/minute freshness fixture가 stable text/JSONL로 구분된다. ## 완료 리뷰 - 상태: 없음 - 요청일: 없음 - 완료 근거: 없음 - 리뷰 필요: - [ ] 사용자가 완료 결과를 확인했다 - [ ] archive 이동을 승인했다 - 리뷰 코멘트: 없음 ## 범위 제외 - multi-timeframe 전략 DSL 또는 고급 factor language 전체 - tick data, order book, 실시간 streaming bar construction - Flutter 운영 화면 구현 - 실거래 order routing 또는 broker execution 변경 - 외부 provider credential 값이나 개인 secret 문서화 ## 작업 컨텍스트 - 관련 경로: `packages/contracts/proto/alt/v1/`, `packages/domain/market/`, `packages/domain/backtest/`, `services/worker/`, `services/api/`, `apps/cli/`, `agent-test/local/` - 표준선(선택): 일봉 MVP는 이미 완료된 기준선이며, multi-timeframe은 기존 일봉 경로를 깨지 않고 additive하게 확장한다. - 표준선(선택): provider가 직접 제공하지 않는 timeframe은 deterministic aggregation 또는 명시적 typed rejection 중 하나를 선택해 조용한 fallback을 피한다. - 표준선(선택): 백테스트는 먼저 단일 timeframe run을 확실히 닫고, 여러 timeframe을 동시에 참조하는 전략은 후속 Milestone으로 미룬다. - 선행 작업: Backtest Data Collection Infrastructure, Backtest Scenario Automation - 후속 작업: Scheduled Market Data Refresh의 multi-timeframe cadence 보강, Multi-Timeframe Strategy Composition 후보 - 결정: 분봉 1차 import/backtest 검증 baseline은 `1m`/`5m`를 함께 포함하고, 월봉 source of truth는 일봉 기반 deterministic aggregation 하나로 둔다.