名义价值为 $100,000 时,10 个基点的资金费率会带来 $100 的资金划转。一笔仓位若在一天内跨过 8 个资金费率时间戳,就可能发生 8 笔独立现金流。若一笔交易在某个时间戳之后 1 秒才开仓,按 K 线回测可能会把它算作收到了这笔付款,实际上却没有。最容易让人意外的,往往不是费率,而是交易所用来计算费率的名义价值。
永续期货资金费率是多空持仓者之间的转账,通常在预定时间结算。它不是交易所收取的交易费,仅有历史费率序列也不足以还原现金流。我们还需要知道每次结算时符合条件的仓位,以及交易所确定符合条件敞口的规则。
为什么不高的资金费率会让回测结果差这么多?
资金费率按仓位名义价值计算。策略持有 $100,000 的仓位,遇到 0.10% 的付款,现金流就是 $100。若每 8 小时重复一次,持续 30 天,简单累加就是 $9,000,尚未考虑仓位或费率的变化。这会显著影响策略报告的 P&L。
对于线性合约,一个实用的初步估算公式是:
funding cash flow = signed position notional × funding rate
常见约定是,正费率表示多头支付给空头;负费率表示空头支付给多头。若策略以 +0.10% 的费率持有 $100,000 多头仓位,现金流就是 -$100。同等名义价值的空头则会收到 $100。这个符号约定很容易弄反,尤其是数据供应商按付款方视角标注费率时。
资金费率是仓位产生的现金流。它应在结算时记入账户流水,与已实现 P&L 和费用并列,而不应作为百分比从信号中扣除,也不应应用到整根 K 线上。
如果交易跨越资金费率结算时间,按哪个仓位计算?
应按交易所记录的规则,使用交易所计算或结算资金费率时符合条件的仓位。如果回测每根 K 线只采样一次费率,再乘以 K 线结束时的仓位,就可能会对结算时并不存在的敞口收取资金费率。
来看一个简单例子。资金费率结算时间是 UTC 08:00。策略持有 $50,000 的多头仓位直到 07:59:59,随后平仓,并于 08:00:01 重新开立 $50,000 的多头仓位。如果交易所于 08:00 快照符合条件的仓位,那么仅仅因为回测的小时 K 线包含 08:00,就不应向任一笔交易收取资金费率。若交易所使用不同的测量窗口或结算约定,结果就会不同,因此请核对合约规格和交易所的实际记录。
| 回测中的简化做法 | 可能导致的问题 | 更妥当的处理方式 |
|---|---|---|
| 将每次费率应用于 K 线收盘时的仓位 | 结算后才开立的敞口也可能被收取资金费率 | 在事件发生时,按符合条件的仓位记入资金费率事件 |
| 不核对定义,直接使用费率符号 | 付款方和收款方可能颠倒 | 将交易所采用的符号约定与数据一并记录 |
| 将合约数量直接当作美元计算资金费率 | 反向合约的现金流可能以币种计价 | 使用合约乘数和结算币种 |
为什么合约类型会改变计算方式?
对于以美元或锚定美元的资产结算的线性合约,名义价值通常以报价币种表示。对于反向合约,则要考虑合约面值和结算币种:资金费付款可能以标的币种计价。把合约数量乘以费率,再把结果称为美元,可能会得到看似合理、但计量单位不匹配的账目。
明确记录各项单位:合约数量、乘数、标记价格或参考价格、资金费率和结算币种。使用现金流发生时可用的价格,将金额换算为投资组合的报告币种。原始金额和币种也要保留;之后的换算不应改写账户当时实际收到的金额。
我该如何验证回测中的资金费率?
先从一个可以手工核算的事件入手,再将账目与交易所对账单或小额模拟账户进行比对。逐个检查每个资金费率时间戳对应的仓位、费率、计算金额、符号和币种。如果策略在结算时间附近调整仓位,也要纳入时间戳之前和之后的交易。
- 确认时间戳,并核实费率是按每个结算间隔报价还是按年化报价。
- 检查费率是应用于按标记价格计算的名义价值、合约面值,还是交易所定义的其他金额。
- 根据交易所文档核对付款方和收款方的示例。
- 确认资金费率在正确的时间影响账户权益和可用余额。
资金费率可能让套利策略显得更有吸引力,也可能让方向性交易的表现比价格图表显示的更差。费率序列告诉我们市场报价的资金转移情况,仓位流水则告诉我们模拟账户当时是否持仓,因此需要支付或收取这笔资金。
← 全部文章


