개요
- 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
'트레이딩 > 암호화폐' 카테고리의 다른 글
CCXT. 캔들 과거데이터 (0) | 2020.11.03 |
---|---|
bybit. API. 웹소켓. kineV2. 캔들 실시간 수신, 캔들완성 검출 . 파이썬 (0) | 2020.11.02 |
bybit. API. 보안접속 코드 . 파이썬 (0) | 2020.10.31 |
암호화폐. API. bybit. WebSocket. bybit-ws. Python (9) | 2020.10.31 |
bybit. 펀딩피 이해. 암호화폐. (0) | 2020.10.22 |
댓글