Appearance
2008 年股灾无上帝视角回放:机械加仓规则第一次验证
1. 这次实验到底想验证什么
在设计“深度回撤修复”方案时,我最初有一个很自然的想法:
市场从高位下跌得越多,价格就越便宜;
当跌幅足够深以后,可以建立一个 Start,再按照固定的回撤档位逐步加仓。
最初的规则非常简单:
- 找到一个足够深的位置建立 Start;
- Start 只建立很小的初始仓位;
- 相对 Start 再下跌 10%,加仓;
- 再下跌 20%,继续加仓;
- 再下跌 30%,继续加仓。
但这套规则到底有没有问题?
如果直接打开2008年的完整K线,再回头设计规则,其实很容易受到后来结果的影响。
所以这次实验的目的,并不是寻找2008年的最佳买点,也不是证明自己的策略正确。
恰恰相反:
我要主动寻找能够使这套规则失效的历史路径。
一个策略没有被几个历史样本打败,并不能证明它正确;
但如果一个规则被真实路径明确击穿,至少可以说明:
它不应该原样继续使用。
因此,这次实验真正想做的,是不断排除那些经不起真实路径检验的规则。
2. 如何尽量降低上帝视角
2.1 为什么不自己打开完整历史K线
这次实验并不是我自己打开2008年的完整历史K线,然后从左向右寻找“看起来值得买”的位置。
这样做有一个明显问题:
当完整历史走势已经摆在眼前时,哪怕刻意不看后面的具体数字,也很难完全摆脱后来结果的影响。
甚至还有一个更隐蔽的问题:
“我为什么偏偏在这个位置停下来思考”,本身就可能已经包含未来信息。
例如,如果我自己翻K线,在某个暴跌位置停下来问:
“这里是不是可以买了?”
那么我为什么会选这里?
很可能就是因为我已经看见这里“跌得特别惨”。
这本身也是一种信息泄漏。
2.2 由AI推进历史,我负责回答
因此,这次实验采用了另一种方式:
由AI负责推进历史时间和披露信息,我负责作出决定。
具体过程是:
- AI把时间停在某一个历史节点;
- 只提供截至当时已经能够知道的信息;
- 不告诉我后面还会跌多少;
- 不告诉我后面的最低位置;
- AI主动向我提出问题;
- 我根据当时的信息回答“买还是不买”,并说明理由;
- 一旦决定作出,就冻结;
- AI再继续推进历史。
例如:
“现在上证已经从6124跌到4560附近,回撤约25%,你会不会开始买?”
我必须在不知道下一段行情的情况下回答。
这样至少可以降低一个很重要的问题:
我本人不会因为提前看见后续K线,而主动挑选一个事后看来特别关键的位置进行判断。
2.3 这种方法仍然不是严格盲测
这里需要明确承认一个局限:
AI本身知道完整历史。
因此,AI选择在哪些日期暂停、哪些事件值得提出,本身仍然可能携带事后信息。
例如,雷曼破产、汇金增持、市场大跌等事件,在后来回顾2008年时,本来就是非常显眼的历史节点。
所以,这次实验不能被理解成严格意义上的双盲测试。
更准确地说,它做到的是:
尽量隔离“我的决策”和“后续行情结果”,而不是完全隔离整个实验设计与历史结果。
因此,本文所谓“无上帝视角”,主要指:
我在作出具体买卖判断时,不使用尚未发生的价格和事件。
而不是声称:
节点设置本身完全不存在后视偏差。
这一区别很重要。
因为本实验真正想验证的,也不是某个买点是否具有严格统计意义,而是:
在一个被冻结的信息节点上,我为什么买、为什么不买,以及现有规则是否会产生明显不合理的结果。
2.4 一个历史样本原则上只有一次正式机会
这也带来一条重要的实验纪律:
一场历史危机原则上只能进行一次正式的无上帝视角决策实验。
一旦完整路径已经看过,这段历史就不再属于未知样本。
以后当然仍然可以使用2008年的数据:
- 计算指标;
- 分析参数;
- 测试新规则;
- 做程序化回测。
但不能再声称:
“如果我是2008年的自己,我会怎么选择。”
因为答案已经知道了。
因此,2008完成这次实验以后,就从“未知测试样本”变成“历史研究样本”。
3. 实验条件
为了避免资金和工具本身干扰判断,这次实验把条件尽量简化。
初始资金:50万元自有资金。
观察对象:
- 上证综指;
- 沪深300。
实际交易简化为:沪深300ETF或等价跟踪工具。
不使用:
- 融资;
- 期货;
- 期权。
初始机械规则:
建立 Start 后,相对 Start 下跌 -10%、-20%、-30%……逐级加仓。
本轮首先验证的是:
什么时候开始,以及机械价格档位本身是否合理。
至于每一档具体应该投入多少资金,本轮暂不解决。
4. 第一次无上帝视角回放
4.1 2007年10月:6124点
2007年10月16日,上证综指盘中达到6124.04点。上交所历史数据也显示,2007年这一高点显著高于此前多年市场运行区间。
如果把时间往前看,这个位置非常特殊。
2001年的上一轮重要高点约2245点,2005年市场还曾经运行在1000点附近。
所以站在6124附近,我没有任何买入意愿。
即使当时美国次贷问题已经开始暴露,也不足以改变我的判断。
我的理由很简单:价格太高。
这里甚至还没有必要讨论“跌多少可以买”。
我的决定:不买。
4.2 2008年1月:4560附近,已经跌了约25%
继续向后推进。
2008年1月,上证来到4560附近。
如果只计算从6124以来的回撤:
跌幅已经不小。
这时候AI向我提出的问题是:已经从最高点跌了约25%,现在要不要开始买?
如果只使用“从最高点跌了多少”这一套逻辑,-25%已经很容易让人产生买入冲动。
但我的答案仍然是:不买。
理由不是“25%还不够多。”而是: 4560本身仍然太高。
因为放回A股自身历史价格空间,4560仍显著高于2001年高点和2005年前后的运行区间。
所以虽然6124跌到4560已经损失了四分之一,但:从一个异常高的位置跌25%,并不能自动构成深度机会。
这时候第一次暴露出了原始想法里的一个问题:
我的决定:继续等待。
4.3 2008年4月:3000附近,已经接近腰斩
继续向后。
到2008年4月,上证已经来到3000附近。
相对6124:
这已经完全不同于4560。
到了这里,我已经不能再简单地说:“价格还是太高。”
因为3000附近已经开始进入我真正愿意认真观察的区域。
与此同时,海外金融系统的问题也在继续扩大。
但这一次,我仍然没有建立Start。
原因已经和4560时不同。
在4560时,我的判断是:价格本身仍然明显偏高。
而到了3000附近,我的判断变成:
价格已经开始有吸引力,但危机状态还没有发展到足以让我开始承担风险的程度。
也就是说,到这里我第一次开始感觉到:
单纯的价格空间可能还不够。
除了“跌了多少”,我还想知道:
- 金融系统到底出了什么问题?
- 有没有越来越多的人不是“想卖”,而是“必须卖”?
- 危机有没有真正向更广范围传导?
- 政策方向有没有发生变化?
我的决定:继续等待,不建立Start。
这一步很重要。
因为4560和3000虽然都是“不买”,但理由已经完全不同。
4.4 2008年9月:1802附近
到了2008年9月,环境发生了根本变化。
房利美、房地美进入政府接管,雷曼兄弟破产,AIG危机爆发。
问题已经不再只是:
“美国房地产好像出了点问题。”
而是金融系统本身开始承受巨大压力。
与此同时,上证继续向下。
9月18日前后,上证盘中来到1800附近。
相对6124:
这一次,我的答案发生变化。
价格空间已经足够深;
金融危机本身也已经从风险逐步演变成真正的系统性事件。
我并不知道1800是不是最低位置。
实际上,这次实验也不需要知道。
我只需要回答:到了这里,我是否愿意开始承担第一笔风险?
我的答案是:愿意。
我的决定:建立Start,先买100股。
这里特意只买100股。
Start并不代表:“这里就是底。”
它真正代表的是:从这里开始,我认为机会已经值得投入真实资金,同时启动后续机械加仓规则。
5. Start之后,机械规则正式启动
以1802附近作为Start以后,原始规则开始运行:
| 相对Start跌幅 | 操作 |
|---|---|
| Start | 买入100股 |
| -10% | 第一次加仓 |
| -20% | 第二次加仓 |
| -30% | 第三次加仓 |
第一档价格大约是:
所以规则变得非常明确:不到约1622,不进行第一次机械加仓。
5.1 9月19日:政策开始发生明显变化
从2008年9月19日起,证券交易印花税由双边征收调整为卖方单边征收。
与此同时,中央汇金表示将通过二级市场购入工行、中行、建行股票,国资体系也释放了支持央企增持和回购的信息。
这些事情显然很重要。
但按照第一次实验的规则:政策变化本身不直接触发加仓。
所以:我的决定:不操作。
5.2 9月23日:从“准备买”变成“已经买了”
随后出现了一条后来对整个规则演化非常重要的信息。
公开公告确认,中央汇金通过上海证券交易所交易系统实际增持了工行、中行、建行。
以中国银行为例,公告显示,汇金于9月23日通过交易系统增持200万股,并计划在未来12个月继续在二级市场增持。
这让我第一次开始区分两件以前很容易混在一起的事情:宣布准备买。 和 公开确认已经实际买入。
它们不是同一种信息。
降息、降准改变的是资金环境;
财政刺激影响的是未来需求;
而国家资本直接通过二级市场成交,则意味着:真实资金已经直接变成股票需求。
这是一个很有价值的新变量。
但这里有一个实验纪律:不能因为刚刚发现了一个新变量,就在实验中途修改原规则。
所以即使我认为这个信息很重要,当时的机械规则仍然保持:
我的决定:记录这个现象,但不加仓。
6. 10月:危机越来越严重,规则却仍然没有动作
进入10月以后,坏消息并没有结束。
全球金融市场继续剧烈动荡,中国也继续采取货币和经济支持措施。
与此同时,危机开始越来越明显地向国内实体经济传导。
这时候我又发现了一个问题:
实体经济最差的信息,往往比金融市场价格变化来得更晚。
如果一定要等到:
- GDP已经明显下降;
- PMI已经很差;
- 大量企业已经倒闭;
- 就业压力已经充分暴露;
然后才承认危机已经发生,
那么市场价格可能已经提前运行很长一段距离。
因此,实体经济数据当然重要,但它可能更适合回答:
“危机正在发展到什么阶段?”
而不是单独回答:
“今天是不是可以买?”
6.1 10月28日:1665附近
10月28日,上证盘中来到约1665点。
在当时的决策中,我们只关心:
它距离Start有多远?
而第一档机械加仓要求:
也就是约1622点。
结果:
没有触发。
这时候其实非常有意思。
从Start建立以来已经发生了很多事情:
- 全球金融危机继续恶化;
- 国家资本已经实际进入二级市场;
- 政策持续转向;
- 实体经济压力开始显现;
- 市场又继续下跌了一段。
但是机械系统只看到了一个数字:
所以它给出的答案仍然是:
什么都不做。
我的决定:不加仓。
持仓仍然只有最初的100股。
7. 第一次实验的最终结果
之后政策继续加码。
但在这次历史路径中,市场没有给出Start之后的-10%价格空间。
于是这次实验最终留下了一个非常简单,甚至有点尴尬的结果:
| 项目 | 结果 |
|---|---|
| 初始资金 | 500,000元 |
| Start | 上证约1802 |
| 初始买入 | 100股 |
| -10% | 未触发 |
| -20% | 未触发 |
| -30% | 未触发 |
| 最终结果 | 整个危机只建立100股仓位 |
这显然不是最初设计这套规则时希望得到的结果。
但我反而认为:
这正是这次实验最有价值的地方。
因为如果目标只是让2008年的结果看起来漂亮,那么现在最容易做的事情就是修改规则:
既然后面只跌了7%左右,那把第一档改成7%好了。
这样回测马上就会“成功”。
但这没有意义。
因为这个答案来自已经知道的历史路径。
它不是规则事先推导出来的,而是历史答案反过来塑造了规则。
所以这次实验必须接受:
原始规则在2008年的真实测试结果,就是只买了100股。
8. 2008到底暴露了哪些问题
8.1 回撤比例不能脱离历史价格空间
6124跌到4560已经超过25%。
但4560放回A股自己的历史里,仍然处于很高的位置。
因此:
这说明简单使用:
是不够的。
历史高点本身可能就是一个异常值。
8.2 Start和后续加仓规则不能完全割裂
真正愿意建立Start的时候,上证已经从6124跌到了1802附近。
也就是说:
在第一笔资金投入以前,市场已经下跌约70%。
但建立Start以后,机械规则像完全忘记了前面的70%,重新要求:
再跌10%,才能买第二笔。
结果市场后续并没有提供这10%的空间。
于是50万元资金几乎没有得到部署。
这暴露出了一个非常明显的问题:
否则就可能出现一种很奇怪的结果:
前面为了避免买早,一直耐心等待;
真正等到足够深以后,却又因为后续条件太远而几乎什么都没有买。
8.3 10%一级可能过于粗糙
从1802到1665只有约7.6%。
从数字上看:
没达到10%。
但在这段价格空间里,市场环境已经发生了大量变化。
如果一个系统面对这么多变化,最终只因为:
就认为:“什么都没有发生。”
那么至少说明:10%一级的价格分辨率可能太低。
但这里还不能直接得出:“所以应该改成5%。”
因为那仍然可能是在根据2008的历史结果拟合参数。
第一次实验能够确认的只有:10%存在过粗的问题。
具体应该是多少,需要交给新的样本继续验证。
8.4 价格之外,还有一个“被迫卖出状态”
这次回放过程中,我越来越在意另一个问题:还有谁没有卖完?
市场真正危险的地方可能不是“跌了多少”,而是:
如果这个反馈链还在运行,那么:价格已经便宜,不代表抛售已经结束。
所以以后除了价格,我还需要观察:
谁必须卖?
为什么必须卖?
还有多少可能要卖?
什么条件出现以后,他们不再需要继续卖?
这成为后续规则演化的一个重要方向。
8.5 “有政策”这个说法太粗
2008还有一个很重要的收获:
政策不能全部放进同一个篮子。
至少可以区分:
宏观环境政策
例如降息、降准、财政刺激。
市场制度措施
例如印花税调整。
国家资本表达意愿
例如宣布准备增持。
国家资本实际成交
例如2008年9月公开确认汇金已经通过交易所实际增持三大银行。
最后一种意味着:
真实资金已经进入二级市场。
这比单纯的政策表态多了一层信息。
但是2008同时告诉我:
国家资本买入,也不等于市场已经不会继续跌。
所以它不能成为:
“底部确认信号。”
更合理的理解可能是:
它提高了建立Start的资格。
8.6 实体经济确认可能存在天然滞后
如果等所有经济数据都证明:
“现在真的非常差了。”
那么市场价格可能已经提前运行很久。
所以以后观察:
- PMI;
- 新订单;
- 工业增加值;
- PPI/CPI;
- 信贷;
- 出口;
- 企业经营;
当然仍然有价值。
但这些数据更适合帮助判断:
危机状态正在怎么变化。
而不能简单变成:
“某个指标低于多少就买股票。”
9. 本轮实验确认了什么,又没有回答什么
这次实验暴露了几个比较明确的问题:
- 单纯依赖历史高点回撤存在明显缺陷;
- Start与后续固定10%加仓间距可能不匹配;
- 价格之外还需要观察危机和被迫卖出状态;
- 不同类型的政策信息不能简单等价处理;
- 国家资本实际成交比单纯表态包含更多市场信息。
但这次实验没有回答:
- 后续档位应该改成5%、7%还是其他数字;
- 每一档具体应该买多少;
- Start本身应该投入多少比例;
- 国家资本实际买入应该对应多大的仓位;
- 哪些经济指标应该直接参与交易规则;
- 1802是否是一个“正确买点”;
- 怎样定义一个完整的资金部署方案。
这些问题不能因为已经知道2008怎么走,就继续在2008里面寻找最优答案。
它们应该留给新的样本继续验证。
10. 第一次验证之后,只做有限修正
2008实验结束以后,我不希望立刻设计一个复杂的新系统。
因为这样非常容易发生另一种错误:用2008已经知道的答案,把规则修成特别适合2008。
所以这次实验结束后,只允许自己做有限修正。
最重要的一条是:
Start不能再只由价格决定。
下一次实验开始考虑:
- 当前价格空间;
- 强制卖出状态;
- 金融系统压力;
- 政策是否发生方向变化;
- 国家资本是否只是宣布介入;
- 国家资本是否已经被公开确认实际成交。
其中我尤其关注:
公开确认的国家资本二级市场实际买入。
它可以成为在原计划价格区域之前,提前建立一个很小Start的重要依据。
但是:Start之后的-10%、-20%、-30%机械加仓暂时不修改。
因为2008只证明了它存在问题。
我还需要把这个问题交给另一个完全不同的历史样本。
11. 这次实验真正验证成功的是什么
回头看2008,最容易产生一种误解:
“1802附近开始买,看起来位置不错,所以策略验证成功了。”
我并不这么认为。
这次实验没有证明策略正确。
事实上,它反而证明了原始规则存在明显缺陷:
50万元资金,经历如此剧烈的一轮危机,最后竟然只买了100股。
如果目标是建立深度回撤仓位,这显然不能算一个满意的结果。
但这次实验验证了另外一件更重要的事情:
这种尽量隔离未来信息的历史回放方式,确实能够暴露仅靠静态回测和事后观察不容易发现的问题。
所以整个实验体系的目标也逐渐变得清晰:
不是证明自己的策略都是正确的,而是尽量排除那些不正确的策略。
规则是待测对象。
历史危机是测试用例。
每一次测试,都主动问:
还有什么情况能够把这套规则打坏?
如果打坏了,就记录失败方式。
然后只针对已经暴露的问题进行有限修正,再交给下一个未知历史样本。
所以这个过程不是:
找到规则
→ 证明规则正确
→ 开始使用
而更接近:
提出规则
→ 交给未知历史攻击
→ 发现失败方式
→ 排除明显错误
→ 有限修正
→ 再交给下一个未知样本攻击
一个策略即使通过了2008、2015、2018、2020,也不能因此证明它未来一定正确。
但是:每排除一种已经被真实历史证明存在问题的方案,我们至少少了一种未来可能犯的错误。
我认为,这才是这类历史实验真正有价值的地方。
12. 下一次验证
经过2008以后,规则发生了第一次有限变化。
Start不再只看价格。
尤其是:
如果出现公开确认的国家资本实际二级市场买入,即使价格还没有到原来最理想的位置,也允许考虑用极小仓位建立Start。
但Start之后:
仍然保持原样。
接下来,把这套经过2008修正、但仍然保留大量原始结构的规则,交给另一场完全不同的市场危机:2015—2016年A股异常波动。
下一篇:2015—2016 年股灾无上帝视角回放:机械加仓规则第二次验证
这一次要继续问的仍然不是:“这套规则能不能证明自己正确?”
而是:“2015—2016,还能从哪里把它打坏?”