搜「资金费率怎么算」的人,手上多半已经有了一个百分比——交易所页面上那个数——想知道它从哪来,以及为什么自己心算的结果和账单对不上。

公式本身不难。难的是它周围三个默认假设:结算周期、乘数的基数、年化的系数。这三处算错都不会报错,只会给你一个看起来完全正常的数。

公式:溢价指数打底,利率项被夹住,再按频率归一

币安 U 本位永续从 2025 年 9 月 18 日起用的写法是:

F = [ P + clamp(I − P, 0.05%, −0.05%) ] ÷ (8 / N)

四个符号各是什么:

  • P,平均溢价指数。合约价格相对现货指数偏离了多少,取一个结算周期内的加权移动平均。合约比现货贵,P 为正;便宜,P 为负。这一项才是费率的主体,其余都是修正。
  • I,利率。交易所设的常数,代表计价币与基础币之间的借贷成本差。默认每天 0.03%,摊到 8 小时一期是 0.01%;BNBUSDT 与 ETHBTC 这两个合约设成 0。
  • clamp(…, 0.05%, −0.05%)。把利率与溢价的差值夹在 ±0.05% 之间。它是个阻尼器——溢价剧烈波动时,不让这一项把费率推到离谱的地方。
  • N,结算频率(小时)。8 / N 是频率归一化因子:方括号里算出来的是一个「8 小时口径的基准费率」,除完之后才是这个合约每一期真正收的数。

最后那个除数是 2025 年 9 月才加进去的,也正是现在网上多数中文教程还缺的一项。拿旧公式去算一个 4 小时结算的合约,你会得到一个正好大一倍的数。

它跟着「结算频率被改短」一起来:个别合约上出现过极端费率,缩短周期能把单次冲击摊薄——但摊薄不该顺带把一天的总成本翻倍。除以 8/N 之后,同样的溢价水平下,一天累计付出的总额与结算频率无关,变的只是分几次付。

错算一:默认它 8 小时结算一次

「每 8 小时一次,UTC 00:00 / 08:00 / 16:00」是被复读最多的一句,但它只对一部分合约成立。币安给一批合约设的是 4 小时,个别的是 1 小时。

接口这里有个坑:fapi/v1/fundingInfo 只列被调整过的交易对,其余的根本不出现在返回里。所以「查不到这个交易对」的含义是「它就是标准的 8 小时」,而不是「不知道」。我们扫描器里那个归一化函数就是照这条写的:查不到落回 8 小时,同时卡住 0 到 24 小时的上下界——一个离谱的周期会被直接乘进借款利率里,而那时候没有任何东西会报错。

示意图:三条等长的水平时间轴上下排列,轴上圆点的间隔从上到下依次减半,最下面一条几乎连成一串

周期错了,后面每一步跟着错:每期收多少错、年化错、算持仓利息时乘的小时数也错。三处都是静默的。

错算二:拿保证金去乘费率

资金费按名义价值收,不按保证金收。名义 = 标记价格 × 持仓数量。

一个 10 倍杠杆、1,000 USDT 保证金的仓位,名义是 10,000 USDT。费率 0.01% 那一期扣的是 10,000 × 0.01% = 1 USDT,不是 0.1 USDT。杠杆放大的是名义,于是它同样放大了资金费——单边做多时这是成本,做套利收费率时这是收入,但两边算错的幅度一样大。

示意图:左侧一个小的深蓝实心方块,一支细箭头指向右侧一个大得多的浅蓝色圆角面板,面板顶部横着一条很细的深蓝色薄片

还有一条常被忽略:结算时刻在仓才收付。00:00 前一分钟平掉,这一期一分不收、也一分不付;结算后一分钟才进场,同理。费率不按持仓时长摊,它是一个瞬时快照上的转账。

错算三:年化用「×3×365」

8 小时一期、一天三期、一年 365 天,于是很多人写 费率 × 1095。这对 8 小时的合约成立,对 4 小时的合约就少了一半。

通用写法按小时折:

年化 = 每期费率 × 8760 ÷ 周期小时数

8760 是一年的小时数。8 小时周期得 1095 倍,4 小时得 2190 倍,1 小时得 8760 倍。

结算周期 一年结算次数 每期 0.01% 对应年化
8 小时 1,095 10.95%
4 小时 2,190 21.90%
1 小时 8,760 87.60%

有了归一化因子之后,同一个溢价水平下 4 小时合约每期的数本来就只有 8 小时的一半,年化会落回同一档。所以这张表回答的不是「哪个周期更赚」,而是另一个更常犯的错:费率表上两行数字相同时,它们不等值。跨交易对排序前必须先年化,否则 4 小时那一批会被系统性地排到它该在的位置之后。

走一遍能对账的算例

一个 8 小时结算的 USDT 永续,某一期的平均溢价指数 P = 0.008%,利率 I = 0.01%:

  1. I − P = 0.002%,落在 ±0.05% 之内,clamp 不起作用,原样通过
  2. 方括号 = 0.008% + 0.002% = 0.01%
  3. N = 8,8 / N = 1,不缩放 → F = 0.01%
  4. 名义 20,000 USDT → 这一期多头付出 2 USDT,空头收到 2 USDT
  5. 年化 = 0.01% × 8760 ÷ 8 = 10.95%

同样的溢价,换成 4 小时结算的合约:方括号仍是 0.01%,除以 8 / 4 = 2,每期 0.005%;年化 0.005% × 8760 ÷ 4 = 10.95%。两个数一模一样——这正是归一化因子该有的效果,也是一个免费的自检:算完两边对一下,对不上就说明有一步串了。

想知道这笔钱为什么存在,什么是资金费率那篇从永续合约缺了交割日讲起;符号翻过来之后谁付谁、能不能反着做,在资金费率为负那篇。

算出来的费率,不等于你能拿到的收益

这是费率计算器和真实账单之间的最后一道差。收一期费率的代价是开平两条腿共四笔吃单:

整轮成本 = 2 × (合约腿吃单费率 + 现货腿吃单费率)
         + 2 × (合约腿半价差   + 现货腿半价差)

回本期数 = ⌈整轮成本 ÷ 每期费率⌉

价差那一项经常被整个漏掉,而它与手续费同量级。我们在自己的账号上量过几组:INJUSDT 整轮手续费 0.30%、整轮价差 0.048%;CHRUSDT 的价格只有 5 位有效数字,一个最小变动单位就占 0.074%,整轮价差在 0.30% 上下,跟手续费一样贵。最难看的一行是 HOLOUSDT——只算手续费时单期净收 +0.002%,界面上看着能做,把价差算进去是 −0.09%。

示意图:一排从左到右逐级升高的柱子,一条水平虚线横贯画面,虚线以下的柱子是浅蓝空心、达到或超过虚线的几根是深蓝实心

所以单看一个「年化 40%」没有意义,得配上回本期数一起看:要持满 20 期(约 6.7 天)才回本,而费率往往两期之内就翻号,那这一行根本做不成。工程上怎么处理这件事写在 Delta 中性怎么落地;逐年的真实结果在历史业绩,最差的那年也在同一张表上。

自己核一遍

  • 当期费率与下次结算时间:合约页面的资金费率栏,或 fapi/v1/premiumIndex
  • 这个合约是不是 8 小时:fapi/v1/fundingInfo,没列出来就是 8 小时
  • 已结算的历史费率:fapi/v1/fundingRate,注意它和当期那个还在浮动的预估值不是一个东西
  • 自己实际被扣或收了多少:账户流水里的 funding fee 条目,拿它去对名义 × 费率

对不上的时候,八成落在周期、基数、年化这三处里的一处。别的疑问可以先翻常见问题。