From a7c108f4ebc09b8ea703441ea965ba042aba5d81 Mon Sep 17 00:00:00 2001 From: toki Date: Wed, 17 Jun 2026 15:03:49 +0900 Subject: [PATCH] add backtest multi timeframe coverage milestone and update phase docs --- agent-roadmap/phase/backtest-loop/PHASE.md | 3 + .../backtest-multi-timeframe-coverage.md | 93 +++++++++++++++++++ .../scheduled-market-data-refresh.md | 4 +- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md diff --git a/agent-roadmap/phase/backtest-loop/PHASE.md b/agent-roadmap/phase/backtest-loop/PHASE.md index 33491ed..ad1701c 100644 --- a/agent-roadmap/phase/backtest-loop/PHASE.md +++ b/agent-roadmap/phase/backtest-loop/PHASE.md @@ -25,6 +25,9 @@ - [완료] Backtest Scenario Automation - 경로: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-scenario-automation.md` - 요약: 선택 universe와 기간 조합을 반복 가능한 backtest scenario로 실행하고, 원격 runner에서 migration/runtime/secret 주입/결과 handoff를 안정화한다. +- [계획] Backtest Multi-Timeframe Coverage + - 경로: `agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md` + - 요약: 월봉, 일봉, 분봉을 백테스트 기본 분석 timeframe으로 정리하고 data import/store/backtest/freshness 검증을 맞춘다. - [계획] Scheduled Market Data Refresh - 경로: `agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md` - 요약: 원격 서버에서 선택 universe의 market data import를 주기 실행하고 freshness/backfill/readiness를 headless로 확인한다. diff --git a/agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md b/agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md new file mode 100644 index 0000000..7b52696 --- /dev/null +++ b/agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md @@ -0,0 +1,93 @@ +# 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가 함께 바뀐다. +- 잠금 해제 조건: 아래 체크리스트 + - [ ] SDD 잠금이 해제되어 있다. + - [ ] SDD 사용자 리뷰가 없거나 승인/해결되었다. +- 결정 필요: 아래 체크리스트 + - [ ] 분봉 기본 단위를 `1m`만으로 시작할지, 기존 vocabulary처럼 `1m`/`5m`를 함께 기본 지원할지 결정한다. + - [ ] 월봉을 provider 원천 데이터로 우선 받을지, 일봉에서 deterministic aggregation으로 생성할지 기본 우선순위를 결정한다. + +## 범위 + +- contracts/proto, Go domain, CLI scenario vocabulary에서 월봉, 일봉, 분봉 timeframe을 백테스트 기본 분석 단위로 정리 +- provider capability matrix가 timeframe별 지원 여부와 거부 사유를 표현하도록 보강 +- 분봉 provider import 또는 명시적 미지원 거부 경계 +- 월봉 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] 월봉을 provider 원천 데이터 또는 일봉 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 후보 +- 확인 필요: 분봉 기본 단위와 월봉 source-of-truth 우선순위는 SDD에서 사용자 결정으로 확정한다. diff --git a/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md b/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md index 514eee6..569c1d4 100644 --- a/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md +++ b/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md @@ -68,7 +68,7 @@ - Flutter 운영 화면 구현 - 새 strategy 판단 로직 또는 투자 의사결정 알고리즘 설계 - paper/live order routing과 실거래 adapter 변경 -- 월봉/분봉 provider import와 backtest engine 지원 확장 전체. 현재 scheduler는 지원되는 import/backtest timeframe을 주기 실행 대상으로 삼고, 월봉/분봉 확대는 별도 multi-timeframe Milestone에서 다룬다. +- 월봉/분봉 provider import와 backtest engine 지원 확장 전체. 현재 scheduler는 지원되는 import/backtest timeframe을 주기 실행 대상으로 삼고, 월봉/분봉 확대는 `Backtest Multi-Timeframe Coverage`에서 다룬다. - 외부 provider credential 값이나 개인 secret 문서화 ## 작업 컨텍스트 @@ -78,5 +78,5 @@ - 표준선(선택): scheduled import는 provider 호출과 DB upsert를 idempotent하게 유지하고, 동일 tick 재실행이 중복 row를 만들지 않아야 한다. - 표준선(선택): scheduler config에는 secret 값을 넣지 않고, 원격 runtime env/SOPS 주입 경계를 따른다. - 선행 작업: Backtest Data Collection Infrastructure, Backtest Scenario Automation -- 후속 작업: Backtest Multi-Timeframe Coverage 후보, Data Quality Monitoring 후보 +- 후속 작업: Backtest Multi-Timeframe Coverage, Data Quality Monitoring 후보 - 확인 필요: SDD 작성 시 scheduler를 worker 내장 loop, OS/systemd timer, external cron 중 어디까지 1차 구현으로 둘지 확정한다.