費鑑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 的差異對照。