如何计算反向永续合约的盈亏?
对于每张合约面值固定的标准反向永续合约,使用价格的倒数来计算交易盈亏,得到的结果以结算币种计价。用价格变化乘以固定的 BTC 数量,得到的其实是另一种完全不同的工具。
假设一份虚构的 BTC 反向合约面值为 1 美元。你以每 BTC 50,000 美元的价格买入 100,000 张合约,并在 55,000 美元时全部平仓。在扣除手续费和资金费率之前:
Q = signed contract count; positive for a long
C = dollar face value per contract
P&L_BTC = Q × C × (1 / entry_price − 1 / exit_price)
= 100,000 × $1 × (1 / $50,000 − 1 / $55,000)
= 0.18181818 BTC
P&L_USD_at_exit = 0.18181818 × $55,000
= $10,000
该仓位的合约面值为 100,000 美元。它对应的 BTC 数量会随价格变化:入场时为 2 BTC,出场时约为 1.818182 BTC。正是这种不断变化的换算关系,让我希望核算代码旁边始终附有合约规格说明。一个名为 size 的字段,简直是在邀请你花上一个周五的晚上去搞清楚别人当初指的到底是哪种单位。
请核对交易所的乘数、结算币种和取整规则。“反向”描述的是一种盈亏结算方式,并不保证在所有地方“一张合约都等于一美元”。
为什么我账户增加的美元金额比这笔交易赚到的更多?
因为抵押品本身也有价格。
假设起始有 1 BTC 的抵押品,价值 50,000 美元,并执行上述交易。假设期间没有出入金、手续费或资金费率,且保证金始终充足。平仓后,账户持有 1.18181818 BTC。按每 BTC 55,000 美元计算,价值 65,000 美元。
| 组成部分 | 计算方式 | 美元变动 |
|---|---|---|
| 原始抵押品 | 1 BTC × ($55,000 − $50,000) | +$5,000 |
| 衍生品盈亏(按出场价计价) | 0.18181818 BTC × $55,000 | +$10,000 |
| 账户总权益 | $65,000 − $50,000 | +$15,000 |
交易账本和账户权益曲线回答的是两个不同的问题。如果你的报告把这整整 15,000 美元都算作信号盈亏,那就相当于把“在上涨行情中持有抵押品”这件事,也算成了策略的功劳。
反过来同样重要。一个策略可能在美元权益下降的同时不断积累 BTC。两张图表本身都没有错,真正的问题在于:不加说明地在两者之间来回切换。
回测收益应该以 BTC 还是美元来衡量?
在比较不同策略之前,先确定报告货币,然后同时保留两种视角。以本例的账户来说,BTC 回报率为 18.18%,美元回报率为 30%。这是对同一个结果的两种不同度量。
在横向比较美股、稳定币结算期货与币本位合约时,我通常以美元计价的账户权益作为统一的报告序列。而对于以“积累 BTC”为研究目标的策略,BTC 序列应享有同等的重要地位。这个选择会改变收益分布、回撤幅度以及夏普比率。
要加入一个被动持有抵押品的基准。在本例中,如果只是单纯持有最初的 1 BTC 不动,也会带来 10% 的美元回报率。该账户在此期间跑赢这一基准 20 个百分点。这个差值仅仅是针对本例得出的结论,它并不能证明存在阿尔法,也没有对期间承担的衍生品敞口进行调整。
把计量单位写进字段名。 使用 equity_btc、equity_usd 和 pnl_btc 这样的命名。一旦报告中同时出现两种合约类型,一个不带单位的 equity 字段就会变得非常危险。
回测应如何记录以 BTC 支付的手续费和资金费率?
在实际发生币种变动时就如实记录。BTC 手续费会减少 BTC 钱包余额;BTC 资金费收入则会增加它。根据适用的合约规则和历史费率来推算这些金额。
然后要区分“交易归因”和“账户估值”这两件事。当 BTC 价格为 50,000 美元时支付的 0.001 BTC 手续费,在支付那一刻的价值是 50 美元。如果 BTC 之后涨到 55,000 美元,该账户持有的美元价值就会比一个从未支付这笔手续费的同等账户少 55 美元。其中多出来的 5 美元,正是那部分离开账户的币在之后发生的价格变动。
这两个数字都可能有用。如果只是把历史的美元计价现金流加到起始美元权益上,而不做明确的对账处理,就会遗漏这种货币效应。
我个人的偏好是:以币本位账本作为核算依据,美元估值由此推导得出。在每个快照时点,用一个有据可查、时间戳对齐的换算价格,来计算钱包余额加未实现币本位盈亏的价值。如果合约标记价格与报告用的换算价格之间存在任何刻意的差异,都应记录下来。
哪些测试能够发现反向合约的核算错误?
我会先从答案能在纸上手算出来的微小合成路径入手。市场历史数据非常擅长把一个单位错误藏在一条看似合理的权益曲线里。
| 测试项(不含成本) | 预期结果 |
|---|---|
| 以相同价格开仓和平仓 | 以 BTC 计的衍生品盈亏为零 |
| 在完全相同的路径上反转仓位方向 | 衍生品盈亏的符号精确翻转 |
| 持有 1 BTC 且不持有任何衍生品仓位;价格从 $50,000 涨到 $55,000 | BTC 权益保持为 1;美元权益增加 $5,000 |
| 按当前标记价平掉示例中的仓位 | 未实现盈亏转入钱包,且总权益保持不变 |
最后一项测试可以发现重复计数问题:引擎记入了已实现盈亏,却忘了扣除相应的未实现金额。同时也要测试部分平仓的情形——只有被平掉的那部分合约应结算其盈亏,剩余部分必须按该交易所的核算规则保留正确的入场成本基础。
AI 研究智能体在报告反向策略时应该呈现哪些内容?
合约数量与乘数、结算币种、起始抵押品、币本位现金流,以及以所声明报告货币计价的权益。在展示策略曲线的同时,应一并展示被动持有抵押品的曲线,并对两者之间的差异进行对账说明。
在一个自主研究工作流中,我会把这种对账作为接受一份回测结果的前提条件。优化器会对你交给它的任何数字进行排序优化。如果一份因 BTC 余额上涨而增长的资产负债表被错误地归功于交易信号,优化器会乐此不疲地把这个核算错误也一并“优化”进去。
真正有价值的报告,应该能够解释清楚:为什么这笔交易赚了 10,000 美元,而账户却增加了 15,000 美元,一直细化到每一笔结算记录。这样的结果,才是另一位研究者真正可以核实审查的。
← 全部文章
