Hyperliquid 交易机器人是一种软件,它连接到 Hyperliquid 的 API 读取市场数据,并根据预定义策略提交订单。本文解释了核心架构、如何用 Python 实现一个最小化机器人、如何验证执行和风险控制,以及如何排查常见故障模式。它将有文档记录的 API 行为与设计建议以及你必须自行运行的测量区分开来。目标是让你能在测试网上测试机器人,并以明确、可观察的风险限制来运行它。
Hyperliquid 交易机器人的范围与假设
本指南涵盖通过公共 API 交易 Hyperliquid 永续合约和现货市场的机器人的工程实现。假设你熟悉 Python 或 JavaScript,了解永续合约机制(保证金、资金费率、清算),并拥有一个具有 API 访问权限的 Hyperliquid 账户。它不推荐特定策略,也不承诺盈利;自动化执行并不能消除市场风险。
Hyperliquid 是一个去中心化交易所,拥有链上订单簿和 REST/WebSocket API。机器人通常需要三项能力:经过身份验证的订单下单、实时市场数据以及持仓/账户状态对账。确切的端点 URL 和身份验证细节由 Hyperliquid 文档提供;本文使用 RPC_URL 和 PRIVATE_KEY 等占位符。对于具体的端点和提供商选择,请使用 RPC Assistant,而不是硬编码公共端点。
在编写代码之前,决定是使用代理钱包(API 钱包)还是主钱包私钥。代理钱包是更安全的操作选择,因为它们可以交易但不能提款。将密钥保存在环境变量或密钥管理器中,切勿放入源代码控制。
- 先测试网:Hyperliquid 提供带有水龙头资金的测试网;在那里验证完整循环。
- 最小权限:在支持的情况下,使用代理钱包进行订单签名。
- 可观测性:记录每个请求、响应和状态转换,并附带时间戳。
- 紧急停止开关:一个标志,用于取消未结订单并停止新提交。
心智模型:数据平面、决策平面和执行平面
将你的机器人分为三个平面。数据平面摄取 WebSocket 数据流(订单簿、交易、成交)并维护市场的本地视图。决策平面在定时器或每个市场事件上运行你的策略,并发出意图,例如“以限价 X 买入 0.1 BTC”。执行平面将意图转换为签名的 API 调用,跟踪确认,并与交易所状态对账。
这种分离很重要,因为大多数机器人故障不是策略故障,而是状态分歧。如果你的本地持仓显示平仓,但交易所显示多头,下一个订单可能会使你的敞口翻倍。执行平面应定期获取未结订单和持仓,并与本地状态比较,记录并纠正不匹配。
延迟预算:WebSocket 传递、策略计算、签名和 HTTP 往返都会累加。对于对队列位置或短期价格变动敏感的策略,测量每个环节。对于较慢的策略(网格、DCA),几百毫秒通常可以接受,但你仍应测量而不是假设。
先决条件与环境设置
你需要 Python 3.10+(或 Node 18+)、HTTP 客户端、WebSocket 客户端以及 Hyperliquid SDK 或直接 REST 调用。下面的示例使用 Python 和官方 hyperliquid-python-sdk,它处理签名和 nonce 管理。在虚拟环境中安装并固定版本以确保可复现性。
创建一个包含测试网密钥和布尔标志的 .env 文件。切勿提交此文件。对于生产环境,通过编排器的密钥存储注入密钥。如果在服务器上运行机器人,请将出站网络访问限制为你实际使用的端点,并监控意外的出口流量。
python -m venv .venv
source .venv/bin/activate
pip install hyperliquid-python-sdk python-dotenv websockets
# .env
HYPERLIQUID_PRIVATE_KEY=0xYOUR_AGENT_WALLET_PRIVATE_KEY
HYPERLIQUID_TESTNET=true
HYPERLIQUID_ACCOUNT_ADDRESS=0xYOUR_MAIN_WALLET_ADDRESS实现最小市场数据与订单循环
以下 Python 草图连接到 Hyperliquid,订阅永续合约的中间价,并在满足简单阈值条件时下限价单。它故意很小,以便你可以验证每一步。用你自己的逻辑替换策略块。代码使用 SDK 的 Exchange 和 Info 类;检查 SDK 版本的方法签名,因为它们会演变。
关键实现细节:使用单调递增的整数 nonce,显式设置有效期(例如 Gtc 或 Ioc),并包含客户端订单 ID,以便将成交与意图关联。下单后,轮询或订阅订单状态,并仅在确认成交时更新本地状态,而不是在提交时。
import os, time
from dotenv import load_dotenv
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
load_dotenv()
base_url = constants.TESTNET_API_URL if os.getenv('HYPERLIQUID_TESTNET') == 'true' else constants.MAINNET_API_URL
account = os.environ['HYPERLIQUID_ACCOUNT_ADDRESS']
exchange = Exchange(os.environ['HYPERLIQUID_PRIVATE_KEY'], base_url, account_address=account)
info = Info(base_url, skip_ws=False)
coin = 'BTC'
last_mid = None
while True:
mids = info.all_mids()
mid = float(mids[coin])
if last_mid is not None and mid > last_mid * 1.001:
# Example intent: buy 0.001 BTC at mid with a small offset
px = round(mid * 0.999, 1)
order = exchange.order(coin, True, 0.001, px, {'limit': {'tif': 'Gtc'}}, reduce_only=False)
print('submitted', order)
last_mid = mid
time.sleep(1)验证执行:预期结果与测量表
在信任机器人处理大额交易之前,在测试网上运行验证。对于每个订单,确认交易所确认包含订单 ID,订单出现在未结订单中,并且成交更新你的持仓。然后对延迟和错误率进行受控测量。在你自己的运行手册中记录下表;不要用编造的数字填充它。
| 指标 | 测量方法 | 目标(你的选择) | 观察值 |
|---|---|---|---|
| WebSocket 消息延迟 | 接收时间戳减去交易所时间戳 | < 250 毫秒 p95 | |
| 订单往返 | 从发送到确认的时间 | < 500 毫秒 p95 | |
| 拒绝率 | 拒绝订单 / 总订单 | < 1% | |
| 状态分歧 | 每小时对账不匹配数 | 0 | |
| 成交关联 | 与客户端订单 ID 匹配的成交 | 100% |
在不同市场条件下运行测量至少几个小时。如果你使用托管 RPC 或 API 提供商,请从与机器人相同的区域进行测量。关于提供商选择,请参阅 RPC Assistant 关于低延迟交易端点的指导以及 OnFinality 网络页面以了解支持的链。
应写入代码而非仅记在脑中的风险控制
在执行平面中强制执行限制,使其无法被策略错误绕过。至少包括:每个资产的最大持仓规模、最大名义敞口、最大每日亏损、最大订单速率,以及当回撤超过阈值时强制只减仓模式。每个限制应在签名订单前检查,并在触发时记录。
使用幂等的客户端订单 ID 和去重窗口,以避免超时后的重复订单。如果 HTTP 请求超时,不要盲目重试市价单;先按客户端 ID 查询订单状态。对于限价单,如果交易所支持幂等性,使用相同客户端 ID 重试更安全;否则在重新提交前对账。
资金费率和清算是风险的一部分。跟踪资金支付和保证金比率。忽略资金费率的机器人可能会在套利策略中亏损。忽略保证金的机器人即使在入场逻辑正确的情况下,也可能在快速变动中被清算。
- 交易前检查持仓和名义价值的硬上限。
- 每日亏损熔断器,将机器人切换为只减仓。
- 使用令牌桶的订单速率限制器。
- 对拒绝峰值、对账不匹配和保证金比率阈值发出警报。
排查常见的 Hyperliquid 机器人故障
大多数故障分为四类:身份验证/签名、nonce 和速率限制、状态分歧以及连接性。从交易所响应体开始;它通常会指出错误。记录完整的请求 ID 和时间戳,以便与交易所状态页面关联。
签名错误通常来自使用错误的钱包类型或不匹配的账户地址。如果你使用代理钱包,签名密钥和账户地址是不同的;正确传递两者。当多个进程共享一个密钥或时钟漂移时,会发生 nonce 错误。使用单个签名进程并通过 NTP 同步时间。
速率限制错误需要带抖动的退避,而不是紧密重试。状态分歧需要定期运行的对账任务,获取未结订单和持仓并与本地状态比较;在每次重新连接后也运行。连接问题最好由监督程序处理,它重启 WebSocket 并重新订阅,加上检测静默停滞的心跳。
import time, random
def with_backoff(fn, attempts=5):
for i in range(attempts):
try:
return fn()
except Exception as e:
if i == attempts - 1:
raise
sleep = min(2 ** i, 30) + random.random()
print(f'retry {i+1} after {sleep:.1f}s: {e}')
time.sleep(sleep)自动化 Hyperliquid 交易的局限性与权衡
自动化提高了一致性和速度,但并不能创造优势。回测会过拟合,测试网流动性不同于主网,市场影响随规模增长。在区间内看起来有利可图的网格机器人会在趋势中积累库存;如果趋势持续,向下平均的 DCA 机器人可能会复合亏损。规模和风险限制是主要防御手段。
运营复杂性是真实的:密钥管理、监控、升级和事件响应都需要时间。如果你无法配备这些人员,一个更简单、活动部件更少的机器人比一个你无法观察的复杂机器人更安全。还要考虑你所在司法管辖区的监管和税务义务;链上交易并不能免除它们。
最后,API 行为可能会改变。固定 SDK 版本,阅读发布说明,并保持回滚路径。将机器人视为生产软件,而不是脚本。
后续步骤:从测试网到受监控的部署
一旦测试网验证通过,以较小的主网规模和严格的亏损上限进行部署。添加延迟、拒绝率、持仓和盈亏的仪表板。设置对账不匹配和保证金比率的警报。每周审查成交与意图,以捕捉静默故障。
对于基础设施,选择符合你的延迟和可靠性要求的端点和节点。在承诺之前,查看 OnFinality API 服务,比较 RPC 定价计划,并浏览支持的网路。如果你需要专用吞吐量,请评估专用节点。对于具体的端点推荐,请咨询 RPC Assistant 而不是猜测。
持续迭代:测量、收紧限制并记录事件。一个运行起来枯燥无味的机器人通常才是能存活下来的那个。