第十四章 “你不是能获取历史数据吗”

回测的发起与第一周验证

165页 · 预计12

第十三章结束时,对方提出了一个我无法拒绝的要求:用一段真实的下跌市行情,手工模拟运行整套策略,看看账户会不会爆仓。
这个要求非常关键。前面所有的框架、规则、系统设计,本质上都是逻辑推演,没有经过真实行情的检验。逻辑再自洽,也可能在真实市场的极端波动面前不堪一击。回测不是走形式,是验证策略鲁棒性的必经之路。
但回测这件事,水很深。很多人做的回测,本质上是“用未来数据验证过去”,结果好得离谱,一上实盘就崩。所以做回测之前,必须先把铁律立死,所有规则都要站在当时的视角,绝对不能开上帝视角。

14.1 交易爱好者的关键挑战:怎么证明策略不是运气?

对方的原话是:“老师,您说的四维框架和交易规则我认可,但我想看到真实历史中的表现。不需要自动化代码,您手工模拟一下就行,一段下跌市,大概30天。我想看看我的账户会不会爆仓。”
这句话直击要害。策略设计得再精致,规则定义得再严密,如果没有经过历史数据的检验,本质上仍然是假设。而假设与事实之间的鸿沟,只有回测能够跨越。
很多量化策略爱好者,总沉迷于优化参数、调整阈值,却很少做严格的历史回测。参数调得再完美,都是后视镜视角,到了实盘里,没有后视镜了,立刻失效。所以回测的核心不是“证明策略能赚多少钱”,而是“验证策略在极端行情下会不会失控”。尤其是下跌市的回测,比上涨市有价值得多——上涨市谁都能赚,下跌市才能看出策略的风控能力。

14.2 回测的第一铁律:绝对不能使用未来信息

回测中最常见的错误就是“未来函数”,也是90%回测结果失真的根源。本质就是:在回测的某个时间点,使用了当时尚不存在的数据。比如用2025年10月的财报数据去筛选2025年9月的股票,或者用当日收盘价作为买入信号。
很多人不是故意作弊,是没意识到这个问题。比如财报数据,三季度报10月底才全部披露,你回测9月30日的选股,用了三季度报的数据,就等于9月30日的时候你就知道了10月底才披露的财报,这就是开上帝视角,结果当然不准。

在手工模拟中,我必须严格遵守三大戒律,每一条都没有商量的余地:
第一,买入看过去,卖出看过去,执行在今日开盘。每一天的买入清单,必须基于当日开盘前已公开的数据,也就是T-1日收盘后的所有数据。T日的盘中数据、收盘价,绝对不能用来生成T日的交易信号。
第二,财报滞后5日,季报不跨期。最新财报必须在报告期结束后至少5个交易日才纳入选股。比如三季报9月30日是报告期,但10月中旬才陆续披露,10月底才基本出完,所以11月1日之后才能纳入完整的三季报数据,9月、10月的选股都不能用。
第三,不止损于盘中,只止损于开盘。所有买卖都只在开盘价执行,盘中波动不算。因为手工模拟没有分钟级数据,也为了和实盘执行一致——实盘你也不可能时时刻刻盯着盘,开盘执行交易是最容易复现的方式。

这三条戒律,是回测可信度的底线。破了任何一条,回测结果就没有任何意义。

14.3 回测区间的科学选择:为什么是2025年9-10月

对方指定了“下跌市,约30天”。我没有随便找一段下跌行情,而是翻阅了2025年的A股走势,选择了2025年9月1日至10月31日作为回测区间。
为什么选这个区间?四个理由,每一个都有讲究:
第一,区间特征典型。上证指数从9月1日的3150点附近,一路下跌至10月31日的2850点附近,区间跌幅约9.5%。期间没有像样的反弹,属于典型的阴跌+加速下跌组合,不是快速深V反弹,最考验策略的风控能力。
第二,时长合适。扣除节假日约44个交易日,手工模拟工作量可控,一个人一周左右能做完,两个人交叉验证更快。太长了工作量太大,太短了说明不了问题。
第三,场景匹配。2025年9-10月,正好处于四维框架依赖的产业趋势(AI算力、半导体、新能源)第一波炒作后的回调期,个股回撤普遍达到30%以上,恰好满足超跌条件。也就是说,这个区间里,策略是有标的可选的,不是完全无的放矢。
第四,极端性足够。这段区间里出现过单日百股跌停,出现过板块集体崩盘,出现过流动性枯竭,属于中等偏极端的下跌行情,能扛过这段行情,策略的风控基本就过关了。

当然,一个区间的回测远远不足以证明策略的普适性。但作为手工验证的起点,这个选择是合理的。如果连这段都扛不住,那策略根本不用实盘了。

14.4 回测指标设定:不止看收益率

对方最关心的是“会不会爆仓”,所以回测不能只算收益率,要设置五个核心指标,全方位评估策略表现:

  1. 区间总收益率:从起始资金100万元出发,到区间结束时的净资产变化百分比。这是最直观的指标,但不是最重要的。
  2. 最大回撤:区间内任意一天,从之前的最高净值回落到最低净值的幅度。这是核心中的核心,直接回答“会不会爆仓”的问题。如果最大回撤超过20%,说明熔断规则没生效;超过30%,说明策略在下跌市中完全失效。
  3. 夏普比率(年化):(区间收益率 - 无风险利率)/ 区间日收益率标准差 × √252。衡量风险调整后收益,大于1为可接受,大于2为优秀。区间短的话参考意义有限,但还是要算,作为横向对比的基准。
  4. 胜率与盈亏比:统计区间内所有平仓交易的盈利笔数占比,以及平均盈利/平均亏损的比值。胜率>50%且盈亏比>1.5,是健康的交易分布,说明策略赚多亏少,不是靠运气。
  5. 平均持仓天数:衡量策略的换手率。太短(<3天)说明频繁交易,交易成本侵蚀收益;太长(>20天)说明对信号变化不敏感。

这五个指标,从收益、风险、交易质量、换手率四个维度,完整刻画策略的表现。不会只拿收益率说事,收益高但回撤更大的策略,没有任何意义。

14.5 手工回测的方法论:如何在Excel中模拟每日动态调仓

40个交易日的手工回测,每天要处理10只股票的买入、卖出、持仓更新,工作量不小。如果没有一套规范的方法,很容易算错,最后结果不可信。
我设计了一套Excel模板,分工协作,交叉验证,确保结果准确。具体步骤:

第一步,准备基础数据表。按日期顺序,列出2025年9月1日至10月31日每个交易日的基础数据:

  • 全A股当日开盘价、收盘价、最高价、最低价(仅记录候选股池,约200只核心赛道股票,不用全市场,减少工作量)
  • 每只股票当日的年内高点回撤(基于前一日数据计算,也就是T-1日的回撤,用来做T日的选股)
  • 每只股票当日的近5日主力净流入占流通市值比(同样基于T-1日及之前4日数据)
  • 每只股票的赛道标签(静态,不随时间变化,季度更新即可)
  • 每只股票的最新财务数据(营收CAGR、研发强度、ROE,季度报告发布后更新,严格遵循滞后5日规则)

基础数据是回测的地基,全部提前整理好,不要每天临时找数据,不然容易出错。

第二步,每日筛选。对每个交易日t,使用t-1日的数据运行四维筛选,输出TOP10股票列表。
第三步,交易执行。先处理卖出,再处理买入:

  • 卖出:检查上一交易日持仓,若某股票不在t日的TOP10中且不满足四维任一条件(或亏损>15%),则标记为“今日卖出”,以t日开盘价卖出,扣除成本后现金增加。
  • 买入:确定当日可用现金,等权分配到新的TOP10股票(剔除已持有但不需卖出的股票),以t日开盘价买入,扣除成本后持仓更新。
    第四步,净值计算。开盘净值用开盘价算持仓市值加现金,收盘净值用收盘价算,最高最低净值用个股当日高低价近似。
    第五步,逐日记录。每天的净值、持仓明细、交易记录填入Excel,形成完整的回测日志。

我向对方说明了分工:“老师,您每天负责提供TOP10名单(根据规则计算),我来负责交易执行和净值计算。双方交叉核对,避免单方面算错。”
对方同意了这个方案。两个人各算一遍,最后对得上,结果才可信。

如果需要自动化的回测工具,或者批量测试不同策略在不同区间的表现,可访问a-sig.com壹信因子查询平台,内置回测引擎,支持自定义选股规则与交易参数,快速输出完整回测报告。

14.6 从静态筛选到动态回测:一个尚未解决的隐患

在开始手工回测之前,我意识到一个潜在问题,也是静态选股和动态回测最大的区别:下跌市中,符合四维框架的股票可能会越来越少。如果某一天符合条件的股票不足10只,是否还要强制买入10只?
如果强制买,为了凑数而降低标准,那选股逻辑就乱了,等于在下跌市中强行买不合格的股票,大概率会亏更多。但如果不强制买,那资金就闲着,也就是空仓。
对方在之前的对话中已经给出了答案:“下跌市中资金净流出的个股可以不选,不一定非要每天买10只。如果符合条件的股票少于3只,那天就不买——空仓也是一种策略。”

我将这个规则正式化,写入回测规则:

  • 每个交易日t,筛选出满足四维框架的股票列表。
  • 若列表长度 ≥ 3,则买入列表中的全部股票,等权分配现金。
  • 若列表长度 < 3,则当日暂停买入,现金保留至下一个交易日。
  • 卖出规则不变,不因“未买入”而改变,该卖的还是卖。

这个“允许空仓”的规则,是应对下跌市的核心武器。它承认了量化模型也有无能为力的时候——当市场情绪极度悲观、产业趋势股也未能幸免时,最理性的做法是不交易。
但这个规则也引入了一个新的复杂性:不需要人为判断“下跌市”,不用设置大盘状态开关,每天的筛选结果自然决定买还是不买。连续多日没有符合条件的股票,自然就进入了空仓状态。这比人为设定一个“下跌市开关”更简洁,也避免了参数过拟合。

14.7 手工回测的开始:第一周的意外发现

2025年9月1日,回测正式开始。
我按照上述方法,与对方协作完成了第一周(9月1日-5日)的模拟。第一个意外很快就出现了:四维框架在9月1日筛选出的TOP10股票,与我们在第四章手工筛选的10只有明显差异。

为什么?因为时间不同。第四章用的是2025年4月的数据,现在是9月。中间5个月,A股经历了5-6月的反弹和7-8月的二次探底,个股的回撤幅度、资金流向、财务数据的时效性都发生了变化。
举个例子:晶合集成在4月入选,但在9月1日时,它的近5日主力净流入为负,不再满足资金面条件,因此被剔除。取而代之的是一只新股票——华工科技(000988),AI算力光模块概念股,回撤37%,近5日净流入占比0.45%,营收CAGR 30%,研发强度10%,产业得分88。

这个变化恰恰说明:四维框架不是静态的“好股票清单”,而是动态跟踪市场状态的工具。今天的入选股,明天可能因资金流出而被淘汰;今天的剔除股,下周可能因资金回流而重新入选。
第一周结束时,账户净值从100万元变为98.7万元,微跌1.3%,而同期上证指数下跌2.8%,策略跑赢指数1.5个百分点。
这个结果让对方稍感安慰,但他更关心的是接下来三周——市场会加速下跌,真正的考验还在后面。
“老师,继续吧。我想看到最坏的情况。”

第14章量化专家笔记

手工回测的高效技巧

  1. 模板预先做好。列好日期、股票代码、买入价、数量、金额、现金余额、收盘净值这些列,用VLOOKUP自动匹配价格,不用每天手动输。每天只录入买入清单和卖出清单,其余自动计算,能节省80%的时间。
  2. 分批核对。不用每天对一遍,每5天核对一次总净值,对得上就继续,对不上再逐日查。全对一遍工作量太大,抽样核对就能发现大部分错误。
  3. 重点核对异常值。某天净值波动特别大,或者某只股票贡献特别大,专门核对这部分,不用全查。大部分错误都出在异常值上。

回测区间选择的建议

至少包含三种市场状态:上涨、下跌、震荡,每种状态不少于60个交易日,回测结果才有说服力。只测上涨市,肯定好看;只测下跌市,肯定难看。全面测试,才能知道策略的适用边界。
避免选择有明显异常事件的区间,比如疫情爆发、政策突变,除非你就是想测极端行情。

一个典型手工回测的时间安排

准备基础数据:2小时
每日操作(40天):每天10-15分钟 → 约8小时
汇总分析和图表:2小时
总计:12小时左右,可分散在一周内完成。工作量其实不大,关键是方法要对。

本章内容节选自原创量化书籍《因子会说谎》,更多回测方法论与实战案例,可登录intoquant.com查阅完整内容。


本章完。下一章将深入每日动态调仓的具体挑战:名单剧烈波动、持仓快速膨胀、以及MT4外汇策略回测悖论对A股模拟的警示。

⚠️ 风险提示:本书内容仅为量化研究与知识分享,不构成任何投资建议。套利交易存在基差、费率、流动性、平台与极端行情等风险,历史表现不代表未来收益。投资有风险,入市需谨慎,请自主决策、量力而行。

💡 键盘 ←/→ 翻章 · T 键切换目录