資金費率 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 的差異對照。