전략을 기반으로 자동 매매를 하기 위해서는 특정 코인의 실시간 체결내역을 받아야 하는데요. 거래소에서는 서버의 부하를 줄이기 위하여 REST 방식으로는 단위시간 당 접속 제한이 걸어 두어 원하는 코인의 실시간 시세를 받기 어렵습니다. 이를 위하여 websocket 방식으로 현재가, 실시간 체결가, 호가 정보를 제공합니다. websocket 방식은 REST 방식과는 달리 접속이 한번 이루어지면 체결 데이터를 계속 받을 수 있습니다. test한 바로는 동시에 받을 수 있는 코인의 수도 제한이 없는 것 같습니다.

 

websocket을 이용하여 실시간 체결가를 얻는 방법에 대하여 기술합니다.

 

우선 아래 두 패키지를 import합니다. 


import websockets
import asyncio

 

만약 처음 사용하는 경우라면 pip 명령어를 사용하여 설치하시기 바랍니다.

pip install websockets

pip install asyncio

 

socket을 이용한 네트워크 프로그램 경험이 없더라도 간단하게 구현이 가능합니다.

 

우선 connect() 함수를 이용하여 upbit의 websocket 서버에 접속합니다.

 

websockets.connect('wss://api.upbit.com/websocket/v1')

 

접속이 성공하였다면 시세를 받을 코인명을 전달합니다. 이때 ticket은 임의의 문자열 사용하시면 되고, code에 시세를 받고 싶은 코인명을 기술하면 됩니다.

 

ss = '[{"ticket":"test1243563456"},{"type":"trade","codes":["KRW-BTC", "KRW-ETH"]}]'

websocket.send(ss)

 

send가 성공적으로 이루지면 등록한 코인에 대하여 체결이 이루어지면 체결 정보가 전달됩니다. 

data_rev = websocket.recv()

 

recv() 함수로 받은 데이터를 json 형태로 변환하면 아래와 같은 정보 형태를 가지게 됩니다.

 

 

프로그램 동작 중에 coin을 추가하거나 삭제하면 바로 반영이 됩니다. 

 

이것을 모두 모아서 만든 sample 프로그램입니다. 우선 KRW-BTC만 시세만 받다가 5개를 받았으면 KRW-ETH를 추가하여 BTC, ETH를 받다가 받은 시세 수량이 20개를 넘으면 마지막 코인(ETH)을 지우고 TRX를 추가하여 받는 방식으로 동작합니다.

 

 

소스코드는 아래 github에 있습니다. 

github.com/multizone-quant/upbit/blob/main/upbit-websocket-ex

 

multizone-quant/upbit

python codes for upbit. Contribute to multizone-quant/upbit development by creating an account on GitHub.

github.com

 

반응형

설정

트랙백

댓글