8ccb439f7a9d10db7ed25105af6b3dcd637313ba
- Remove insecure HTTP API endpoints (positions, close, close-all, pnl) - Add Unix socket IPC at /tmp/exchange-monitor.sock - Add CLI subcommands: status, close-all, close <COIN>, stop, start - Bind dashboard HTTP to 127.0.0.1:8888 (localhost only)
⚡ 跨交易所永续合约套利监控
Bitget ↔ HyperLiquid 跨交易所永续合约价差套利系统。支持模拟盘/实盘交易、价差监控、自动开仓/加仓/平仓、Web 仪表盘。
功能特点
- 实时价差监控 — 200ms 扫描间隔,追踪 DOGE/LINK/ONDO/OP/WIF/ARB 六个币种
- 自动套利交易 — 价差超过阈值自动开仓,收敛自动平仓,支持多级加仓
- 模拟/实盘双模式 —
TestMode控制,模拟模式无需真实 API Key - Web 仪表盘 — Go 内置 HTTP Server + Vite React 前端,SSE 实时推送
- SQLite 持久化 — 交易记录、订单明细、手续费明细全量存储
- 手续费精确计算 — 逐笔累加实际 USD 手续费(开仓费+平仓费),非百分比估算
- 交易所独立资金管理 — 每交易所 $500 初始资金,开仓前检查两边余额充足
- 模拟滑点 — 可配置
mock_slippage_pct,模拟真实滑点对净利的影响 - 持仓详情弹窗 — 点击持仓卡片查看完整交易详情(价差、PnL、手续费分腿)
- Telegram 通知 — 开仓/平仓/异常实时推送
架构
┌─────────────────────────────────────────────────┐
│ scanner.go ← 每 200ms 扫描价差 │
│ ↓ 发现机会 (NetProfit > 阈值) │
│ trader.go ← 开仓/加仓/平仓逻辑 │
│ ↓ 持久化 │
│ db/ ← SQLite (trades / orders / system) │
│ ↓ SSE 推送 │
│ dashboard.go ← HTTP Server :8888 │
│ ↓ │
│ frontend/ ← Vite + React 仪表盘 │
└─────────────────────────────────────────────────┘
快速开始
1. 配置
编辑 config.json:
{
"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"
}
2. 启动
# 一键启动(自动清理旧进程 + 编译 + 运行)
bash start.sh
# 清空数据库 + 启动
bash start.sh --clean
# 强制重新编译 + 启动
bash start.sh --rebuild
仪表盘地址:http://localhost:8888
3. 前端开发
cd frontend
npm install
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 |
数据库
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 图表
Languages
Go
73.6%
JavaScript
20.2%
CSS
4.6%
Shell
1.1%
HTML
0.5%