《A股股灾预警系统 v2.1 —— 工程冻结版》
一、系统定位
本系统不是预测股灾,也不是判断明天涨跌,而是识别:
- 当前市场是否容易亏钱;
- 我的持仓是否暴露在危险区域;
- 今天唯一应该执行的交易纪律是什么。
系统最终定位为《A股智能投研与交易纪律系统》的 风险总闸门。
所有盘前简报、盘后复盘、深度分析、卡片任务、候选池,在输出交易建议前,必须先读取本系统生成的:
[本机内部路径已隐藏]
二、v2.1 核心修正
1. 数据降级不再自动降低风险等级
v2.0 中“核心模块连续2天降级运行,预警系统自动降一档输出”的规则取消。
修正为:
数据降级 ≠ 市场风险降低
新的处理规则:
| 数据状态 | 系统行为 |
|---|---|
| 单个非核心模块降级 | 继续评分,标注降级,置信度下降 |
| 核心模块降级 | 不主动降低风险等级,执行建议偏保守 |
| 样本缺失超过10% | 不输出精确新等级,沿用昨日等级,并标注“今日不可判定” |
| 核心模块连续2天降级 | 置信度降为 LOW,禁止输出激进机会 |
| 核心模块连续3天降级 | 发人工维护告警,模块权重临时转移给市场广度 |
2. 红色预警后验修正规则
v2.0 中红色预警后验调整逻辑修正。
正确规则:
| 后验结果 | 含义 | 调整方向 |
|---|---|---|
| 红色预警后5日跌幅很小 | 红色太容易触发 | 提高触发难度 |
| 红色预警后5日大跌 | 红色有效 | 保持或略放宽 |
| 黄色预警后5日大跌 | 黄色触发太晚 | 降低黄色门槛 |
| 黄色预警后市场持续走强 | 黄色误报偏多 | 提高黄色门槛 |
3. 背离硬规则修正
原规则:
沪深300与全A中位数偏离度 > 历史95%分位,且中位数跌幅 > -2%
修正为:
沪深300与全A中位数偏离度 > 历史95%分位,且全A中位数跌幅 < -2%
含义:
指数看起来没有大跌,但多数个股已经明显下跌。
4. 关键位筹码模块降级为“成交密集区压力”
第一版不做真实筹码成本模型,不宣称能计算全市场真实筹码。
模块名称改为:
关键位成交密集区压力
计算逻辑:
| 指标 | 说明 |
|---|---|
| 近252日指数成交密集区 | 用指数价格区间与成交额近似计算 |
| 当前点位距离上方密集区 | 判断反弹压力 |
| 缩量接近密集区 | 识别假突破风险 |
| 放量突破密集区 | 降低该模块风险分 |
三、系统架构
TuShare / 本地缓存 / 持仓 / 情绪打卡
↓
risk_sentinel 数据层
↓
数据质量检查与降级判断
↓
九大风险模块
↓
历史分位 + z-score
↓
市场状态识别
↓
动态权重评分
↓
一票否决硬规则
↓
连续确认 / 解除状态机
↓
risk_state.json
↓
盘前 / 盘后 / 深度分析 / 卡片任务 / 候选池
四、九大风险模块
第一批:MVP 必须先完成
| 模块 | 作用 |
|---|---|
| 指数趋势 | 判断大盘趋势是否破位 |
| 市场广度 | 判断真实赚钱效应 |
| 涨跌停恐慌 | 判断极端情绪 |
| 成交流动性 | 判断流动性是否坍塌 |
| 持仓暴露 | 判断个人账户是否处于高风险区域 |
第二批:增强稳定性
| 模块 | 作用 |
|---|---|
| 行业扩散 | 判断风险是否从局部扩散到全市场 |
| 资金压力 | 判断北向、融资、汇率、港股压力 |
| 指数间背离 | 判断指数掩护和个股失血 |
第三批:辅助模块
| 模块 | 作用 |
|---|---|
| 关键位成交密集区压力 | 判断缩量反弹和上方抛压 |
五、数据层降级路径
| 核心数据 | 主方案 | 降级方案 | 数据缺失行为 |
|---|---|---|---|
| 涨跌停数据 | TuShare limit_list_d | daily 涨跌幅近似 | 标注估算 |
| 全市场行情 | daily + daily_basic | 本地缓存 + 部分当日数据 | 样本缺失超过10%则不输出精确新等级 |
| 北向资金 | moneyflow_hsgt | 汇率、港股、南向辅助观察 | 北向权重归零,置信度下降 |
| 融资融券 | margin | 成交额变化率 + 换手率分位 | 杠杆权重归零 |
| 行业分类 | index_member_all | 上周本地缓存 | 标注行业成分非最新 |
六、市场状态识别
系统每天先判断市场状态,再调用对应权重矩阵。
| 状态 | 判定条件 |
|---|---|
| 趋势市 | 主要指数沿20日线同向运行,趋势未明显背离 |
| 震荡市 | 指数在20日线与60日线之间反复,无明显趋势 |
| 危机模式 | 全市场广度 < 30%,或波动率较20日均值放大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% |
当某模块因数据不可用而权重归零时,该权重优先转移给:
市场广度 > 涨跌停恐慌 > 成交流动性
不允许因为数据缺失而让系统变得更乐观。
八、指标评分
每个模块输出四类值:
当前值
过去60日分位
过去252日分位
z-score
模块基础评分:
| 分位区间 | 得分 |
|---|---|
| < 60% | 0 |
| 60% - 80% | 1 |
| 80% - 95% | 2 |
| > 95% | 3 |
如果 z-score 与分位方向一致,则维持评分。
如果分位高但 z-score 不支持,则降低半档置信度。
九、风险等级
| 等级 | 含义 | 最大建议仓位 |
|---|---|---|
| R0 正常 | 可以正常观察机会 | 80%-100% |
| R1 黄色 | 市场开始脆弱 | 50%-70% |
| R2 橙色 | 明显高风险 | 30%-50% |
| R3 红色 | 系统性风险 | 0%-30% |
| R4 极端 | 停止进攻,只做风险处理 | 0%-10% |
十、触发规则
黄色
加权总分 ≥ 45,且达到1天;
或任一模块得3分且 z-score > 2.5。
橙色
加权总分 ≥ 60,且连续2天达到;
或任一模块得3分且 z-score > 3.5。
红色
加权总分 ≥ 80,且连续2天达到;
或触发一票否决硬规则。
十一、解除规则
| 当前等级 | 解除条件 |
|---|---|
| R1 黄色 | 总分 < 40,且连续2天改善 |
| R2 橙色 | 总分 < 55,且连续3天改善 |
| R3 红色 | 总分 < 70,且连续3天改善,且市场广度恢复至40%以上 |
| R4 极端 | 只能人工确认解除,不能自动解除 |
十二、一票否决硬规则
满足以下任一条件,系统直接跳级,不等待连续确认。
| 条件 | 最低等级 |
|---|---|
| 主要指数单日跌幅 > 5% | R2 橙色 |
| 全市场站上20日线比例 < 20% | R2 橙色 |
| 跌停家数 > 过去一年99%分位 | R3 红色 |
| 沪深300与全A中位数偏离度 > 历史95%分位,且全A中位数跌幅 < -2% | R3 红色 |
| 全市场成交额较20日均值下降 > 40%,且跌停 > 50家 | R3 红色 |
| 账户单日回撤 > 总资金3% | R2 橙色,个人级 |
| 账户连续3日回撤 > 总资金1.5% | R3 红色,个人级 |
十三、个人纪律因子
1. 情绪打卡
每天盘前或盘后输入:
冷静 / 中性 / 焦虑 / 亢奋 / 恐惧
加分规则:
| 情绪 | 风险加分 |
|---|---|
| 冷静 | 0 |
| 中性 | 0 |
| 焦虑 | +5 |
| 亢奋 | +8 |
| 恐惧 | +5 |
说明:
情绪因子不改变市场事实,只改变个人执行建议。
2. 持仓容忍度
持仓配置文件:
~/stock_quant/config/holdings.yaml
示例:
cash_total: 500000
holdings:
- ts_code: 300502.SZ
name: 新易盛
tolerance_level: "战术"
position_pct: 12
cost_price: 0
max_loss_pct: 8
max_loss_days: 5
theme: "AI算力"
- ts_code: 600438.SH
name: 通威股份
tolerance_level: "底仓"
position_pct: 8
cost_price: 0
max_loss_pct: 15
max_loss_days: 30
theme: "光伏"
系统按容忍度输出不同建议:
| 标签 | 处理方式 |
|---|---|
| 底仓 | 允许观察,不轻易减 |
| 战术 | 达到风险条件后减仓 |
| 博弈 | R2 以上优先处理 |
十四、输出文件
1. 风险状态文件
路径:
[本机内部路径已隐藏]
该文件是所有股票系统模块的唯一风险状态源。
2. 风险面板
路径:
[本机内部路径已隐藏]
模板:
【市场风险哨兵|YYYY-MM-DD】
等级:R2 橙色|总分:63/100|连续:2天|置信度:中
最大建议仓位:30%
—— 三条执行指令 ——
① 禁止动作:禁止新开仓,禁止追高,禁止打板
② 强制动作:检查高波动战术持仓,单票风险降至半仓以下
③ 观察窗口:若涨跌比回升至1:1且跌停低于30家,明日评估降级
—— 核心数据速览 ——
广度:
趋势:
情绪:
流动性:
背离:
—— 数据质量 ——
TuShare:
降级模块:
样本缺失:
十五、与现有系统的接入规则
盘前简报
| 风险等级 | 输出行为 |
|---|---|
| R0 | 正常输出机会 |
| R1 | 机会减少,增加风险提醒 |
| R2 | 不输出激进机会,只输出观察方向 |
| R3 | 不生成买入候选,只生成风险处理 |
| R4 | 只输出仓位、防守、停止交易提醒 |
盘后复盘
必须增加:
【市场风险门禁】
当前等级:
今日是否升档:
明日是否限制开仓:
是否需要处理持仓:
深度分析
若 risk_level >= R2,禁止以下措辞:
积极买入
可加仓
明日重点进攻
强烈看多
适合追高
只允许:
观察
等待
控制仓位
减仓
不追高
不新开仓
卡片任务
| 风险等级 | 卡片行为 |
|---|---|
| R0/R1 | 可输出机会卡片 |
| R2 | 机会卡片必须带风险约束 |
| R3/R4 | 不输出进攻卡片,只输出风险卡片 |
十六、自动化运行设计
第一阶段:只读 dry-run
不真实推送
不修改旧任务
不接管盘前/盘后
只生成本地文件
必须通过:
NO_REAL_SEND=PASS
NO_DESKTOP_WRITE=PASS
OLD_TASKS_UNCHANGED=PASS
RISK_STATE_JSON=PASS
RISK_PANEL=PASS
第二阶段:盘后自动生成,但不推送
建议时间:
17:00 拉取 TuShare 全量数据
17:30 数据质量检查
18:00 九大模块计算
18:15 状态机转换
18:25 生成风险面板
18:30 写入 latest
第三阶段:连续10个交易日观察
观察内容:
1. 是否天天误报黄色;
2. 风险来临时是否沉默;
3. 是否出现数据降级却输出正常;
4. 是否出现旧产物复用;
5. 是否出现运行时间异常过短;
6. 是否出现真实推送风险。
通过后再接入盘前、盘后、深度分析和卡片任务。
十七、运维门禁
每次运行必须记录:
RUN_STARTED_AT
RUN_FINISHED_AT
RUN_DURATION_SECONDS
TRADE_DATE
DATA_FRESHNESS
RAW_DATA_HASH
RISK_STATE_HASH
REPORT_HASH
NO_REAL_SEND
NO_DESKTOP_WRITE
FALLBACK_USED
DEGRADED_MODULES
硬性失败条件:
运行时间异常过短
risk_state.json 未刷新
risk_panel.md 未刷新
数据日期不是当前交易日
样本缺失超过10%但仍输出正常
真实发送开关被打开
写入 Desktop
旧任务被意外修改
十八、回测要求
部署前必须支持 756 个交易日回测。
回测输出:
黄色预警后5日沪深300平均涨跌幅
橙色预警后5日沪深300平均涨跌幅
红色预警后5日沪深300平均涨跌幅
黄色误报率
橙色误报率
红色误报率
重大下跌漏报率
模块贡献度
模块预测效率
模块效率公式:
模块效率 = 该模块预警后实际下跌概率 / 该模块权重
调整规则:
| 结果 | 处理 |
|---|---|
| 效率 < 0.8 | 下调权重 |
| 效率 0.8 - 1.2 | 保持 |
| 效率 > 1.2 | 上调权重 |
十九、目录规范
代码目录:
~/stock_quant/risk_sentinel/
运行产物:
[本机内部路径已隐藏]
日志目录:
[本机内部路径已隐藏]
审计目录:
[本机内部路径已隐藏]
备份目录:
[本机内部路径已隐藏]
临时目录:
[本机内部路径已隐藏]
禁止写入:
~/Desktop
[本机内部路径已隐藏]
/tmp 中的长期产物
二十、版本冻结结论
v2.1 不继续扩展新模块。
当前版本只解决四件事:
1. 数据可靠性;
2. 风险等级稳定性;
3. 执行指令可操作性;
4. 与现有股票系统的风险门禁接口。
v2.1 的最终产物不是一篇长报告,而是每天稳定生成:
risk_state.json
risk_panel.md
data_quality_manifest.json
risk_state_history.jsonl
当这四个文件连续10个交易日稳定生成后,才允许进入正式接入阶段。