你是不是遇到过这种情况:用日频数据算出来夏普是1.2,换成月频数据一算,变成了1.8?数字差这么多,到底哪个是对的?
别慌,你不是算错了。这个差异本身就在告诉你一件事——你的年化方法有问题。今天直接拆开看问题出在哪,以及怎么改。
问题出在哪:√252 和 √12 不是万能公式
很多人算年化夏普,直接用这一招:日频夏普 × √252,月频夏普 × √12。
但William Sharpe本人在1994年的论文里就说过:不同频率的数据算出来的夏普比率,不能直接用这个倍数换算。原因是夏普用的是算术平均收益,而"年化收益 = 日收益 × 252"这个等式,在真实市场里根本不成立。
简单说:你用一个月的日收益数据算出日频夏普,再乘以√252得到"年化值",跟直接用月收益数据算出月频夏普再乘以√12,结果大概率对不上。
常见失败原因:有人发现两个结果不一样后,会去"调整"其中一个,让它们看起来一致——这属于数据造假。差异本身是真实存在的,掩盖它只会让你误判策略。
为什么不一致:两个核心原因
原因1:复利效应
日频数据年化用的是"日收益的累积",月频数据年化用的是"月收益的累积"。一年有252个交易日,但不是每个月正好21个交易日,而且每个月的天数还不一样。
举个极端例子:某个月你赚了20%,用日收益算的年化收益和用月收益算的年化收益,数字完全不同。复利路径不一样。
原因2:收益的自相关性
日收益之间存在"动量"或"反转"效应——今天的涨跌跟明天可能有关联。月收益把这些日内噪音过滤掉了一部分。
用日频数据算波动率时,会把每天的噪音都算进去;月频数据相当于做了平滑处理。所以日频夏普通常会比月频偏低。
怎么改:两条路,选一条走到底
统一你的计算口径,不要再混用。
以下两种做法都可以,但选了就不能中途换:
情况A:用日频数据 + 正确年化方法
在R语言的PerformanceAnalytics包里,年化夏普的计算公式是:
年化夏普 = (几何年化收益 − 年化无风险利率) ÷ (√scale × 日收益标准差)。其中scale = 252(日频),scale = 12(月频)。这个方法把"几何年化收益"和"标准差年化"拆开处理,而不是简单粗暴地乘以√252。
情况B:直接用原始频率的夏普做比较
不要年化。用日频数据算出来的夏普就放在日频框架下比较,月频的放在月频框架下。只要两个策略用的是同一套规则,对比就有效。
实操建议:大多数专业机构在对比多个策略时,直接用同一频率的原始夏普进行比较,不做年化转换。因为年化过程会引入额外的假设和误差。
完成标准:你明确知道你当前用的是哪种方法,并且把它写在策略文档里。下次再算的时候用同一套。
FAQ
Q:我用的交易所API只提供日频数据,没法取月频怎么办?A:就用日频。关键是保持一致性——你的策略之间横向对比,只要都用同一套方法算,结论就是成立的。
Q:为什么有些教程直接教我用√252?A:因为那是一个简化版本,在假设收益独立同分布时成立。但加密市场显然不符合这个假设。专业级的夏普计算会避免这种简化。
下一步操作
打开你算夏普的那张表,看两件事:
- 你用的是哪个频率的数据(日/月)?
- 你的年化方法是直接乘√252,还是用了几何年化公式?
如果以前是直接乘的,今天改成用几何年化法重新算一遍。不用纠结于"哪个数字更大"——关键是同一个策略、同一套方法,纵向对比。



