Backtest 탭
web/src/components/equity/BacktestForm.tsx 컴포넌트로 구현된, 미국·한국 주식 백테스트 전용 화면입니다. (BTC 백테스트는 별도 페이지 → Backtest)
📸 Equity 백테스트 탭 (추후 자동 캡처 예정)
입력 폼
7개 필드의 그리드 폼입니다.
| 필드 | 기본값 | 설명 |
|---|---|---|
| Asset class | 페이지 필터 따라감 (us_equity / kr_equity) | KR/US 양자택일 |
| Symbol | AAPL | SymbolSearch 자동완성 + 칩 표시 |
| Strategy | ma_golden_cross | MA Golden Cross / Volume Breakout / Mean Reversion |
| Start date | 2023-01-01 | ISO 날짜 |
| End date | 2025-01-01 | ISO 날짜 |
| Initial capital | 10000 | 통화는 자산군에 따름 |
| Commission profile | alpaca_zero (US) / kis_default (KR) | 자산군별 풀다운 |
자산군이 변경되면 commission profile 옵션이 즉시 갱신됩니다 (useEffect 동기화).
전략 카탈로그
3개 기본 전략이 사전 등록되어 있습니다.
| 전략 ID | 라벨 | 설명 |
|---|---|---|
ma_golden_cross | MA Golden Cross | 단기/장기 이동평균 교차 |
volume_breakout | Volume Breakout | 거래량 폭발 + 고점 돌파 |
mean_reversion | Mean Reversion | 볼린저 밴드 평균 회귀 |
전략별 파라미터 조정 UI는 후속 작업입니다.
Run backtest 버튼
클릭 시 다음 페이로드로 POST /api/equity/backtest 호출:
{
"asset_class": "us_equity",
"exchange": "alpaca",
"symbol": "AAPL",
"strategy": "ma_golden_cross",
"timeframe": "1d",
"start_date": "2023-01-01",
"end_date": "2025-01-01",
"initial_capital": 10000,
"currency": "USD",
"commission_profile": "alpaca_zero",
"slippage_bps": 5
}
처리 시간은 보통 2–10초이며, 결과는 폼 하단에 즉시 렌더링됩니다.
결과 카드 (6개 메트릭)
| 카드 | 값 |
|---|---|
| Total Return | result.total_return (%) |
| Sharpe | result.sharpe_ratio |
| Max DD | result.max_drawdown (%) |
| Win Rate | result.win_rate (%) |
| Profit Factor | result.profit_factor |
| Trades | result.total_trades |
아래에 EquityCurveChart (TradingView Lightweight)가 equity_curve를 시계열로 그립니다.
API 호출 예시
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8000/api/equity/backtest \
-d '{
"asset_class": "us_equity",
"exchange": "alpaca",
"symbol": "AAPL",
"strategy": "ma_golden_cross",
"timeframe": "1d",
"start_date": "2023-01-01",
"end_date": "2025-01-01",
"initial_capital": 10000,
"currency": "USD",
"commission_profile": "alpaca_zero",
"slippage_bps": 5
}'
자주 묻는 질문
Q. KR Equity 결과가 이상합니다.
A. commission_profile=kis_default이 선택돼야 KIS 수수료/세금이 정확히 반영됩니다. 자산군 변경 후 폼이 동기화 됐는지 확인하세요.
Q. Slippage는 조정 가능한가요?
A. 폼 UI는 5bps 고정이지만 API는 slippage_bps 파라미터를 받습니다. 직접 호출 시 변경 가능합니다.
Q. Equity curve가 끊어져 보입니다.
A. 종목의 휴장일/주말 구간에서 기존 equity가 carry-forward 됩니다. 정상 동작입니다.