Files
exchange-monitor-go/README.md
T
jackyu66git 5aedcb6566 修复 scale-in 后 leg.EntryPrice 不更新 + 重启恢复时加载 scale prices
- trader.go: scale-in 后用 weightedAvgPrice 更新 LongLeg/ShortLeg.EntryPrice
- trader.go: restoreOpenPositions 从 orders 表加载 scale prices 重建完整价格切片
- db/trade_repo.go: 新增 GetScalePrices(tradeID) 方法
- README: v1.2.1 版本记录
2026-05-04 06:06:37 +08:00

4.0 KiB
Raw Blame History

跨交易所永续合约套利监控

Bitget ↔ HyperLiquid 跨交易所永续合约价差套利系统。支持模拟盘/实盘交易、价差监控、自动开仓/加仓/平仓、Web 仪表盘。

功能特点

  • 实时价差监控 — 200ms 扫描间隔,追踪 DOGE/LINK/ONDO/OP/WIF/ARB 六个币种
  • 自动套利交易 — 价差超过阈值自动开仓,收敛自动平仓,支持多级加仓
  • 模拟/实盘双模式TestMode 控制,模拟模式无需真实 API Key
  • Web 仪表盘 — Go 内置 HTTP Server + Vite React 前端,SSE 实时推送
  • SQLite 持久化 — 交易记录、订单明细、手续费明细全量存储
  • 手续费精确计算 — 逐笔累加实际 USD 手续费(开仓费+平仓费),非百分比估算
  • 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.10,
  "take_profit_pct": 0.20,
  "trade_amount_usd": 5,
  "max_positions": 5,
  "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.10
take_profit_pct 止盈净利 (%) 0.20
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

数据库

SQLite (data/trades.db),三张核心表:

说明
trades 交易主表 — 价差、PnL、手续费 ($)
orders 订单明细 — 每腿的开仓/加仓/平仓、手续费 ($)
system_orders 系统订单 — 双向关联 long↔short 订单

版本历史

v1.2.1 (当前)

  • scale-in 后 leg.EntryPrice 更新为加权平均(weightedAvgPrice
  • 进程重启恢复仓位时,从 orders 表加载 scale prices,重建完整价格切片
  • 新增 GetScalePrices() DB 方法
  • 见 v1.2

v1.2

  • system_orders 表,记录系统级开仓/加仓/平仓
  • 手续费改为逐笔累加 USD,不再用百分比估算
  • Vite + React 前端,支持热加载
  • Web 仪表盘持仓 PnL 美元化显示
  • 🐛 修复 persistTrade 费用在 SaveTrade 后才累加导致 fee=0 的 bug
  • 🗑 移除老版 Chart.js 图表