
2024.09.08 추가
현재 시점 최신버전 API v5 에서의 실시간 시세 수신 코딩 방법
https://igotit.tistory.com/5831
암호화폐 실시간 틱 데이터 수신 코딩 방법 . 파이썬
개요 암호화폐 거래소 바이비트 API 통신 위한 공식 파이썬 패키지 pybit 이용하여 파이썬에서 실시간 틱 데이터 수신 위한 가장 쉬운 기본적인 형태에서 출발하여 점진적으로 더 유용한 형
igotit.tistory.com
아래 내용은 이전 버전의 것이라 도움 안됨.
개요.
- 암호화폐 거래소 바이빗 에서 제공하는 WebSocket 기반 실시간 시세수신(= 실시간 체결 틱 데이터) 파이썬 코드.
사전필수 준비사항
- 파이썬 개발 환경 구축.
- 처음으로 파이썬 개발환경 구축하는 경우라면 Visual Studio 2019 의 파이썬 개발환경 강력 추천. 2가장 심플하고 지속가능한 개발환경 유지가능. ( 여타 다른 파이썬 개발환경은 산만하고 개발자로 하여금 환경 셋팅에 시간낭비 많이 시켰음. 설치좀 그만하고 코딩좀 하자.. )
2022.02.18 추가
VS2022 출시 상태, 신규 도입한다면 VS2022 에서 파이썬 개발환경 추천.
코드. - Python
################ bybit WebSocket example. | |
import asyncio | |
import websockets | |
import json | |
async def my_loop_WebSocket_bybit(): | |
# 2021.09.04 error websockets version 9.1 only available version 8.1 async with websockets.client.Connect("wss://stream.bybit.com/realtime") as websocket: | |
async with websockets.connect("wss://stream.bybit.com/realtime") as websocket:# OK websockets version 9.1 | |
print("Connected to bybit WebSocket"); | |
await websocket.send('{"op":"subscribe","args":["trade.BTCUSD"]}'); | |
data_rcv_response = await websocket.recv(); | |
print("response for subscribe req. : " + data_rcv_response); | |
while True: | |
data_rcv_strjson = await websocket.recv(); | |
data_rcv_dict = json.loads(data_rcv_strjson); # convert to Pyhton type dict | |
data_trade_list = data_rcv_dict.get('data',0); | |
if data_trade_list == 0: | |
continue | |
num_data_trade_list = len(data_trade_list); | |
print("Num List : " + str(num_data_trade_list)); | |
for data_trade_dict in data_trade_list : ## variable number of element(dictionary) in List per one packet. | |
print("timestamp : " + data_trade_dict.get('timestamp',0) | |
+ ", price : " + str(data_trade_dict.get('price',0)) | |
+ ", size : " + str(data_trade_dict.get('size',0)) | |
); | |
##### main exec | |
my_loop = asyncio.get_event_loop(); | |
my_loop.run_until_complete(my_loop_WebSocket_bybit()); # loop for connect to WebSocket and receive data. | |
my_loop.close(); |
2021년 9월4일 코드 수정함. 라인 9 를 주석처리하고 라인 10으로 변경함.
- 사유 : 파이썬 websockets 버전 8.1 에서는 라인 9가 정상작동하였으나, 버전 9.1 (21년9월 시점 최신 버전)에서는 오류 생긴다. 라인 10처럼 해야 정상 작동함.
실행 영상.
코드 구현 요점 설명.
코드에서 함수 websocket.send('{"op":"subscribe","args":["trade.BTCUSD"]}'); 호출하여 수신된 데이터 (아래 박스)보면 첫수신된 데이터는 성공여부 알려주고 있고, 이후부터는 체결시마다 동일형식으로 데이터 수신된다.
{"success":true,"ret_msg":"","conn_id":"b4c485b1-e03a-4196-a43b-3e692ff164e1","request":{"op":"subscribe","args":["trade.BTCUSD"]}} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421306462,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":82,"price":5294,"tick_direction":"ZeroPlusTick","trade_id":"1e2ed56a-b1e0-5615-beb5-84b833aa2cba","cross_seq":1285784559},{"trade_time_ms":1584421306462,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":4,"price":5295,"tick_direction":"PlusTick","trade_id":"18a5fd54-3fb7-5c75-9116-5272a4d6638c","cross_seq":1285784559},{"trade_time_ms":1584421306462,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":914,"price":5295,"tick_direction":"ZeroPlusTick","trade_id":"45b2643e-8f91-59f5-a7b5-23dd7317be84","cross_seq":1285784559}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421306529,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":20,"price":5296,"tick_direction":"PlusTick","trade_id":"d9eddfb6-f5ae-5bee-b48f-43d186f0bf54","cross_seq":1285784674}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421306685,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":20,"price":5298,"tick_direction":"PlusTick","trade_id":"6c030547-d800-5fff-979e-b0c5a3d683bc","cross_seq":1285784778},{"trade_time_ms":1584421306685,"timestamp":"2020-03-17T05:01:46.000Z","symbol":"BTCUSD","side":"Buy","size":415,"price":5298,"tick_direction":"ZeroPlusTick","trade_id":"42e36f30-20d9-51ae-a550-d478a5c8bf5c","cross_seq":1285784778}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421307799,"timestamp":"2020-03-17T05:01:47.000Z","symbol":"BTCUSD","side":"Sell","size":62,"price":5297.5,"tick_direction":"MinusTick","trade_id":"83053408-717f-5a8a-841b-deb8a409f41d","cross_seq":1285784863}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421308271,"timestamp":"2020-03-17T05:01:48.000Z","symbol":"BTCUSD","side":"Buy","size":20900,"price":5298,"tick_direction":"PlusTick","trade_id":"3fd727ea-055e-5cdd-a424-cf73c9b72c78","cross_seq":1285784894}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421309240,"timestamp":"2020-03-17T05:01:49.000Z","symbol":"BTCUSD","side":"Sell","size":10,"price":5297,"tick_direction":"MinusTick","trade_id":"bf215523-738e-50d9-887a-2ac499aac008","cross_seq":1285784984}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421317372,"timestamp":"2020-03-17T05:01:57.000Z","symbol":"BTCUSD","side":"Buy","size":3,"price":5297,"tick_direction":"ZeroMinusTick","trade_id":"57ef0e59-0b74-5a2d-a6ee-0741fc35db0c","cross_seq":1285785468},{"trade_time_ms":1584421317372,"timestamp":"2020-03-17T05:01:57.000Z","symbol":"BTCUSD","side":"Buy","size":247,"price":5297,"tick_direction":"ZeroMinusTick","trade_id":"d262909d-d96a-5442-93f2-f8b5e12963b6","cross_seq":1285785468}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421318880,"timestamp":"2020-03-17T05:01:58.000Z","symbol":"BTCUSD","side":"Sell","size":15,"price":5297,"tick_direction":"ZeroMinusTick","trade_id":"92d7b6a8-e8e9-54c0-8a4d-3dfdd2a7bf2d","cross_seq":1285785576}]} {"topic":"trade.BTCUSD","data":[{"trade_time_ms":1584421321007,"timestamp":"2020-03-17T05:02:01.000Z","symbol":"BTCUSD","side":"Sell","size":485,"price":5297,"tick_direction":"ZeroMinusTick","trade_id":"68776ea2-a778-54d8-b9c4-d6240589eeb8","cross_seq":1285785772},{"trade_time_ms":1584421321007,"timestamp":"2020-03-17T05:02:01.000Z","symbol":"BTCUSD","side":"Sell","size":149,"price":5297,"tick_direction":"ZeroMinusTick","trade_id":"f13b653f-4dd9-5bbc-ac6a-03c41e4622f1","cross_seq":1285785772}]} |
참고 체결데이터 자료형식. - json
주의사항 : data list의 {} 로 감싼 요소 수는 매번의 전송시 마다 다름. 1개의 {} 가 송신되는 경우도 있고, 여러개 의 {} 이 송신되는 경우도 있음. 수량 체크하여 처리하는 루틴 필수 마련할것.
{
"topic": "trade.BTCUSD",
"data": [
{
"timestamp": "2020-01-12T16:59:59.000Z",
"trade_time_ms": 1582793344685, // trade time in millisecond
"symbol": "BTCUSD",
"side": "Sell",
"size": 328,
"price": 8098,
"tick_direction": "MinusTick",
"trade_id": "00c706e1-ba52-5bb0-98d0-bf694bdc69f7",
"cross_seq": 1052816407
}
]
}
from : https://bybit-exchange.github.io/docs/inverse/#t-websockettrade
USDT 무기한 종목 실시간 시세 받기
종목예 : ETHUSDT
USDT 무기한 종목인 경우에도 위에서 보인 인버스 무기한 종목과 코드 구조는 완전히 동일하며, 주소부분과 종목을 USDT 무기한 종목의 것으로 하면 된다.
################ bybit WebSocket example. USDT perpetual ETHUSDT | |
import asyncio | |
import websockets | |
import json | |
async def my_loop_WebSocket_bybit(): | |
# 2021.09.04 error websockets version 9.1 only available version 8.1 async with websockets.client.Connect("wss://stream.bybit.com/realtime") as websocket: | |
async with websockets.connect("wss://stream.bybit.com/realtime_public") as websocket:# OK websockets version 9.1 | |
print("Connected to bybit WebSocket"); | |
await websocket.send('{"op":"subscribe","args":["trade.ETHUSDT"]}'); | |
data_rcv_response = await websocket.recv(); | |
print("response for subscribe req. : " + data_rcv_response); | |
while True: | |
data_rcv_strjson = await websocket.recv(); | |
data_rcv_dict = json.loads(data_rcv_strjson); # convert to Pyhton type dict | |
#print(data_rcv_strjson) | |
data_trade_list = data_rcv_dict.get('data',0); #arg2=0 mean return 0 if no 'data' | |
if data_trade_list == 0: | |
continue | |
num_data_trade_list = len(data_trade_list); | |
print("Num List : " + str(num_data_trade_list)); | |
for data_trade_dict in data_trade_list : ## variable number of element(dictionary) in List per one packet. | |
print("timestamp : " + data_trade_dict.get('timestamp',0) | |
+ ", price : " + str(data_trade_dict.get('price',0)) | |
+ ", size : " + str(data_trade_dict.get('size',0)) | |
); | |
##### main exec | |
my_loop = asyncio.get_event_loop(); | |
my_loop.run_until_complete(my_loop_WebSocket_bybit()); # loop for connect to WebSocket and receive data. | |
my_loop.close(); | |
웹소켓 서버 3개 동시 접속 하는 코드 예.
별도 정리.
bybit. API. WebSocket 서버 3개 동시 접속 파이썬 코드.
개요 - bybit 의 USD 종목용 websocket 서버 1개와 , USDT 종목용 websocket 서버 2개에 동시 접속하여 코드 작동방식. 1. 파이썬 코드 실행되면 파일 apikey_url_bybit.txt 를 읽어서 접속서버주소와 api key, se..
igotit.tistory.com
연관.
상기 코드 상태에서 보안접속 하는 코드.
bybit. API. 보안접속 코드 . 파이썬
개요 - 암호화폐 거래소 bybit API 이용하여 접속시 api key, secrete 로 보안접속 파이썬 코드. - 이전 작업했던 파이썬 코드 에서 아래 코드 추가한다. 즉, 접속첫자리에서 본인의 보안정보 송신하면
igotit.tistory.com
상기 코드와 유사한데, websocket 서버 3개에 동시접속하는것.
bybit. API. WebSocket 서버 3개 동시 접속 파이썬 코드.
개요 - bybit 의 USD 종목용 websocket 서버 1개와 , USDT 종목용 websocket 서버 2개에 동시 접속하여 코드 작동방식. 1. 파이썬 코드 실행되면 파일 apikey_url_bybit.txt 를 읽어서 접속서버주소와 api key, se..
igotit.tistory.com
거래소. bybit. 바이빗. 개요. 가입방법. 암호화폐
바이빗 거래소 주요특징. - 거래가능 종목 : - BTCUSD , ETHUSD , EOSUSD , XRPUSD - 최대 레버리지 100 까지 가능 매매자가 레버리지 사용 유무 선택가능. - - 장점 : 레버리지 1에서 거래하여 수익 10% 날것이..
igotit.tistory.com
암호화폐. API. 바이빗. REST , WebSocket
bybit API 개요 - 형식 : REST , WebSocket - bybit 거래소 가입 하여 API 키 발급 받아야 API 적용된 클라이언트 앱에서 활용가능. - 개발가능한 언어 : REST, WebSocket 구현가능한 모든 언어 - C++, 자바스크립..
igotit.tistory.com
파이썬. 웹소켓. WbeSocket 구현.
파이썬 WebSocket 코딩 사전 준비. - 모듈 WebSockets 설치하기. - 코드에서 import websockets 하고 실행시켜서 모듈 없다는 메시지 보이면 websockets 모듈 설치하면됨. - 아래 영상에서 websocket 아닌 websock..
igotit.tistory.com
Python. asyncio. 비동기 모듈.
Python asyncio 모듈. - event loop 에서 실행할 것들을 schedule(등록) 하고 작업들을 실행, 취소, 일시 중지 가능. - 파이썬 3.4 부터 첫배포, 버전에 따라 기능 추가. - 파이썬 3.6 에서의 기능 상태. - - asyn..
igotit.tistory.com
Python. 딕셔너리.
get() . 키에 해당하는 값 받기. my_dict = {'a': 1, 'b': 2, 'c': 3}; my_dict.get('a'); # 키 a 의 값 1 반환됨. my_dict.get('a',0); # 2번째 인자에 0을 기록하면 키없다면 0 반환됨. my_dict.get('d',0); #..
igotit.tistory.com
아래 링크의 내용은 bybit 공식 배포되는 웹소켓 라이브러리인데.. 현재(2020.10.31) USDT 종목은 완전하게 구현안되어있어서.. 별로 활용도가 높지 않음.
암호화폐. API. bybit. WebSocket. bybit-ws. Python
bybit-ws 개요 - 파이썬에서 암호화폐 거래소 바이빗 의 웹소켓 통신 간편하게 구현가능한 라이브러리. - 바이빗에서 공식 배포 (지속가능성 보장됨 ). - USD종목과 USDT 종목에서 모두 사용가능. - - US
igotit.tistory.com
Visual Studio 2022. 파이썬 개발환경 설치
사전 준비 : Visual Studio 2022 설치된 상태. 파이썬 개발 환경 설치 방법 Visual Studio 실행하여 메뉴 : Tools -> Get Tools and Featues... 클릭하여 뜬 아래 창에서 상단 탭 워크로드 에서 Python 개발 선택..
igotit.tistory.com
첫 등록 : 2020.03.17
최종 수정 : 2024.09.08
단축 주소 : https://igotit.tistory.com/2490

'트레이딩 > 암호화폐' 카테고리의 다른 글
암호화폐 . 환율 트레이딩. 기준통화 상대통화 . 개념 정리 . (0) | 2022.02.21 |
---|---|
bybit. BTCUSD , BTCUSDT 차이점. 주문 수량 단위 단순명료 이해. (1) | 2022.02.21 |
암호화폐 . API . pybit . 바이비트 전용 파이썬 라이브러리. (0) | 2022.02.11 |
렛저 라이브 . 설치 . 콜드월렛 연동 소프트웨어 (0) | 2021.11.29 |
하드웨어 지갑 . 렛저 나노 엑스 . 개요 . 구입. 초기설정 (0) | 2021.11.29 |
댓글