资金费率 API 怎么用?币安、欧易公开接口与示例代码
资金费率用公开接口就能获取,不需要 API Key:币安用 premiumIndex 与 fundingRate,欧易用 funding-rate 与 funding-rate-history。返回值是小数,0.0001 即 0.01%,附换算年化的 Python 与 JavaScript 示例。
本文要点
- 币安与欧易的资金费率都能用公开接口获取,不需要申请 API Key,也不需要签名。
- 币安 U 本位合约的当期费率在 /fapi/v1/premiumIndex 的 lastFundingRate 字段,历史结算记录在 /fapi/v1/fundingRate。
- 欧易的当期费率在 /api/v5/public/funding-rate 的 fundingRate 字段,其中 fundingTime 是下一次结算时间,nextFundingTime 是再下一次。
- 接口返回的费率是小数,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 的差算出每个合约的结算间隔。
排在前面的通常是成交量较小、波动较大的币种。费率高不等于值得参与:这类合约的价格波动、流动性与费率本身的变化都更剧烈,下一次结算的费率可能已经完全不同。想评估收取资金费的实际收益,还要扣除开平仓手续费,见 资金费率套利的原理与风险。
怎么把资金费率存下来做长期记录?
交易所的历史接口能查到过去的结算记录,但单次可取的笔数有限。想长期观察某个币种的费率变化,常见的做法是:
- 只记录已结算的数据:每次结算后调用一次历史接口,把
fundingTime与fundingRate存进数据库或表格,不需要每分钟抓当期费率。 - 以结算时间为主键:同一个合约同一个结算时刻只有一笔,重复抓取时用它去重。
- 同时记下结算间隔:交易所可能调整某个合约的结算间隔,只存费率会让日后的年化计算出错。
- 统一用 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);
字段说明与使用条件见 开发者页面。
调用资金费率接口常见的问题
- 被拒绝访问:币安会拒绝部分受限地区的请求,例如美国 IP 可能收到 HTTP 451,这时换成服务范围内的网络环境,或改用其他数据来源。
- 字段是字符串:两家的数字多以字符串返回,直接相加会变成字符串拼接。
- 时间是毫秒与 UTC:换算成本地时间前要先除以 1,000。
- 请求太频繁:公开接口也有限频,资金费率每几分钟看一次就足够,建议加缓存,规则见 API 交易手续费与限频。
- 合约代号不同:币安是
BTCUSDT,欧易是BTC-USDT-SWAP,部分低价币在币安以 1,000 枚为单位,例如1000PEPEUSDT。
比较两家费率差,可以直接用 资金费率套利计算器。
开户
在币安、欧易开户
注册前请确认你所在地区可以合法使用该交易所。
参考资料
常见问题
币安资金费率接口是哪个?
当期费率用 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。
看到不懂的名词?查 合约术语表。
- 01量化 API交易所 API 安全吗?提币权限、IP 白名单与被盗处理API Key 的风险来自 Secret Key 外泄:只读权限最多泄露资产信息,交易权限可被人用冷门币对倒转走资金,提币权限则能直接提走资产。不开提币、绑定 IP 白名单、最小权限是三条底线。附被盗后的处理步骤与第三方平台的风险判断。
- 02量化 APIAPI 交易手续费一样吗?限频规则与量化下单成本怎么算API 下单与手动下单手续费相同:币安与欧易永续合约一般用户挂单 0.02%、吃单 0.05%,现货币安 0.1%、欧易挂单 0.08%。量化成本主要来自高频成交,每天 20 笔 2,000 USDT 吃单一个月约 600 USDT。附网格打平间距与限频说明。
- 03量化 API币安 API 怎么申请?API Key 创建步骤与权限设置币安 API Key 在账户的 API 管理页面创建,需先开启双重验证,生成 API Key 与 Secret Key 两串字符。权限分读取、现货及杠杆交易、合约交易、提现,开提现前必须先绑定 IP。只看行情与资金费率完全不需要 API Key。
- 04量化 API欧易 API 怎么申请?API Key、密钥与 Passphrase 设置欧易 API Key 由 API Key、Secret Key 与 Passphrase 三部分组成,Passphrase 是创建时自己设定的密码,三者缺一不可。权限分读取、交易、提币,支持 IP 白名单,创建前需开启双重验证。附与币安 API 的差异对照。