sequenceDiagram
participant C as Client
participant M as main.py
participant BT as backtest.py
participant Toss as 토스 시세 API
C->>M: GET /backtest/{symbol}?horizon=5&lookback=120
M->>Toss: 종가 데이터 lookback일 조회
Toss-->>M: prices[]
M->>BT: run_backtest(prices, horizon, warmup=20)
BT-->>M: BacktestResult
M-->>C: {samples, win_rate, avg_return, edge, note}
클래스 의존
flowchart LR
subgraph Presentation["Presentation"]
router["main.py\n/backtest/{symbol} 라우터"]
end
subgraph Domain["ML 도메인"]
bt["backtest.py\nrun_backtest()"]
sig["signal.py\nscore()"]
end
subgraph External["External"]
toss["토스 캔들 API"]
end
router --> bt
bt --> sig
router --> toss
테스트 케이스
horizon=5이면 수익률이 5일 후 종가 기준으로 계산된다.
lookback=60이면 60일 데이터만 사용되어 samples가 줄어든다.
응답에 samples·overall_win_rate·signal_win_rate·edge·note 필드가 모두 포함된다.
lookback이 warmup+horizon보다 작으면 samples=0이 반환되고 에러가 발생하지 않는다.