본문으로 건너뛰기

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
컬럼설명
심볼인덱스/매핑 키
timeframe1m / 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 AAPLAlpaca 과거 일봉 적재

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"
}
]
}

백테스트와의 관계

백테스트는 이 테이블을 직접 조회합니다. 다음 조건을 충족해야 정상 실행됩니다.

  1. 요청한 symbol이 적재되어 있을 것
  2. 요청 timeframe이 일치할 것 (없으면 422)
  3. 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 부하 증가에 주의하세요.

관련 페이지