1. 들어가며
바이비트 API를 통해 1분봉을 받으려고 for문을 돌리는 과정에서
float 관련 에러가 났다.
float형(실수)은 integer형(정수)으로 해석될 수 없다???
2. 오류가 발생한 과정
1) 바이비트의 시간 제공
바이비트는 UNIX 시간을 활용한다.
2022년 10월 12일 01시 41분 50초를 1665506510로 제공한다.
* UNIX 시간이란? 1970년 1월1일을 기준으로 경과한 시간을 말함
2) time 모듈 사용
time()은 현재시간을 말하며, time()-60은 1분전을 나타내고, time()-120은 2분전을 말한다.
from pybit.inverse_perpetual import HTTP
from time import time # 현재시간 : time() / unix 스탬프(timestamp)
for i in range(time()-120, time(), 60): # 2022-01-30 09:00:00 → 1643500800
resp = session.query_kline(
symbol="BTCUSD",
interval=1,
limit=3,
from_time= i
3) for문의 range 설명
아래의 코드에서 range 안쪽을 보면
시작은 time()-120(초)이며 끝은 time()이다. 60초 간격을 돌려라.
즉 현재 01:40분이라면, 01:38분, 01:39분 등 이렇게 2개를 나타내라는 것이다.
4) 오류는 for문을 돌리는 과정에서 나타났다.
for문은 range의 시작 숫자를 불러오는데, time()-120의 태형은 정수가 아닌 실수형(float)이라는 사실이다.
UNIX시간은 밀리세컨드를 가진 float형이다.
![](https://blog.kakaocdn.net/dn/VjYBQ/btrOlB6oA1w/fRG9g63oa22gDh0cAeBksK/img.png)
3. 해결 방법
for문과 함께 쓰이는 range는 정수만 다룬다는 내용을 기억하자.
이에 대한 해결은, time() 앞에 int를 붙여서, 정수형으로 바꾸어준다.
(밀리 세컨드가 현재 시간에 영향을 주는 경우는 극히 드물다)
![](https://blog.kakaocdn.net/dn/dHt9NQ/btrOlfPVgbo/NalNGLvXDANClV3zYd9m01/img.png)
4. 마치며
for문과 함께 쓰이는 range가 정수만 다룰 수 있다는 내용은 이번에 처음알았다.
알면 알수록 신기한게 for문은 정말 배울게 많다 싶다.
그나저나, 당초 생각한대로 "1분 전" 데이터를 받을 수 있는지
계속 연습 중인데, 필자 스스로가 생각하는 방법/시간으로
데이터를 받을 수 있으려면, 상당한 시간이 필요할 거 같다.