第二章:回扣计算与结算机制

做量化交易的朋友都知道,手续费是隐形的利润杀手。但很多人不知道的是——如果你做对了方向,手续费反而能变成你的收入。这就是回扣的魅力。

今天我们就来聊聊回扣的计算与结算。这部分内容,说白了就是搞清楚「交易所到底怎么扣钱,又怎么返钱」。我做了这么多年风控,见过太多人因为算不清这笔账,策略明明赚钱,一扣手续费反而亏了。

2.1 Taker与Maker费用模型

先讲最基础的概念。交易所把订单分成两种角色:

  • Maker(挂单者):你挂一个限价单,没有立即成交,而是挂在订单簿上等着。你提供了流动性,交易所通常给你优惠,甚至返钱。
  • Taker(吃单者):你直接按市场价吃掉订单簿上的单子。你消耗了流动性,交易所会收你更高的手续费。

我个人习惯把Maker想象成「摆摊的」,Taker是「直接拿钱买东西的」。摆摊的给市场提供了商品选择,所以市场管理费低;直接买的图方便,多交点费也合理。

核心公式:

Maker手续费 = 成交金额 × Maker费率(通常为负值,即返钱)

Taker手续费 = 成交金额 × Taker费率(通常为正值,即扣钱)

举个例子。假设你在Binance做BTC/USDT交易,Maker费率是-0.01%,Taker费率是0.04%。你挂了100万U的Maker单,成交后交易所反而给你10U。如果你直接吃单,就要交400U。

嗯,这里要注意:不同交易所的费率差异很大。有的交易所Maker费率是0,有的是负的。我见过最夸张的是某小型交易所,Maker返佣高达0.02%,但Taker费率也高得吓人——0.1%。

2.2 回扣计算公式

回扣计算其实不复杂,但细节容易踩坑。我们拆开来看。

2.2.1 基础回扣公式

回扣金额 = 成交名义本金 × 回扣费率

其中:
- 成交名义本金 = 成交数量 × 成交价格
- 回扣费率 = 交易所规定的Maker返佣比例(通常为负值)

举个例子:

你在OKX挂单买入10个BTC,成交价30000 USDT
名义本金 = 10 × 30000 = 300,000 USDT
Maker费率 = -0.015%
回扣金额 = 300,000 × (-0.015%) = -45 USDT
(负值表示交易所给你钱,实际到账+45 USDT)

我曾经在项目中遇到过一个问题:某交易所对某些币种有最低回扣门槛。比如你挂单只成交了10U,按费率算应该返0.001U,但交易所规定最低返0.01U。这种细节不注意,对账时就会对不上。

避坑指南: 我曾经因为没注意「最小回扣单位」这个参数,导致策略回测和实盘差了0.3%的收益。后来我养成了一个习惯——每次接入新交易所,第一件事就是拉取它的费率规则JSON,逐条解析。

2.2.2 阶梯费率与VIP等级

大多数交易所都有阶梯费率。你交易量越大,费率越优惠。比如:

30天交易量(BTC) Maker费率 Taker费率
< 100 -0.01% 0.04%
100 - 1000 -0.015% 0.035%
> 1000 -0.02% 0.03%

这里有个坑:阶梯费率是按「近30天累计交易量」计算的,而且是动态调整的。你今天交易量上去了,明天费率就变了。我见过有人策略跑得好好的,突然有一天手续费暴涨,一查才发现是交易量掉到了下一档。

2.3 结算周期与对账

回扣不是实时到账的。不同交易所的结算周期差异很大。

2.3.1 常见结算周期

  • T+0 实时结算:成交后立即返佣。Binance、OKX等主流交易所都是这种。
  • T+1 日结:第二天统一结算。部分中小交易所采用。
  • 周结/月结:一周或一个月结算一次。多见于做市商协议。

我个人建议:做高频策略一定要选T+0结算的交易所。为什么?因为回扣是你的现金流。如果T+1结算,你的资金利用率就低了。我见过一个做市团队,因为选了月结的交易所,结果一个月下来回扣占了总利润的15%,但资金被占用了一个月,机会成本巨大。

注意: 有些交易所虽然宣称T+0,但实际到账有延迟。比如某交易所的API文档写的是「实时返佣」,但我实测发现平均延迟3-5秒。对于毫秒级高频交易来说,这个延迟足以影响策略。

2.3.2 对账方法

对账是风控的核心环节。我一般用三步法:

  1. 拉取交易记录:通过API获取每笔成交的详细信息,包括成交时间、价格、数量、手续费、回扣。
  2. 计算理论回扣:根据费率规则,手动计算每笔订单应该返多少。
  3. 比对差异:将理论值和实际值做差,超过阈值就报警。
# 伪代码示例
def check_rebate(trades, fee_rules):
    for trade in trades:
        expected = trade.amount * trade.price * fee_rules.maker_rate
        actual = trade.rebate
        if abs(expected - actual) > 0.0001:
            alert(f"对账异常:订单{trade.id},预期{expected},实际{actual}")

我曾经用这个逻辑抓出过一次问题:某交易所的API返回的「手续费」字段,竟然包含了回扣和手续费的总和,而不是分开的。导致我算出来的回扣总是对不上。后来我仔细读了API文档才发现,人家把回扣直接算成了负数手续费。

2.4 常见交易所规则对比

我整理了一张对比表,方便大家快速了解主流交易所的差异:

交易所 Maker费率 Taker费率 结算周期 特殊规则
Binance -0.01% ~ 0% 0.04% ~ 0.1% T+0 BNB抵扣可再打折
OKX -0.015% ~ 0% 0.035% ~ 0.1% T+0 阶梯费率按30天交易量
Bybit -0.01% ~ 0% 0.04% ~ 0.075% T+0 USDC永续合约费率不同
Deribit -0.01% 0.05% T+1 期权合约费率固定

你想想看,同样是做Maker策略,在Binance和Deribit的费率差了0.005%。如果每天交易1亿U,一年下来就是18万U的差距。这就是为什么我每次接入新交易所,第一件事就是算清楚费率。

我的经验: 不要只看表面费率。有些交易所虽然Maker费率低,但Taker费率极高。如果你的策略有部分吃单需求,综合成本可能反而更高。我建议用「加权平均费率」来评估——根据你的策略中Maker和Taker的比例,算出一个综合费率。

知识体系结构图

下面这张图总结了本章的核心逻辑,方便你快速回顾:

回扣计算与结算机制知识体系 费用模型 回扣计算 结算对账 Maker(挂单者) Taker(吃单者) 基础公式 阶梯费率 结算周期 对账方法 交易所规则对比 T+0 / T+1 / 周结 三步对账法 Binance/OKX/Bybit 核心:理解费用模型 → 精确计算回扣 → 严格对账

这张图把本章的知识点串起来了。从左到右看:先理解费用模型,然后学会计算回扣,最后掌握对账方法。每一步都有坑,但只要你按这个框架走,基本不会出大问题。

最后说一句: 回扣计算看似简单,但实际落地时细节很多。我建议你写一个自动化对账脚本,每天跑一遍。别问我为什么——我曾经因为交易所改了费率没通知,导致对账差了2万U。从那以后,我再也不相信人工对账了。

专注资料整理