[일상] 급등 코인을 찾아보자

암호화폐 시장에서는 매일 급등하는 코인이 몇 개는 나옵니다. 누군가 가격을 펌핑시키고 있다는 말이지요. 이런 친구들을 찾아서 동행할 수 있다면 좋은 투자 성적이 나오겠지요?

그래서 한번 찾아보기로 했습니다.

upbit에서는 거래내역을 받을 수 있는 api가 있습니다. 아래 api를 사용하면 BTC의 최근 10 거래 내역을 받을 수 있습니다.

https://api.upbit.com/v1/trades/ticks?market=KRW-BTC&count=10

그런데 이 api는 한번에 한 코인만 가능하기 때문에 upbit에 상장된 모든 코인에 대한 최근 거래내역을 받기에는 어려움이 있습니다. upbit에 너무 자주 접속을 하면 연결이 끊어지기도 하기 때문에 매매에 활용하기는 어렵습니다.

이런 실시간 체결 데이터 수신을 위하여 업비트에서는 websockets 방식으로 데이터를 수신하는 방법도 제공합니다.

https://docs.upbit.com/docs/upbit-quotation-websocket

websockets을 이용하면 업비트의 네트워크 부하를 줄이면서 안정적으로 실시간 시세를 받아볼 수 있다고 합니다.

그래서 개발을 해 봅니다.


파이썬에서 있는 websockets 패키지를 사용합니다. 우선 패키지를 설치합니다.

pip install websockets

제가 개발하는 쪽은 client이므로, 업비트 서버에 연결, 시세 요청, 시세 수신 이렇게 구성이 되면 됩니다.

그런데 업비트에서 전달해준 데이터는 byte 형태이더군요. byte 형태를 string 형태로 바꾸어야 json 형식으로 처리가 가능합니다. 국내 사이트에서는 관련 정보를 찾을 수 없어서 google을 이용해봅니다.

제가 궁금한 사항에 대한 질문이 있군요.

https://stackoverflow.com/questions/40059654/python-convert-a-bytes-array-into-json-format/40060181

답변을 보면 byte 형태의 수신 데이터를 string 형태로 변경하는 방법에 대하여 나옵니다.

import json

my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'

# Decode UTF-8 bytes to Unicode, and convert single quotes 
# to double quotes to make it valid JSON
my_json = my_bytes_value.decode('utf8').replace("'", '"')
print(my_json)
print('- ' * 20)

# Load the JSON to a Python list & dump it back out as formatted JSON
data = json.loads(my_json)

확인해보니 잘 되는군요.

궁금한 사항은 구글이나 네이버에 질문만 정확하게 하면 금방 방법을 찾을 수 있습니다. 선배 개발자에게 항상 감사드립니다.

이렇게 해서 websockets을 이용하여 원하는 코인의 실시간 체결 내역을 받을 수 있는 코드가 완성되었습니다.

import websockets
import asyncio
import json

UPBIT_WEB_SOCKET_ADD = 'wss://api.upbit.com/websocket/v1'

async def myConnect() :
    async with websockets.connect(UPBIT_WEB_SOCKET_ADD) as websocket:
        await websocket.send('[{"ticket":"test1243563456"},{"type":"trade","codes":["KRW-BTC"]}]')
        while(1) :
#            await websocket.send('[{"ticket":"test124356"},{"type":"ticker","codes":["KRW-BTC"]}, {"format":"SIMPLE"}]')
            data_rev = await websocket.recv()
            my_json = data_rev.decode('utf8').replace("'", '"')
            data = json.loads(my_json)
            print(data['code'], data['trade_time'], data['ask_bid'], data['trade_price'], data['trade_volume'])

asyncio.get_event_loop().run_until_complete(myConnect())

실행 결과입니다. 정확하게 잘 들어옵니다.

websocksets으로 명령어 보낼 때 ticket은 중복되지 않을 임의의 값을 적으면 됩니다.
type으로는 체결가 이외에 현재가 호가도 알 수 있습니다.

이제 급등 코인 찾으러..

Sort:  

JCAR 5월 구독보팅입니다.
행복한 5월 되세요

찾아 보면 이미 급등한 후라 늦었을지도..... ㅎㅎㅎ
프로그램 개발자들이 부러워요.

대부분 늦었거나, fake일겁니다. ㅎ
그래도 장대 양봉 나오는 건 먹을 수 있지 않을까 해서 한번 확인해보는 차원에서..

아이디어는 나쁘지 않다고 생각합니다.

Coin Marketplace

STEEM 0.18
TRX 0.15
JST 0.028
BTC 62943.85
ETH 2464.43
USDT 1.00
SBD 2.55