jackyu66git ccfa27b1a6 fix: scanner netProfit 漏算exit fees + 孤儿仓位标记failed
- scanner.go: netProfit 扣费改为 2*(buyFee+sellFee) 匹配 calcArbPnL
- trader.go: 第二腿失败时设 pos.Status=failed,避免语义混淆
2026-05-04 06:39:24 +08:00
2026-05-03 16:54:36 +08:00
2026-05-03 17:28:08 +08:00
2026-05-03 17:28:08 +08:00
2026-05-03 16:54:36 +08:00
2026-05-03 16:54:36 +08:00

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

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 图表
S
Description
No description provided
Readme
33 MiB
Languages
Go 73.6%
JavaScript 20.2%
CSS 4.6%
Shell 1.1%
HTML 0.5%