上个月我拿了一份资金费率套利的模拟盘,用 3 种方法计算 Sharpe。日超额收益均值 6.4 个基点,日标准差为 81 个基点。乘以 √252,就是 1.25。乘以 √365,就是 1.51。把同一条权益曲线按每 5 分钟采样,再乘以 √(365×288),笔记上写的是 3.08。前 2 个数字是日历之争。第 3 个是我们的研究代理在按数据文件的频率、而不是决策频率做年化时吐出来的。那根本不是我会为之辩护的 Sharpe 比率。
Sharpe(年化):3.08。5 分钟收益,crypto_carry_v3。
我把 3.08 留下来。正是这个数字需要解释。
为什么 5 分钟 Sharpe 会把日频 Sharpe 翻倍?
时间平方根法则说的是独立抽取。把 N 个 i.i.d. 收益加起来,均值按 N 缩放,标准差按 √N 缩放,比率按 √N 缩放。5 分钟加密货币收益不是独立抽取。中间价从买一弹回来。陈旧的标记价回跳一档。资金费率不是按 288 个独立切片累积的;它按时钟入账。一本在 16:00 UTC 成交、然后隔夜躺着的账本,并没有在你睡觉时再做另外 287 个决策。
当短周期收益均值回归,而微观结构噪声从构造上就是均值回归的,每隔 5 分钟采样的均值回归信号也会去交易那一跳。日频盯市会把它轧平。多出来的 1.57 年化 Sharpe,往往只是一个 2 个基点的振荡,根本撑不过 8 个基点的来回成本。你并没有发现更多优势。你只是把噪声切成了更多片,再乘以 324。
Andrew Lo 在 2002 年就把 √N 的失效写下来了,针对的是对冲基金月度收益中的序列相关。不同的市场。同样的罪过。我们仍然把 √N 当成一种排版选择。
252 还是 365,才是较小的那场仗
美国股票 NAV 跳过周末和节假日,一年大约给你 252 个点。加密货币永续周六照样成交。如果你每个日历日给 BTC 账本盯市,周六是真实的 P&L,带着真实的资金费率,你大约有 365 个收益。对这条序列用 252,会把年化数字低估大约 20%,因为 √365/√252 是 1.20。我对每日盯市的 24/7 账本用 365,对按交易时段收盘盯市的美国股票账本用 252。我会把这个常数写在 Sharpe 旁边。
这个差异是真实的。但它也不是 1.51 变成 3.08 的原因。拿一个按 365 算出来的加密货币 1.51,去和一个按 252 算出来的股票 1.51 不经换算就比较,那是路演材料的做法。把两者都换成日历年超额收益除以日历年收益的标准差,基于日频 NAV,否则就别比。
按决策时钟年化
如果策略每 5 分钟都能交易、而且确实在交易,5 分钟收益才是诚实的序列。你仍然不该盲目乘以 √105,120,因为这些收益是序列相关的。从 5 分钟账本做出日频 NAV,再用 √365 年化日频 Sharpe。日频盯市会把那一跳折进你从模拟账户上读到的同一个数字。
如果策略每天只交易 1 次,就根本别给它 5 分钟 Sharpe。也别把日频策略重采样成分钟 K 线,好让权益曲线看起来更光滑。一位同事曾发给我一张丝绒般顺滑的图,那是一本日频账本,前向填充到了分钟。交易并没有变。分钟文件上的 Sharpe 却大得吓人。直到现在,每当有代理说它检查了多个时间框架,我还会想起那条曲线。
研究笔记上该写什么
Sharpe 是收益序列的属性,不是策略的属性。笔记必须写明是哪条序列。
| 惯例 | 乘数 | 何时诚实 |
|---|---|---|
| 日频 × √252 | 15.87 | 美国股票、交易时段 NAV、周末不是收益 |
| 日频 × √365 | 19.10 | 加密货币(或任何 24/7 账本)每个日历日盯市 |
| 小时频 × √(365×24) | 93.6 | 每个小时都是独立决策,而且你仍然相信 √N |
| 5 分钟 × √(365×288) | 324.3 | 几乎从不,对一天交易不到 288 次的策略 |
我们印出的每一个 Sharpe,旁边我都要 3 样东西:收益频率、年化常数,以及周末盯市是否在样本里。如果代理漏了这些,我就把这个数字扔掉,从日频 NAV 重算。
模拟交易用一种无聊的方式把争论了结。在 00:00 UTC 给模拟账户盯市。用一年里的盯市次数年化这条序列。如果回测只有在你改了 √N 之后才对得上,你从来就没在看策略本身。
← 全部文章


