Hyperfolio
指南

Hyperliquid 历史数据指南 2026:K 线、资金费率与 S3

获取 Hyperliquid 历史数据:candleSnapshot K 线及 5,000 根限制、每小时资金费率历史、成交记录、S3 归档、速率限制和导出 CSV 的 Python 脚本。

October 18, 202610 分钟

Hyperliquid 历史数据指南 2026:K 线、资金费率历史与 S3 归档

简要结论:Hyperliquid 的历史数据来自三个地方。公开的 info API 提供 K 线(candleSnapshot,每个周期只保留最近约 5,000 根)、资金费率历史(fundingHistory,每次响应 500 行)以及你自己的成交和订单。S3 存储桶 hyperliquid-archive 和 hl-mainnet-node-data 保存 L2 订单簿快照、资产上下文、成交记录和浏览器区块,但传输费用由下载方承担,而且没有 K 线。其他数据只能自己记录。下面给出准确的请求体、每个周期能回溯多远、分页方法、速率限制,以及一个把 K 线导出为 CSV 的 Python 脚本。

Hyperliquid 历史数据在哪里

来源内容限制
Info API candleSnapshot永续、现货和 HIP-3 市场的 OHLCV K 线每个币种和周期只有最近约 5,000 根
Info API fundingHistory某个永续合约每小时的资金费率和溢价每次响应 500 行;用 startTime 分页
Info API userFillsByTime、historicalOrders你(或任意地址)的成交和订单每次响应 2,000 条;只能取到最近 10,000 笔成交;最近 2,000 个订单
S3 hyperliquid-archive每小时 L2 订单簿快照(market_data)和每日资产上下文(asset_ctxs)大约每月上传一次,不保证完整;下载方付费
S3 hl-mainnet-node-data按区块的成交、浏览器区块、L1 交易、其他事件(转账、质押、资金费)原始大文件;下载方付费

官方文档写得很清楚:S3 没有 K 线,也没有现货资产数据,"你可以用 API 自己记录其他历史数据集"。这句话基本解释了下文的所有内容。

K 线:candleSnapshot 接口

向 https://api.hyperliquid.xyz/info 发送 POST 请求,无需 API 密钥:

{"type": "candleSnapshot",
 "req": {"coin": "BTC", "interval": "1h",
         "startTime": 1789974000000, "endTime": 1792306800000}}

每根 K 线是一个使用短字段名的对象:t 开盘时间、T 收盘时间(毫秒时间戳),o/h/l/c 价格,v 以基础资产计的成交量(BTC,而不是美元),n 成交笔数,s 币种,i 周期。价格和成交量都是字符串,计算前要先转换。

支持的周期有 1m、3m、5m、15m、30m、1h、2h、4h、8h、12h、1d、3d、1w 和 1M。HIP-3(由 builder 部署)市场需要在币种前加上 DEX 名称,例如 xyz:XYZ100。

能回溯多远?

文档说只提供最近 5,000 根 K 线。不同周期对应的时间跨度差别很大:

周期约 5,000 根覆盖
1m约 3.5 天
5m约 17 天
15m约 52 天
1h约 208 天
4h约 2.3 年
1d 及以上足够你用

我们在 2026 年 10 月 18 日约 07:06 UTC 实测:请求 10 天的 BTC 1 分钟 K 线,API 返回了 5,167 根,从 10 月 14 日 17:00 UTC 开始。较早的 startTime 并不会报错,API 只是返回它还保留的数据。所以如果你的回测需要一年的 1 分钟 K 线,单靠 API 做不到。要么换更大的周期,要么从今天开始自己记录 1 分钟 K 线(WebSocket 的 candle 订阅或定时任务)。

还有两点容易出错:响应中的最后一根 K 线通常还在形成中(我们测试时,07:00 UTC 的小时 K 线开盘几分钟只有 4.08 BTC 成交量,而 30 天下载中前两个完整小时分别是 1,568 和 2,139 BTC);另外 v 是基础资产成交量,想要美元成交量需要乘以价格。

资金费率历史:fundingHistory

Hyperliquid 的资金费每小时结算一次,每个永续合约的完整历史都可以获取:

{"type": "fundingHistory", "coin": "BTC",
 "startTime": 1787640000000}

每一行包含 coin、fundingRate(小时费率)、premium 和 time。一次响应最多 500 行,按每小时一条约等于 20.8 天。要获取更多数据,取最后一个 time 加 1 毫秒作为下一次的 startTime;这是文档为所有时间区间接口给出的通用分页规则。

真实例子:截至 2026 年 10 月 18 日的最近 60 天 BTC 资金费率共返回 1,440 条小时数据(三页)。平均小时费率为 0.00001044,按 24 × 365 年化约为 9.15%。正费率表示多头向空头付费。如果你想知道资金费对你自己的盈亏有什么影响,而不是对市场,可以对你的地址使用 userFunding,或阅读我们的资金费率与盈亏指南。

你自己的交易历史:成交与订单

对于一个地址,userFillsByTime 每次最多返回 2,000 笔成交,并且总共只能取到最近 10,000 笔。historicalOrders 最多返回最近 2,000 个订单。活跃交易者和机器人很快就会碰到 10,000 笔的上限,所以税务和交易日志工具都建议定期导出。Hyperliquid 文档还提到了 Enigma 团队开发的第三方导出界面(trade-export.hypedexer.com),可以导出更早的历史;它由第三方独立维护,请自行判断。CSV 导出的详细步骤见如何导出 Hyperliquid 交易历史。

S3 归档(高级用户)

做市场微观结构研究需要用到 S3 存储桶。你需要 AWS CLI 和 LZ4,并且由于是 requester-pays 存储桶,传输费用由你承担:

aws s3 cp s3://hyperliquid-archive/market_data/20230916/9/l2Book/SOL.lz4 /tmp/SOL.lz4 --request-payer requester
unlz4 --rm /tmp/SOL.lz4
head /tmp/SOL
  • 订单簿:s3://hyperliquid-archive/market_data/[date]/[hour]/l2Book/[coin].lz4
  • 资产上下文:s3://hyperliquid-archive/asset_ctxs/[date].csv.lz4,每日的各资产上下文文件。在 API 中,资金费率、未平仓量和标记价格都属于资产上下文,所以这里是查找历史未平仓量的官方来源;API 本身只返回当前值(见我们的未平仓量指南)。
  • 成交:s3://hl-mainnet-node-data/node_fills_by_block(与 API 格式相同);更早的数据在 node_fills 和 node_trades 中,其中 node_trades 格式不同。
  • 链上历史:hl-mainnet-node-data 中的 explorer_blocks、replica_cmds(L1 交易)和 misc_events_by_block(转账、质押、资金费)。

归档大约每月更新一次,不保证及时,文档也提醒数据可能缺失。不要搭建任何假设"昨天的文件已经存在"的流程。

你一定会碰到的速率限制

REST 请求按 IP 共享每分钟 1,200 的权重额度。大多数 info 请求权重为 20。此外,candleSnapshot 每返回 60 根 K 线增加权重,fundingHistory、userFillsByTime、historicalOrders 等接口每返回 20 条增加权重。实际做法:分页时每次调用之间稍作停顿,缓存已下载的数据,只需要最新一根时不要每分钟重新拉取 5,000 根。实时数据用 WebSocket 订阅比轮询更便宜也更快。

Python 脚本:导出 K 线到 CSV 并汇总资金费率

不需要 SDK 和密钥,只用标准库。它会把 30 天的 BTC 小时 K 线下载到 btc_1h.csv,并计算 60 天资金费率的平均值。我们在 2026 年 10 月 18 日运行,得到 721 根小时 K 线和 1,440 条资金费率数据。

import csv, json, time, urllib.request

API = "https://api.hyperliquid.xyz/info"

def post(body):
    req = urllib.request.Request(API, json.dumps(body).encode(),
                                 {"Content-Type": "application/json"})
    with urllib.request.urlopen(req) as r:
        return json.load(r)

def candles(coin, interval, start_ms, end_ms):
    out, cursor = [], start_ms
    while cursor < end_ms:
        batch = post({"type": "candleSnapshot", "req": {
            "coin": coin, "interval": interval,
            "startTime": cursor, "endTime": end_ms}})
        if not batch:
            break
        out += [c for c in batch if not out or c["t"] > out[-1]["t"]]
        if batch[-1]["t"] + 1 <= cursor:
            break
        cursor = batch[-1]["t"] + 1
        time.sleep(0.5)
    return out

def funding(coin, start_ms, end_ms):
    out, cursor = [], start_ms
    while cursor < end_ms:
        batch = post({"type": "fundingHistory", "coin": coin,
                      "startTime": cursor, "endTime": end_ms})
        if not batch:
            break
        out += batch
        if len(batch) < 500:
            break
        cursor = batch[-1]["time"] + 1
        time.sleep(0.5)
    return out

if __name__ == "__main__":
    now = int(time.time() * 1000)
    day = 86_400_000
    rows = candles("BTC", "1h", now - 30 * day, now)
    with open("btc_1h.csv", "w", newline="") as f:
        w = csv.writer(f)
        w.writerow(["open_time_utc", "open", "high", "low", "close", "volume", "trades"])
        for c in rows:
            w.writerow([time.strftime("%Y-%m-%d %H:%M", time.gmtime(c["t"] / 1000)),
                        c["o"], c["h"], c["l"], c["c"], c["v"], c["n"]])
    fr = funding("BTC", now - 60 * day, now)
    avg = sum(float(x["fundingRate"]) for x in fr) / len(fr)
    print(f"{len(rows)} hourly candles, {len(fr)} funding prints, "
          f"avg hourly funding {avg:.8f} ({avg * 24 * 365:.2%} annualised)")

把 "BTC" 换成任意永续合约("ETH"、"HYPE"),K 线也可以换成 HIP-3 名称如 "xyz:XYZ100"。如果要覆盖很多市场,就定时运行并只追加新行,而不是每次重新下载全部:这也是建立 API 不再提供的历史数据的方法。

使用 Hyperliquid 历史数据的常见错误

  • 以为 startTime 一定生效。短周期会被静默截断到最近约 5,000 根。请检查实际收到的第一个时间戳。
  • 把 v 当成美元。它以基础资产计。
  • 回测中包含正在形成的 K 线。除非收盘时间 T 已经过去,否则丢弃最后一根。
  • 按 8 小时结算来年化资金费率。Hyperliquid 资金费按小时结算,应为 费率 × 24 × 365。
  • 依赖 API 获取早期成交。超过 10,000 笔后,最早的成交会从 API 中消失。尽早导出。
  • 混用时区。所有时间戳都是 UTC 毫秒时间戳。

查看自己的投资组合,不必写脚本

原始 K 线和资金费率数据很适合做研究,但如果你想看的是自己的历史(持仓、扣除手续费和资金费后的真实盈亏、每笔交易的表现),就不需要维护数据管道。Hyperfolio 是免费、只读的 PWA:粘贴一个 Hyperliquid 地址,就能看到持仓、包含手续费和资金费的盈亏以及 Smart Money 钱包,无需密钥,无需签名。市场概况(标记价格、资金费率、未平仓量)在 Markets 中心,例如 BTC。如果你要开 Hyperliquid 账户,推荐码 HYPERFOLIO 可享 4% 交易手续费折扣(详见推荐码指南)。更多 API 用法请从我们的 Hyperliquid API Python 指南开始。

常见问题

Hyperliquid 有历史数据 API 吗?

有。公开的 info 接口(https://api.hyperliquid.xyz/info)无需 API 密钥即可返回 K 线、资金费率历史以及各地址的成交和订单。它有深度限制:每个周期约 5,000 根 K 线,每个地址最近 10,000 笔成交。

如何从 Hyperliquid 获取超过 5,000 根 K 线?

在同一周期下无法通过 API 获取。可以换更大的周期,从现在开始自己记录(WebSocket 或定时脚本),或者用 S3 的成交数据重建 K 线。

S3 上有 Hyperliquid 的 K 线吗?

没有。文档说明 S3 提供 L2 订单簿快照和资产上下文,以及节点成交和区块,但没有 K 线和现货资产数据。

Hyperliquid 资金费多久结算一次?

每小时一次。fundingHistory 每小时返回一行小时费率,年化时用 24 × 365。

可以下载历史未平仓量吗?

info API 不行,它只返回当前值。hyperliquid-archive 存储桶中的 asset_ctxs 文件是官方历史来源,你也可以自己保存快照。

Hyperliquid 历史数据要付费吗?

API 在速率限制内免费。S3 存储桶是 requester-pays,AWS 会按你传输的数据量收费。

免费试用 Hyperfolio

实时追踪 Hyperliquid 投资组合,包含盈亏、Smart Money、Markets、Perp Calculator、多 venue 投资组合和推送提醒。

HYPERLIQUID

-4% fees

在 Hyperliquid 交易 · 手续费 4% 折扣

Hyperfolio 是独立应用 — 无广告、无佣金、无赞助。推荐码是我们唯一的资金来源;非常感谢您通过我们的链接交易。

使用推荐码

对您免费 · 让 Hyperfolio 持续运行

相关文章