MarketMaker.cc Team
量化研究与策略
MarketMaker.cc Team
量化研究与策略
假设你优化了一个策略。回测显示 PnL +55%,MaxDD -0.9%。你计算 MaxLev:。相乘:。两年三千个百分点。你已经在脑海中挑选兰博基尼了。
三个月后在实盘中,你的资金低于起始值。策略完全按照回测运行——相同的入场、相同的出场、相同的回撤。但你每天都在亏钱。持续不断。
原因:资金费率。你的回测没有考虑到的隐形费用——或者计算方式不正确。
在加密货币交易所,永续合约(perpetual swaps)没有到期日。为了使期货价格锚定于现货价格,交易所使用资金费率机制——多头和空头之间的定期支付。
Binance/Bybit 的机制:
单次支付公式:
在杠杆 和资本 的情况下:
标准的 MaxLev(最大杠杆)指标是杠杆的理论上限,在此杠杆下回撤不超过目标水平:
该公式没有考虑依赖于杠杆的成本。在 1 倍杠杆下,资金费率是微不足道的费用。在 58 倍——这是一场灾难。
交易手续费(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%。
这是关键计算——策略日收益与日成本的对比:
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 的差异:
在回测中计入资金费率不是可选项——而是必须的。以下是最小化实现:
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 倍。
资金费率由期货价格与现货价格之间的差异决定。如果你的策略允许通过现货进行对冲——资金费率就被中和了:
不同交易所对同一资产有不同的资金费率。监控资金费率套利本身就是一个独立策略,在文章跨交易所资金费率套利中有详细描述。
资金费率在固定时间支付(00:00、08:00、16:00 UTC)。如果交易在支付前一分钟平仓——资金费率不会被扣除。这是微观优化,但在 58 倍杠杆下,一次跳过支付节省 0.58% 是可观的。
不使用固定杠杆,而是使用自适应杠杆:
当资金费率升高时,杠杆自动降低,限制成本。
资金费率必须成为回测流水线的必要组成部分:
**实用法则:**如果策略在 0.03% 资金费率下不再盈利(这在牛市中占 20-30% 的时间)——它还没有准备好在高杠杆下投入实盘。将杠杆降低到即使在最坏资金费率场景下策略仍然盈利的水平。
资金费率是杠杆税。就像真正的税一样,小额时不易察觉,大额时具有毁灭性。
三条规则:
**始终在计算 PnL@ML 时考虑资金费率。**不含资金费率的公式是营销,不是交易。加载历史资金费率,从每笔交易中扣除真实成本。
使用安全杠杆公式:
50-60 倍杠杆下漂亮的 PnL 数字是一种令人愉快的幻觉。资金费率是冰冷的现实。两者之间的差距,就是回测和真实交易账户之间的距离。
关于高杠杆下回撤数学和波动率拖累的更多内容——请参阅我们的文章亏损与利润的不对称性。关于如何获得经资金费率调整后结果的置信区间——回测的蒙特卡洛自助法。
@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 上的资金费率如何将高杠杆下漂亮的回测结果变成确定的亏损。公式、真实策略的重新计算,以及资金费率不吞噬利润的最大杠杆倍数。} }