본문 바로가기
트레이딩/암호화폐

bybit. API. WebSocket 서버 3개 동시 접속 파이썬 코드.

by i.got.it 2020. 10. 31.

 

개요 

- bybit 의 USD 종목용 websocket 서버 1개와 , USDT 종목용 websocket 서버 2개에 동시 접속 파이썬 코딩.  

 

작동방식.

1. 파이썬 코드 실행되면 파일 apikey_url_bybit.txt 를 읽어서 접속서버주소와 api key, secret 값들을 읽어들이고, 

2. 이후 asyncio 로 동시에 3개의 서버 접속 실행되게 한다.  

3. 각각의 서버 핸들링 하는 loop 함수 내에서 보안접속  

4. 종목들 각각의 체결정보 실시간 요청 송신하며, while 문내에서 실시간 수신 데이터 출력한다.

 

asyncio  로 동시 3개의 웹소켓 구동 핵심 코드. 

 

myy_loop.run_until_complete(asyncio.gather(*[my_loop_WebSocket_bybit(),my_loop_WebSocket_usdt_private_bybit(),my_loop_WebSocket_usdt_public_bybit()]));

 

 

import asyncio
import websockets
import json
import time
import hmac
def get_args_secret(_api_key, _api_secrete):
expires = str(int(round(time.time())+5000))+"000"
_val = 'GET/realtime' + expires
signature = str(hmac.new(bytes(_api_secrete, "utf-8"), bytes(_val, "utf-8"), digestmod="sha256").hexdigest())
auth = {}
auth["op"] = "auth"
auth["args"] = [_api_key, expires, signature]
args_secret = json.dumps(auth)
return args_secret
####################### for bybit Inverse . BTCUSD, ETHUSD, EOSUSD, XRPUSD
async def my_loop_WebSocket_bybit():
async with websockets.connect(url_ws_inverse_bybit) as websocket:
await websocket.send(get_args_secret(api_key, api_secret)); # secret
print("Connected to bybit WebSocket with secret key");
await websocket.send('{"op":"subscribe","args":["trade.BTCUSD"]}');
await websocket.send('{"op":"subscribe","args":["trade.ETHUSD"]}');
await websocket.send('{"op":"subscribe","args":["trade.EOSUSD"]}');
await websocket.send('{"op":"subscribe","args":["trade.XRPUSD"]}');
while True:
data_rcv_strjson = await websocket.recv();
print(data_rcv_strjson)
######################## for bybit USDT : BTCUSDT, ETHUSDT, LTCUSDT, LINKUSDT, XTZUSDT
async def my_loop_WebSocket_usdt_public_bybit():
async with websockets.connect( url_ws_usdt_public_bybit ) as ws_usdt_public:
print("Connected to bybit USDT WebSocket Public");
await ws_usdt_public.send('{"op": "subscribe", "args": ["trade.BTCUSDT"]}');
await ws_usdt_public.send('{"op": "subscribe", "args": ["trade.ETHUSDT"]}');
await ws_usdt_public.send('{"op": "subscribe", "args": ["trade.LTCUSDT"]}');
await ws_usdt_public.send('{"op": "subscribe", "args": ["trade.LINKUSDT"]}');
await ws_usdt_public.send('{"op": "subscribe", "args": ["trade.XTZUSDT"]}');
while True:
data_rcv_strjson = await ws_usdt_public.recv();
print('USDT from bybit public: ' + data_rcv_strjson)
async def my_loop_WebSocket_usdt_private_bybit():
async with websockets.connect(url_ws_usdt_private_bybit) as ws_usdt_private:
await ws_usdt_private.send(get_args_secret(api_key, api_secret)); # secret
print("Connected to bybit USDT WebSocket Private with secret key");
while True:
data_rcv_strjson = await ws_usdt_private.recv();
print('USDT from bybit private: ' + data_rcv_strjson)
##### main exec
#### 파일 apikey_url.txt 읽어서 api key 와 url 정보 변수에 받아두기.
with open('apikey_url_bybit.txt', encoding='utf8') as f:
count_line=0
for line in f:
count_line+=1
if count_line == 1: # bybit API key
api_key = line.rstrip('\n')
elif count_line == 2: # bybit secret key
api_secret = line.rstrip('\n')
elif count_line == 3: # bybit REST url for both Inverse Perpetual and USDT Perpetual,
url_rest_bybit = line.rstrip('\n') # not used in this python code.
elif count_line == 4: # bybit websocket url for Inverse Perpetual, BTCUSD , etc
url_ws_inverse_bybit = line.rstrip('\n')
elif count_line == 5: # bybit websocket public url for USDT Perpetual, BTCUSDT, etc
url_ws_usdt_public_bybit = line.rstrip('\n')
elif count_line == 6: # bybit websocket private url for USDT Perpetual, BTCUSDT, etc
url_ws_usdt_private_bybit = line.rstrip('\n')
break;
print('OK : read file apikey_url_bybit.txt')
my_loop = asyncio.get_event_loop();
my_loop.run_until_complete(asyncio.gather(*[my_loop_WebSocket_bybit(),my_loop_WebSocket_usdt_private_bybit(),my_loop_WebSocket_usdt_public_bybit()]));
my_loop.close();

 

 

실행모습. 

 

 

 

 

 

 

연관 

- 아래 링크 1, 2, 3, 4 순서대로 읽어오면 본 글의 코드 쉽게 이해됨. 

 

1. 

 

암호화폐. API. bybit. 실시간 시세수신. WebSocket. Python

개요. - 암호화폐 거래소 바이빗 에서 제공하는 WebSocket 기반 실시간 시세수신(= 실시간 체결 틱 데이터) 파이썬 코드. 코드. - Python 실행 영상. 코드 구현 요점 설명. 코드에서 함수 websocket.send('{"op

igotit.tistory.com

 

 

2. 

 

bybit. API. 보안접속 코드 . 파이썬

개요 - 암호화폐 거래소 bybit API 이용하여 접속시 api key, secrete 로 보안접속 파이썬 코드. - 이전 작업했던 파이썬 코드 에서 아래 코드 추가한다. 즉, 접속첫자리에서 본인의 보안정보 송신하면

igotit.tistory.com

 

3. 

 

bybit. API. 서버 주소 정리. 파이썬에서 파일 읽기 처리.

개요 - 암호화폐 거래소 바이빗 API 에서 접속하는 서버 주소 정리. - API 이용하는 파이썬 코드에서 주소와 api 키와 시크릿 키를 저장해두고 파이썬 실행시 파일에 있는 값을 읽어들여 처리하기. b

igotit.tistory.com

 

4.

- asyncio 에서 2개 이상의 코루틴 실행.

 

Python. asyncio. 비동기 모듈.

Python asyncio 모듈. - event loop 에서 실행할 것들을 schedule(등록) 하고 작업들을 실행, 취소, 일시 중지 가능. - 파이썬 3.4 부터 첫배포, 버전에 따라 기능 추가. - 파이썬 3.6 에서의 기능 상태. - - asyn..

igotit.tistory.com

 


첫 등록 : 2020.10.31

최종 수정 : 

단축 주소 : https://igotit.tistory.com/2676

 


 



비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5