가상통화(가상화폐, 가상증표, 전자통화, 이하 가상통화로 통일) 를 대상으로 알고리즘 자동매매 시스템을 구축하기 위해 기존의 알고리즘과 별도의 알고리즘에 대한 검증 작업을 하려다보니 많은 종목의 많은 데이터를 확보하는 것이 중요하다고 판단하여 어쩌다보니 중국 상해(상하이)에 위치한 바이낸스(Binance)의 API를 다뤄보게 되었습니다.
국내의 가상통화 거래소도 있는데 굳이 해외 거래소의 API를 다뤄보게 된 조금 더 상세한 이유는 다음과 같습니다.
- 국내의 경우 서버 과부하를 이유로 조회 제한이 심한 상태이다.
- 국내의 경우 상장된 종목의 수가 대체로 적다.
- (추후 다뤄볼 예정인) 업비트의 경우 상장된 종목이 100여종목이 넘고 API 도메인은 있지만 현재까지는 공식적으로 지원하지 않고 있다.
- 바이낸스의 경우 API 조회제한이 분당 1200회로 빗썸과 동일하다 (빗썸은 초당 20회로 제한)지만 빗썸 서버는 트래픽 폭주로 다운되는 경우가 잦아 안정적인 시세의 확보가 불가능하다.
- 이른바 김치 프리미엄(김프)으로 인해 글로벌 시세와 이격이 상당하고 단기 조정권의 투매 흐름이 나타날시 글로벌 시세와의 이격이 더욱 현격하게 벌어진다.
현재 업비트, 고팍스, 빗썸 등에서 시세를 수신하여 데이터베이스에 저장하고 있기는 하지만 조회제한, 안정성 문제 등의 이유로 인해 바이낸스의 API를 다뤄보게 되었습니다.
바이낸스가 중국 업체이긴하나 한글 웹페이지를 서비스하고 있기 때문에 한국의 사이트와 비슷한 정도의 편의성으로 이용할 수 있다고 봅니다.
다만, 해외 업체이기 때문에 본인 확인시에는 국내의 주민등록증, 운전면허증으로는 되지 않고 오로지 여권(Passport)으로만 가능합니다.
필자는 여행을 좋아하기에 여권을 보유하고 있는덕에 쉽게 본인 인증을 받을 수 있었습니다.
이외 API 를 신청하고 API Key와 Secret Key를 발급 받는 과정을 국내와 대동소이 하므로 생략합니다.
빗썸의 경우에는 샘플 코드를 제공하지만 바이낸스는 자체적으로 제공하는 샘플 코드는 찾아볼 수 없고 대신 GitHub(깃)을 통해 다양한 샘플 코드들이 공개되고 있으니 참고하면 됩니다.
▲ 제공되는 여러 모듈들에 대한 정보입니다.
▲ 시세 조회는 rest-api 를 이용하게 될 것입니다.
시세 조회를 함에 있어서 바이낸스 서버에 부하를 가하면 안되기 때문에 바이낸스 측에서는 각 api 별로 조회제한을 설정 해두었는데 어느정도의 제한 설정이 되어 있는지는 아래의 링크를 클릭하여 exchangeinfo.json 파일을 다운로드 받아 확인할 수 있습니다.
JSON 파일이라고는 하지만 메모장 등의 텍스트 에디터로 확인할 수 있는 형식의 문서이니 시작부터 겁 먹을 이유는 없습니다.
▲ 필자는 기존에 다운로드 받아 별도로 저장해둔 exchangeinfo.json 파일이 있기 때문에 exchangeinfo2.json 으로 이름을 변경하여 저장하였습니다.
▲ 보시다시피 메모장에서 해당 파일을 열어볼 수 있습니다.
▲ 다만 줄바꿈이 되어 있지 않다보니 가독성이 좋지 않아 별도로 파싱(Parsing)과정이 필요합니다.
▲ 보기 쉽게 별도로 정렬 한 모습입니다.
▲ 분당 조회 요청 제한 횟수, 초당 주문 제한 횟수, 1일간 주문 제한 횟수 정보를 먼저 볼 수 있습니다.
▲ 위 이미지는 ETH to BTC의 거래로써 심볼은 ETHBTC입니다.
▲ baseAsset 는 ETH (이더리움)으로, 거래 종목 코드라고 보시면 됩니다.
▲ 이외에도 수신받을 수 있는 데이터의 자릿수, 주문 가능 유형, 최소 가격, 최대 가격, 최소 틱 크기, 최소 주문 수량, 최대 주문수량 등의 기본 정보가 상세하게 제공되고 있습니다.
위 내용중 제일 중요한것을 꼽자면 단연 rateLimitType 입니다.
앞서 각 API별로 조회 제한을 두고 있다고 말씀 드렸는데요.
만약 이 조회 제한을 어기고 서버에 부하를 주게 되면 최소 몇시간에서 최대 3일 동안 조회 요청에 대해 서버측에서 거부를 하기 때문에 이런 치명적인 상황을 만들지 않도록 잘 계산하여 반복 조회를 실행하기 바랍니다.
참고로 필자의 경우에는 바이낸스에 상장되어 있는 200개 이상의 전 종목의 데이터를 수신하기 위해 1분당 5회만 조회 하도록 해두었다가 현재는 바이낸스 API를 사용하지 않고 있는데 그 이유는 마지막에 적겠습니다.
아래의 링크를 클릭하면 24hr.json 파일을 다운로드 할 수 있으며 역시 메모장 등의 텍스트 편집기로 열어볼 수 있습니다.
https://api.binance.com/api/v1/ticker/24hr
▲ 24hr.json 파일을 메모장으로 열어본 모습입니다.
▲ 역시나 가독성 따위는 고려하지 않은 출력 화면을 볼 수 있는데 그 이유는 json 파일은 컴퓨터끼리의 통신을 위한 것이지 각 사용자가 편리하게 열람하라고 만들어 둔 것이 아니기 때문입니다.
▲ 어떤 내용인지 살펴보기 위해 가독성을 높이려고 정리 해봤습니다.
▲ 앞서 조회 해보았던과 동일한 종목인 ETHBTC의 체결 데이터입니다.
▲ 가격변화(대비), 등락율, 평균 체결가, 직전 체결가, 직전 체결 수량, 매수가격, 매수수량, 매도가격, 매도수량, 시가, 고가, 저가, 시가시각(Unix TimeStamp), 종가시각(Unix TimeStamp), 체결건수 등의 정보를 제공하고 있습니다.
체결 데이터에 대한 상세한 내용을 보여주고 있습니다.
결국 앞서 포스팅했던 빗썸, 고팍스 API와 크게 다르지 않고 사용하기 어렵지 않게 데이터를 제공하고 있습니다.
JSON 파일을 수신받아 필요한 데이터는 파일이나 데이터베이스에 저장 하거나 연산을 할 수도 있고 rest-api.md 이외의 다른 api를 이용하여 주문을 하는 등의 행위에 대해 처리할 수 있습니다.
이상으로 바이낸스 api를 다뤄보았으며 추가 내용은 뭔가 생각나거나 아니면 독자분들의 별도 요청이 있을때 진행할 예정입니다.
끝으로, 바이낸스 API를 다뤄보았지만 사용하지 않고 있는 이유를 말씀 드리겠습니다.
지금까지 다뤄본 많은 거래소의 API들이 필자에게 익숙한 증권사의 API와 기본 구조가 다른데 결정적으로 누락될 수 있는 데이터가 있기 때문에 정밀한 시뮬레이션을 통한 로직 검증에는 다소 무리가 있으며 이정도 규모의 데이터라면 이미 시세 데이터를 수신받고 있는 업비트와 크게 다르지 않기 때문에 중복으로 저장할 이유가 없다고 판단되었습니다.
증권사의 실시간 체결 데이터는 사용자가 별도로 요청하지 않아도 개장전 실시간 체결 데이터 요청을 해두면 장중 발생한 모든 체결 데이터를 사용자에게 전송 해주지만 가상통화 거래소의 실시간 체결 데이터는 매번 사용자가 요청해야 되고 조회 요청 제한을 두고 있기에 중간에 값이 누락될 여지가 존재합니다.
어느 시장에서 어떤 데이터를 받아 거래를 하는지는 사실 큰 의미는 없습니다.
일시적이지 않고 꾸준히 수익을 낼 수 있는 로직을 보유하여 알고리즘 자동매매 시스템을 구축할 수 있느냐가 최대 관건이지 누락없는 데이터를 아무리 잘 제공한다 하더라도 수익 로직을 가지지 못하면 의미가 없으니 말입니다.
이상으로 "바이낸스 API 다뤄보기 #1" 마칩니다.
향후 필자가 주로 사용하게 될 거래소가 어디일지 또 어떤 API를 사용하게 될지에 대한 것은 확정된 것이 없는 상황입니다.
새로운 거래소와 API를 찾을수도 있고 기존에 다뤄본 거래소와 API가 될수도 있습니다.
호가창에서 뵙겠습니다.
'암호통화 API' 카테고리의 다른 글
빗썸 API를 이용한 가상화폐 실시간 체결 데이터 수신 프로그램 v.1.010 (1) | 2018.02.10 |
---|---|
업비트 (UpBit) 비공식 API 다뤄보기 #1 (6) | 2018.01.25 |
고팍스 (GoPax) API 다뤄보기 #1 (0) | 2018.01.12 |
빗썸 API를 이용한 가상화폐 실시간 체결 데이터 수신 프로그램 v.1.005 (5) | 2018.01.10 |
빗썸 API를 이용한 가상화폐 실시간 체결 데이터 수신 프로그램 v.1.000 (1) | 2018.01.09 |