Cross-Exchange Funding Rate Arbitrage v2
Cron 驱动的跨交易所资金费率套利机器人。核心思路:在费率低的交易所做多永续合约,在费率高的交易所做空永续合约,两腿等量 delta-neutral,赚取 funding spread。
数据源:VarFunding API(预计算的跨所套利机会)。执行层:Hyperliquid SDK(EIP-712 私钥签名)+ Binance Futures API(HMAC 签名)。
每个 tick:扫描机会 → 稳定性验证 → 深度验证 → 开仓/维护 → 报告。
Architecture
CODEBLOCK0
Pipeline: Execution Steps
Step 0: Prerequisites
- - Python 3.10+
- INLINECODE0
- INLINECODE1
- INLINECODE2
- INLINECODE3
- Hyperliquid 账户 + 私钥(主账户或 Agent Wallet)
- Binance Futures 账户 + API Key/Secret(需 USDT-M 交易权限)
Step 1: Price & Rate Scanning
Goal: 从 VarFunding API 获取跨所套利机会
Actions:
- 1. 调用
VarFundingScanner.fetch_opportunities() 获取 HL × Binance 的套利机会 - 过滤:估计 APR ≥
min_apr_pct,置信度 ≥ INLINECODE6 - 按 APR 降序排列,取 Top 5
Gate:
- - [ ] 至少有一个机会满足 APR 和置信度门槛
- [ ] 无机会 → 输出
action: idle,等待下一 tick
Step 2: Stability Verification
Goal: 防止瞬时费率波动导致错误开仓
Actions:
- 1. 将 Top 5 机会记录为费率快照(state 中保留最近 20 条)
- 按币种分组,检查同一币种的快照数 ≥
stability_snapshots(默认 3) - 计算 spread 的标准差占比
std/avg,须 < stability_max_std_ratio(默认 0.3)
Gate:
- - [ ] 存在至少一个币种通过稳定性检查
- [ ] 未通过 → 输出
action: accumulating,继续积累快照
Step 3: Deep Verification
Goal: 独立验证两所实际费率 + 价格差 + 往返成本
Actions:
- 1. 分别从 HL 和 Binance 获取实时费率和中间价
- 计算实际 spread = shortrate − longrate
- 计算价格差异 INLINECODE12
- 计算净 APR = grossannual − roundtripcostpct
Gate (ALL must pass):
- - [ ] 实际 spread > 0
- [ ] 价格差异 <
max_price_basis_pct(默认 0.5%) - [ ] 净 APR ≥
min_apr_pct(默认 10%) - [ ] 任一失败 → 输出
action: rejected + 原因
Step 4: Atomic Execution
Goal: 原子开仓,先 HL 后 Binance,失败自动回滚
Actions:
- 1. 计算 size: INLINECODE16
- 两所分别 round_size,取较小值
- 两所设杠杆
- 先下 HL 单(分级保证金限制更严,失败代价低)
- 使用 LIMIT IOC 模拟市价,滑点 0.1%
- Insufficient margin → 自动减半 size 重试(最多 3 次)
- 5. 再下 Binance 单
- Binance 失败 → 自动回滚 HL 腿(close_position)
- 6. 保存完整开仓状态 + 两所初始余额
Gate:
- - [ ] 两腿均成功开仓
- [ ] HL 失败 → 不开 Binance,直接终止
- [ ] Binance 失败 → 回滚 HL 腿,发出 rollback 通知
Step 5: Health Monitoring & Auto-Switch
Goal: 持仓期间持续监控,spread 不利或缺腿时自动处理
每 tick 检查:
- 1. Delta 检查:两腿 size 偏差 < 20%
- Spread 检查:当前 spread >
close_spread_threshold(默认 0.005%) - 双腿检查:两所都有持仓
自动处理:
- - Spread 不利(< threshold)→ 平仓(先平 short,后平 long)
- 缺腿 → 平仓 + riskalert 通知
- 健康 → 缓存快照,每小时推送 hourlypulse
切仓逻辑:
- - 持仓中发现更好机会:当前 APR vs 新机会 APR 差距 >
switch_threshold_apr → 平仓 → 下个 tick 自动开新仓
Tunable Parameters
Cross Funding Configuration
| Parameter | Default | Description |
|---|
| INLINECODE19 | INLINECODE20 | Hyperliquid 单边预算 (USDC),0 = 自动读取账户余额 |
| INLINECODE21 |
0 | Binance 单边预算 (USDT),0 = 自动读取账户余额 |
|
min_apr_pct |
10.0 | 最低年化收益率门槛 (%) |
|
min_confidence |
"medium" | VarFunding 最低置信度 (low/medium/high) |
|
leverage |
1 | 杠杆倍数(默认无杠杆) |
|
stability_snapshots |
3 | 稳定性验证所需快照数 |
|
stability_max_std_ratio |
0.3 | Spread 标准差/均值上限 |
|
close_spread_threshold |
0.0001 | 平仓 spread 下限(8h 费率差,≈10.95% APR) |
|
switch_threshold_apr |
5.0 | 切仓 APR 差距门槛 (%) |
|
max_price_basis_pct |
0.5 | 两所价格差异上限 (%) |
|
round_trip_cost_pct |
0.12 | 往返成本 (%, 含手续费+滑点) |
Shared Configuration
| Parameter | Default | Description |
|---|
| INLINECODE41 | INLINECODE42 | 连续错误触发熔断 |
| INLINECODE43 |
3600 | 熔断冷却时间 (秒) |
|
min_order_usd |
10 | 最小下单金额 (USD) |
Environment Variables
| Variable | Required | Description |
|---|
| INLINECODE47 | ✅ | Hyperliquid 私钥(主账户或 Agent Wallet) |
| INLINECODE48 |
❌ | Agent Wallet 的 master 地址 |
|
HL_TESTNET | ❌ |
true 使用测试网 |
|
BINANCE_API_KEY | ✅ | Binance Futures API Key |
|
BINANCE_SECRET_KEY | ✅ | Binance Futures API Secret |
|
BINANCE_TESTNET | ❌ |
true 使用测试网 |
|
DISCORD_BOT_TOKEN | ❌ | Discord 通知 bot token |
|
DISCORD_CHANNEL_ID | ❌ | Discord 目标频道 ID |
|
TELEGRAM_BOT_TOKEN | ❌ | Telegram 通知 bot token |
|
TELEGRAM_CHAT_ID | ❌ | Telegram 目标 chat ID |
Operational Interface
| Command | Description | Typical Use |
|---|
| INLINECODE59 | 主循环:扫描 → 验证 → 开仓/维护 | Cron 每 5 分钟 |
| INLINECODE60 |
生成日报(含 PnL、余额、费率) | Cron 每天 00:00 UTC |
|
status | 当前状态(优先读缓存) | 手动查询 |
CODEBLOCK1
Notification Tiers
| Tier | When | Color | Key Fields |
|---|
| INLINECODE62 | 开仓/平仓 | 🟢 Green / 🟠 Orange | Long/Short 交易所, Size, Spread, APR |
| INLINECODE63 |
Spread 不利/缺腿/熔断 | 🔴 Red | 原因, 当前 APR, Delta 偏差 |
|
hourly_pulse | 每小时(持仓中) | ⚪ Grey | 两所余额, 费率, Spread, PnL |
|
daily_report | 每日报告 | 🔵 Blue | 持仓详情, 总资产, ROI, 年化 |
通知同时推送 Discord embed + Telegram markdown。凭证解析优先级:环境变量 > OpenClaw openclaw.json > ZeroClaw config.toml。未配置时静默跳过。
State Schema
CODEBLOCK2
Core Algorithm
CODEBLOCK3
Risk Control
| Layer | Check | Action |
|---|
| 稳定性验证 | 费率快照 std_ratio < 0.3 | 阻止开仓,继续积累 |
| 深度验证 |
实际 spread > 0, 价格差 < 0.5%, APR ≥ 门槛 | 拒绝不合格机会 |
| 保守预算 | 只用 min(两所预算) × 50% | 预留安全余量 |
| 滑点控制 | 市价单滑点 0.1%(非常规 5%) | 降低套利成本 |
| HL Margin 重试 | Insufficient margin → size 减半,最多 3 次 | 适应分级保证金 |
| 原子回滚 | BN 失败 → 自动平 HL | 防止单腿裸露 |
| Delta 监控 | 两腿偏差 > 20% → 告警 | 发现脱钩 |
| Spread 监控 | spread < threshold → 自动平仓 | 防止费率反转亏损 |
| 熔断器 | 连续 5 错 → 冷却 1h | 防止连环失败 |
Failure & Rollback
CODEBLOCK4
Anti-Patterns
| Pattern | Problem |
|---|
| 不做稳定性验证直接开仓 | 瞬时费率波动导致开仓即亏 |
| 滑点设太大(>1%) |
套利利润被滑点吞噬 |
| 两所预算差太大 | 大腿 size 受限于小腿,资金利用率低 |
| 忽略价格差异 | 两所标记价差异大时 delta 不中性 |
| 不检查双腿一致性 | 单腿被清算另一腿裸露 |
| 杠杆过高 | 小币波动大,保证金不足被强平 |
| 只看 VarFunding 不独立验证 | API 数据可能滞后于实际费率 |
| 熔断后手动重启不排查 | 掩盖系统性问题 |
Data Source: VarFunding API
CODEBLOCK5
Deployment
安装后脚本位于标准 skill 目录,无需手动拷贝。
CODEBLOCK6
安装后配置:将 .env 放到 references/ 目录(与 cross_funding.py 同级):
CODEBLOCK7
OpenClaw Cron
CODEBLOCK8
ZeroClaw Cron
CODEBLOCK9
Manual
CODEBLOCK10
Install
CODEBLOCK11
Security Notice
安装时可能出现安全扫描告警(需 --force),这是误报。
本技能是交易策略,代码中涉及的"可疑模式"均为正常业务需求:
| 被标记的模式 | 实际用途 | 安全性 |
|---|
INLINECODE72 / secret_key / INLINECODE74 | 交易所 API 凭证变量名 | 全部通过 .env 环境变量注入,代码中无硬编码密钥 |
| INLINECODE76 + INLINECODE77 |
Binance Futures API 请求签名 | 标准 HMAC-SHA256 签名,
Binance 官方要求 |
| 外部 HTTP 请求 | 调用 Binance / Hyperliquid / VarFunding / Discord / Telegram API | 仅与已知交易所和通知服务通信 |
|
bot_token /
chat_id | Discord / Telegram 通知推送凭证 | 可选功能,未配置时静默跳过 |
代码中不包含:eval / exec / subprocess / os.system / 文件系统扫描 / 动态代码加载 / 数据外泄逻辑。
如需审查,完整源码位于 references/cross_funding.py(单文件,约 2400 行)。
跨交易所资金费率套利 v2
Cron 驱动的跨交易所资金费率套利机器人。核心思路:在费率低的交易所做多永续合约,在费率高的交易所做空永续合约,两腿等量 delta-neutral,赚取 funding spread。
数据源:VarFunding API(预计算的跨所套利机会)。执行层:Hyperliquid SDK(EIP-712 私钥签名)+ Binance Futures API(HMAC 签名)。
每个 tick:扫描机会 → 稳定性验证 → 深度验证 → 开仓/维护 → 报告。
架构
VarFunding API ──→ Scanner ──→ 稳定性验证 ──→ 深度验证
│
┌─────────────────────────┘
↓
CrossFundingEngine
/ \
HLClient BinanceClient
(EIP-712) (HMAC-SHA256)
| |
Hyperliquid Binance Futures
(永续合约) (USDT-M 永续)
流水线:执行步骤
步骤 0:前置条件
- - Python 3.10+
- hyperliquid-python-sdk >= 0.21.0
- eth-account >= 0.13.7
- python-dotenv >= 1.0.0
- requests >= 2.31.0
- Hyperliquid 账户 + 私钥(主账户或 Agent Wallet)
- Binance Futures 账户 + API Key/Secret(需 USDT-M 交易权限)
步骤 1:价格与费率扫描
目标:从 VarFunding API 获取跨所套利机会
操作:
- 1. 调用 VarFundingScanner.fetchopportunities() 获取 HL × Binance 的套利机会
- 过滤:估计 APR ≥ minaprpct,置信度 ≥ minconfidence
- 按 APR 降序排列,取 Top 5
门控:
- - [ ] 至少有一个机会满足 APR 和置信度门槛
- [ ] 无机会 → 输出 action: idle,等待下一 tick
步骤 2:稳定性验证
目标:防止瞬时费率波动导致错误开仓
操作:
- 1. 将 Top 5 机会记录为费率快照(state 中保留最近 20 条)
- 按币种分组,检查同一币种的快照数 ≥ stabilitysnapshots(默认 3)
- 计算 spread 的标准差占比 std/avg,须 < stabilitymaxstdratio(默认 0.3)
门控:
- - [ ] 存在至少一个币种通过稳定性检查
- [ ] 未通过 → 输出 action: accumulating,继续积累快照
步骤 3:深度验证
目标:独立验证两所实际费率 + 价格差 + 往返成本
操作:
- 1. 分别从 HL 和 Binance 获取实时费率和中间价
- 计算实际 spread = shortrate − longrate
- 计算价格差异 pricebasispct = |hlprice − bnprice| / avgprice
- 计算净 APR = grossannual − roundtripcost_pct
门控(全部必须通过):
- - [ ] 实际 spread > 0
- [ ] 价格差异 < maxpricebasispct(默认 0.5%)
- [ ] 净 APR ≥ minapr_pct(默认 10%)
- [ ] 任一失败 → 输出 action: rejected + 原因
步骤 4:原子执行
目标:原子开仓,先 HL 后 Binance,失败自动回滚
操作:
- 1. 计算 size:min(hlbudget, bnbudget) × 0.5 × 0.95 × leverage / price
- 两所分别 round_size,取较小值
- 两所设杠杆
- 先下 HL 单(分级保证金限制更严,失败代价低)
- 使用 LIMIT IOC 模拟市价,滑点 0.1%
- Insufficient margin → 自动减半 size 重试(最多 3 次)
- 5. 再下 Binance 单
- Binance 失败 → 自动回滚 HL 腿(close_position)
- 6. 保存完整开仓状态 + 两所初始余额
门控:
- - [ ] 两腿均成功开仓
- [ ] HL 失败 → 不开 Binance,直接终止
- [ ] Binance 失败 → 回滚 HL 腿,发出 rollback 通知
步骤 5:健康监控与自动切换
目标:持仓期间持续监控,spread 不利或缺腿时自动处理
每 tick 检查:
- 1. Delta 检查:两腿 size 偏差 < 20%
- Spread 检查:当前 spread > closespreadthreshold(默认 0.005%)
- 双腿检查:两所都有持仓
自动处理:
- - Spread 不利(< threshold)→ 平仓(先平 short,后平 long)
- 缺腿 → 平仓 + riskalert 通知
- 健康 → 缓存快照,每小时推送 hourlypulse
切仓逻辑:
- - 持仓中发现更好机会:当前 APR vs 新机会 APR 差距 > switchthresholdapr → 平仓 → 下个 tick 自动开新仓
可调参数
跨资金费率配置
| 参数 | 默认值 | 描述 |
|---|
| hlbudgetusd | 0 | Hyperliquid 单边预算 (USDC),0 = 自动读取账户余额 |
| bnbudgetusd |
0 | Binance 单边预算 (USDT),0 = 自动读取账户余额 |
| min
aprpct | 10.0 | 最低年化收益率门槛 (%) |
| min_confidence | medium | VarFunding 最低置信度 (low/medium/high) |
| leverage | 1 | 杠杆倍数(默认无杠杆) |
| stability_snapshots | 3 | 稳定性验证所需快照数 |
| stability
maxstd_ratio | 0.3 | Spread 标准差/均值上限 |
| close
spreadthreshold | 0.0001 | 平仓 spread 下限(8h 费率差,≈10.95% APR) |
| switch
thresholdapr | 5.0 | 切仓 APR 差距门槛 (%) |
| max
pricebasis_pct | 0.5 | 两所价格差异上限 (%) |
| round
tripcost_pct | 0.12 | 往返成本 (%, 含手续费+滑点) |
共享配置
| 参数 | 默认值 | 描述 |
|---|
| maxconsecutiveerrors | 5 | 连续错误触发熔断 |
| cooldownaftererrors |
3600 | 熔断冷却时间 (秒) |
| min
orderusd | 10 | 最小下单金额 (USD) |
环境变量
| 变量 | 必需 | 描述 |
|---|
| HLPRIVATEKEY | ✅ | Hyperliquid 私钥(主账户或 Agent Wallet) |
| HLVAULTADDRESS |
❌ | Agent Wallet 的 master 地址 |
| HL_TESTNET | ❌ | true 使用测试网 |
| BINANCE
APIKEY | ✅ | Binance Futures API Key |
| BINANCE
SECRETKEY | ✅ | Binance Futures API Secret |
| BINANCE_TESTNET | ❌ | true 使用测试网 |
| DISCORD
BOTTOKEN | ❌ | Discord 通知 bot token |
| DISCORD
CHANNELID | ❌ | Discord 目标频道 ID |
| TELEGRAM
BOTTOKEN | ❌ | Telegram 通知 bot token |
| TELEGRAM
CHATID | ❌ | Telegram 目标 chat ID |
操作接口
| 命令 | 描述 | 典型用途 |
|---|
| tick | 主循环:扫描 → 验证 → 开仓/维护 | Cron 每 5 分钟 |
| report |
生成日报(含 PnL、余额、费率) | Cron 每天 00:00 UTC |
| status | 当前状态(优先读缓存) | 手动查询 |
bash
单次 tick
cd ~/scripts/cross-funding && set -a && . ./.env && set +a && python3 cross_funding.py tick
日报
python3 cross