
2023.01.29 - [System Trading] - 가상화폐 트레이딩 봇의 필수! 가상화폐 거래소 Websocket 사용법 기초(업비트)
가상화폐 트레이딩 봇의 필수! 가상화폐 거래소 Websocket 사용법 기초(업비트)
거래소 서버와 상호 작용을 하려면 크게 2가지 방식이 있습니다. REST API 방식 Websocket 방식 지난 포스팅에서 REST API 방식을 알아보았습니다. 아래 글에서 자세한 내용을 확인할 수 있습니다. 가상
raacers.com
지난 포스팅에서 Websocket API로 업비트 거래소 전체 종목의 가격 변화를 받아오는 부분을 작성하였습니다. 데이터를 받아서 출력하는 것까지 작성했었는데, 이번에는 조건문을 활용하여 원하는 데이터를 걸러내는 부분을 작성하겠습니다.
1. 특정 종목 가격 변화 감지하기
1.1 Websocket 데이터 세부 항목
현재 받고 있는 전체 데이터는 다음과 같습니다. 모든 종목의 체결이 발생할 때마다 데이터를 받고 있습니다. 현재 ANKR 종목의 체결이 좀 더 많음을 확인할 수 있습니다.

데이터 뒤쪽은 스크린샷에서 짤려있는데, 1개의 데이터는 다음과 같습니다.
{
'type': 'ticker',
'code': 'KRW-ANKR',
'opening_price': 60.5,
'high_price': 66.9,
'low_price': 57.7,
'trade_price': 66.5,
'prev_closing_price': 60.5,
'acc_trade_price': 236900157453.39615,
'change': 'RISE',
'change_price': 6.0,
'signed_change_price': 6.0,
'change_rate': 0.0991735537,
'signed_change_rate': 0.0991735537,
'ask_bid': 'BID',
'trade_volume': 3662.86039148,
'acc_trade_volume': 3829530362.036001,
'trade_date': '20230222',
'trade_time': '093433',
'trade_timestamp': 1677058473512,
'acc_ask_volume': 2165296544.6980796,
'acc_bid_volume': 1664233817.3379216,
'highest_52_week_price': 125.0,
'highest_52_week_date': '2022-04-02',
'lowest_52_week_price': 18.5,
'lowest_52_week_date': '2022-12-30',
'market_state': 'ACTIVE',
'is_trading_suspended': False,
'delisting_date': None,
'market_warning': 'NONE',
'timestamp': 1677058473563,
'acc_trade_price_24h': 697966021136.6587,
'acc_trade_volume_24h': 11024004561.651142,
'stream_type': 'REALTIME'
}
Dict 형식으로 현재 가격을 포함하여 다양한 정보를 담고 있습니다. 각 정보에 대한 자세한 설명은 아래 링크 업비트 거래소 Websocket 공식문서 4. 응답 형식 - 현재가(Ticker) 응답에서 확인할 수 있습니다.
https://docs.upbit.com/docs/upbit-quotation-websocket
업비트 개발자 센터
업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요.
docs.upbit.com
1.2 Websocket 데이터 검사하여 BTC 종목 가격 변화 감지하기
종목명은 'code'에 현재가는 'trade_price'에 저장되어 있습니다. 아래 코드로 BTC 종목이 가격이 변화할 때마다 감지하여 출력할 수 있습니다.
import datetime
import json
import time
from websocket import WebSocketApp
from threading import Thread
from strategy.func_get_upbit_symbols import get_upbit_symbols
class UpbitWebsocket:
def __init__(self, request):
self.request = request
self.ws = WebSocketApp(
url="wss://api.upbit.com/websocket/v1",
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close,
on_open=self.on_open
)
self.running = False
def on_message(self, ws, msg):
msg = json.loads(msg.decode('utf-8'))
if "BTC" in msg["code"]:
print("\n비트코인 가격 변동 감지", msg["trade_price"], datetime.datetime.now())
def on_error(self, ws, msg):
print(msg)
def on_close(self, ws):
print("closed")
self.running = False
def on_open(self, ws):
th = Thread(target=self.activate, daemon=True)
th.start()
def activate(self):
self.ws.send(self.request)
while self.running:
time.sleep(1)
self.ws.close()
def start(self):
self.running = True
self.ws.run_forever()
upbit_symbols = get_upbit_symbols()
request = '[{"ticket":"test"},{"type":"ticker","codes":' + str(upbit_symbols) + '}]'
uw = UpbitWebsocket(request=request)
uw.start()
나머지는 지난 포스팅의 코드와 동일하고 아래 2줄의 코드를 on_message 함수에 추가하였습니다. 이 함수는 Websocket으로 데이터가 들어올 때마다 실행됩니다. 아래 2줄의 코드를 추가하여 체결이 발생하는 대로 들어오는 모든 데이터를 검사하여 BTC 종목만 걸러내서 출력하고 있습니다.
if "BTC" in msg["code"]:
print("\n비트코인 가격 변동 감지", msg["trade_price"], datetime.datetime.now())

'System Trading' 카테고리의 다른 글
| 가상화폐 거래소 Websocket API 사용법 실전 - Websocket API로 급등 종목 실시간 감지하기(업비트) (0) | 2023.02.23 |
|---|---|
| 가상화폐 거래소 API 사용법 실전 - 업비트 거래소, 빗썸 거래소 API를 사용하여 주문 넣기 (0) | 2023.02.17 |
| 가상화폐 트레이딩 봇의 필수! 가상화폐 거래소 API 사용법 실전(바이낸스) - 거래소에서 데이터 받아서 csv 파일로 저장하기 (0) | 2023.02.01 |
| 가상화폐 트레이딩 봇의 필수! 가상화폐 거래소 Websocket 사용법 기초(업비트) (0) | 2023.01.29 |
| 가상화폐 트레이딩 봇의 필수! 가상화폐 거래소 API 사용법 기초(바이낸스) (0) | 2023.01.23 |
댓글