Appearance
2015—2016 年股灾无上帝视角回放:机械加仓规则第二次验证
1. 这一次验证的不是原始规则
2008年的第一次回放结束以后,原始方案暴露出了几个明显问题。
其中最重要的是:
Start不能只由价格决定。
2008年真正建立Start时,上证已经从6124跌到1802附近。
这时候价格空间已经非常深,但随后按照Start再跌10%、20%、30%加仓的规则,却几乎没有获得继续部署资金的机会。
因此,第一次验证以后,我只做了有限修正:
- Start仍然保持很小;
- Start之后的
-10% / -20% / -30%机械档位暂时不改; - 但Start本身不再只看价格;
- 开始观察金融系统压力、被迫卖出状态、政策变化;
- 尤其关注国家资本是否已经被公开确认实际进入二级市场。
其中最后一条来自2008的直接经验。
2008让我意识到:
“宣布准备买”和“已经实际买入”不是同一种信息。
所以到了2015年,我带着这套经过一次修正、但仍然保留大量原始结构的规则,重新进入第二个历史样本。
这一次仍然不是为了证明规则正确。
我要继续问:
2015—2016还能从哪里把它打坏?
2. 实验方法保持不变
这次仍然采用和2008相同的方法。
不是自己打开完整历史K线寻找关键位置,而是:
由AI推进时间并提供截至当时能够获得的信息,我负责回答是否买入以及为什么。
决定作出后冻结,再继续向后推进。
和2008一样,这种方法并不是严格盲测。
AI知道完整历史,因此节点选择本身仍可能存在后视偏差。
这里所谓的“无上帝视角”,仍然只取一个有限含义:
我作出具体决策时,不使用尚未发生的价格和事件。
2015—2016这个历史样本一旦走完,以后也只能作为研究数据使用,不能再重新声称是在进行第一次未知决策。
3. 本轮实验条件
实验资金仍然设定为:
50万元自有资金。
不使用:
- 融资;
- 期货;
- 期权。
这一轮已经可以直接使用实际存在的沪深300ETF:
510300。
市场状态主要观察:
- 上证综指;
- 沪深300。
实际交易:
510300。
2008留下来的机械规则仍然是:
| 条件 | 操作 |
|---|---|
| Start | 极小仓位建立起点 |
| Start -10% | 第一次机械加仓 |
| Start -20% | 第二次机械加仓 |
| Start -30% | 第三次机械加仓 |
这一轮开始之前,我对价格本身还有一个比较明显的心理判断:
上证3000点以下,才是我真正觉得足够便宜的区域。
但是2008已经告诉我,Start不能只由价格决定。
因此,如果出现足够强的新信息,尤其是:
公开确认国家资本已经实际通过二级市场买入,
允许在3000点以上提前建立一个很小的Start。
4. 2015年6月:高位开始下跌
4.1 2015年6月12日:盘中5178点附近
2015年6月12日,上证综指盘中最高达到5178.19点,当日收盘5166.35点。
这时候即使不考虑后来发生的股灾,我也不会开始买入。
原因和2007年的6124有些类似:
价格本身处于一轮大幅上涨后的高位。
当时经济数据虽然并不算特别强,但也还没有出现一个足以让我把高位价格理解成“深度机会”的危机状态。
与此同时,市场杠杆问题已经越来越明显。
场内融资融券之外,还有大量场外配资和高杠杆账户。
因此:
我的决定:不建立Start。
4.2 6月中下旬:开始出现强制去杠杆
随后市场迅速下跌。
6月15日至19日,上证一周跌幅超过13%。
这时候我开始关注的已经不只是价格。
另一个问题变得越来越重要:
有多少卖盘不是因为投资者觉得股票贵了,而是因为杠杆账户已经承受不了?
如果账户触及平仓线,那么持有人即使主观上认为股票已经便宜,也可能不得不卖。
这正是2008以后开始关注的“被迫卖出”。
市场开始出现:
这样的反馈。
但这时候价格仍然远高于我原本关注的3000附近。
我的决定:继续等待。
4.3 6月26日:单日暴跌,但仍然不Start
6月26日,上证出现超过7%的单日下跌。
市场已经非常剧烈。
但此时指数仍在4000点以上。
这给我带来了一个后来会越来越重要的问题:
单日跌得非常惨,是否本身就应该成为买入条件?
当时我的答案仍然是否定的。
因为:
一天跌7%,并不意味着整体价格已经足够低。
所以即使当天市场情绪和跌停数量都非常极端,我仍然不愿意因为“一天跌得很多”就建立仓位。
我的决定:不买。
5. 7月初:危机状态开始明显改变
5.1 7月3日:上证3687附近
到7月3日,上证已经跌到3686.92点附近。
如果以6月12日盘中高点5178.19点为基准,到7月3日3686.92点,跌幅已经接近30%。
到了这里,价格已经明显低于一个月前。
但如果只问:
“3687是不是我理想中的深度买入区?”
我的答案仍然是:
不是。
我原本更关注3000以下。
因此,单纯按照价格,我仍然不会建立Start。
但接下来的周末出现了新的信息。
5.2 7月4日:1200亿元蓝筹ETF计划
7月4日,21家证券公司联合公告,决定按2015年6月底净资产的15%出资,合计不低于1200亿元,用于投资蓝筹股ETF;同时表示在上证4500点以下,自营股票盘不减持并择机增持。
这是一个很强的市场稳定信号。
但按照2008以后形成的认识,我仍然要区分:
准备投入资金
和:
已经确认真实资金进入市场。
所以单独看到这一条,我会明显提高关注,但还不一定立即改变原来的3000点心理锚。
5.3 7月5日:汇金确认已经买入ETF
7月5日,中央汇金公开确认:
近期已经在二级市场买入ETF,并将继续相关市场操作。
这和7月4日的信息出现了区别。
现在已经不只是:
“准备救市。”
而是:
公开确认真实资金已经通过二级市场进入ETF。
这正好触发了2008回放以后新增的那条规则。
我原本想等待上证3000点以下。
但现在出现了一种2008已经证明值得单独观察的信息:
国家资本实际成交。
因此,我改变了决定。
不是因为我认为:
“这里就是底。”
也不是因为:
“国家队买了,所以一定会上涨。”
而是认为:
现在已经具备提前建立一个极小Start的资格。
我的决定
2015年7月6日开盘建立Start,买入510300共100股。
6. 7月6日:Start当天就触发第一档
7月6日,510300开盘约3.561。
因此:
买入:
100股。
按照仍然没有修改的机械规则:
所以第一档 -10% 大约是:
3.205。
但当天出现了一个非常有意思的情况。
510300开盘3.561以后迅速回落,盘中最低达到约3.166。
也就是说:
Start建立当天,-10%机械档位就被击穿了。
这里出现一个实际执行问题:
Start当天能不能再次触发机械加仓?
我的答案是:
可以。
既然规则定义的是价格触发,而不是“每天最多一个档位”,那么不能因为Start恰好发生在当天早上,就假装后面的价格没有发生。
我的决定
在约3.205附近:
继续买入500股。
因此此时累计持有:
下一档变成:
也就是:
约2.849。
再下一档:
也就是:
约2.493。
从这里开始,重新进入等待。
7. 7月7日至7月9日:价格之外,第一次真正看到流动性压力
7.1 跌停已经不只是价格现象
7月7日前后,市场出现上千只股票跌停。
如果只看上证指数,这只是一个跌幅数字。
但当大量股票同时失去流动性以后,问题已经发生变化:
即使有人想卖,也未必卖得出去。
这使“跌停家数”开始变成我认为值得单独观察的指标。
它不再只是描述:
今天市场跌得有多惨。
更重要的是帮助观察:
流动性是不是正在大面积消失。
7.2 大量停牌又带来了第二个问题
随后越来越多上市公司申请停牌。
7月8日前后,停牌股票数量一度达到整个A股相当高的比例;当时公开报道也记录了市场出现大规模停牌。
这让我意识到:
停牌比例本身也应该成为危机压力指标。
因为如果大量股票根本不交易,那么:
- 指数可能不能完整表达压力;
- 可交易股票可能承担更多卖盘;
- “指数没有继续暴跌”也未必等于市场已经恢复正常。
所以到这里,除了价格以外,我开始明确想增加几个观察量:
- 跌停家数;
- 停牌家数;
- 停牌占全部A股的比例。
7.3 融资余额开始成为第三个核心指标
与此同时,融资余额快速下降。
这非常符合“被迫卖出”的思路。
融资余额持续大幅下降意味着:
杠杆资金正在主动或被动退出。
于是我开始认为:
单独观察跌幅还不够。
还应该观察:
尤其是:
每天到底减少多少。
因为如果融资余额还在连续快速下降,就说明去杠杆过程可能还没有结束。
8. 7月9日以后:第一次看到“卖压可能开始减弱”
7月9日市场出现大幅反弹。
与此同时,一个很有意思的变化发生了:
融资余额虽然还在下降,但下降速度开始明显减弱。
接下来甚至出现短暂企稳。
这让我第一次产生了一种和“价格见底”不同的想法:
也许更值得观察的,不是指数有没有到最低点,而是强制卖出的速度有没有开始下降。
换句话说:
和:
不是同一种状态。
如果原来每天都在极快去杠杆,随后去杠杆速度显著下降,这可能意味着:
最猛烈的流动性反馈正在暂时减弱。
但这里仍然不能得出:
“危机结束。”
后面的行情很快证明,这种判断如果过早使用同样会有问题。
9. 7月27日:又一次极端单日暴跌,但旧规则什么都不做
7月中旬以后,市场一度明显反弹。
到7月27日,上证再次出现超过8%的大跌,大量股票跌停。
510300当天最低约3.138。
但是Start的第二档仍然是:
因此:
机械规则没有触发。
这里第一次非常明显地暴露出一个新问题。
7月27日在市场体验上已经属于非常极端的一天。
但对于原规则来说:
只要累计跌幅没有达到Start -20%,这一天和一个普通的-1%下跌没有区别。
它们在系统里都得到同一个答案:
不买。
这让我开始怀疑:
累计跌幅是不是遗漏了“单日冲击”这个独立维度?
10. 8月24日至25日:同样的问题再次出现
8月下旬,市场又经历一轮极端下跌。
8月24日,上证单日跌幅超过8%。
510300当天最低约3.263。
仍然高于:
所以:
不触发。
8月25日,上证再次大跌。
510300最低约2.974。
已经越来越接近2.849,但仍然没有穿过。
因此:
还是不触发。
这就出现了一个越来越明显的现象。
市场已经连续出现:
- 大规模跌停;
- 巨大单日跌幅;
- 杠杆资金快速退出;
- 极端市场恐慌。
但机械规则仍然只有一句:
没有到-20%。
这和2008的1665问题其实很相似。
只是这一次表现得更加明显。
11. 一个新问题:是不是应该“暴跌就买”?
看到7月27日、8月24日、8月25日以后,一个非常自然的修正想法出现了:
既然单日极端暴跌包含重要信息,是不是当天跌7%、8%就额外买一次?
这个想法看起来合理。
但继续思考以后,很快又发现它存在新的漏洞。
假设市场走成:
价格可能一直在差不多的区域震荡。
如果规则变成:
“每次单日跌7%以上就买。”
那么可能出现:
在同一个价格区域反复买入。
这实际上就是另一种形式的重复触发。
因此:
这成为第二次实验暴露出的一个新问题。
12. 进入2016:旧规则仍然异常迟钝
12.1 1月4日:熔断第一次触发
2016年1月4日,指数熔断机制正式实施。
当天市场先触发5%暂停,恢复交易以后很快继续下跌并触发7%阈值,当日提前结束交易。
市场中再次出现大量跌停。
但510300当天最低约3.528。
和Start相比仍然没有进入第二档。
所以机械规则继续给出:
不买。
12.2 1月7日:熔断再次触发
1月7日,市场开盘后很快再次触发5%和7%的熔断阈值,当天交易很快结束。
随后从1月8日起暂停实施指数熔断机制。
这是一个非常有意思的制度案例。
原本设计熔断,是为了缓解极端波动。
但在真实交易中,临近熔断阈值可能反而改变投资者行为:
如果大家担心一旦触发以后卖不出去,就可能提前卖。
这让我再次意识到:
市场制度本身也会反过来影响卖出机制。
但从机械加仓规则看:
仍然没有动作。
13. 1月26日前后:距离第二档越来越近
1月26日,上证再次大跌超过6%。
510300最低约2.930。
而第二档仍然是:
距离已经非常近。
如果当时我们使用的是5%一级:
那么-15%档早已经触发。
但旧规则仍然只有:
没到-20%,继续等。
这时候10%一级的迟钝已经非常直观。
14. 2016年1月底:第二档终于获得触发
继续向后,510300最终在2016年1月底进入约2.849以下区域。
这意味着从2015年7月6日建立Start以后,经历:
- 2015年7月股灾;
- 大量停牌;
- 大规模跌停;
- 融资快速去杠杆;
- 7月27日暴跌;
- 8月24日至25日再次暴跌;
- 2016年两次熔断;
- 1月下旬再次急跌;
以后:
Start -20%终于获得触发资格。
但是这里有一个必须保留的实验事实:
当时我们只确认了第二档触发,并没有冻结一个明确的买入数量。
因此,这篇文章不能事后补一个数字,然后计算“最终赚了多少钱”。
那会违反整个实验的基本原则。
所以第二档只能记录为:
-20%触发,买入数量未在当时确定。
而:
在后续这一轮市场过程中没有获得触发。
15. 第二次验证的最终结果
2015—2016走完以后,原有规则大致留下了这样的路径:
| 时间/条件 | 结果 |
|---|---|
| 2015年6月高位 | 不买 |
| 7月3日约3687 | 仍不Start |
| 7月5日汇金确认已买ETF | Start资格发生变化 |
| 7月6日510300开盘约3.561 | 买100股 |
| 当天跌破Start -10% | 加500股 |
| -20%约2.849 | 直到2016年1月底才触发 |
| -30%约2.493 | 未触发 |
从结果看,这套规则并不是完全没有部署资金。
它比2008的100股已经向前走了一步。
但第二次真实路径又暴露出了比2008更多的问题。
16. 2015—2016到底暴露了哪些问题
16.1 10%一级再次被证明太粗
2008只是告诉我:
10%可能太粗。
到了2015—2016,这个问题变得更加明显。
从Start到第二档之间,市场经历了如此多次极端波动,但规则几乎一直保持沉默。
所以:
这一次,一个自然候选开始出现:
但它仍然只能作为下一版候选。
不能因为2015—2016适合5%,就证明5%一定正确。
16.2 累计回撤无法表达单日极端冲击
7月27日、8月24日、8月25日以及2016年1月的极端交易日都暴露了同一个问题:
一个单日-8%的市场,和一个普通的-1%日,在累计档位没有跨线时,对旧规则来说完全一样。
这显然丢失了信息。
因此下一版需要考虑:
16.3 但“暴跌就买”同样有明显漏洞
如果简单增加:
单日跌幅超过X%就买,
那么震荡行情可能产生:
这样的路径。
价格没有真正打开新的空间,却反复触发买入。
因此必须避免:
在同一个价格区域重复消费同一种极端信号。
一个可能的方向是:
每次极端日买入以后,记录一个Shock Anchor。
下一次即使再次出现极端日,也必须相对上一次Shock Anchor进一步打开足够大的价格空间,才重新获得买入资格。
也就是说,需要同时满足:
以及:
具体阈值仍然不在本轮根据历史答案确定。
16.4 单看一个指数可能不够
2015—2016还有一个问题逐渐显现。
实际执行使用的是510300。
但整个市场的压力并不一定只体现在沪深300。
因此下一版可以同时记录:
和:
也就是上证综指与沪深300相对Start各自的回撤。
然后使用更深的一个作为整体市场深度:
实际交易仍然可以使用510300。
这样做的目的不是寻找“哪个指数最惨就买哪个”,而是:
避免单一指数暂时失真时低估整个市场的压力。
16.5 跌停、停牌、融资余额值得成为危机状态指标
这一轮最大的收获之一,是把一些原本只是新闻描述的东西变成了可以持续观察的状态变量。
例如:
- 跌停家数;
- 停牌数量;
- 停牌占全部A股比例;
- 融资余额;
- 融资余额每日变化。
这些数据分别从不同角度帮助回答:
市场现在只是价格下跌,还是已经出现流动性和被迫卖出的反馈?
尤其是融资余额。
它让我越来越关注:
被迫卖出的速度是在增加,还是在下降?
这可能比单纯寻找最低价更接近我真正关心的问题。
16.6 强制卖出减弱,不等于危机已经结束
7月9日前后融资余额下降速度明显放缓,看起来像是一个积极变化。
但随后7月27日、8月下旬又出现新的剧烈波动。
所以:
第一次看到去杠杆减速,不能直接解释成“危机结束”。
它最多意味着:
某一阶段最猛烈的强制卖出反馈可能正在减弱。
下一版如果使用这一指标,也应该把它理解成“状态变化”,而不是“底部确认”。
16.7 不同价格深度下,同样的极端下跌价值不同
这一轮还暴露了另一个问题。
假设:
- 上证3500附近单日跌8%;
- 上证3000附近单日跌8%;
- 上证2700附近单日再跌8%。
三次的“单日冲击”可能一样。
但它们发生的整体价格空间不同。
直觉上:
越深位置出现的同样极端冲击,机会价值可能越高。
这意味着以后如果涉及“买多少”,不能只写:
每次暴跌固定买U元。
更可能应该是:
但是这里已经开始进入另一个问题:
买多少。
本轮先不解决。
17. 本轮确认了什么,又没有回答什么
经过第二次验证,现在可以更加明确地确认:
- 10%一级累计档位过粗;
- 累计回撤不能完整表达单日极端冲击;
- 单日极端冲击不能无条件重复触发;
- 需要考虑“重新获得冲击买入资格”的机制;
- 市场深度可以考虑同时观察上证与沪深300;
- 跌停、停牌、融资余额等数据对判断被迫卖出状态有价值;
- 国家资本实际买入可以改变Start资格,但不能被当成底部确认。
但本轮仍然没有回答:
- 累计档位最终是不是5%;
- 极端日到底定义为-5%、-7%还是其他值;
- Shock Anchor重新武装到底需要再跌5%、8%还是10%;
- 每次触发应该买多少钱;
- 越深的位置应该增加多少资金;
- 一天同时跨越多个条件时应该买几次;
- 总资金应该在-20%、-30%、-40%、-50%之间怎样保留;
- 是否应该在危机期间使用做T降低成本。
这些问题不能继续用2015—2016已经知道的路径把参数调漂亮。
18. 第二次验证之后形成的V3方向
2008之后,第一次修正主要解决了:
Start不能只由价格决定。
2015—2016以后,第二次修正开始进一步触及:
Start以后如何识别新的买入机会。
目前可以形成一个V3方向,但仍然只是草案。
18.1 市场深度
同时记录:
和:
取:
作为市场价格深度参考。
18.2 累计档位提高分辨率
从原来的:
候选修改为:
但具体是否采用5%,仍需继续验证。
18.3 增加单日极端冲击
累计档位之外,再增加:
单日极端下跌资格。
但极端日不能无限重复触发。
18.4 增加Shock Anchor
第一次极端日触发以后:
记录当时的市场位置作为Shock Anchor。
以后再次出现极端日,只有价格相对上一个Shock Anchor进一步打开足够空间,才能重新获得额外买入资格。
这样试图解决:
同一区域反复暴跌、反复买入的问题。
18.5 市场状态继续作为辅助变量
继续观察:
- 跌停家数;
- 停牌比例;
- 融资余额变化;
- 强制平仓和去杠杆状态;
- 国家资本实际买入;
- 市场制度变化。
这些变量主要用于回答:
现在到底是什么性质的下跌?
而不是直接替代价格规则。
19. 一个问题开始需要单独拆出去:买多少
走完2008和2015—2016以后,我越来越感觉到:
“什么时候买”和“买多少”其实是两个足够大的问题。
如果全部塞进同一套实验:
- Start;
- 累计档位;
- 极端日;
- Shock Anchor;
- 市场状态;
- 单次仓位;
- 深度梯度;
- 总资金上限;
- 每日部署上限;
很快就会变成一个复杂到难以判断到底是哪条规则出了问题的系统。
因此更干净的做法可能是:
深度回撤实验首先解决“什么时候获得买入资格”。
它输出:
今天有没有新的买入资格。
然后把:
获得资格以后到底投入多少钱
交给另一个资金部署实验处理。
这样以后即使资金方案设计失败,也不会反过来污染机会识别规则。
20. 第二次验证真正留下了什么
2008给我的最大教训是:
一个看起来简单合理的机械规则,放进真实历史以后可能根本无法完成资金部署。
2015—2016则进一步告诉我:
即使解决了Start问题,后面的市场路径仍然比简单的累计回撤复杂得多。
它可能:
- 一天暴跌;
- 第二天暴涨;
- 再次暴跌;
- 大量股票停牌;
- 杠杆持续退出;
- 强制卖出突然减弱;
- 随后再次爆发;
- 甚至交易制度本身也会改变参与者行为。
因此,第二次实验仍然没有证明这套策略正确。
它做的事情和2008完全一样:
继续排除错误方案。
2008把:
“从一个很深的Start以后,每10%买一次就够了”
打出了问题。
2015—2016又把:
“只要看累计回撤就够了”
继续打出了问题。
这正是这套实验方法真正想得到的结果。
我并不需要每一次历史回放都告诉我:
应该怎样完美抄底。
只要它能够告诉我:
哪些我原本以为合理的方案,在真实市场路径里其实会失效,
这次实验就已经产生价值。
下一步,不是急着继续优化2015—2016。
而是先把这些已经暴露的问题冻结下来,形成V3草案。
以后如果再进入2018、2020等新的未知历史样本,继续问同一个问题:
这一次,还能从哪里把V3打坏?