OHLCV 시계열 커버리지
Data 페이지의 Live Database (TimescaleDB) 카드는 ohlcv_records 하이퍼테이블의 적재 상태를 30초 주기로 폴링해 보여줍니다.
📸 Live DB 카드 (추후 자동 캡처 예정)
카드 구성
| 영역 | 데이터 |
|---|---|
| 상단 좌 | OHLCV total rows (모든 timeframe 합산) |
| 상단 우 | Trades total rows |
| 본문 | 심볼/timeframe별 행 (rows + first_ts → last_ts) |
본문 행 형식
BTC/USDT [1h] 43,800 rows 2020-01-01 → 2025-04-26
ETH/USDT [1h] 43,800 rows 2020-01-01 → 2025-04-26
AAPL [1d] 2,100 rows 2017-01-01 → 2025-04-26
005930 [1d] 2,300 rows 2016-01-01 → 2025-04-26
| 컬럼 | 설명 |
|---|---|
| 심볼 | 인덱스/매핑 키 |
| timeframe | 1m / 5m / 15m / 1h / 4h / 1d |
| rows | 해당 timeframe 적재 row 수 |
| 기간 | 가장 오래된 ↔ 가장 최근 candle |
빈 상태
데이터가 전혀 없을 때 안내 메시지:
No OHLCV data yet — run fetch_history or start the bot
데이터 적재 명령
| 명령 | 용도 |
|---|---|
python scripts/fetch_history.py --symbol BTC/USDT --timeframe 1h --years 5 | 과거 OHLCV 적재 |
python -m src.main --mode paper | 봇 실행 시 실시간 OHLCV 자동 적재 |
python scripts/backfill_us.py --symbol AAPL | Alpaca 과거 일봉 적재 |
API 호출
curl -s -H "Authorization: Bearer $TOKEN" \
http://localhost:8000/api/data/db-stats
응답:
{
"ohlcv_total_rows": 256000,
"trades_total_rows": 312,
"ohlcv_by_timeframe": [
{
"symbol": "BTC/USDT",
"timeframe": "1h",
"rows": 43800,
"first_ts": "2020-01-01T00:00:00Z",
"last_ts": "2025-04-26T01:00:00Z"
}
]
}
백테스트와의 관계
백테스트는 이 테이블을 직접 조회합니다. 다음 조건을 충족해야 정상 실행됩니다.
- 요청한
symbol이 적재되어 있을 것 - 요청
timeframe이 일치할 것 (없으면 422) start_date ~ end_date가 first_ts ~ last_ts 안에 있을 것
자주 묻는 질문
Q. 1h 데이터로 5m 백테스트가 가능한가요?
A. 불가. 더 작은 timeframe은 따로 적재 필요. 큰 timeframe으로 downsample은 backtest 엔진이 자동 처리.
Q. UPSERT 충돌 에러가 나옵니다.
A. (symbol, timestamp, timeframe) 복합 unique constraint 위반입니다. duplicate 적재 시도 시 발생. 정상 흡수됩니다 (feedback_postgres_driver).
Q. 30초 주기가 너무 길어요.
A. 컴포넌트 prop으로 refetchInterval을 줄일 수 있지만, DB 부하 증가에 주의하세요.