본문 바로가기

Project/AlgoTrading

Binance API 기초 [2]

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