- Published on
PineScript策略月度收益统计
- Authors

- Name
- CoresightQuant
NOTE
本文为公开交易策略的技战术复盘,聚焦方法逻辑、交易场景与风险边界。
策略解读
这短短几行英文描述,其实点出了量化交易中一个长期存在的痛点:策略回测结果远不止“总收益率”“最大回撤”“夏普比率”这几个数字。平台默认的绩效报告是固定的,但真正深入研究策略的人,往往需要从不同时间维度去拆解表现——比如这个月赚钱主要靠哪几笔交易?每年年初是不是系统性亏损?不同月份的胜率是否存在明显差异?这些问题在默认报表里很难一眼看出来。
原作者的做法很朴素:不满足于默认输出,于是把原始交易数据导出来自己做二次分析,后来更进一步,直接在图表上绘制一张“月度/年度收益表”。这种做法本质上是一种“绩效可视化增强工具”。它不改变策略本身,也不产生交易信号,而是把策略已经产生的每一笔交易按时间归类,按月、按年汇总成一张结构化表格。
这种表格的价值在于:它能把一条“收益曲线”拆解成“收益日历”。收益曲线只能告诉你整体走势,而收益日历可以告诉你哪些月份是策略的“丰收期”,哪些月份是“灾难期”。比如一个趋势跟踪策略可能在2月、3月连续盈利,但在8月、9月连续回撤,这种季节性规律在月度表上一目了然。再比如,你可以在表格里看到某一年出现极端亏损,然后倒推那一年发生了什么市场结构变化,从而判断策略是否需要调整参数或过滤条件。
原作者还提到“手动导出再分析”的流程。这确实是很多认真做策略验证的人会做的事:平台给出基础绩效后,把交易清单导出来,用电子表格软件做透视表,按月、按周、按小时甚至按持仓时长来切片统计。这样做没问题,但效率低,且每次修改策略参数后都要重复劳动。用表格直接显示在图表上,相当于把“事后手动分析”变成“实时自动展示”,大大缩短了策略迭代的反馈周期。
从更广义的角度看,这篇策略背后的理念是:绩效评估应当具备“可分解性”。单一的总收益指标具有误导性,因为同样的年化收益可能来自完全不同的收益分布——可能是12个月都稳定盈利,也可能是一年只靠两个月的大行情盈利而其余时间都在亏损。后者虽然总收益不错,但实盘中的心理压力和资金曲线波动会非常大。月度/年度收益表正好能揭示这种分布特征。
名词解释
-
策略绩效输出:指回测引擎根据历史行情模拟交易后生成的统计结果,通常包括总收益率、年化收益率、最大回撤、夏普比率、胜率、盈亏比、交易次数等。这些指标用于衡量策略的历史表现。
-
月度/年度收益表:一种将策略收益按自然月或自然年分组汇总的表格,每一行或每一列对应一个时间段,单元格显示该时间段内的收益率或盈亏金额。常见形式是“行=年份,列=月份”。
-
收益曲线:把策略账户净值按时间顺序连接而成的曲线,反映资金随时间的增长和回撤。常规绩效报告会给出这条曲线,但不容易看出具体哪个月份贡献了主要盈利。
-
回撤:从某次高点回落至后续低点的幅度,通常用百分比表示。最大回撤是指历史中从最高点到随后最低点的最大跌幅,是衡量策略风险的重要指标。
-
夏普比率:单位风险所获得的超额收益,计算公式为(策略收益率减去无风险利率)除以收益波动率。夏普比率越高,说明策略在承担相同风险的情况下获得了越高的收益。
-
盈亏比:平均盈利交易的盈利金额与平均亏损交易的亏损金额之比。它和胜率共同决定了策略的数学期望。
-
透视表分析:数据分析中常用的一种汇总方式,通过重新排列和分组数据来观察不同维度下的统计量。把交易记录按月份和年份做透视,就能得到月度/年度收益表。
策略思路讲解
这个策略的思路说简单也简单,说深刻也深刻。它的核心对象不是“市场”,而是“策略本身”。它不预测价格,不生成买卖信号,而是对已经生成的交易结果做“时间维度上的重组合”。
具体执行起来是这样的:假设你已经有了一个完整的交易策略,它在历史数据上产生了一串交易记录。每笔交易都有开仓时间、平仓时间、方向(做多或做空)、盈亏金额等基本信息。现在,我们要建立一个二维表格,横轴是月份(1月到12月),纵轴是年份(2020、2021、2022……)。表格的每个单元格,就存放该策略在该年该月的累计收益。
这里有一个处理细节:一笔交易可能跨月持仓,比如9月30日开仓,10月3日平仓,这笔盈亏到底算9月还是10月?不同的处理方式会带来不同的统计口径。常用的做法是按平仓时间归属,因为盈利或亏损在平仓那一刻才实现。当然也可以按持仓时间比例拆分,但那会复杂很多。公开社区的交易者通常采用“平仓时间”口径,因为算起来简单,且符合“真实已实现盈亏”的概念。
有了这张表,就可以做很多进一步的分析。比如:
- 按月度胜率计算:统计每个月份历史上赚钱的次数和亏钱的次数,判断策略是否存在“季节性”。
- 按年份汇总:把每个年份的12个月收益加总,得到年度收益,看策略是否逐年稳定还是某几年爆发。
- 滚动收益计算:以最近12个月为窗口,计算滚动年度收益,观察策略当前处于盈利周期还是衰退周期。
- 热力图可视化:给每个单元格填充颜色,盈利越多颜色越深红,亏损越多颜色越深绿。这样一眼就能看出哪个月是“业绩杀手”。
这个策略本身不包含任何预测因子,因此它的“策略性”体现在一种分析视角的转换:从“时间序列视角”转向“横截面日历视角”。时间序列视角只看到资金曲线一条线,日历视角则把时间切成一个个小区间,然后横向对比不同区间。
原作者说“很多交易者和投资者习惯于这样看收益”,这确实是事实。机构投资者在考核基金经理时,经常要求提供月度收益表,因为月度收益比年度收益更细,比单笔交易更粗,恰好处于一个既能过滤噪音又能揭示规律的分辨率。月度收益表还能计算出“月度胜负比”“最大连续亏损月数”等衍生指标,这些在评估策略稳健性时非常有用。
所以,这个“策略”实现的功能其实更像一个诊断工具。它可以让你快速回答这些问题:我的策略在哪个时间段表现最好?在哪个时间段系统性失灵?失灵是由于市场状态切换还是策略本身失效?如果失灵月份集中在特定季节,是否可以用仓位管理或过滤器来平滑收益?
优点
-
直观性强:一张月度/年度收益表,把复杂的历史绩效压缩成几十个数字,看起来非常直观。比起一条蜿蜒的收益曲线,表格更能让人快速抓住策略的强弱时间段。
-
能发现时间规律:很多策略存在月份效应或季节性规律。比如某些商品期货策略在每年3月表现更好,某些股票因子策略在财报季前后波动加大。月度表能轻松暴露这些非随机模式。
-
促进精细化回测分析:默认绩效报告只给出总和,而这个工具迫使你从“每笔交易”出发重新聚合数据。这种“从下到上”的分析思路,有助于发现单笔大亏、连续小亏、交易频率季节性等潜在问题。
-
实现成本低,运行开销小:不需要复杂计算,只需对已有的交易记录做一次分组求和。即便在很长的历史数据上运行,也不会产生明显延迟,而且不依赖未来函数,不改变策略信号。
-
便于策略比较与迭代:当你调整参数后,对比新旧月度表,可以立刻看出改进发生在哪个月份,是否修复了原来的特定弱点。这种“定位式透明”能提升优化效率。
-
适合实盘监控:如果把同样的逻辑用于实盘交易记录的统计,就能持续观察策略在真实市场中的月度表现是否与回测一致。一旦发现某个月份出现超出预期的亏损,可以及时发现并干预。
缺点
-
仅展示统计结果,不给出原因:表格告诉你10月亏钱,但不会告诉你为什么亏钱。它只是一个温度计,不是诊断仪。要理解亏损原因,还得回到逐笔交易和当时的行情结构中去。
-
存在幸存者偏差风险:如果策略最终整体亏损,你可能根本不会去保存这张月度表。很多人在看到总收益不佳时就直接放弃策略,而不去研究那些“盈利月份”的价值,这会导致一种反向的幸存者偏差——只研究活得好的策略,忽略了失败案例中的信息。
-
容易引发过拟合式解读:看到2月表现特别好,就想去开发一个“只在2月交易”的策略。这样的数据挖掘式发现往往是过拟合的,因为季节性规律可能是偶然的,未必会稳定重演。月度表的价值是提示线索,不是确证因果关系。
-
对跨月持仓的处理不够精确:如果按平仓时间归属盈亏,那么一笔在1月最后一天开仓、2月第一天平仓的大额盈利会被全部归入2月,但该盈利实际有很大部分来自1月的持仓波动。这会造成月度收益的“时间错配”。
-
依赖策略本身的交易频率:如果一个策略一年只交易两三次,那么月度表会非常稀疏,绝大多数月份为零或空白,此时图表的分析意义不大。月度表更适合交易频率相对较高的策略。
-
容易忽视风险调整后收益:只看月度收益率而不考虑波动率,可能会误导人。一个月份赚了20%,但期间最大回撤达30%,这样的月度“正收益”并不值得庆祝。只有把收益和风险放在一起看才更有意义。
起源年份考证
关于“用月度/年度收益表来评估交易策略”这一方法,无法精确考证到某一个具体年份或某一位发明者。从公开资料和行业历史来看,这类方法属于“绩效归因与可视化”领域,其起源可以追溯到以下几个重要时间节点:
-
20世纪50-60年代:现代资产组合理论诞生。马科维茨提出了均值-方差分析框架,强调收益与风险的权衡。此时,机构投资者开始系统性地记录和比较不同资产不同时间区间的收益,但主要以年度为最小单位。
-
20世纪70-80年代:计算机和电子表格普及后,基金经理开始按季度甚至按月拆解投资组合收益。晨星公司等机构在90年代推出的基金评级报告中,就包含月度收益列表,这进一步推动了“月度收益表”作为标准展示工具的流行。
-
1990年代中后期:随着量化交易和程序化回测的兴起,独立交易者获得了以前只有机构才有的回测能力。如何直观展示策略绩效成为一个实际需求,月度收益表格成为社区中常见的分享格式。
-
2010年代之后:公开交易社区开始支持在图表上绘制自定义表格,这类“策略绩效仪表盘”类型的方法逐渐流行。原作者QuantNomad的脚本属于该时期的产物,其思路本质是对传统月度收益率表格的自动化实现。
因此,可以负责任地说:月度/年度收益表作为基金业绩展示方式,在20世纪80年代已经流行;作为自动化回测工具中的自定义表格展示,属于2010年代以后的做法。 该方法本身属于“绩效展示”这一大类,不存在某个唯一公认的发明人。
改进建议
-
增加风险调整后的收益列:在显示月度收益率的同时,追加一列“月度最大回撤”或“月度波动率”。这样可以看出某月的盈利是不是建立在巨大风险之上。还可以计算每个月的“收益/回撤比”,帮助识别高质量的盈利月。
-
区分多单与空单绩效:把月度收益表拆分成“多头月度收益”和“空头月度收益”两张子表。对于同时做多和做空的策略,这能揭示策略在多头市场与空头市场中的不同适应能力,有助于调整多空仓位比例。
-
添加滚动12个月收益行:在表格底部额外加一行“最近12个月滚动收益率”,这样可以显示策略当前所处的“年度化”表现,避免因某个月异动造成误判。滚动指标能平滑季节性波动,提供更稳健的绩效信号。
-
引入月份胜率统计:除了收益金额,还可以对每个月份进行“胜率统计”,即该月份的历史盈利次数占比。将收益率和胜率结合,能更全面地判断该月份的可靠性——如果某月收益率高但胜率低,说明该月收益主要靠少数大赚交易驱动,稳定性差。
-
支持自定义时间区间:用户可能只想观察牛市区间、熊市区间或特定事件后的表现。增加一个起始日期和结束日期的筛选器,让表格只在选定的时间范围内进行汇总,提高灵活性。
-
增加异常交易标注:在月度表中,对当月最大单笔盈利和最大单笔亏损进行标记,比如用特殊颜色或括号显示金额。这样能快速理解某个月业绩异常的原因——究竟是大行情带来的爆发,还是某次止损失误造成的重创。
-
加入市场基准对比:在同一张表格中并排显示策略月度收益与标的资产(如指数或商品)的月度收益。通过对比,可以判断策略的盈利是源自市场上涨带来的β收益,还是策略本身的α能力。这个功能对于评估策略真正价值非常重要。
-
输出历史回撤区间:在月度表旁边或下方,列出几个主要回撤的起止时间,并用颜色标出回撤期间对应的月份。这能帮助用户直观看到策略历史上的“崩溃期”是否与特定时间季节重合。
总结
这个看似简单的“月度/年度收益表”脚本,给了量化交易一个非常重要的启发:回测报告不是终点,而是起点。 默认提供的绩效指标只是对策略整体表现的高度浓缩,浓缩到一定程度就会丧失信息。当你想要优化策略、排查问题、理解收益来源时,就必须把绩效“打开”,从更细的时间维度去观察。
原作者QuantNomad的分享虽然短小,却体现了一种把私人分析习惯转化为公共可视工具的做法。他从“手动导出数据到外部表格”转向“在图表上动态生成收益日历”,本质上是从一次性分析走向持续监控,从静态报告走向动态仪表盘。这种思路可以推广到更多维度:按持仓时长统计、按交易方向统计、按资产类别统计、按信号来源统计……只要你能把交易记录结构化,就能创造无穷多面镜子来照见策略的各个侧面。
当然,我们也要清醒地认识到,月度收益表只是“看见问题”的工具,不是“解决问题”的工具。它告诉你10月亏损,却不会告诉你是否该在10月减少仓位;它告诉你策略在3月连续三年盈利,却无法保证今年3月依然盈利。过度解读时间序列中的模式,同样会掉入数据挖掘的陷阱。
对于普通交易者来说,学会使用这类绩效可视化工具,是迈向成熟量化交易者的一步。它不仅帮助我们更好地理解自己设计的策略,也能帮助我们建立一种“分解、验证、迭代”的科学工作流程。最终,每个月月末打开表格时,你不再只关心这个月赚了多少,而是会问:这个月的收益从何而来?这个月的风险是否符合预期?下个月,我该为哪种情况做好准备?
一份表格,如果能促使你提出这些更深入的问题,那么它的价值就已经远远超出了那些简单的数字本身。