auto_trade_sys/UNICORN_WEBSOCKET.md
薇薇安 8a89592cb5 a
2026-01-13 17:30:59 +08:00

172 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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个
## 故障排查
### 问题1Unicorn启动失败
**原因**:依赖未安装或版本不兼容
**解决**
```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支持