Bitcoin의 현재 가격 가져오기
Bitcoin의 최신 가격을 얻는 방법에는 여러 가지가 있다. 가장 간단한 방법은 get_symbol_ticker함수를 사용하는 것이다.
(python_binance 기준)
# get latest price from Binance API
btc_price = client.get_symbol_ticker(symbol="BTCUSDT")
# print full output (dictionary)
print(btc_price)
위의 코드는 기호와 가격이 포함된 딕셔너리 구조를 출력한다. 다음은 출력 예이다.
{'symbol': 'BTCUSDT', 'price': '9678.08000000'}
다음과 같이 가격만 액세스할 수 있다.
print(btc_price["price"])
하지만 이 방식은 계속해서 가격을 모니터링 하기에는 적합하지 않다. API에 지속적으로 요청하는 것보다 더 나은 솔루션이 있다. Binance WebSocket 이다.
최신 비트코인 가격에 바이낸스 웹소켓 사용하기
Binance WebSocket은 스트림을 열기 위해 명령을 한 번만 보내면 가격이 업데이트됨에 따라 데이터가 자동으로 스트리밍된다.
from time import sleep
from binance import ThreadedWebsocketManager
time 모듈의 sleep 함수와 함께 이 함수를 사용하려면 ThreadedSocketManager를 가져와야 한다.
btc_price = {'error':False}
다음으로 최신 가격 데이터를 보유하고 websocket에 문제가 있는지 알려주는 딕셔너리를 생성한다.
def btc_trade_history(msg):
''' define how to process incoming WebSocket messages '''
if msg['e'] != 'error':
print(msg['c'])
btc_price['last'] = msg['c']
btc_price['bid'] = msg['b']
btc_price['last'] = msg['a']
btc_price['error'] = False
else:
btc_price['error'] = True
그런 다음 소켓 관리자가 새 데이터를 수신할 때 수행할 작업을 알려주는 함수를 만든다.
지금은 마지막 종가를 출력한다.
최신 가격, 입찰 및 요청 외에도 오류 확인 기능이 내장되어 있다. 이를 통해 Binance WebSocket에 오류가 있는지 알려줄 것이며 이 경우 다시 시작해야 한다.
websocket 연결을 프로그래밍하려고 하는데 변수가 무엇을 의미하는지 잘 모르겠다면 Binance API 설명서를 확인해야 한다.
# init and start the WebSocket
bsm = ThreadedWebsocketManager()
bsm.start()
다음 단계는 소켓 관리자를 초기화하는 것이다. 그렇게 하면 라이브러리는 위의 코드 스니펫에서 시작한 새 스레드를 생성한다.
# subscribe to a stream
bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='BTCUSDT')
앞에서 언급된 API의 기능 start_symbol_ticker_socket과 유사한 출력이다 .예시는 BTCUSDT 이다 . btc_trade_history또한 새 메시지가 들어올 때마다 사용자 지정 함수를 호출하도록 지정한다 .
여기까지 잘 따라하고 있다면 위의 코드를 실행하면 화면에 가격 흐름이 표시되어야 한다. 현물 거래 섹션 아래의 바이낸스 웹페이지에 있는 거래 내역 상자 와 비슷하게 보일 것이다 .
바이낸스에는 여러 웹소켓 스트림이 있으며 더 쉽게 추가할 수 있다.
bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='ETHUSDT')
위의 코드 스니펫은 ETHUSDT의 티커 가격을 구독한다. 이 라인은 ETHUSDT에 대한 새 메시지가 도착하면 우리가 만든 것과 동일한 btc_trade_history 함수 에 의해 처리된다 .
WebSocket 사용을 마쳤으면 다음 구문을 사용하여 종료한다.
# stop websocket
bsm.stop()
WebSocket은 다양한 데이터를 전달할 수 있다.
help(ThreadedWebsocketManager)
다음은 start_symbol_ticker_socket의 예이다.
보시다시피 간략한 설명, 해당 기능에 대한 공식 바이낸스 문서 링크 및 반환된 데이터에 대한 세부 정보를 제공한다.
'Project > AlgoTrading' 카테고리의 다른 글
Elliott Wave Analyzer 적용 [1] (0) | 2023.06.12 |
---|---|
Binance API 기초 [4] (0) | 2023.06.07 |
Binance API 기초 [3] (1) | 2023.06.06 |
Binance API 기초 [1] (0) | 2023.06.06 |
Binance API를 이용한 Algorithm trading (0) | 2023.06.04 |