前言|一句“适合牛市”,往往说得太早
一套策略在上涨的年份赚了钱,在下跌的年份亏了钱。有人据此说:“它只适合牛市。”这句话听着有道理,却可能跳过了最重要的一步:**当时的人能否知道自己正处在所谓的牛市?**如果先看完整段行情,再把上涨的一截涂成“牛市”,研究者实际上用未来走势给过去的每一天起名。拿这样的标签指导交易,就把答案写在题目里了。
第十二篇检查动量选股与均值回归是否会在同一天亏损。本篇沿用这两套常见模板,往前追问一步:**共同亏损集中在什么样的市场环境?**我们不把“牛熊”当成事后公认的历史称号,而用前一交易日已经看到的指数价格,事先划出“强势、弱势、过渡”三种研究状态。然后逐日审查收益、现金仓位与成交成本。
本文提供完整的实验口径与配图,但没有运行新的行情分组实验。示意数字只用于解释计算,图表不代表平台实测。真正的答案,必须由同一数据版本下的两次可信回测和指数原始行情共同给出。
目录
- 前言|一句“适合牛市”,往往说得太早
- 01|先给“行情”一条当时就能执行的定义
- 02|把指数、策略与交易日对齐
- 03|分行情成绩单,先看赚了什么
- 04|赚钱时有多少仓位,亏钱时又剩多少
- 05|同一种行情,也有不同的连续路径
- 06|两套策略何时一起失手
- 07|别把行情分类调成漂亮答案
- 08|什么证据才配得上“只在牛市赚钱”
- 关于本文的研究口径
- 参考资料
01|先给“行情”一条当时就能执行的定义
媒体回头讲牛熊,通常看的是一整段已经结束的走势;策略研究需要的是交易当时可知道的状态。本文示范用平台支持的“中证全指”原始收盘价作为市场温度计。它不是天然正确的唯一指数,只是这次研究在看结果前选定的观察尺。研究者必须先核实本地是否有完整行情;没有则记录为实验未满足条件,或在看策略成绩之前登记更换指数,不能看完结果再挑最有利的一只。
设P t P_tPt为指数在交易日t tt的真实收盘价。计算截至前一交易日的120日均价M A 120 , t − 1 MA_{120,t-1}MA120,t−1和近20个交易日涨跌幅R 20 , t − 1 = P t − 1 / P t − 21 − 1 R_{20,t-1}=P_{t-1}/P_{t-21}-1R20,t−1=Pt−1/Pt−21−1,给当天策略收益贴标签:
S t = { 强势 , P t − 1 > M A 120 , t − 1 , R 20 , t − 1 > 3 % 弱势 , P t − 1 < M A 120 , t − 1 , R 20 , t − 1 < − 3 % 过渡 , 其余有完整资料的日期 S_t=\begin{cases} \text{强势},&P_{t-1}>MA_{120,t-1},\ R_{20,t-1}>3\%\\ \text{弱势},&P_{t-1}<MA_{120,t-1},\ R_{20,t-1}<-3\%\\ \text{过渡},&\text{其余有完整资料的日期} \end{cases}St=⎩⎨⎧强势,弱势,过渡,Pt−1>MA120,t−1,R20,t−1>3%Pt−1<MA120,t−1,R20,t−1<−3%其余有完整资料的日期
这些120日、20日和3%的数字是预先写下的研究示例,不是经过本项目回测证明的最佳阈值,也不是行业统一的“牛熊标准”。当长期位置和短期方向不一致,或短期涨跌没有超过3%,都归入“过渡”。均线不足120个有效交易日、前一日指数价格缺失、20日比较端点缺失时,标记“未知”,不硬分进过渡。阈值等号落在哪一组也要事先约定;本篇示例中等号归过渡。
图1:三类状态由前一交易日已经发生的指数价格决定;灰色“未知”是资料不足,不是第四种行情。规则为方法示意。
最重要的是标签的时间:如果周二收盘仍满足强势条件,周三才突然下跌,周三的策略收益仍归在周二已知的强势状态。这看起来不如事后称它为“下跌日”顺眼,却保留了研究者当时真实拥有的信息。周三收盘后若条件变化,影响的是周四标签。状态标签不等于订单:本篇只分组观察,没有让策略看到标签后自动切换。
02|把指数、策略与交易日对齐
两套策略沿用第十二篇的对照口径:同一股票池、数据版本、成本与成交规则、日期、初始资金和调仓频率。若继续采用“均衡、每周调仓、最多5只”的共同持股上限,要记下均值回归模板原默认是6只,本研究已把它改为5只。若用原始预设,就应明确这是5只与6只的两套策略,不装作其余条件完全相同。
指数数据应从平台数据管理 → 基准行情选择“中证全指”,确认覆盖率,再下载完整原始行情。平台运行结果中的benchmark_equity是为画基准净值而计算的列:某个回测日缺少指数行情时,当前实现会沿用上一收盘价。画一条连续基准线可以理解,但不能把这条填补后的线拿来判断行情状态;缺失日可能被误写成“横盘”。状态分类应使用benchmark_bars的原始raw_close,并逐日检查实际观测日期。
图2:交易日t tt的策略收益,配交易日t − 1 t-1t−1已知的市场状态。缺资料的日期单列,不能自动补零。
两次回测各自保留nav.parquet、positions.parquet、订单和费用明细、配置快照与可信度报告。先检查是否有审计失败、首尾日期不同或异常净值,再按共同交易日期求收益。任何一方缺估值,该日就不能硬凑成双策略比较。指数有价而策略没值,与策略有值而指数缺价,都是不同的数据问题,缺口清单应随实验保存。
03|分行情成绩单,先看赚了什么
设E k , t E_{k,t}Ek,t为策略k kk在t tt日收盘的账户总资产(含现金、费用后的结果),每日净收益为:
r k , t = E k , t E k , t − 1 − 1 r_{k,t}=\frac{E_{k,t}}{E_{k,t-1}}-1rk,t=Ek,t−1Ek,t−1
对每个状态分别列出有效交易日数、平均日净收益、收益为正的日数比例和收益分布。只写“强势赚15%、弱势亏8%”远远不够:强势可能有500天,弱势只有20天;也可能某一状态的大部分收益都来自很少几个异常日。中位数、分位区间和最差几天的原始日期有助于看清这一点。
图3:需由真实运行填入的表格。各状态样本天数与连续段数必须与收益并列。
还要把策略和同日指数放在一起。若强势时动量平均每天赚0.08%,指数平均每天涨0.10%,可以说账户这类日子赚钱,却不能因此说它“战胜市场”。反过来,弱势时策略亏0.04%、指数跌0.20%,账户仍在亏钱,但相对指数跌得少。这里的数字全部是手工教学例子;指数原始收盘价是价格口径,不是包含全部分红的全收益基准,所以两者的日收益差额只能称“相对这条价格指数的差额”,不能直接冠名为严格意义上的超额收益或阿尔法。
分组均值还会被各状态出现的频率影响。设n s n_sns是状态s ss的有效天数,r ˉ s \bar r_srˉs是该状态的平均日收益,n nn是全部有效日数,则:
r ˉ = ∑ s ∈ { 强势,弱势,过渡 } n s n r ˉ s \bar r=\sum_{s\in\{\text{强势,弱势,过渡}\}}\frac{n_s}{n}\bar r_srˉ=s∈{强势,弱势,过渡}∑nnsrˉs
这只是日收益平均值的拆分,不是把非连续日期的收益直接相加,更不是重新生成一条可交易净值。它提醒我们:即使某策略在强势状态表现好,如果强势日很少,整段历史的贡献也未必大;反过来,某类状态样本太少,漂亮均值也可能靠不住。
04|赚钱时有多少仓位,亏钱时又剩多少
同一状态下,账户净值可能因选股而变,也可能因仓位而变。动量选股在弱势环境里没有合格股票时,账户可能部分或大部分持有现金;均值回归在短期下跌时可能仍挑到股票。应按状态列出每日实际持股市值占总资产比例、全现金日数、换手、费用和未成交订单,而不只看信号发出次数。
图4:应把净收益和实际股票仓位并列;图中刻度为示意,不代表两套策略真实仓位。
若弱势期策略回撤较小,但长期只有10%股票仓位,这是一条有价值的风险控制事实;它不能直接证明“在跌市里选股仍然有效”。相反,若弱势期保持高仓位却跑赢价格指数,才值得进一步查选股、行业、市值与成本的贡献。可以另列“有持仓日”的条件收益作诊断,但主成绩必须保留所有日期:事后只挑策略愿意入场的日子,会把空仓成本和错过反弹的日子藏起来。
仓位的时间也要核对。收盘后的持仓解释下一交易日账户将面对的风险;若要解释当天的收益,应查当天价格变化前实际持有的股票,以及当日成交发生的时间。不能拿当天收盘才形成的新目标仓位,去解释当天已经发生的全部收益。尤其在状态切换附近,忽略这一日的差别,容易把“行情变化后才减仓”写成“提前避开了下跌”。
05|同一种行情,也有不同的连续路径
把所有“弱势日”抽出来做一张平均表,可能把十几次短促调整和一次漫长下跌混成同一种经验。账户在连续下跌中的现金、成交和回撤路径,和零散的单日下跌并不一样。每个状态除了交易日数,还要记录连续状态段数、每段持续天数、段内起止净值。一段从强势转入弱势、又很快返回过渡的过程,也值得保留,不要只展示持续最久的那段。
图5:强势、过渡、弱势的连续段用于检查路径;不是从本项目行情推算出的真实年份。
这里有一个容易出错的“最大回撤”算法:把历史上所有弱势日依次拼成一条新曲线,再对这条虚构曲线求最大回撤。原本相隔几个月的两天被粘在一起,中间的盈利、亏损和持仓变化全消失了。正确做法是保留账户原始时间轴:报告全路径最大回撤;若要看弱势段内回撤,就在每一段真实连续的弱势期内单独计算,并说明状态切换当天怎样归属。短到不足以形成可读路径的段,直接报告天数,不强算“牛市最大回撤”。
每种状态还需要足够多的独立段。300个弱势交易日若全来自一次市场事件,不能装作获得了300次互相独立的检验。按段列结果,至少能看出“多个时期重复出现”和“只在一场行情中有效”的差别;是否有统计把握,仍需更谨慎的时间序列方法与后续样本来判断。
06|两套策略何时一起失手
第十二篇要求记录动量和均值回归的共同亏损日。现在给每个共同日期贴上事前状态标签,就能问得更细:**已知的弱势状态中,两者一起亏损的天数与幅度有多少?**已知强势状态里突发下跌时又怎样?后一类尤其重要,因为周三的大跌不能倒过来把周二的“强势”改成弱势。
图6:各格数值待实际回测计算。共同亏损应同时报告天数、占比与平均损失,并列市场当日变化。
可在每个状态内分别算“两者都亏日数 / 该状态的双方有效日数”和“动量亏损时,均值回归也亏的日数 / 动量亏损日数”。两种分母回答不同问题。还要看同一天的指数涨跌和两边股票仓位,避免把整个市场同时下跌误写成某一个策略独有的问题。若弱势状态里几乎没有投资日,读者也需要知道:共同亏损少,可能主要是因为两边都在持现金。
这一章不构造一个50%/50%的“组合收益”。两套独立账户的并排结果可以检验共同风险,却不能替代共享现金和统一订单的组合回测。第十二篇已经解释了这条边界,本篇的行情分组也不能越过它。
07|别把行情分类调成漂亮答案
只要愿意试足够多种“牛熊线”,很容易找到一套刚好把大涨日放进强势、大跌日放进弱势的定义。60日还是120日均线、涨幅阈值是2%还是3%、选沪深300还是中证全指、标签提前一天还是不提前一天,都会改变表格。先看结果再挑规则,是另一种参数挑选。Halbert White关于数据重复用于模型选择的研究给出的提醒,放在这里同样适用:筛选过很多方案后的最好成绩,不能当作一次独立验证。
本篇建议把中证全指、120日均线、20日涨跌、±3%、前一交易日信息先登记为主方案。若担心结论只依赖这组数字,可在看结果前再登记一组有限的敏感性检查,例如仍用同一指数、只把120日均线改为60日。检查的目的不是从中选赢家,而是看“只在强势赚钱”的说法是否轻易翻转;所有尝试和变化都应留在附表。
图7:研究顺序示意。替代规则必须事前登记;样本外不能被反复用来选最漂亮的分类。
再把时间分为规则形成期与后续检验期。即使主方案在形成期的强势日表现突出,样本外仍需同时报告三个状态的天数、段数、收益、仓位和费用。若后续期几乎没有弱势段,只能说“尚未充分检验弱势表现”,不能用空白格断言策略已跨越牛熊。若想进一步设计“强势开动量、弱势开均值回归”的切换策略,那是新的交易规则:它必须单独回测切换时点、持仓迁移、费用和样本外表现,不能把本篇条件分组表直接当成切换策略收益。
08|什么证据才配得上“只在牛市赚钱”
写结论时,先用一个完整句子交代口径:“在某数据版本、某股票池与成本模型下,以中证全指前一交易日价格按预定规则划分强势、弱势、过渡,某策略在各状态的有效样本分别为多少天、多少段。”然后再写收益、价格指数差额、实际仓位、共同亏损与样本外情况。缺了一项,结论的范围就要相应收窄。
图8:发表前填写的结果页;所有数字留空。结论栏应随样本数量和审计状态调整。
可能出现三种截然不同的结果。第一种,策略只在强势状态有正净收益,弱势和过渡均受损;这支持“收益依赖强势市场”的描述,但还要看强势期是否只是跟着指数上涨。第二种,弱势时账户亏得少,主要靠空仓;这说明风险暴露变了,却不是“选股在熊市赚钱”。第三种,多个弱势连续段和样本外时期都有稳定的净收益或可靠的相对表现;这才值得进一步追查信号是否在弱势环境仍有独立价值。它们都只是未来实测可能出现的解释路径,本文不预先宣称哪种真实发生。
“只在牛市赚钱”是一句很重的话。它至少需要事前能认出的行情定义、可信的逐日账户结果、足够的连续状态段,以及冻结规则后的后续验证。若这些条件还没有满足,最诚实的结尾不是替策略贴“牛市专用”标签,而是清楚写出:我们已经知道它在哪些历史日期赚钱;尚不知道这种分法能否帮助识别未来。
关于本文的研究口径
封面与图1—8是编辑配图和研究方法图;正文0.08%、0.10%、−0.04%、−0.20%等数字均为教学例子,不能作为策略收益引用。
行情分类使用“前一交易日信息”是为避免把当天已发生的涨跌偷渡进当天标签;它不自动证明状态具有预测力。原始指数价格是价格口径,和策略含现金、税费的净值并非完全等价的总回报比较。强势、弱势与过渡仅是本文定义的研究分组,不等同于监管、交易所或宏观经济意义上的“牛市”“熊市”。
真正复核时,请保存事前规则、指数代码与原始数据、两次运行编号、配置快照、可信度报告、缺失日期清单、各状态天数与连续段数,以及全部事前登记的敏感性尝试。若数据、审计或样本量不满足研究要求,结论应写“不可判断”,不补造数值。
参考资料
- Andrew W. Lo, “The Adaptive Markets Hypothesis: Market Efficiency from an Evolutionary Perspective,”The Journal of Portfolio Management, 30(5), 2004, 15–29. 作者在 MIT 提供的论文摘要。本文借其“市场环境与投资行为可能变化”的研究动机;该文不是本项目策略分行情表现的证据。
- Halbert White, “A Reality Check for Data Snooping,”Econometrica, 68(5), 2000, 1097–1126. 期刊原文与 DOI。用于说明重复搜索分类方案会削弱单次“最优结果”的可信度。