feat: 重构为三所价差异动监控系统
删除 HyperLiquid + 全部交易功能,构建自适应 surge 检测器。 - 新增 surge_detector.go: 每币独立滚动窗口基线,检测三所价差异常飙升 - 新增 SpreadCard/SurgeCard 前端组件 - 保留 momentum/trend/cumulative/trend_filter 扫描功能 - 更新文档和配置以反映新系统 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
559d7bb870
commit
d38782490c
@@ -1,33 +1,38 @@
|
||||
# ⚡ 跨交易所永续合约套利监控
|
||||
# 三所价差异动监控
|
||||
|
||||
Bitget ↔ HyperLiquid 跨交易所永续合约价差套利系统。支持模拟盘/实盘交易、价差监控、自动开仓/加仓/平仓、Web 仪表盘。
|
||||
Binance + OKX + Bitget 三交易所价差异动实时检测系统。通过追踪不同交易所之间的价差异常,捕捉币价「启动」的瞬间。
|
||||
|
||||
## 功能特点
|
||||
|
||||
- **实时价差监控** — 200ms 扫描间隔,追踪 DOGE/LINK/ONDO/OP/WIF/ARB 六个币种
|
||||
- **自动套利交易** — 价差超过阈值自动开仓,收敛自动平仓,支持多级加仓
|
||||
- **模拟/实盘双模式** — `TestMode` 控制,模拟模式无需真实 API Key
|
||||
- **三所价差扫描** — 实时计算 Binance/OKX/Bitget 之间的最大价差,按价差排序展示
|
||||
- **自适应 Surge 检测** — 每个币维护独立的滚动窗口基线,检测价差异常飙升
|
||||
- **方向判断** — 根据领先交易所判断上涨/下跌启动方向
|
||||
- **动量扫描** — 多时间窗口 (1s/5s/15s/60s) 价格变动率追踪
|
||||
- **趋势检测** — 跨交易所一致性确认的趋势状态机 (idle→alert→confirmed→exhausting)
|
||||
- **累积变动** — 1m/5m/1h 多交易所共识变动追踪
|
||||
- **趋势过滤** — K 线数据 + EMA52 趋势过滤,识别安静后的异动
|
||||
- **Web 仪表盘** — Go 内置 HTTP Server + Vite React 前端,SSE 实时推送
|
||||
- **SQLite 持久化** — 交易记录、订单明细、手续费明细全量存储
|
||||
- **手续费精确计算** — 逐笔累加实际 USD 手续费(开仓费+平仓费),非百分比估算
|
||||
- **交易所独立资金管理** — 每交易所 $500 初始资金,开仓前检查两边余额充足
|
||||
- **模拟滑点** — 可配置 `mock_slippage_pct`,模拟真实滑点对净利的影响
|
||||
- **持仓详情弹窗** — 点击持仓卡片查看完整交易详情(价差、PnL、手续费分腿)
|
||||
- **Telegram 通知** — 开仓/平仓/异常实时推送
|
||||
- **SQLite 持久化** — Surge 事件、累积变动事件全量存储
|
||||
|
||||
## 架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ scanner.go ← 每 200ms 扫描价差 │
|
||||
│ ↓ 发现机会 (NetProfit > 阈值) │
|
||||
│ trader.go ← 开仓/加仓/平仓逻辑 │
|
||||
│ ↓ 持久化 │
|
||||
│ db/ ← SQLite (trades / orders / system) │
|
||||
│ ↓ SSE 推送 │
|
||||
│ dashboard.go ← HTTP Server :8888 │
|
||||
│ ↓ │
|
||||
│ frontend/ ← Vite + React 仪表盘 │
|
||||
│ Exchange WS (Bitget + Binance + OKX) │
|
||||
│ ↓ 价格推送 │
|
||||
│ PriceStore ← 内存价格存储 │
|
||||
│ ↓ │
|
||||
│ scanner.go ← 三所价差扫描 │
|
||||
│ ↓ │
|
||||
│ surge_detector.go ← 自适应Surge检测 │
|
||||
│ momentum.go ← 动量扫描 │
|
||||
│ trend.go ← 趋势检测 │
|
||||
│ cumulative.go ← 累积变动追踪 │
|
||||
│ trend_filter.go ← K线趋势过滤 │
|
||||
│ ↓ SSE 推送 │
|
||||
│ dashboard.go ← HTTP Server :8888 │
|
||||
│ ↓ │
|
||||
│ frontend/ ← Vite + React 仪表盘 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -39,22 +44,29 @@ Bitget ↔ HyperLiquid 跨交易所永续合约价差套利系统。支持模拟
|
||||
|
||||
```json
|
||||
{
|
||||
"arb_threshold": 0.3,
|
||||
"scan_interval_ms": 200,
|
||||
"trade_enabled": true,
|
||||
"test_mode": true,
|
||||
"trade_threshold": 0.20,
|
||||
"take_profit_pct": 0.20,
|
||||
"mock_slippage_pct": 0.05,
|
||||
"trade_amount_usd": 5,
|
||||
"max_positions": 5,
|
||||
"initial_capital": 500,
|
||||
"taker_fee_bitget": 0.060,
|
||||
"taker_fee_hyperliquid": 0.045,
|
||||
"telegram_bot_token": "xxx",
|
||||
"telegram_chat_id": "xxx"
|
||||
"alert_cooldown_sec": 300,
|
||||
"surge_enabled": true,
|
||||
"surge_window_size": 600,
|
||||
"surge_baseline_multiplier": 3.0,
|
||||
"surge_min_abs_spread_pct": 0.05,
|
||||
"surge_cooldown_sec": 60,
|
||||
"momentum_enabled": true,
|
||||
"momentum_threshold_pct": 0.25,
|
||||
"trend_enabled": true,
|
||||
"trend_baseline_window": 600,
|
||||
"trend_anomaly_mul": 3.0,
|
||||
"trend_confirm_ticks": 3,
|
||||
"trend_alert_cooldown_ms": 60000
|
||||
}
|
||||
```
|
||||
|
||||
环境变量 (`.env`):
|
||||
- `BITGET_API_KEY`, `BITGET_API_SECRET`, `BITGET_PASSPHRASE` — Bitget API
|
||||
- `BINANCE_API_KEY`, `BINANCE_API_SECRET` — Binance API (可选,用于K线)
|
||||
- `HTTPS_PROXY` — 网络代理 (国内环境需要)
|
||||
|
||||
### 2. 启动
|
||||
|
||||
```bash
|
||||
@@ -79,54 +91,28 @@ npm run dev # 开发模式 (Vite HMR :5173)
|
||||
npm run build # 构建生产版本
|
||||
```
|
||||
|
||||
后端优先从 `frontend/dist/` 读取静态文件(热加载),回退到 Go embed。
|
||||
|
||||
## 配置参数
|
||||
|
||||
| 参数 | 说明 | 默认 |
|
||||
|------|------|------|
|
||||
| `scan_interval_ms` | 扫描间隔 (ms) | 200 |
|
||||
| `trade_threshold` | 开仓净利阈值 (%) | 0.20 |
|
||||
| `take_profit_pct` | 止盈净利 (%) | 0.20 |
|
||||
| `mock_slippage_pct` | 模拟滑点 (%) | 0.05 |
|
||||
| `trade_amount_usd` | 每腿交易额 ($) | 5 |
|
||||
| `max_positions` | 最大并行持仓 | 5 |
|
||||
| `taker_fee_bitget` | Bitget 吃单费率 (%) | 0.060 |
|
||||
| `taker_fee_hyperliquid` | HyperLiquid 吃单费率 (%) | 0.045 |
|
||||
| `scale_step_pct` | 加仓步长 (%) | 0.10 |
|
||||
| `position_timeout` | 最长持仓时间 | 10m |
|
||||
| `leg_delay` | 两腿下单间隔 | 300ms |
|
||||
| `initial_capital` | 每交易所初始资金 ($) | 500 |
|
||||
| `surge_enabled` | 启用 Surge 检测 | true |
|
||||
| `surge_window_size` | 滚动窗口样本数 | 600 |
|
||||
| `surge_baseline_multiplier` | 基线倍数(阈值 = 基线 × N) | 3.0 |
|
||||
| `surge_min_abs_spread_pct` | 最小绝对价差 % | 0.05 |
|
||||
| `surge_cooldown_sec` | 同币冷却秒数 | 60 |
|
||||
| `momentum_enabled` | 启用动量扫描 | true |
|
||||
| `trend_enabled` | 启用趋势检测 | true |
|
||||
| `trend_baseline_window` | 趋势基线窗口 | 600 |
|
||||
| `trend_anomaly_mul` | 异常检测倍数 | 3.0 |
|
||||
| `trend_confirm_ticks` | 确认所需次数 | 3 |
|
||||
|
||||
## 数据库
|
||||
|
||||
SQLite (`data/trades.db`),三张核心表:
|
||||
SQLite (`data/trades.db`),核心表:
|
||||
|
||||
| 表 | 说明 |
|
||||
|----|------|
|
||||
| `trades` | 交易主表 — 价差、PnL、手续费 ($) |
|
||||
| `orders` | 订单明细 — 每腿的开仓/加仓/平仓、手续费 ($) |
|
||||
| `system_orders` | 系统订单 — 双向关联 long↔short 订单 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
### v1.3 (当前)
|
||||
- ✨ **交易所独立资金管理** — 每交易所 $500 初始资金,开仓前检查余额
|
||||
- ✨ **持仓点击详情弹窗** — 点击持仓卡片弹出完整交易详情
|
||||
- ✨ **模拟滑点** — 新增 `mock_slippage_pct` 配置,模拟真实成交滑点
|
||||
- ✨ **止损硬编码** — 取消 `SpreadReverseExitPct` 配置,价差 <= 0 硬止损
|
||||
- 🐛 修复 DB 迁移 tab 字符损坏导致历史交易数据不显示
|
||||
- 📊 PnL 统计分腿存储(`pnl_long_usd`/`pnl_short_usd`/`fee_long_usd`/`fee_short_usd`)
|
||||
|
||||
### v1.2.1
|
||||
- ✨ scale-in 后 leg.EntryPrice 更新为加权平均(`weightedAvgPrice`)
|
||||
- ✨ 进程重启恢复仓位时,从 `orders` 表加载 scale prices,重建完整价格切片
|
||||
- ✨ 新增 `GetScalePrices()` DB 方法
|
||||
|
||||
### v1.2
|
||||
- ✨ `system_orders` 表,记录系统级开仓/加仓/平仓
|
||||
- ✨ 手续费改为逐笔累加 USD,不再用百分比估算
|
||||
- ✨ Vite + React 前端,支持热加载
|
||||
- ✨ Web 仪表盘持仓 PnL 美元化显示
|
||||
- 🐛 修复 `persistTrade` 费用在 `SaveTrade` 后才累加导致 fee=0 的 bug
|
||||
- 🗑 移除老版 Chart.js 图表
|
||||
| `surge_events` | Surge 异动事件 — 币种、价格、价差、方向、领先交易所 |
|
||||
| `cm_events` | 累积变动事件 — 1m/5m/1h 多所共识变动 |
|
||||
| `trend_events` | 趋势状态变迁 — idle→alert→confirmed→exhausting 全生命周期 |
|
||||
| `trend_signals` | 趋势过滤信号 — K 线安静 + EMA 异动信号记录 |
|
||||
|
||||
Reference in New Issue
Block a user