172 lines
3.6 KiB
Markdown
172 lines
3.6 KiB
Markdown
# Unicorn WebSocket 集成说明
|
||
|
||
## 概述
|
||
|
||
已集成 `unicorn-binance-websocket-api`,提供高性能的实时WebSocket数据流支持。
|
||
|
||
## 功能特性
|
||
|
||
### 1. 高性能实时数据流
|
||
- 使用Unicorn库提供更高效的WebSocket连接
|
||
- 支持多路复用流(一个连接订阅多个交易对)
|
||
- 自动重连和错误恢复
|
||
|
||
### 2. 实时价格监控
|
||
- 订阅交易对的实时ticker数据
|
||
- 实时获取最新价格,无需轮询API
|
||
- 支持价格更新回调
|
||
|
||
### 3. K线数据流
|
||
- 订阅实时K线数据
|
||
- 支持多种时间周期(1m, 5m, 15m等)
|
||
- 实时更新K线数据
|
||
|
||
## 配置
|
||
|
||
在 `config.py` 中:
|
||
|
||
```python
|
||
TRADING_CONFIG = {
|
||
# Unicorn WebSocket配置
|
||
'USE_UNICORN_WEBSOCKET': True, # 是否使用Unicorn WebSocket
|
||
}
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 自动启用
|
||
|
||
程序启动时会自动检测并启用Unicorn WebSocket(如果配置为True)。
|
||
|
||
### 2. 订阅实时价格
|
||
|
||
```python
|
||
# 在代码中订阅实时价格
|
||
symbols = ['BTCUSDT', 'ETHUSDT']
|
||
client.subscribe_realtime_prices(symbols, price_callback)
|
||
|
||
# 回调函数
|
||
async def price_callback(symbol, price, price_data):
|
||
print(f"{symbol} 最新价格: {price}")
|
||
```
|
||
|
||
### 3. 获取实时价格
|
||
|
||
```python
|
||
# 获取实时价格(从WebSocket流)
|
||
price = client.get_realtime_price('BTCUSDT')
|
||
if price:
|
||
print(f"BTCUSDT 实时价格: {price}")
|
||
```
|
||
|
||
### 4. 监控价格变化
|
||
|
||
```python
|
||
# 使用market_scanner监控价格
|
||
await scanner.monitor_price('BTCUSDT', price_callback)
|
||
```
|
||
|
||
## 优势
|
||
|
||
### 相比标准WebSocket
|
||
|
||
1. **性能更高**
|
||
- 多路复用:一个连接订阅多个交易对
|
||
- 更低的延迟
|
||
- 更少的资源占用
|
||
|
||
2. **更稳定**
|
||
- 自动重连机制
|
||
- 错误恢复
|
||
- 流管理更完善
|
||
|
||
3. **功能更丰富**
|
||
- 支持多种数据流(ticker, kline等)
|
||
- 流统计信息
|
||
- 更好的数据解析
|
||
|
||
## 回退机制
|
||
|
||
如果Unicorn WebSocket启动失败或不可用,系统会自动回退到标准的`python-binance` WebSocket,确保功能正常。
|
||
|
||
## 注意事项
|
||
|
||
1. **依赖安装**
|
||
```bash
|
||
pip install unicorn-binance-websocket-api==2.4.0
|
||
```
|
||
|
||
2. **测试网支持**
|
||
- 自动检测测试网/生产网环境
|
||
- 使用对应的WebSocket端点
|
||
|
||
3. **资源管理**
|
||
- 程序退出时自动清理所有流
|
||
- 避免资源泄漏
|
||
|
||
4. **性能考虑**
|
||
- 订阅大量交易对时,注意系统资源
|
||
- 建议订阅数量不超过100个
|
||
|
||
## 故障排查
|
||
|
||
### 问题1:Unicorn启动失败
|
||
|
||
**原因**:依赖未安装或版本不兼容
|
||
**解决**:
|
||
```bash
|
||
pip install unicorn-binance-websocket-api==2.4.0
|
||
```
|
||
|
||
### 问题2:无法获取实时价格
|
||
|
||
**原因**:未订阅该交易对
|
||
**解决**:先调用 `subscribe_realtime_prices()` 订阅
|
||
|
||
### 问题3:流数据丢失
|
||
|
||
**原因**:处理速度跟不上数据产生速度
|
||
**解决**:检查回调函数是否阻塞,优化处理逻辑
|
||
|
||
## 示例代码
|
||
|
||
```python
|
||
# 订阅多个交易对的实时价格
|
||
symbols = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT']
|
||
|
||
async def on_price_update(symbol, price, price_data):
|
||
print(f"{symbol}: {price}")
|
||
# 可以在这里实现交易逻辑
|
||
|
||
# 订阅
|
||
client.subscribe_realtime_prices(symbols, on_price_update)
|
||
|
||
# 获取实时价格
|
||
btc_price = client.get_realtime_price('BTCUSDT')
|
||
print(f"BTC价格: {btc_price}")
|
||
```
|
||
|
||
## 技术细节
|
||
|
||
### 流管理
|
||
|
||
- 每个交易对对应一个stream_id
|
||
- 支持动态添加/删除订阅
|
||
- 自动管理流的生命周期
|
||
|
||
### 数据处理
|
||
|
||
- 异步处理流数据
|
||
- 支持多个回调函数
|
||
- 自动解析数据格式
|
||
|
||
### 性能优化
|
||
|
||
- 使用缓冲区减少API调用
|
||
- 批量处理数据
|
||
- 异步非阻塞处理
|
||
|
||
## 更新日志
|
||
|
||
- 2026-01-13:初始集成Unicorn WebSocket支持
|