费鉴gaterar.com
简繁
量化与 API · 约 15 分钟读完

资金费率 API 怎么用?币安、欧易公开接口与示例代码

资金费率用公开接口就能获取,不需要 API Key:币安用 premiumIndex 与 fundingRate,欧易用 funding-rate 与 funding-rate-history。返回值是小数,0.0001 即 0.01%,附换算年化的 Python 与 JavaScript 示例。

本文要点

  1. 币安与欧易的资金费率都能用公开接口获取,不需要申请 API Key,也不需要签名。
  2. 币安 U 本位合约的当期费率在 /fapi/v1/premiumIndex 的 lastFundingRate 字段,历史结算记录在 /fapi/v1/fundingRate。
  3. 欧易的当期费率在 /api/v5/public/funding-rate 的 fundingRate 字段,其中 fundingTime 是下一次结算时间,nextFundingTime 是再下一次。
  4. 接口返回的费率是小数,0.0001 代表 0.01%;年化等于每次费率 × 每天结算次数 × 365,每 8 小时结算一天是 3 次。

资金费率可以直接用交易所的 公开接口 获取,不需要 API Key:币安用 /fapi/v1/premiumIndex(当期)与 /fapi/v1/fundingRate(历史),欧易用 /api/v5/public/funding-rate 与 /api/v5/public/funding-rate-history。返回的费率是小数,0.0001 就是 0.01%,年化 = 费率 × 每天结算次数 × 365。

资金费率本身的含义见 资金费率是什么,只想看数字可以直接打开 资金费率雷达。

资金费率 API 有哪些?需要 API Key 吗?

下面这些都是公开接口,用浏览器或任何 HTTP 工具发 GET 请求就能拿到数据:

用途 交易所 接口 关键字段
当期费率与标记价格 币安 /fapi/v1/premiumIndex lastFundingRate、nextFundingTime、markPrice
历史结算记录 币安 /fapi/v1/fundingRate fundingTime、fundingRate、markPrice
结算间隔与上下限 币安 /fapi/v1/fundingInfo fundingIntervalHours、adjustedFundingRateCap
当期费率 欧易 /api/v5/public/funding-rate fundingRate、fundingTime、nextFundingTime
历史结算记录 欧易 /api/v5/public/funding-rate-history fundingTime、fundingRate、realizedRate

币安的网域是 https://fapi.binance.com,欧易是 https://www.okx.com。查询自己的资产、下单才需要 API Key 与签名,申请方式见 币安 API 怎么申请 与 欧易 API 怎么申请。

币安资金费率接口怎么用?

premiumIndex 带上 symbol 参数时返回单一合约,不带参数时返回所有 U 本位合约的数组。主要字段:

  • lastFundingRate:当期费率,也就是下一次结算预计使用的费率,结算前会随溢价变动。
  • nextFundingTime:下一次结算时间,单位是毫秒,UTC 时间戳。
  • markPrice、indexPrice:标记价格与指数价格。
  • interestRate:公式中的利率项。

数字字段多以字符串返回,计算前要先转成数值。下面的 Python 示例需要先安装 requests:

import requests
from datetime import datetime, timezone

BASE = "https://fapi.binance.com"

d = requests.get(f"{BASE}/fapi/v1/premiumIndex", params={"symbol": "BTCUSDT"}, timeout=10).json()

# 查结算间隔:只列出非默认设置的合约,没列出的按 8 小时
info = requests.get(f"{BASE}/fapi/v1/fundingInfo", timeout=10).json()
hours_map = {x["symbol"]: int(x["fundingIntervalHours"]) for x in info}
hours = hours_map.get("BTCUSDT", 8)

rate = float(d["lastFundingRate"])          # 小数,0.0001 = 0.01%
apr = rate * (24 / hours) * 365             # 年化
nxt = datetime.fromtimestamp(int(d["nextFundingTime"]) / 1000, tz=timezone.utc)

print(f"BTCUSDT 当期费率 {rate * 100:.4f}%,每 {hours} 小时结算")
print(f"年化约 {apr * 100:.2f}%,下次结算 {nxt:%Y-%m-%d %H:%M} UTC")

fundingInfo 只列出结算间隔或上下限经过调整的合约,没出现在列表里的合约按默认的 8 小时处理。各结算间隔的时刻见 资金费率结算时间。

币安资金费率历史怎么查?

/fapi/v1/fundingRate 返回已经结算的记录,可以用 limit 指定笔数,也可以加 startTime、endTime(毫秒)指定区间,单次可取的上限以官方文档为准。下面计算最近 100 次结算的平均费率:

import requests

rows = requests.get(
    "https://fapi.binance.com/fapi/v1/fundingRate",
    params={"symbol": "BTCUSDT", "limit": 100},
    timeout=10,
).json()

rates = [float(x["fundingRate"]) for x in rows]
avg = sum(rates) / len(rates)
print(f"最近 {len(rates)} 次平均 {avg * 100:.4f}%,最高 {max(rates) * 100:.4f}%,最低 {min(rates) * 100:.4f}%")

OKX funding rate API 怎么用?

欧易的返回格式是 {"code": "0", "data": [...]},code 为 "0" 代表成功。instId 填 BTC-USDT-SWAP 这类永续合约代号,填 ANY 可以一次取得所有永续合约。字段的意思要特别留意:

  • fundingRate:当期费率,即下一次结算使用的费率。
  • fundingTime:下一次 结算时间(毫秒)。
  • nextFundingTime:再下一次 结算时间,两者相减就是结算间隔。
  • maxFundingRate、minFundingRate:费率上下限。
import requests

j = requests.get(
    "https://www.okx.com/api/v5/public/funding-rate",
    params={"instId": "BTC-USDT-SWAP"},
    timeout=10,
).json()
if j["code"] != "0":
    raise RuntimeError(j)

x = j["data"][0]
rate = float(x["fundingRate"])
ft = int(x["fundingTime"])
nft = int(x["nextFundingTime"] or 0)
hours = round((nft - ft) / 3_600_000) if nft > ft else 8
apr = rate * (24 / hours) * 365
print(f"{x['instId']} {rate * 100:.4f}%,每 {hours} 小时,年化 {apr * 100:.2f}%")

历史记录用 /api/v5/public/funding-rate-history?instId=BTC-USDT-SWAP&limit=100,每笔有 fundingRate 与 realizedRate(实际结算的费率),分页参数以官方文档为准。

怎么一次找出费率最高的合约?

premiumIndex 不带参数时会返回所有 U 本位合约,配合 fundingInfo 的结算间隔,就能按年化排序。比较时一定要用年化而不是原始费率,否则 4 小时或 1 小时结算的合约会被低估:

import requests

BASE = "https://fapi.binance.com"
allp = requests.get(f"{BASE}/fapi/v1/premiumIndex", timeout=10).json()
info = requests.get(f"{BASE}/fapi/v1/fundingInfo", timeout=10).json()
hours_map = {x["symbol"]: int(x["fundingIntervalHours"]) for x in info}

rows = []
for x in allp:
    # 只看 USDT 永续,跳过没有资金费率的交割合约
    if not x["symbol"].endswith("USDT") or not x.get("lastFundingRate"):
        continue
    rate = float(x["lastFundingRate"])
    hours = hours_map.get(x["symbol"], 8)
    rows.append((rate * (24 / hours) * 365, x["symbol"], rate, hours))

rows.sort(reverse=True)
for apr, sym, rate, hours in rows[:10]:
    print(f"{sym:<16}{rate * 100:+.4f}%  每 {hours} 小时  年化 {apr * 100:+.1f}%")

欧易的做法类似,把 instId 换成 ANY 即可取得全部永续合约,再用 fundingTime 与 nextFundingTime 的差算出每个合约的结算间隔。

排在前面的通常是成交量较小、波动较大的币种。费率高不等于值得参与:这类合约的价格波动、流动性与费率本身的变化都更剧烈,下一次结算的费率可能已经完全不同。想评估收取资金费的实际收益,还要扣除开平仓手续费,见 资金费率套利的原理与风险。

怎么把资金费率存下来做长期记录?

交易所的历史接口能查到过去的结算记录,但单次可取的笔数有限。想长期观察某个币种的费率变化,常见的做法是:

  1. 只记录已结算的数据:每次结算后调用一次历史接口,把 fundingTime 与 fundingRate 存进数据库或表格,不需要每分钟抓当期费率。
  2. 以结算时间为主键:同一个合约同一个结算时刻只有一笔,重复抓取时用它去重。
  3. 同时记下结算间隔:交易所可能调整某个合约的结算间隔,只存费率会让日后的年化计算出错。
  4. 统一用 UTC:所有时间戳都是 UTC 毫秒,存储时不要先转成本地时间。

以每 8 小时结算计算,一个合约一年是 3 × 365 = 1,095 笔,100 个合约就是 1,095 × 100 = 109,500 笔,用普通的表格或轻量数据库就足够。记录下来之后,可以统计某个币种费率为正的比例、平均值与极端值出现的频率,比只看当下的一个数字更有参考价值。

费率怎么换算成百分比和年化?

接口返回的都是小数,换算只有两步:

百分比 = 小数 × 100 年化 = 每次费率 × 每天结算次数 × 365,每天结算次数 = 24 ÷ 结算间隔小时数

举例:接口返回 0.00025。

  • 百分比:0.00025 × 100 = 0.025%
  • 每 8 小时结算:0.025% × 3 × 365 = 27.375%
  • 每 4 小时结算:0.025% × 6 × 365 = 54.75%
  • 10,000 USDT 仓位每次结算收付:10,000 × 0.00025 = 2.5 USDT

同一个数字,4 小时结算的合约年化是 8 小时的两倍,比较时一定要先查结算间隔。这是简单相乘,没有计算复利,费率每次都会变,年化只代表“按现在的费率持续下去”。费率高低的判断见 资金费率多少算高。

用 JavaScript 怎么获取资金费率?

浏览器与 Node.js 18 以上都内建 fetch。下面同时读取币安与欧易的 BTC 费率:

async function main() {
  const bn = await fetch("https://fapi.binance.com/fapi/v1/premiumIndex?symbol=BTCUSDT").then((r) => r.json());
  const ok = await fetch("https://www.okx.com/api/v5/public/funding-rate?instId=BTC-USDT-SWAP").then((r) => r.json());

  const bnRate = Number(bn.lastFundingRate);
  const okRate = Number(ok.data[0].fundingRate);
  const apr = (rate, hours) => rate * (24 / hours) * 365;

  console.log("币安", (bnRate * 100).toFixed(4) + "%", "年化", (apr(bnRate, 8) * 100).toFixed(2) + "%");
  console.log("欧易", (okRate * 100).toFixed(4) + "%", "年化", (apr(okRate, 8) * 100).toFixed(2) + "%");
}

main().catch(console.error);

这个例子假设两边都是 8 小时结算,实际使用时请按上面的方法查结算间隔。在浏览器网页里直接调用交易所接口,可能受到跨域限制,这时可以改在服务器端调用。

有没有一次拿到两家费率的接口?

本站提供免费的 JSON 接口 https://gaterar.com/api/funding,约每 5 分钟更新,已开启跨域(CORS),可以直接在网页里调用。返回内容以币种代号为键,rate 是小数,hours 是结算间隔,next 是下次结算时间(毫秒):

async function main() {
  const data = await fetch("https://gaterar.com/api/funding").then((r) => r.json());
  for (const ex of ["binance", "okx"]) {
    const r = data[ex]["BTC"];
    if (!r) continue;
    const apr = r.rate * (24 / r.hours) * 365;
    console.log(ex, (r.rate * 100).toFixed(4) + "%", "年化", (apr * 100).toFixed(2) + "%");
  }
  console.log("更新时间", data.updatedAt);
}

main().catch(console.error);

字段说明与使用条件见 开发者页面。

调用资金费率接口常见的问题

  1. 被拒绝访问:币安会拒绝部分受限地区的请求,例如美国 IP 可能收到 HTTP 451,这时换成服务范围内的网络环境,或改用其他数据来源。
  2. 字段是字符串:两家的数字多以字符串返回,直接相加会变成字符串拼接。
  3. 时间是毫秒与 UTC:换算成本地时间前要先除以 1,000。
  4. 请求太频繁:公开接口也有限频,资金费率每几分钟看一次就足够,建议加缓存,规则见 API 交易手续费与限频。
  5. 合约代号不同:币安是 BTCUSDT,欧易是 BTC-USDT-SWAP,部分低价币在币安以 1,000 枚为单位,例如 1000PEPEUSDT。

比较两家费率差,可以直接用 资金费率套利计算器。

开户

在币安、欧易开户

币安 Binance

邀请码 BN6691

注册币安
欧易 OKX

邀请码 OK6667

注册欧易

注册前请确认你所在地区可以合法使用该交易所。

参考资料

  1. 币安开发者文档|标记价格与资金费率(Mark Price)
  2. 币安开发者文档|资金费率历史(Get Funding Rate History)
  3. 欧易 API 文档|获取资金费率(Get funding rate)
  4. 欧易 API 文档|获取资金费率历史(Get funding rate history)

常见问题

币安资金费率接口是哪个?

当期费率用 GET https://fapi.binance.com/fapi/v1/premiumIndex,字段 lastFundingRate;历史结算用 /fapi/v1/fundingRate;非 8 小时结算的合约可以用 /fapi/v1/fundingInfo 查结算间隔。都不需要 API Key。

OKX funding rate API 怎么调用?

用 GET https://www.okx.com/api/v5/public/funding-rate?instId=BTC-USDT-SWAP,返回的 data 里 fundingRate 是当期费率、fundingTime 是下一次结算时间;instId 填 ANY 可以一次取得所有永续合约。

资金费率 API 返回的 0.0001 是多少?

0.0001 是小数,乘以 100 就是百分比,也就是 0.01%。每 8 小时结算时年化是 0.0001 × 3 × 365 = 10.95%。

资金费率接口需要 API Key 吗?

不需要。资金费率、标记价格与历史结算记录都是公开行情数据,直接用 HTTP GET 请求即可。只有查询自己的账户或下单才需要 API Key。

看到不懂的名词?查 合约术语表。

→延伸阅读
  1. 01量化 API交易所 API 安全吗?提币权限、IP 白名单与被盗处理API Key 的风险来自 Secret Key 外泄:只读权限最多泄露资产信息,交易权限可被人用冷门币对倒转走资金,提币权限则能直接提走资产。不开提币、绑定 IP 白名单、最小权限是三条底线。附被盗后的处理步骤与第三方平台的风险判断。
  2. 02量化 APIAPI 交易手续费一样吗?限频规则与量化下单成本怎么算API 下单与手动下单手续费相同:币安与欧易永续合约一般用户挂单 0.02%、吃单 0.05%,现货币安 0.1%、欧易挂单 0.08%。量化成本主要来自高频成交,每天 20 笔 2,000 USDT 吃单一个月约 600 USDT。附网格打平间距与限频说明。
  3. 03量化 API币安 API 怎么申请?API Key 创建步骤与权限设置币安 API Key 在账户的 API 管理页面创建,需先开启双重验证,生成 API Key 与 Secret Key 两串字符。权限分读取、现货及杠杆交易、合约交易、提现,开提现前必须先绑定 IP。只看行情与资金费率完全不需要 API Key。
  4. 04量化 API欧易 API 怎么申请?API Key、密钥与 Passphrase 设置欧易 API Key 由 API Key、Secret Key 与 Passphrase 三部分组成,Passphrase 是创建时自己设定的密码,三者缺一不可。权限分读取、交易、提币,支持 IP 白名单,创建前需开启双重验证。附与币安 API 的差异对照。