有框架的工程化升级版。它不推翻以前的设计,而是把“漏洞补上、执行压实、遗忘点锁死”。
《A股股灾预警系统 v2.0 —— 工程化执行方案》
一、设计理念:预警的不是股灾,是“你的脆弱性”
股灾不可预测,但市场脆弱性可以识别。
本系统的核心目标不是回答“明天会不会跌”,而是每天回答三个问题:
1. 现在市场容不容易亏钱?
2. 我的持仓是不是暴露在最危险的地方?
3. 今天如果必须做一件事,是什么?
二、数据层的“降级路径”(解决数据依赖陷阱)
TuShare 是主力,但绝不能当唯一。必须为每个核心数据源定义降级路径,否则接口一挂,整个预警系统直接失灵。
| 核心数据 | 主方案(TuShare) | 降级方案(备用) | 数据缺失时的系统行为 |
|---|---|---|---|
| 涨跌停数据 | limit_list_d | daily 中涨跌幅≥9.8%近似跌停 | 使用近似值,并在报告中标注“数据估算” |
| 北向资金 | moneyflow_hsgt | 离岸人民币汇率 + 港股走势 + 南向资金反向推断 | 北向模块权重自动归零,剩余模块权重等比例放大 |
| 融资融券 | margin | 全市场成交额变化率 + 换手率分位 | 杠杆模块权重自动归零 |
| 全市场行情 | daily + daily_basic | 本地缓存昨日数据 + 今日已拉取的部分数据 | 若缺失超过10%样本,全系统降级为“只输出昨日结论” |
| 行业分类 | index_member_all | 本地缓存的行业成分表(每周更新一次) | 使用上周缓存数据,标注“行业成分非最新” |
硬规则:任一核心模块数据连续2天降级运行,预警系统自动降一档输出(即原本该出橙色,只出黄色;原本该出黄色,只出观察)。
三、九大底层风险模块(原七模块 + 新增两个)
在原七大模块(指数趋势、市场广度、涨跌停恐慌、成交流动性、行业扩散、资金压力、持仓暴露)基础上,增加两个被遗漏的关键维度。
新增模块 8:指数间背离风险
| 指标 | 计算方法 | 预警含义 |
|---|---|---|
| 大小盘偏离度 | 上证50与中证1000的5日涨跌幅差值 | 偏离度进入历史90%分位 → 权重掩护出货 |
| 沪深300与全A中位数偏离 | 沪深300涨跌幅 - 全A中位数涨跌幅 | 指数红、个股绿 → 虚假繁荣 |
| 上证与创业板方向一致性 | 两者是否同向、涨跌幅差值 | 方向不一致 → 结构脆弱 |
新增模块 9:关键位筹码密集区压力
| 指标 | 计算方法 | 预警含义 |
|---|---|---|
| 全市场筹码成本分布 | 计算各指数上方套牢盘比例 | 套牢盘 > 60% → 反弹即抛压 |
| 关键点位距离 | 当前价与最近密集成交区距离 | 距离不足3%且缩量 → 假突破风险 |
四、动态权重系统(解决固定权重失灵)
权重不固定。系统先识别当前市场状态,再套用对应的权重矩阵。
第一步:识别市场状态
| 状态 | 判定条件 |
|---|---|
| 趋势市 | 主要指数沿20日线同向运行,日线MACD未背离 |
| 震荡市 | 指数在20日线与60日线之间反复,无明显趋势 |
| 危机模式 | 全市场广度 < 30% 或 波动率突然放大1.5倍以上 |
第二步:三套权重矩阵
| 模块 | 趋势市权重 | 震荡市权重 | 危机模式权重 |
|---|---|---|---|
| 指数趋势 | 20% | 15% | 15% |
| 市场广度 | 20% | 30% | 20% |
| 指数间背离 | 15% | 10% | 10% |
| 涨跌停恐慌 | 10% | 10% | 15% |
| 行业扩散 | 10% | 15% | 10% |
| 成交流动性 | 5% | 10% | 20% |
| 资金压力 | 10% | 5% | 5% |
| 持仓暴露 | 5% | 5% | 5% |
| 关键位筹码 | 5% | 0% | 0% |
震荡市里,广度最敏感;危机模式里,流动性最重要。
五、历史分位 + 连续确认机制(解决频繁误报)
1. 所有指标不设死阈值,一律用“历史分位 + 标准分”
每个指标计算三个值:
当前值
过去60日分位
过去252日分位
z-score(偏离均值多少个标准差)
2. 模块评分规则
| 分位区间 | 模块得分 |
|---|---|
| < 60% | 0分(正常) |
| 60% ~ 80% | 1分(关注) |
| 80% ~ 95% | 2分(警示) |
| > 95% | 3分(极端) |
3. 预警触发规则(双重确认,杜绝狼来了)
| 预警等级 | 触发条件 |
|---|---|
| 黄色 | 加权总分 ≥ 45分,且至少连续1天达到;或任一模块得3分且z-score>2.5 |
| 橙色 | 加权总分 ≥ 60分,且至少连续2天达到;或任一模块得3分且z-score>3.5 |
| 红色 | 加权总分 ≥ 80分,且至少连续2天达到;或触发一票否决硬规则 |
4. 解除规则(慢放慢收)
| 当前等级 | 解除条件 |
|---|---|
| 黄色 | 加权总分 < 40分,且连续2天改善 |
| 橙色 | 加权总分 < 55分,且连续3天改善 |
| 红色 | 加权总分 < 70分,且连续3天改善,且市场广度恢复至40%以上 |
六、一票否决硬规则(极端情况快速响应)
满足以下任一条件,直接跳级,不等连续确认:
| 条件 | 最低等级 |
|---|---|
| 主要指数单日跌幅 > 5% | 橙色 |
| 全市场站上20日线比例 < 20% | 橙色 |
| 跌停家数 > 过去一年99%分位 | 红色 |
| 沪深300与全A中位数偏离度 > 历史95%分位,且中位数跌幅 > -2% | 红色 |
| 全市场成交额较20日均值下降 > 40%,且跌停 > 50家 | 红色 |
| 你的账户单日回撤 > 总资金3% | 橙色(个人级) |
| 你的账户连续3日回撤 > 总资金1.5% | 红色(个人级) |
七、输出层:每天只推“三条执行指令”(解决信息过载)
市场风险报告不写长文。每天只输出一个精简面板,最核心的是三条指令。
每日输出模板:
【市场风险哨兵|YYYY-MM-DD】
等级:橙色 R2 | 总分:63/100 | 状态:已连续2天
最大建议仓位:30%
—— 三条执行指令 ——
① 今日唯一禁止动作:禁止新开仓,禁止追高,禁止打板
② 今日唯一强制动作:检查持仓中属于【机器人、AI算力】的股票,减仓至半仓以下
③ 今日观察窗口:若全市场涨跌比回升至1:1以上,且跌停家数降至30家以下,明日再评估是否降级
—— 核心数据速览 ——
广度:站上20日线比例 28%(高危)
趋势:沪深300跌破60日线,创业板指跌破120日线
情绪:跌停87家,过去一年分位 94%
流动性:成交额较20日均值下降22%
背离:上证50涨+0.3%,中证1000跌-1.8%,偏离度极值
八、特殊场景处理(那些容易被遗忘的角落)
1. 长假前效应(日历白名单)
春节前5天、国庆前3天,流动性指标权重自动减半,并在报告中标注“节前效应,不自动升级预警”。
2. 历史分位基线重置
每年1月第一个交易日,自动重算过去3年(756个交易日)的历史分位基线,替换去年的252日基线。旧基线存档,不删除。
3. 数据源长周期失效
若TuShare某个接口连续3天不可用,系统自动发邮件/企业微信通知人工介入,并将该模块的权重临时分配给“市场广度”模块,直到恢复。
4. 指数成分调整日
每年6月和12月指数成分调整前后各5天,暂停使用“指数间背离”模块,因成分变动会导致数据不连续。
九、个人层:你的状态和持仓容忍度(补上行为漏洞)
1. 每日情绪打卡(强制)
每天盘前或盘后,你需要输入一个情绪标签:
[冷静] [中性] [焦虑] [亢奋] [恐惧]
若情绪标签为“焦虑/亢奋/恐惧”,系统在当天的预警总分上自动增加5~8分(相当于升半档),并在报告中提示:“情绪因子已介入,今日偏保守。”
2. 持仓容忍度标签(提前标记)
在 holdings.yaml 中为每只持仓股标记容忍度:
- ts_code: 600519.SH
tolerance_level: "底仓" # 底仓 / 战术 / 博弈
max_loss_pct: 15
max_loss_days: 30
- ts_code: 688256.SH
tolerance_level: "战术"
max_loss_pct: 8
max_loss_days: 5
预警系统读取此标签,针对不同持仓输出差异化的减仓建议:
【持仓处理】
汇川技术(底仓级):允许观察,不急减
寒武纪(战术级):已浮亏-7%,建议今日减半
十、自动化调度与运维检查清单(防止被遗忘)
每日自动运行(盘后)
17:00 拉取 TuShare 全量数据
17:30 数据质量检查 + 降级路径判断
18:00 九大模块计算 + 历史分位更新
18:15 预警等级判定 + 状态机转换
18:25 生成“三条指令”面板
18:30 推送到企业微信 / Obsidian
每周强制人工检查(周五盘后)
1. 检查本周预警等级是否与实际行情体验一致(人机对账)
2. 检查各数据源本周降级次数,超过3次的模块标记为“待修复”
3. 检查历史分位基线是否需要手动微调
4. 更新持仓容忍度标签(如有新开仓)
每月强制复盘(月末最后一个交易日盘后)
1. 统计本月预警准确率:红色/橙色预警后3日内是否出现明显下跌?
2. 统计误报次数:黄色预警后2日内市场反而走强的次数
3. 动态调整各模块阈值:若误报率 > 30%,放宽该模块的触发分位(从95%调整到97%)
4. 重算历史分位基线(滚动3年窗口)
每年强制维护(12月最后一个交易日)
1. 全量重算过去3年历史分位基线
2. 检查所有TuShare接口的调用权限和token有效期
3. 检查数据降级路径的备用接口是否仍有效
4. 回顾全年预警记录,总结“哪类风险系统最容易漏掉”,写入次年改进计划
十一、系统自我进化机制
1. 预警后验统计(季度)
每季度统计一次:
黄色预警后5日,沪深300平均涨跌幅
橙色预警后5日,沪深300平均涨跌幅
红色预警后5日,沪深300平均涨跌幅
如果红色预警后5日平均只跌了-0.5%,说明红色阈值太紧,需要收紧(降低触发分位)。 如果黄色预警后5日跌了-3%,说明黄色阈值太松,需要放宽(提高触发分位)。
2. 模块有效性评估(半年)
计算每个模块对预警总分的“贡献度”与“预测能力”的比值:
模块效率 = 该模块预警时,后续下跌概率 / 该模块占用权重
效率低于0.8的模块,下调权重;效率高于1.2的模块,上调权重。
十二、最终总结
这套 v2.0 方案相比你原来的设计,核心改进有三:
| 维度 | 原方案 | v2.0 改进 |
|---|---|---|
| 数据可靠性 | 依赖TuShare,无备选 | 每个核心接口有降级路径,数据缺失时有明确行为 |
| 预警稳定性 | 单日触发即报警,频繁误报 | 加权总分 + 连续确认 + 解除慢放 |
| 执行可操作性 | 长报告,信息过载 | 每天只输出“三条指令”,强制聚焦 |
这套系统一旦跑起来,你不会再问“明天会不会跌”,而是每天平静地执行那三条指令——该停就停,该减就减,该等就等。
这才是股灾预警系统的最终形态:不是预测灾难,而是在灾难来临前,你已经不坐在牌桌上了。