캔들의 timestamp가 구간 시작인지 종료인지부터 확인해야 한다. Coinbase Exchange는 time을 bucket 시작 시각으로 정의하고 86,400초 일봉을 제공한다. UTC 00:00 시작 일봉은 한국시간 오전 9시에 열리므로 한국 달력의 자정 기준 하루와 다르다. 거래가 없는 구간이 누락되는지, 최신 봉이 아직 진행 중인지도 확인한다.
한 숫자가 봉의 시작인지 끝인지 먼저 찾는다
Coinbase Exchange candle 문서는 배열의 첫 항목 time을 bucket start time으로 명시한다. 뒤의 low, high, open, close, volume은 그 구간 안의 거래를 요약한다. timestamp가 2026-09-01T00:00:00Z이고 granularity가 86,400초라면 이 봉은 그 시각부터 다음 UTC 자정 직전까지를 뜻한다.
Binance 옵션 kline 문서는 open time과 close time을 별도 필드로 반환하고, kline이 open time으로 식별된다고 설명한다. 두 API의 배열 순서도 다르다. 숫자 여섯 개가 보인다는 이유로 Coinbase 순서를 Binance에 적용하면 low와 high뿐 아니라 시간 경계까지 잘못 읽을 수 있다.
캔들의 날짜는 라벨이 아니라 포함된 거래 구간의 경계다.
JOBCOIN 해설
UTC 일봉을 한국 달력으로 바꾸면 날짜가 갈린다
한국 표준시는 UTC보다 9시간 빠르다. UTC 9월 1일 00:00에 시작한 1일 봉은 한국시간 9월 1일 09:00부터 9월 2일 08:59:59까지를 담는다. 한국시간 9월 1일 00:00~24:00을 원한다면 UTC 전날 15:00부터 해당일 15:00 직전까지 원시 체결이나 더 짧은 봉을 다시 묶어야 한다.
표시 화면이 브라우저 현지 시간으로 라벨만 바꾸는지, 서버에서 봉 자체를 현지 자정 기준으로 재집계하는지도 구분한다. 라벨 변환은 OHLCV 값이 그대로지만 재집계는 두 UTC 일봉 일부를 잘라 합치므로 open, high, low, close, volume이 모두 달라질 수 있다.
같은 네 건의 체결도 경계에 따라 다른 봉이 된다
아래는 설명을 위한 가정이다. 실시간 가격을 나타내지 않는다. UTC 14:59와 15:01 체결은 UTC 자정 일봉에서는 같은 날짜에 들어가지만 한국 자정 기준 일봉에서는 서로 다른 날로 나뉜다.
| 봉 기준 | 시작 시각 | 종료 직전 | 한국 화면에서의 의미 |
|---|---|---|---|
| UTC 일봉 | 00:00 UTC | 다음 날 00:00 UTC | 09:00 KST에 날짜 전환 |
| 한국 자정 일봉 | 15:00 UTC 전날 | 15:00 UTC 당일 | 00:00 KST에 날짜 전환 |
| UTC 1시간봉 | 매시 00분 UTC | 다음 시각 직전 | KST에서도 분은 00분 |
| 5분봉 | 5분 배수 시작 | 다음 5분 직전 | 서버 anchor 규칙 확인 필요 |
빈 봉은 0 거래량 봉과 같지 않다
Coinbase는 tick이 없는 interval에는 데이터를 발행하지 않을 수 있다고 경고한다. 10:00 봉 다음이 10:02 봉이라고 해서 10:01 가격이 0이 된 것은 아니다. 분석 목적에 따라 직전 close를 open·high·low·close로 복사하고 volume만 0으로 채울 수 있지만, 이는 원본이 아니라 사용자가 만든 보간 규칙이라고 표시해야 한다.
누락 봉을 행 자체의 부재, API 호출 실패, 거래 중단과 구분하지 않으면 결과를 왜곡한다. 반환 최대치도 확인한다. Coinbase는 한 요청의 최대 캔들을 300개로 제한하고 요청 start보다 앞선 봉이 포함될 수 있다고 밝힌다. 페이지를 이어 붙인 뒤 timestamp 중복과 구간 누락을 검사한다.
- 문서에서 timestamp가 bucket 시작인지 종료인지 확인한다
- granularity를 초 단위로 바꾸고 예상 경계 목록을 만든다
- 응답을 UTC로 보관한 뒤 표시 단계에서 시간대를 변환한다
- 빈 interval과 API 실패를 서로 다른 상태로 기록한다
- 최신 봉은 구간 종료 뒤 확정본과 다시 비교한다
진행 중 봉을 마감값으로 쓰면 생기는 오류
현재 구간이 끝나기 전에는 close가 마지막 체결이 추가될 때 바뀌고 high·low·volume도 늘어날 수 있다. API가 최신 봉을 반환한다고 해서 그 값이 확정 종가라는 뜻은 아니다. 계산 시각이 bucket end보다 이르면 provisional로 표시하거나 완결된 직전 봉까지만 분석한다.
일간 수익률을 계산할 때 한 거래소는 진행 중 오늘 봉을 포함하고 다른 거래소는 어제 확정봉까지만 제공하면 시점이 어긋난다. 두 자료의 마지막 bucket start와 예상 종료 시각을 비교한 뒤 같은 완결 구간만 남겨야 한다. 거래소가 사후 trade correction을 반영하는지도 별도 정책을 확인한다.
캔들 재현에 필요한 데이터 사전
원본 파일 옆에는 venue, symbol, interval, timestamp meaning, timezone, open·close definition, volume currency를 적는다. open이 구간 첫 체결이고 close가 마지막 체결이라는 Coinbase 정의는 호가 중간값으로 만든 봉과 다르다. base volume과 quote volume도 같은 열 이름으로 섞지 않는다.
재집계 과정에서는 구간을 [start,end)처럼 한쪽만 포함하는 규칙으로 고정해야 경계 체결이 두 봉에 중복되지 않는다. 예를 들어 10:05:00 체결은 10:00~10:05 봉이 아니라 10:05~10:10 봉에 넣는다. API 문서의 경계 정의가 없으면 이 선택을 자체 방법론으로 밝히고 결과의 재현 조건에 포함한다.
자주 묻는 질문
UTC 일봉의 9월 1일은 한국시간 9월 1일 하루인가요?
아니다. UTC 자정 시작 봉이라면 한국시간 9월 1일 오전 9시부터 9월 2일 오전 9시 직전까지다.
중간에 캔들이 없으면 거래량 0으로 채워도 되나요?
분석 목적에 따라 가능하지만 원본 누락과 사용자가 채운 0 거래량 봉을 구분해야 한다. 가격을 0으로 넣으면 안 된다.
최신 캔들의 close를 종가로 써도 되나요?
구간이 끝났는지 확인해야 한다. 진행 중 봉의 close·high·low·volume은 이후 체결로 바뀔 수 있다.



