How to Connect to Binance WebSocket Using Python
Binance, a leading cryptocurrency exchange, offers a comprehensive set of APIs that enable developers and traders to interact with its platform programmatically. Among these APIs, the WebSocket API is particularly useful for real-time streaming data from Binance. This article will guide you through connecting to Binance's WebSocket in Python, allowing you to receive live order book updates, trades, and other relevant information instantly.
Understanding Binance WebSocket
Binance WebSocket offers a way to stream live trade and order book data without the need for pagination or batch requests. This real-time feed is crucial for high-frequency trading applications, API analytics tools, and any project that requires continuous updates on market activity. The WebSocket connection allows you to subscribe to different types of streams:
1. Symbol Ticker: Real-time update of the last trade price.
2. Aggregate Ticker: Real-time update of the average, best bid, and best ask prices.
3. Mini Chart Aggregate Ticker: A simplified version of the ticker stream for quick reference at a glance.
4. Raw Aggregate Ticker: Raw representation of aggregate data.
5. Order Book Depth Update: Real-time update of order book depth.
6. Trades Stream: Real-time updates of all trades executed on any symbol.
7. Candlestick Stream: Periodic real-time updates of the latest minute candlestick.
8. Symbol Book Ticker Aggregated Statistics Data Stream: Aggregated statistics data of the specific symbol.
9. Symbol Daily Aggregated Statistics Data Stream: Real-time update of daily aggregated statistic data.
10. Symbol Hourly Aggregated Statistics Data Stream: Real-time updates for hourly aggregated statistical data.
Python Libraries Needed
To connect to Binance WebSocket using Python, you will need the `websockets` and `json` libraries. You can install them via pip:
```bash
pip install websockets json
```
Connecting to Binance WebSocket in Python
Firstly, ensure that your API Key is properly set up on your Binance account. Once done, follow these steps to establish a connection with the Binance WebSocket API using Python:
1. Import Required Libraries: `json` for JSON serialization and `websockets` for handling websocket connections.
2. Create a WebSocket URL: This is based on your subscribed symbol and the type of data stream you're interested in. The base URL for Binance WebSocket is `wss://fstream.binance.com/ws/SYMBOL@LIVE`, where `SYMBOL` is the ticker symbol of interest (e.g., BTCUSDT) and `LIVE` denotes the type of data stream.
3. Open the WebSocket Connection: Use `websockets.connect()` to open a connection with the URL.
4. Subscribe to Data Streams: Provide the required subscription parameters in JSON format using the `json.dumps()` function before sending them through the WebSocket.
5. Receive Real-Time Updates: The WebSocket will automatically send updates, which you can receive and process as needed.
Example Code Snippet:
```python
import json
import websockets
def on_message(ws, message):
print('Message received:', message)
data = json.loads(message)
print('Processing the data')
def connect_to_websocket():
Define your API key here
api_key = 'YOUR_API_KEY'
secret_key = 'YOUR_SECRET_KEY'
Generate a HMAC SHA256 signature for WebSocket URL
import hmac, hashlib, base64
signature = hmac.new(
base64.b64decode(secret_key),
msg=json.dumps({'apiKey': api_key}).encode('utf-8'),
digestmod=hashlib.sha256
)
signature = base64.b64encode(signature.digest())
Construct the WebSocket URL with signature
url = f"wss://fstream.binance.com/ws/BTCUSDT@bookTicker?apikey={api_key}{signature}"
print('WebSocket URL:', url)
Open websocket connection
async def main():
async with websockets.connect(url) as server:
await server.send(json.dumps({'event': 'subscribe', 'symbol': 'BTCUSDT@bookTicker'}))
while True:
message = await server.recv()
print('Message received:', message)
asyncio.run(main())
if __name__ == "__main__":
connect_to_websocket()
```
Error Handling and Continuous Connection
In a production environment, it's essential to handle potential errors gracefully, including connection drops due to server restarts or network issues. You might want to implement error handling within the `on_message` function and include logic for reconnection attempts.
Conclusion
Connecting to Binance WebSocket in Python opens up a world of possibilities for real-time analysis of market data, enabling developers to build robust trading bots or sophisticated analytics applications. This guide has provided a solid foundation on how to establish this connection, but the versatility of Binance's API allows for even more complex integrations and customizations based on your project requirements. Happy coding!