假设你优化了一个策略。回测显示 PnL +55%,MaxDD -0.9%。你计算 MaxLev:。相乘:。两年三千个百分点。你已经在脑海中挑选兰博基尼了。
三个月后在实盘中,你的资金低于起始值。策略完全按照回测运行——相同的入场、相同的出场、相同的回撤。但你每天都在亏钱。持续不断。
原因:资金费率。你的回测没有考虑到的隐形费用——或者计算方式不正确。
资金费率如何运作
在加密货币交易所,永续合约(perpetual swaps)没有到期日。为了使期货价格锚定于现货价格,交易所使用资金费率机制——多头和空头之间的定期支付。
Binance/Bybit 的机制:
- 资金费率每 8 小时支付一次(00:00、08:00、16:00 UTC)
- 资金费率由期货价格与现货价格之间的差异决定
- 如果资金费率为正——多头向空头支付
- 如果为负——空头向多头支付
- 典型费率:每 8 小时 (极端情况下可达 )
单次支付公式:
在杠杆 和资本 的情况下:
为什么回测在杠杆问题上说谎
标准的 MaxLev(最大杠杆)指标是杠杆的理论上限,在此杠杆下回撤不超过目标水平:
该公式没有考虑依赖于杠杆的成本。在 1 倍杠杆下,资金费率是微不足道的费用。在 58 倍——这是一场灾难。
线性成本 vs 二次成本
交易手续费(maker/taker fees)是线性的——它们与交易量成正比,不依赖于杠杆。资金费率相对于仓位大小也是线性的,但按单位资本重新计算时,它们与杠杆成正比增长:
在持仓期 天和每天 3 次支付的情况下:
重新计算:考虑资金费率的策略示例
作为示例,考虑三个具有不同风险特征的假设策略。参数:永续合约,25 个月测试期,典型资金费率为每 8 小时 0.01%。
原始结果(不考虑资金费率)
| 策略 | PnL | MaxDD | MaxLev | PnL@ML | 交易次数 | 持仓时间 |
|---|---|---|---|---|---|---|
| 策略 A | +55% | -0.9% | 55x | +3025% | ~500 | ~15% |
| 策略 B | +25% | -0.75% | 66x | +1650% | ~40 | ~5% |
| 策略 C | +300% | -17% | 3x | +900% | ~400 | ~45% |
计算资金费率成本
def funding_cost(
leverage: float,
trading_time_pct: float,
test_days: int = 750, # 25 个月
funding_rate: float = 0.0001, # 每 8 小时 0.01%
payments_per_day: int = 3,
) -> float:
"""
计算累计资金费率成本占资本的百分比。
Returns:
资金费率成本占初始资本的百分比
"""
active_days = test_days * trading_time_pct
daily_cost = funding_rate * payments_per_day * leverage
total_cost = daily_cost * active_days
return total_cost * 100 # 百分比
计算:
a_funding = funding_cost(55, 0.15, 750)
b_funding = funding_cost(66, 0.05, 750)
c_funding = funding_cost(3, 0.45, 750)
考虑资金费率后的结果
| 策略 | PnL@ML(无资金费率) | 资金费率成本 | PnL@ML(含资金费率) | 状态 |
|---|---|---|---|---|
| 策略 A | +3025% | -185.6% | +2839% | 吞噬约 6% |
| 策略 B | +1650% | -74.3% | +1576% | 吞噬约 4.5% |
| 策略 C | +900% | -30.4% | +870% | 吞噬约 3% |
乍一看似乎可以接受:资金费率吞噬了最终 PnL@ML 的 3-6%。但这是平均资金费率。让我们看看在费率升高时会发生什么。
资金费率不是常数
典型的 0.01% 资金费率是中位数。实际上费率会波动:
| 市场阶段 | 典型资金费率 | 55 倍下每 8 小时 | 55 倍下每天 |
|---|---|---|---|
| 平静市场 | 0.005% | 0.275% | 0.825% |
| 正常 | 0.01% | 0.55% | 1.65% |
| 牛市趋势 | 0.03% | 1.65% | 4.95% |
| 极端牛市 | 0.1% | 5.50% | 16.5% |
| 闪电拉升 | 0.5% | 27.5% | — |
在 55 倍杠杆和牛市(0.03%)下:一天的多头持仓仅资金费率就消耗资本的 4.95%。
每活跃日 PnL vs 每日资金费率
这是关键计算——策略日收益与日成本的对比:
a_pnl_per_day = 55 * 55 / 112.5 # PnL@ML / 活跃天数 = 26.9%/天
b_pnl_per_day = 25 * 66 / 37.5 # = 44.0%/天
从这些数字看,资金费率似乎不是关键。但这些是平均值。问题在别处。
真正的问题:回撤期间的资金费率

资金费率在仓位持有期间持续累积——包括回撤期。例如:0.9% 的最大回撤(策略 A)在 55 倍杠杆下变为:
这已经处于清算的边缘。现在加上资金费率:
如果回撤持续 3 天,资金费率为 0.01%:
总计:——在标准 50% 维持保证金下已经爆仓。
考虑资金费率的安全杠杆公式
其中 Funding buffer 是典型回撤持续期间的预期资金费率:
这是一个递归方程(funding buffer 依赖于 )。解为:
def safe_leverage(
max_dd_pct: float,
target_dd_pct: float = 50.0,
funding_rate: float = 0.0001,
dd_duration_days: float = 3.0,
) -> float:
"""
考虑回撤期间资金费率成本的安全杠杆。
"""
denominator = max_dd_pct / 100 + funding_rate * 3 * dd_duration_days
return target_dd_pct / 100 / denominator
a_safe = safe_leverage(0.9, 50.0, 0.0001, 3.0)
a_safe_high = safe_leverage(0.9, 50.0, 0.0003, 3.0)
**结论:**在典型资金费率下,策略 A 的安全杠杆是 50 倍,而非 55 倍。在资金费率升高时——42 倍。PnL@ML 的差异:
- 天真计算:
- 含资金费率(0.01%):
- 含资金费率(0.03%):
将资金费率实际集成到回测中
在回测中计入资金费率不是可选项——而是必须的。以下是最小化实现:
import pandas as pd
import numpy as np
def load_funding_rates(symbol: str) -> pd.DataFrame:
"""从数据仓库加载历史资金费率。"""
path = f"warehouse/data/{symbol}/funding/"
return df # 列:[timestamp, rate]
def apply_funding_to_trades(trades, funding_rates, leverage: int = 1):
"""
从每笔交易的 PnL 中扣除真实的资金费率成本。
"""
for trade in trades:
mask = (
(funding_rates.index >= trade.entry_time) &
(funding_rates.index <= trade.exit_time)
)
payments = funding_rates.loc[mask, 'rate']
direction = 1 if trade.side == 'long' else -1
total_funding = payments.sum() * direction * leverage
trade.pnl_pct -= total_funding * 100
return trades
在一个完善的回测引擎中,资金费率会自动加载并应用到每笔交易中。这提供了真实的画面——通常比人们期望的更不乐观。
现实的杠杆范围

以下示例展示了资金费率在不同 MaxDD 水平下如何影响安全杠杆:
| 资金费率环境 | 平均费率 | DD=0.9% 时的 MaxLev | DD=17% 时的 MaxLev |
|---|---|---|---|
| 低(0.005%) | 0.005% | 53x | 3x |
| 典型(0.01%) | 0.01% | 50x | 3x |
| 升高(0.03%) | 0.03% | 42x | 3x |
| 高(0.05%) | 0.05% | 36x | 2x |
**关键发现:**对于低回撤策略(策略 A、B),资金费率显著降低有效杠杆。对于高回撤策略(策略 C),资金费率的影响最小——因为杠杆本来就限制在 3 倍。
最小化资金费率影响的策略
1. 对冲中性仓位
资金费率由期货价格与现货价格之间的差异决定。如果你的策略允许通过现货进行对冲——资金费率就被中和了:
- 多头期货 + 空头现货 = 0 资金费率净敞口
- 但是:在加密货币中做空现货受限(需要保证金账户或借贷)
2. 转移到资金费率较低的交易所
不同交易所对同一资产有不同的资金费率。监控资金费率套利本身就是一个独立策略,在文章跨交易所资金费率套利中有详细描述。
3. 入场时机选择
资金费率在固定时间支付(00:00、08:00、16:00 UTC)。如果交易在支付前一分钟平仓——资金费率不会被扣除。这是微观优化,但在 58 倍杠杆下,一次跳过支付节省 0.58% 是可观的。
4. 动态杠杆
不使用固定杠杆,而是使用自适应杠杆:
当资金费率升高时,杠杆自动降低,限制成本。
将资金费率集成到流水线中的建议
资金费率必须成为回测流水线的必要组成部分:
- 为每个交易对加载历史资金费率
- 根据持仓期间的实际资金费率调整每笔交易
- 使用含 funding buffer 的公式计算 MaxLev
- 在报告中同时显示两个数字:不含资金费率的 PnL@ML 和含资金费率的 PnL@ML
**实用法则:**如果策略在 0.03% 资金费率下不再盈利(这在牛市中占 20-30% 的时间)——它还没有准备好在高杠杆下投入实盘。将杠杆降低到即使在最坏资金费率场景下策略仍然盈利的水平。
结论
资金费率是杠杆税。就像真正的税一样,小额时不易察觉,大额时具有毁灭性。
三条规则:
-
**始终在计算 PnL@ML 时考虑资金费率。**不含资金费率的公式是营销,不是交易。加载历史资金费率,从每笔交易中扣除真实成本。
-
使用安全杠杆公式:
- **在 3 倍资金费率下测试。**如果策略在 0.03% 资金费率下仍然盈利(而不仅仅是 0.01%)——它是稳健的。如果不是——降低杠杆。
50-60 倍杠杆下漂亮的 PnL 数字是一种令人愉快的幻觉。资金费率是冰冷的现实。两者之间的差距,就是回测和真实交易账户之间的距离。
关于高杠杆下回撤数学和波动率拖累的更多内容——请参阅我们的文章亏损与利润的不对称性。关于如何获得经资金费率调整后结果的置信区间——回测的蒙特卡洛自助法。
有用链接
- Binance — Funding Rate History
- Binance — Introduction to Funding Rates
- Bybit — Understanding Funding Rates
- Deribit Insights — The Hidden Cost of Perpetual Swaps
- Lopez de Prado — Advances in Financial Machine Learning, Chapter 14: Backtest Statistics
- Kevin Davey — Building Winning Algorithmic Trading Systems: Transaction Costs
引用
@article{soloviov2026fundingratesleverage,
author = {Soloviov, Eugen},
title = {Funding Rates Kill Your Leverage: Why PnL×50x Is a Fiction},
year = {2026},
url = {https://marketmaker.cc/ru/blog/post/funding-rates-kill-leverage},
version = {0.1.0},
description = {Binance/Bybit 上的资金费率如何将高杠杆下漂亮的回测结果变成确定的亏损。公式、真实策略的重新计算,以及资金费率不吞噬利润的最大杠杆倍数。}
}
MarketMaker.cc Team
量化研究与策略