← 返回文章列表
March 9, 2026
5 分钟阅读

资金费率扼杀你的杠杆:为什么 PnL×50x 是虚构的

资金费率扼杀你的杠杆:为什么 PnL×50x 是虚构的
#算法交易
#回测
#资金费率
#杠杆
#风险管理
#加密货币
#Binance

假设你优化了一个策略。回测显示 PnL +55%,MaxDD -0.9%。你计算 MaxLev:50/0.9=55×\lfloor 50 / 0.9 \rfloor = 55\times。相乘:55%×55=+3025%55\% \times 55 = +3025\%。两年三千个百分点。你已经在脑海中挑选兰博基尼了。

三个月后在实盘中,你的资金低于起始值。策略完全按照回测运行——相同的入场、相同的出场、相同的回撤。但你每天都在亏钱。持续不断。

原因:资金费率。你的回测没有考虑到的隐形费用——或者计算方式不正确。

资金费率如何运作

在加密货币交易所,永续合约(perpetual swaps)没有到期日。为了使期货价格锚定于现货价格,交易所使用资金费率机制——多头和空头之间的定期支付。

Binance/Bybit 的机制:

  • 资金费率每 8 小时支付一次(00:00、08:00、16:00 UTC)
  • 资金费率由期货价格与现货价格之间的差异决定
  • 如果资金费率为正——多头向空头支付
  • 如果为负——空头向多头支付
  • 典型费率:每 8 小时 ±0.01%\pm 0.01\%(极端情况下可达 ±0.5%\pm 0.5\%

单次支付公式:

Funding cost=Position size×Funding rate\text{Funding cost} = \text{Position size} \times \text{Funding rate}

在杠杆 LL 和资本 CC 的情况下:

Funding cost=C×L×Rate\text{Funding cost} = C \times L \times \text{Rate}

为什么回测在杠杆问题上说谎

标准的 MaxLev(最大杠杆)指标是杠杆的理论上限,在此杠杆下回撤不超过目标水平:

MaxLev=Target DDMaxDD\text{MaxLev} = \left\lfloor \frac{\text{Target DD}}{\text{MaxDD}} \right\rfloor

该公式没有考虑依赖于杠杆的成本。在 1 倍杠杆下,资金费率是微不足道的费用。在 58 倍——这是一场灾难。

线性成本 vs 二次成本

交易手续费(maker/taker fees)是线性的——它们与交易量成正比,不依赖于杠杆。资金费率相对于仓位大小也是线性的,但按单位资本重新计算时,它们与杠杆成正比增长:

Funding cost per capital=L×Rate×Frequency\text{Funding cost per capital} = L \times \text{Rate} \times \text{Frequency}

在持仓期 HH 天和每天 3 次支付的情况下:

Total funding=L×Rate×3×H\text{Total funding} = L \times \text{Rate} \times 3 \times H

重新计算:考虑资金费率的策略示例

作为示例,考虑三个具有不同风险特征的假设策略。参数:永续合约,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%/天

从这些数字看,资金费率似乎不是关键。但这些是平均值。问题在别处。

真正的问题:回撤期间的资金费率

Leverage, drawdown duration, and funding impact surface

资金费率在仓位持有期间持续累积——包括回撤期。例如:0.9% 的最大回撤(策略 A)在 55 倍杠杆下变为:

Effective DD=0.9%×55=49.5%\text{Effective DD} = 0.9\% \times 55 = 49.5\%

这已经处于清算的边缘。现在加上资金费率:

DD with funding=49.3%+accumulated funding during DD period\text{DD with funding} = 49.3\% + \text{accumulated funding during DD period}

如果回撤持续 3 天,资金费率为 0.01%:

Funding over 3 days=0.0001×3×55×3=4.95%\text{Funding over 3 days} = 0.0001 \times 3 \times 55 \times 3 = 4.95\%

总计:49.5%+4.95%=54.45%49.5\% + 4.95\% = 54.45\%——在标准 50% 维持保证金下已经爆仓

考虑资金费率的安全杠杆公式

Lsafe=Target DDFunding bufferMaxDDL_{safe} = \frac{\text{Target DD} - \text{Funding buffer}}{|\text{MaxDD}|}

其中 Funding buffer 是典型回撤持续期间的预期资金费率:

Funding buffer=Rate×3×L×DD duration (days)\text{Funding buffer} = \text{Rate} \times 3 \times L \times \text{DD duration (days)}

这是一个递归方程(funding buffer 依赖于 LL)。解为:

Lsafe=Target DDMaxDD+Rate×3×DD durationL_{safe} = \frac{\text{Target DD}}{|\text{MaxDD}| + \text{Rate} \times 3 \times \text{DD duration}}

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 的差异:

  • 天真计算:55%×55=+3025%55\% \times 55 = +3025\%
  • 含资金费率(0.01%):55%×50165%=+2585%55\% \times 50 - 165\% = +2585\%
  • 含资金费率(0.03%):55%×42400%=+1910%55\% \times 42 - 400\% = +1910\%

将资金费率实际集成到回测中

在回测中计入资金费率不是可选项——而是必须的。以下是最小化实现:

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

在一个完善的回测引擎中,资金费率会自动加载并应用到每笔交易中。这提供了真实的画面——通常比人们期望的更不乐观。

现实的杠杆范围

Funding rate regimes and safe leverage comparison

以下示例展示了资金费率在不同 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. 动态杠杆

不使用固定杠杆,而是使用自适应杠杆:

Ldynamic=Lbase×Ratemedianmax(Ratecurrent,Ratemedian)L_{dynamic} = L_{base} \times \frac{\text{Rate}_{median}}{\max(\text{Rate}_{current}, \text{Rate}_{median})}

当资金费率升高时,杠杆自动降低,限制成本。

将资金费率集成到流水线中的建议

资金费率必须成为回测流水线的必要组成部分:

  • 为每个交易对加载历史资金费率
  • 根据持仓期间的实际资金费率调整每笔交易
  • 使用含 funding buffer 的公式计算 MaxLev
  • 在报告中同时显示两个数字:不含资金费率的 PnL@ML 和含资金费率的 PnL@ML

**实用法则:**如果策略在 0.03% 资金费率下不再盈利(这在牛市中占 20-30% 的时间)——它还没有准备好在高杠杆下投入实盘。将杠杆降低到即使在最坏资金费率场景下策略仍然盈利的水平。

结论

资金费率是杠杆税。就像真正的税一样,小额时不易察觉,大额时具有毁灭性。

三条规则:

  1. **始终在计算 PnL@ML 时考虑资金费率。**不含资金费率的公式是营销,不是交易。加载历史资金费率,从每笔交易中扣除真实成本。

  2. 使用安全杠杆公式:

Lsafe=Target DDMaxDD+Rate×3×DD durationL_{safe} = \frac{\text{Target DD}}{|\text{MaxDD}| + \text{Rate} \times 3 \times \text{DD duration}}

  1. **在 3 倍资金费率下测试。**如果策略在 0.03% 资金费率下仍然盈利(而不仅仅是 0.01%)——它是稳健的。如果不是——降低杠杆。

50-60 倍杠杆下漂亮的 PnL 数字是一种令人愉快的幻觉。资金费率是冰冷的现实。两者之间的差距,就是回测和真实交易账户之间的距离。

关于高杠杆下回撤数学和波动率拖累的更多内容——请参阅我们的文章亏损与利润的不对称性。关于如何获得经资金费率调整后结果的置信区间——回测的蒙特卡洛自助法


有用链接

  1. Binance — Funding Rate History
  2. Binance — Introduction to Funding Rates
  3. Bybit — Understanding Funding Rates
  4. Deribit Insights — The Hidden Cost of Perpetual Swaps
  5. Lopez de Prado — Advances in Financial Machine Learning, Chapter 14: Backtest Statistics
  6. 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

量化研究与策略

在 Telegram 中讨论
Newsletter

紧跟市场步伐

订阅我们的时事通讯,获取独家 AI 交易见解、市场分析和平台更新。

我们尊重您的隐私。您可以随时退订。