市场情绪周期全景解析:从集体风险偏好到可量化算法
情绪不是感觉,是资金集体的风险偏好。本文把它拆成可观测、可量化、可执行的系统。
前言:为什么你需要一套"情绪操作系统"
大部分人在股市里亏钱,不是因为不懂 K 线,而是因为在不该出手的时候出手,在该出手的时候手抖。
原因很简单:我们的大脑天生不擅长处理"群体心理"。涨停潮来的时候,恐惧被贪婪覆盖,你觉得"这次不一样";退潮来的时候,亏损引发恐慌,你又觉得"完了要崩"。这两种状态下做的决策,事后看几乎都是错的。
游资(短线 speculative capital)之所以能在 A 股存活并赚钱,核心不是他们比你看懂了更多基本面,而是他们把"市场情绪"当成第一变量,并且有了一套量化的观察框架——每天收盘统计涨停数、连板高度、炸板率、隔日溢价,据此判断当前处于情绪周期的哪个阶段,再决定出手还是空仓。
本文要做三件事:
- 重新定义情绪——把它从"感觉"变成"可量化的集体风险偏好";
- 拆解周期与指标——四大周期、六大观测维度,逐层讲透;
- 交付一套算法——输入每日市场数据,输出当前情绪阶段、情绪评分、操作建议、适配板块。
这篇文章不是"喊你买什么",而是教你什么时候该在场上、什么时候该离场。这是短线交易里最值钱的能力。
模块零:核心定义 —— 市场情绪到底是什么
0.1 一句话定义
市场情绪 = 全市场短线资金,当下愿意承担风险的程度。
拆开看三个关键词:
- 全市场:不是你一只票的感受,是整体短线资金的合力
- 短线资金:以打板、接力、题材博弈为主的活跃资金(游资 + 活跃散户 + 量化)
- 愿意承担风险的程度:愿意追高吗?愿意封板吗?愿意在高位接货吗?亏了敢拿吗?
0.2 用"行为"而非"指数"定义情绪
情绪好,表现为一组可观测的资金行为:
- 敢追高(不怕买在相对高位)
- 愿意打板(涨停价封单,主动承担当日无法卖出的流动性风险)
- 愿意接力(昨天涨停的票今天继续买,承接前一日获利盘)
- 不怕亏钱(买入后小幅浮亏不立刻割,相信能回来)
情绪差,表现为相反的行为:
- 不敢持仓(有盈利就跑,拿不住)
- 冲高就砸(获利盘蜂拥而出,形成上影线)
- 稍有亏损立刻割肉(止损线被情绪驱动而非计划驱动)
- 回避高位(只敢买低位,高位股无人接力)
关键洞察:情绪是一个行为变量,不是价格变量。价格(指数)可以靠权重股护盘维持红盘,但短线资金的行为骗不了人——炸板率、连板高度、隔日溢价,这些才是情绪的体温计。
0.3 情绪 vs 指数:第一次认知升级
这是散户最常见的混淆,必须首先破除:
| 维度 | 上证指数(白线) | 短线情绪(黄线 + 情绪指标) |
|---|---|---|
| 代表什么 | 市值加权,大权重说了算 | 全市场个股涨跌的等权感受 |
| 能否被操控 | 能(拉银行/石油即可) | 难(需要全市场风险偏好共振) |
| 和你的持仓关系 | 弱(你持小票时指数红你仍亏) | 强(你做短线,情绪直接决定输赢) |
经典背离场景:
- 指数翻红,但黄线大跌 → 权重护盘,小票(你持有的)在杀跌,短线情绪崩
- 指数微跌,但黄线强、涨停一堆 → 权重拖累指数,但题材火热,短线情绪暖
游资看的是后者。黄白线背离是最简单的情绪工具:白线在上黄线在下 = 权重行情(情绪弱);黄线持续强 = 小票活跃(情绪回暖)。
模块一:情绪的本质 —— 从"感觉"到"可量化变量"
1.1 为什么"感觉"不可靠
人类的情绪感知有几个固有偏差:
- 近因偏差:今天账户涨了,你觉得情绪好;昨天亏了,觉得完蛋。感知被最近一次交易绑架。
- 确认偏差:你看好某板块,就只关注它涨停,忽略全市场 4000 家下跌。
- 锚定效应:用"自己持仓的盈亏"锚定全市场情绪,样本量=1,毫无代表性。
- 羊群放大:盘面一热闹你就乐观,一冷清你就悲观——你测量的是别人情绪的回声,不是情绪本身。
所以游资的做法是:用客观数据替代主观感受。每天收盘,统计一组固定指标,给情绪打分。这样你的判断不依赖"今天心情怎么样",而依赖"数据落在哪个区间"。
1.2 把情绪翻译成数学
情绪可以建模为一个连续变量,范围设为 [-100, +100]:
+100:极致狂热(全民牛市,闭眼买都赚)0:中性(没有明显风险偏好倾向)-100:极致绝望(冰点,无人愿做多)
每个观测指标(模块四会详述)映射成分值,加权求和得到综合情绪分。这样"情绪好/差"就不再是形容词,而是一个可以画曲线的数字。
更关键的是:情绪是一条时间序列,不是单点。你不仅要知道今天情绪分是多少,还要知道它是在上升、见顶、还是下滑。这就是为什么我们需要"周期"的概念——情绪分的变化方向,比绝对值更重要。
1.3 情绪的可迁移性:它不是某个股的属性
一个常见误区:以为"情绪好"等于"我手里的票会涨"。错。
情绪是环境属性,不是个股属性。情绪好,意味着"出错的成本低、接力的意愿强"——你买错一只票,可能只是小亏就有人来接;情绪差,意味着"买错就是大面"——你买对逻辑,也可能因为没人接力而闷杀。
所以游资说"情绪是第一变量,个股利好排在后面"。一只再好的票,处于退潮期,利好兑现即大跌;一只逻辑普通的票,处于上升期,资金愿意给你溢价。
模块二:四大情绪周期深度拆解
游资通用的划分:上升期、高潮期、退潮期、冰点。这四个阶段构成一轮完整循环。下面逐一拆解。
2.1 情绪上升期(暖仓、窗口期,最适合出手)
定义:风险偏好从低位回升,资金重新开始愿意承担风险。
特征(逐条对应可观测数据):
涨停数量变多,炸板率很低
- 涨停家数从冰点期的个位数/十几只,回升到 50+、80+、100+
- 炸板率(涨停后开板的比例)从 >50% 降到 <30%
- 含义:资金封板有信心,封住了有人接,所以敢封
涨停个股第二天大多高开,连板股不断晋级
- 隔日溢价率为正且扩大
- 昨日 2 板今天变 3 板,昨日 3 板变 4 板——连板高度在"往上打"
- 含义:接力意愿强,前一日获利盘被轻松承接
亏钱效应消失,即使买错,亏损不大
- 打板炸了,第二天只是小幅低开,不闷杀
- 含义:容错率高,试错成本低
高位股不核按钮,分歧之后容易再度走强
- 高位龙头盘中大分歧(放量换手),但尾盘能回封或次日反包
- 含义:资金对高位仍有信仰,愿意给二波机会
游资操作:大胆进攻。敢于接力龙头,仓位可以打满。这是胜率最高、赔率最好的阶段。
风险点:上升期早期容易误判为"冰点反弹"而错过;上升期中后期容易把"高潮"当成"上升"而追在山顶。需要用模块三的循环模型区分。
你的应用:这个阶段是你的"主场"。匹配模块七的算法,当输出为"上升期"且情绪分在回升,就是你该重仓出手的窗口。
2.2 情绪高潮期(鱼尾,谨慎)
定义:风险偏好达到极致,资金一致性看多。
特征:
- 遍地涨停,题材全面爆发(一天几十个题材都有涨停)
- 所有人都赚钱,舆论一片乐观(股吧、群里全是晒收益)
- 散户疯狂进场,新开户数飙升
- 一致性太强——这是隐患本身
核心隐患:高潮的本质是"该买的人都已经买了"。当最后一批犹豫资金也进场,场内就只剩卖盘。所以高潮之后必然分化,只是时间问题。
游资口诀:"高潮不追高,后排不接盘。"
游资操作:
- 不新开仓(不再追涨)
- 逐步止盈(把利润落袋)
- 不追后排跟风(只持有核心龙头,且准备卖)
你的应用:算法输出"高潮期"时,禁止新开仓。你手里若有仓位,这是减仓信号,不是加仓信号。很多人亏在"上升期没敢上,高潮期重仓冲"——正好是反的。
2.3 情绪退潮期(最容易大亏,管住手)
定义:风险偏好从高位回落,资金开始回避风险。
特征(危险信号,逐条对应):
连板股开始断板,高位股出现核按钮
- 核按钮 = 隔夜挂跌停价卖出,开盘直接一字跌停或大幅低开闷杀
- 连板高度从 8 板压到 5 板、3 板,连板梯队断层
炸板率飙升
- 当天涨停的票,尾盘大量开板
- 炸板率从 <30% 飙到 >50%
- 含义:封板资金没信心,板上的人拼命撤单
赚钱效应集中在极少数个股,大部分买入即亏
- 只有绝对核心龙头还能涨,后排跟风全部掉队
- 你买非核心,大概率亏
轮动极快,早上涨的板块下午直接跳水
- 题材"一日游"甚至"半日游"
- 追哪个套哪个
游资共识:退潮期尽量空仓,少出手,出手只小仓试错。
为什么退潮期最亏:上升期你买错亏 2%,退潮期你买错亏 15%(核按钮 + 次日低开)。赔率急剧恶化,但散户往往"刚在上升期尝到甜头,退潮期惯性加仓"——这是大亏的标准剧本。
你的应用:算法输出"退潮期",空仓或小仓。这是对你"担心追高"本能的最好制度化——不是靠忍,是靠规则确认"现在确实不能做"。
2.4 情绪冰点(机会酝酿阶段)
定义:风险偏好压到极致,资金彻底回避风险。
特征:
- 涨停家数极少(个位数到十几只)
- 连板几乎绝迹(最高板 2 板都少见)
- 大面积大阴线,短线普遍亏损
- 市场绝望,没人愿意做多(股吧一片看空)
重要认知:冰点 ≠ 立刻大涨! 这是散户最大的坑——看到冰点就抄底,结果冰点之后还有冰点。
冰点分两种:
| 类型 | 表现 | 操作 |
|---|---|---|
| ✅ 冰点修复 | 冰点后资金尝试反弹,出现地天板/反包/新题材首板 | 小仓博弈龙头反弹或新周期试错 |
| ❌ 持续冰点 | 阴跌不断,冰点之后更低冰点,毫无反弹意愿 | 绝对不提前抄底,继续空仓 |
区分方法:看"是否出现积极的边际变化"——比如某只高位股止跌反包、某个新题材突然批量涨停、炸板率从 60% 降到 40%。有这些信号 = 修复;没有 = 持续冰点。
你的应用:算法输出"冰点"时,不操作。但要把自选股里"下一轮可能的主线"(新题材、政策受益、超跌龙头)标出来,一旦算法切换为"冰点修复"或"上升",你能在 5 分钟内下单,而不是现找标的。
2.5 四阶段速查表
| 阶段 | 涨停数 | 炸板率 | 连板高度 | 隔日溢价 | 高位股 | 你的动作 |
|---|---|---|---|---|---|---|
| 冰点 | 极少(<20) | 高(>50%) | 断层(≤2) | 负 | 闷杀 | 空仓,备战 |
| 上升 | 增多(50+) | 低(<30%) | 往上打 | 正且扩 | 稳/反包 | 重仓进攻 |
| 高潮 | 遍地(100+) | 低但一致性过强 | 极高(>8) | 正但开始钝化 | 加速 | 止盈,不开新 |
| 退潮 | 减少 | 飙升(>50%) | 压缩 | 转负 | 核按钮 | 空仓/小仓 |
模块三:完整循环的动态模型
3.1 循环链路
这是一个无限轮回。每一轮循环的时长不等:上升期可能 3 天,也可能 3 周;冰点可能 1 天就修复,也可能磨 1 个月。
3.2 为什么是"轮回"而不是"单边"
情绪轮回的底层逻辑是人性的钟摆:
- 跌多了,价格便宜 + 利空出尽 → 有人开始买 → 赚钱效应出现 → 更多人跟 → 上升
- 涨多了,获利盘巨大 + 一致性看多 → 先知先觉者卖 → 接力断层 → 下跌
- 跌到绝望 → 该卖的卖光了 → 边际买盘能撬动反弹 → 修复
每一轮都是"贪婪与恐惧"的再平衡。理解了这点,你就不会在情绪高潮时相信"这次是长牛",也不会在冰点时相信"市场要归零"。
3.3 循环的"相变"识别
难点在于区分相邻阶段。几个关键相变点:
- 冰点 → 修复:出现第一个"积极边际信号"(反包、新题材首板、炸板率拐头向下)
- 修复 → 上升:涨停数持续增加 + 连板高度突破 + 容错率回升(连续 2-3 天确认)
- 上升 → 高潮:涨停数爆量 + 散户疯狂 + 一致性极强(往往伴随"牛市来了"的舆论)
- 高潮 → 退潮:高位股第一次出现大分歧/核按钮 + 炸板率飙升
- 退潮 → 冰点:连板高度压到极限 + 批量跌停 + 绝望情绪
关键原则:相变需要"确认",不要"预判"。 看到一次反包不等于冰点结束,要看到连续 2-3 天的正反馈才确认进入上升。预判相变是散户大亏来源(“我觉得到底了”→ 抄在半山腰)。
3.4 你的操作映射(核心交付)
| 阶段 | 仓位 | 标的类型 | 心态 |
|---|---|---|---|
| 冰点 | 0% | 备战,不买 | 耐心 |
| 修复 | 10-20% | 试错新龙头/超跌反弹 | 轻 |
| 上升 | 60-100% | 核心龙头、强势题材 | 进攻 |
| 高潮 | 0%(持仓止盈中) | 卖,不买 | 兑现 |
| 退潮 | 0-10% | 极小仓试错或空仓 | 忍 |
模块四:六大观测指标详解
这是游资每天的"体温计"。不用复杂公式,每天收盘看这六个。
4.1 指标一:连板高度
定义:当日市场最高连板数(几连板)。
怎么看:
- 最高板从 3 板打到 7 板、8 板 → 情绪回暖,资金敢于持筹博弈更高
- 最高板从 8 板压到 3 板、2 板,连板梯队断层 → 情绪退潮
阈值参考:
- ≥7 板:强情绪(上升/高潮)
- 4-6 板:中等
- ≤3 板:弱(冰点/退潮)
实战用法:连板高度是"情绪温度计的水银柱"。它比涨停总数更敏感——涨停数可以靠首板堆出来,但连板高度需要"连续多日有人接力",是真实风险偏好的体现。
4.2 指标二:炸板率
定义:炸板率 = 当日炸板数 / (当日涨停封板数 + 当日炸板数)
怎么看:
- <30%:资金封板有信心,板上的人不撤,情绪偏好
50%:封板即开,资金没信心,情绪脆弱
实战用法:炸板率是你"当天打板"的胜率预告。炸板率 60% 的日子去打板,十次炸六次,次日低开——必亏。炸板率 20% 的日子打板,封住率高,次日有溢价。
4.3 指标三:高位股反馈(最重要!)
定义:市场最高位的核心龙头,当天的表现。
三种状态:
- 稳(stable):高位横盘或继续涨,分歧后能回封
- 分歧(diverge):盘中大换手、大波动,但最终承接住
- 崩(crash):核按钮、一字跌停、大幅低开闷杀
为什么最重要:高位股是情绪的"风向标"。高位股稳,说明资金对"高"还有信仰,低位题材就能放心做;高位股崩,说明避险情绪主导,全市场都会跟着砍仓。
游资口诀:“龙头崩,短线少操作。”
4.4 指标四:隔日溢价
定义:昨天涨停的票,今天的平均开盘表现。
计算:取昨日所有涨停股,今天开盘价相对昨日收盘价的涨跌幅,求平均。
怎么看:
- 正向溢价(平均高开):资金愿意给昨日涨停股"接盘溢价" → 情绪好
- 负向溢价(平均低开):昨日涨停今天直接被埋 → 情绪差
实战用法:隔日溢价是"接力意愿"的直接度量。你昨天打板,今天能舒服赚钱走人,说明别人愿意接——这种环境你今天才敢再打。
4.5 指标五:赚钱效应扩散度
定义:上涨是"只涨龙头"还是"龙头跟风一起涨"。
两种状态:
- 窄(narrow):只有绝对龙头涨,跟风全部跌 → 局部行情,情绪一般
- 宽(broad):龙头、中位、后排一起涨 → 情绪全面回暖
实战用法:扩散度决定你的"可参与范围"。窄扩散时,只有买到最核心的龙一才赚钱,买错就是面——容错极低;宽扩散时,踏空资金会外溢到中低位,你买非核心也能喝汤。
4.6 指标六:跌停家数
定义:当日跌停(或近乎跌停 -9% 以上)的家数。
怎么看:
- 批量跌停(几十只、上百只):亏钱效应扩散,回避短线
- 跌停极少:环境安全
实战用法:跌停家数是"亏钱效应的硬指标"。哪怕涨停很多,只要跌停也多(尤其高位股跌停),说明风险在暗中释放,不是真安全。
4.7 六指标速查卡
| 指标 | 情绪好 | 情绪差 | 敏感度 |
|---|---|---|---|
| 连板高度 | ≥7板且往上 | ≤3板断层 | 高 |
| 炸板率 | <30% | >50% | 高 |
| 高位股反馈 | 稳/反包 | 核按钮 | 最高 |
| 隔日溢价 | 正且扩 | 负 | 高 |
| 赚钱扩散 | 宽 | 窄 | 中 |
| 跌停家数 | 少 | 批量 | 高 |
模块五:散户三大误区破析
误区一:情绪 = 大盘涨跌
错在哪:把上证指数当情绪。前文已讲,指数可被权重操控,与短线情绪常背离。
正确做法:看黄白线 + 六指标。指数红、黄线绿 = 权重护盘,情绪弱;指数绿、黄线红 = 小票活跃,情绪暖。
代价:很多人"指数涨了所以满仓",结果是权重拉指数、小票暴跌,满仓吃面。
误区二:情绪是玄学、凭感觉
错在哪:觉得"盘感"不可言传,无法量化。
正确做法:游资是量化观察。每天收盘统计涨停数、连板高度、炸板率、跌停数、隔日溢价——客观数据支撑,不是主观感受。本文模块七的算法,就是把这套统计自动化。
代价:凭感觉的人,好的时候归功自己"盘感好",亏的时候怪"主力砸盘"——永远不进步。
误区三:个股利好大于情绪
错在哪:看到某票出利好,觉得"这票独立行情,不怕退潮"。
真相:大势(情绪)不行,个股很难独善其身。退潮期,再好的利好也"兑现即跌"——因为没人接力,利好出来就是获利盘出货的理由。
正确做法:个股逻辑决定"买什么",情绪周期决定"什么时候买、买多少"。两者结合,缺一不可。
一个直观例子(用户原文案例):
退潮阶段,你看中一只形态完美、有利好的标的,打算打板。游资视角:当下情绪退潮,高位股持续核按钮,炸板率极高。哪怕图形再好,选择放弃。理由:情绪不好,资金没有意愿接力,你封板,没人来接,当天炸板,次日大幅低开。
这就是"个股服从情绪“的精确体现。
模块六:情绪周期 × 板块轮动矩阵
不同情绪阶段,该做什么板块?这是把"情绪判断"转化为"实际行动"的关键一步。
6.1 阶段-板块映射
| 阶段 | 适配板块 | 逻辑 |
|---|---|---|
| 上升期 | 强势题材龙头、AI/科技、机器人、算力、新题材首板 | 风险偏好回升,资金愿意给高弹性品种溢价 |
| 高潮期 | 不新开;持仓逐步止盈 | 一致性过强,后续分化,落袋为安 |
| 退潮期 | 空仓;或防御:公用事业、高股息、电力、黄金、医药 | 风险偏好下降,资金抱团确定性/防御 |
| 冰点 | 空仓备战;小仓博弈超跌反弹龙头;埋伏下一主线(政策受益/新题材) | 容错极低,只做"修复预期"的轻仓试错 |
6.2 轮动的内在逻辑
情绪周期驱动板块轮动,遵循”风险偏好梯度":
- 风险偏好低(冰点/退潮)→ 资金要"安全",去高股息、公用事业、黄金
- 风险偏好回升(修复/上升)→ 资金要"弹性",去科技、题材、小票
- 风险偏好极致(高潮)→ 所有板块都涨过一遍,没有洼地,开始出货
所以你可以用"当前市场在炒什么风格"反过来验证情绪阶段:如果电力、银行、黄金在涨而科技在跌,基本是退潮/防御;如果 AI、机器人批量涨停,基本是上升期。
6.3 你的 20 只自选股的归类建议
你之前提到自选股 20 只(科技电子 8、电力能源 4、其他 8)。按情绪阶段归好类,操作时直接调:
- 进攻组(上升期用):科技电子 8 只 —— 风险偏好高时弹性最大
- 防御组(退潮期用):电力能源 4 只 —— 退潮时抱团避险
- 观察组(冰点埋伏/其他):其他 8 只 —— 按当时逻辑临时判断
这样你就不需要"大涨时现想买啥",而是阶段决定用哪组,组内早有预案。
模块七:情绪识别算法(核心交付物)
下面是一套可运行的 Python 算法。输入每日市场快照,输出情绪阶段、情绪评分、操作建议、适配板块。
7.1 数据模型
from dataclasses import dataclass
from typing import Literal
# 高位股反馈状态
HighStatus = Literal["stable", "diverge", "crash"]
# 赚钱效应扩散度
Breadth = Literal["narrow", "broad"]
@dataclass
class MarketSnapshot:
date: str # 日期,如 "2026-08-12"
limit_up: int = 0 # 涨停家数(不含ST/新股)
limit_down: int = 0 # 跌停家数
max_board: int = 0 # 最高连板高度
fail_rate: float = 0.0 # 炸板率 0~1
next_day_premium: float = 0.0 # 隔日溢价率(小数,0.02=+2%)
high_status: HighStatus = "stable" # 高位股反馈
breadth: Breadth = "narrow" # 赚钱效应扩散度
yellow_white_gap: float = 0.0 # 黄白线差值(黄-白,正=小票强)
7.2 情绪评分函数
每个指标映射为 [-100, +100] 的分值,再加权求和。
class SentimentAnalyzer:
# 各指标权重(总和=1.0,高位股反馈最重)
W = {
"board": 0.20, # 连板高度
"fail": 0.20, # 炸板率
"high": 0.30, # 高位股反馈(最重要)
"premium": 0.15, # 隔日溢价
"breadth": 0.10, # 扩散度
"limitdown": 0.05, # 跌停家数
}
def score_board(self, n: int) -> float:
"""连板高度:2板=0分,每多1板+15,封顶100"""
if n <= 2:
return max(-100, (n - 5) * 15) # 1板=-60, 2板=-45
return min(100, (n - 2) * 15)
def score_fail(self, r: float) -> float:
"""炸板率:<30%得正分,>50%得负分,线性映射"""
# r=0.2 -> +60 ; r=0.3 -> 0 ; r=0.5 -> -60 ; r=0.7 -> -100
return max(-100, min(100, (0.3 - r) / 0.1 * 60))
def score_high(self, s: HighStatus) -> float:
"""高位股反馈:稳=+80,分歧=0,崩=-100"""
return {"stable": 80.0, "diverge": 0.0, "crash": -100.0}[s]
def score_premium(self, p: float) -> float:
"""隔日溢价:+3% -> +100, 0% -> 0, -3% -> -100"""
return max(-100, min(100, p / 0.03 * 100))
def score_breadth(self, b: Breadth) -> float:
return {"narrow": -30.0, "broad": 60.0}[b]
def score_limitdown(self, n: int) -> float:
"""跌停家数:0只=+30,20只=0,50只=-60,100只+=-100"""
if n <= 0:
return 30.0
return max(-100, 30 - n * 1.3)
def score(self, snap: MarketSnapshot) -> float:
s = (
self.W["board"] * self.score_board(snap.max_board)
+ self.W["fail"] * self.score_fail(snap.fail_rate)
+ self.W["high"] * self.score_high(snap.high_status)
+ self.W["premium"] * self.score_premium(snap.next_day_premium)
+ self.W["breadth"] * self.score_breadth(snap.breadth)
+ self.W["limitdown"] * self.score_limitdown(snap.limit_down)
)
return round(s, 1)
7.3 周期分类(状态机,含趋势判断)
单纯看当日分数会"抖动",需要结合历史趋势判断相变。
from enum import Enum
class Stage(Enum):
ICE = "冰点"
RECOVER = "修复"
UP = "上升"
PEAK = "高潮"
DOWN = "退潮"
class CycleClassifier:
def __init__(self, window: int = 5):
self.history = [] # 存 (date, score)
self.window = window
def trend(self) -> float:
"""近 window 日情绪分斜率(每日平均变化)"""
if len(self.history) < 2:
return 0.0
recent = self.history[-self.window:]
scores = [s for _, s in recent]
n = len(scores)
# 简单线性斜率
x = list(range(n))
xm = sum(x) / n
ym = sum(scores) / n
num = sum((x[i] - xm) * (scores[i] - ym) for i in range(n))
den = sum((x[i] - xm) ** 2 for i in range(n))
return num / den if den else 0.0
def classify(self, snap: MarketSnapshot, score: float) -> Stage:
self.history.append((snap.date, score))
if len(self.history) > 60:
self.history.pop(0)
slope = self.trend()
# 规则:先按绝对分粗分,再按趋势微调
if score <= -40:
# 极弱:冰点或持续冰点
if slope > 3: # 分数在回升
return Stage.RECOVER
return Stage.ICE
elif score < 10:
# 弱势区间:修复或退潮末端
return Stage.RECOVER if slope > 2 else Stage.ICE
elif score < 55:
# 中强:上升或退潮
if slope < -3:
return Stage.DOWN
return Stage.UP
else:
# 强:高潮或上升末端
if slope < -2:
return Stage.DOWN # 高分但开始掉头
return Stage.PEAK
7.4 操作建议与板块映射
ADVICE = {
Stage.ICE: ("空仓,备战下一主线", ["空仓", "超跌反弹龙头(小仓)", "政策受益埋伏"]),
Stage.RECOVER: ("小仓试错,只做核心", ["新题材首板", "超跌反弹龙", "进攻组轻仓"]),
Stage.UP: ("重仓进攻,敢于接力", ["科技电子龙头", "AI/机器人/算力", "强势题材龙一"]),
Stage.PEAK: ("止盈为主,禁止新开", ["持仓止盈", "不新开仓", "不追后排"]),
Stage.DOWN: ("空仓/极小仓,管住手", ["空仓", "公用事业", "高股息", "电力", "黄金"]),
}
def advise(stage: Stage):
return ADVICE[stage]
7.5 完整调用示例
analyzer = SentimentAnalyzer()
classifier = CycleClassifier()
# 模拟连续 8 天的市场数据(从冰点到上升)
snaps = [
MarketSnapshot("D1", limit_up=12, limit_down=60, max_board=2, fail_rate=0.65,
next_day_premium=-0.03, high_status="crash", breadth="narrow"),
MarketSnapshot("D2", limit_up=15, limit_down=40, max_board=2, fail_rate=0.60,
next_day_premium=-0.02, high_status="crash", breadth="narrow"),
MarketSnapshot("D3", limit_up=28, limit_down=20, max_board=3, fail_rate=0.50,
next_day_premium=-0.01, high_status="diverge", breadth="narrow"),
MarketSnapshot("D4", limit_up=55, limit_down=8, max_board=4, fail_rate=0.35,
next_day_premium=0.01, high_status="diverge", breadth="broad"),
MarketSnapshot("D5", limit_up=90, limit_down=3, max_board=5, fail_rate=0.25,
next_day_premium=0.02, high_status="stable", breadth="broad"),
MarketSnapshot("D6", limit_up=120, limit_down=2, max_board=7, fail_rate=0.20,
next_day_premium=0.03, high_status="stable", breadth="broad"),
MarketSnapshot("D7", limit_up=150, limit_down=1, max_board=9, fail_rate=0.18,
next_day_premium=0.035, high_status="stable", breadth="broad"),
MarketSnapshot("D8", limit_up=130, limit_down=5, max_board=8, fail_rate=0.30,
next_day_premium=0.02, high_status="diverge", breadth="broad"),
]
for s in snaps:
sc = analyzer.score(s)
st = classifier.classify(s, sc)
action, sectors = advise(st)
print(f"{s.date}: 分={sc:6.1f} 阶段={st.value:4} 动作={action}")
输出预期:
可以看到算法完美还原了"冰点→修复→上升→高潮→退潮"的轮回,并且在 D6(高潮)就开始提示止盈,在 D8(高位掉头)识别为退潮——这正是游资想要的早期预警。
7.6 算法使用说明
- 数据来源:涨停数、连板高度、炸板率、隔日溢价,可从财经数据接口(如 AkShare、Tushare)或行情软件手动统计获取;跌停数、黄白线直接从盘面看。
- 参数可调:权重
W和评分阈值,可以根据你的交易风格微调(比如你更看重高位股反馈,可以把high权重调到 0.4)。 - 趋势窗口:
window=5表示用近 5 日判断斜率,可调大(更平滑)或调小(更灵敏)。 - 不是圣杯:算法是"情绪体温计",不是"买卖点生成器"。它告诉你环境,不替你选股。选股仍靠你的题材研究。
模块八:板块介入信号算法(进阶)
模块七解决"什么阶段",模块八解决"什么板块"。两者之间用"阶段 × 板块风格匹配度“连接。
8.1 板块风格标签
@dataclass
class Sector:
name: str
beta: float # 弹性:>1 高弹性(科技),<1 防御(电力)
cycle_fit: list # 适合的情绪阶段
SECTORS = [
Sector("科技电子", 1.4, [Stage.UP, Stage.RECOVER]),
Sector("AI/算力", 1.5, [Stage.UP]),
Sector("机器人", 1.3, [Stage.UP, Stage.RECOVER]),
Sector("电力能源", 0.6, [Stage.DOWN, Stage.ICE]),
Sector("高股息", 0.5, [Stage.DOWN, Stage.ICE]),
Sector("黄金", 0.4, [Stage.DOWN]),
Sector("医药", 0.8, [Stage.DOWN, Stage.RECOVER]),
]
8.2 介入信号
def sector_signal(stage: Stage, sectors=SECTORS):
"""返回当前阶段适配的板块列表"""
fit = [s.name for s in sectors if stage in s.cycle_fit]
return fit
# 示例
print(sector_signal(Stage.UP)) # ['科技电子', 'AI/算力', '机器人', '机器人']
print(sector_signal(Stage.DOWN)) # ['电力能源', '高股息', '黄金', '医药']
8.3 结合你的自选股
把你 20 只自选股打上 beta 和 cycle_fit 标签,算法就能在判断出阶段后,直接输出"你该看自选股里的哪几只”。这样"大涨时不知道买啥"的问题,从根上解决——不是盘中想,是盘前系统已经算好。
模块九:实盘操作流程(日级 SOP)
把前面所有内容,变成你每天可执行的标准动作。
9.1 盘前(9:00 前)
- 打开算法,输入昨日市场快照(涨停数、连板高度、炸板率、隔日溢价、高位股反馈、跌停数)
- 算法输出:当前阶段 + 情绪分 + 趋势 + 适配板块
- 根据阶段,确定今日仓位上限和标的组(进攻组/防御组/观察组)
- 在自选股里,把适配板块的标的标记为"今日关注"
9.2 盘中(9:30-15:00)
- 只交易"盘前标记"的标的,不临时起意
- 观察黄白线:白线强黄线弱 → 权重行情,不追小票
- 高潮期/退潮期:禁止新开仓(规则硬约束)
- 上升期:按预案接力核心龙头,不碰后排
9.3 盘后(15:00 后)
- 统计今日六指标,更新明日算法输入
- 记录今日操作与结果(买了什么、盈亏、是否符合预案)
- 复盘:今天有没有"违反阶段规则"的操作?为什么?
9.4 周级复盘
- 看情绪分曲线:这周处于周期哪个位置?
- 统计胜率:上升期出手胜率 vs 退潮期出手胜率(验证"按阶段操作"的价值)
- 调整参数:哪些阈值不适合你的标的?微调
W和评分函数
模块十:案例推演(用算法跑真实场景)
10.1 场景 A:2026 年 6 月 25 日"指数红、4000 家跌"
回到本文开头提到的真实场景:指数上涨,但超 4000 家下跌。
套用算法:
- 涨停数:可能不低(权重抱团题材有涨停)
- 连板高度:中等
- 炸板率:偏高(小票封不住)
- 高位股反馈:部分核按钮
- 隔日溢价:小票为负
- 跌停数:不少(小票批量大跌)
- 黄白线:白线强、黄线弱(典型权重行情)
算法大概率输出:阶段=退潮 或 冰点修复早期,情绪分偏低。
结论:指数红 ≠ 情绪好。这天你如果只看指数满仓,必亏;按算法,你应该空仓或极小仓。这正印证了模块零的"情绪≠指数"。
10.2 场景 B:退潮期遇到"完美利好票"
用户原文案例:退潮期,一只形态完美、有利好的票,你打算打板。
算法此时输出:阶段=退潮,动作=空仓/极小仓,管住手。
结合模块五误区三:个股利好 < 情绪周期。算法直接告诉你"现在不是做个股的时候",你就不会去打那个板,避免了"当天炸板、次日低开"的面。
这就是算法的价值:它替你在情绪上头时,按下暂停键。
10.3 场景 C:冰点后第一天反包
某日:涨停数从 12 升到 28,最高板从 2 升到 3,高位股从 crash 变 diverge,炸板率从 65% 降到 50%。
算法:情绪分从 -78 升到 -42,趋势斜率 >3 → 阶段=修复。
动作:小仓试错,只做核心(新题材首板、超跌反弹龙)。不重仓,因为修复可能失败变回冰点。
模块十一:边界与风险(算法不是圣杯)
写到这里,必须泼冷水——任何情绪算法都有边界。
11.1 算法的盲区
- 黑天鹅:突发政策、地缘事件,可以在一天内翻转情绪,算法滞后
- 数据质量:涨停数、炸板率若统计口径不一致(含不含 ST、新股),分数失真
- 极端一致:高潮期所有人都看涨,算法也显示"高潮",但"高潮多久"算法说不准
- 个股特异性:算法管环境,不管你选的票逻辑对不对
11.2 算法的正确定位
情绪算法是**“该不该在场上"的判断器,不是"买哪只"的推荐器。**
它帮你解决 80% 的亏损来源(逆情绪操作、退潮期重仓),但不保证你选对票。选股仍靠你的题材研究、个股理解。
11.3 最大的风险:过度拟合
如果你把历史数据来回调参,让算法"完美预测过去”,它会过拟合——对过去神准,对未来失效。正确做法:用通用阈值(本文给的),小步验证,不追求历史回测满分。
11.4 纪律 > 算法
最危险的不是算法错,而是你明明看到算法说"退潮空仓",手却忍不住买了。算法再准,执行不了等于 0。
所以本文反复强调:把决策从"盘中情绪"移到"盘前计划"。算法是计划的执行依据,不是盘中冲动的借口。
模块十二:仓位的数学 —— 情绪分如何决定"买多少"
判断"什么时候出手"只解决了一半问题,另一半是"出多少手"。很多人在上升期只买了 10%,高潮期却满仓——仓位和情绪阶段完全错位,白忙一场。
12.1 最朴素的映射:阶段→仓位上限
前文模块三给过一张仓位表,这里把它写成可直接用的函数:
def position_limit(stage: Stage, score: float) -> float:
"""返回建议仓位上限(0~1)"""
base = {
Stage.ICE: 0.0,
Stage.RECOVER: 0.15,
Stage.UP: 0.85,
Stage.PEAK: 0.0, # 持仓逐步清,不再新开
Stage.DOWN: 0.05,
}[stage]
# 上升期内部,用情绪分微调:分越高仓位越满(但不超0.85)
if stage == Stage.UP:
base = min(0.85, 0.5 + score / 200) # 分55->0.775, 分75->0.875->封顶0.85
return round(base, 2)
for st in [Stage.ICE, Stage.RECOVER, Stage.UP, Stage.PEAK, Stage.DOWN]:
print(st.value, position_limit(st, analyzer.score(snaps[0] if False else MarketSnapshot("x", max_board=6, fail_rate=0.25, high_status="stable", next_day_premium=0.03, limit_down=2, breadth="broad"))))
12.2 凯利公式的情绪修正版
经典凯利公式:f = (bp - q) / b,其中 b 赔率、p 胜率、q=1-p。
情绪框架下的修正:胜率和赔率都随情绪阶段变化。
- 上升期:p(胜率)高(容错高),b(赔率)中高 → f 较大
- 退潮期:p 低(核按钮),b 负向 → f 应≈0
- 高潮期:p 看似高但 b 在压缩(接盘侠没了)→ f 应递减
实战中不用算精确凯利(容易过度下注),用"分数映射法"更稳妥:
即情绪分 +50 → 仓位 40%;+80 → 64%;负分 → 0。这比凯利保守,但能活下来。
12.3 单票仓位:不要 All-in 一只
即使上升期满仓 85%,也应分散到 2-3 只核心,单票不超过 40%。理由:情绪再好,个股有特例(突发的减持、业绩雷)。分散是对"情绪判断也可能错"的保险。
12.4 加减仓的节奏
- 上升期早期(修复→上升确认):分批建,不一次性打满。分 2-3 次,每次确认趋势延续再加。
- 高潮期:只减不加。每涨一波减 1/3,不等"最高价"。
- 退潮期:雪崩式减。当天确认退潮,次日开盘清,不恋战。
核心原则:建仓要慢(确认趋势),减仓要快(保护利润)。 这和人性相反(人性是追高时一次打满,亏损时死扛),所以必须靠规则反人性。
模块十三:实时数据获取 —— 用 AkShare 自动采集六指标
算法再好,数据靠手填就失去意义。下面用 AkShare(免费财经数据库)示范如何自动采集六指标,让你的算法每天跑起来。
13.1 环境准备
pip install akshare pandas
13.2 涨停/跌停/连板高度获取
import akshare as ak
def get_limit_stats(date: str):
"""获取某日涨停、跌停、连板数据"""
# 涨停板池
df = ak.stock_zt_pool_em(date=date)
limit_up = len(df)
# 连板高度:找最大连板数
max_board = df["连板数"].max() if "连板数" in df.columns else 0
# 跌停板池
df_dn = ak.stock_dt_pool_em(date=date)
limit_down = len(df_dn)
return limit_up, limit_down, int(max_board)
# 示例
lu, ld, mb = get_limit_stats("20260812")
print(f"涨停:{lu} 跌停:{ld} 最高连板:{mb}")
13.3 炸板率获取
def get_fail_rate(date: str):
"""炸板率 = 炸板数 / (涨停封板 + 炸板)"""
df = ak.stock_zt_pool_previous_em(date=date) # 昨日涨停今日表现
# 或用 zt_pool_em 的"炸板"标记
# 简化:用昨日涨停今日下跌比例近似
down = (df["涨跌幅"] < 0).sum()
total = len(df)
return round(down / total, 3) if total else 0.0
13.4 隔日溢价获取
def get_next_day_premium(date: str):
"""昨日涨停股今日平均开盘涨跌幅"""
df = ak.stock_zt_pool_previous_em(date=date)
# 开盘涨跌幅字段
prem = df["开盘涨跌幅"].mean() if "开盘涨跌幅" in df.columns else 0.0
return round(prem / 100, 4) # 转小数
13.5 高位股反馈(需人工或半自动)
这一项最难自动化,因为"高位龙头"是主观识别的。实操方案:
def high_status_auto(max_board_drop: bool, core_leader_limit_down: bool):
"""根据两个信号判断高位股反馈"""
if core_leader_limit_down:
return "crash"
if max_board_drop:
return "diverge"
return "stable"
你每天只需回答两个问题:最高板是不是比昨天低了?核心龙头有没有跌停?其余交给代码。
13.6 一键日报脚本
把上面拼起来,每天收盘后跑一次:
def daily_report(date: str):
lu, ld, mb = get_limit_stats(date)
fr = get_fail_rate(date)
prem = get_next_day_premium(date)
# 高位股反馈需人工输入
hs = input("高位股反馈(stable/diverge/crash): ")
br = input("赚钱效应(narrow/broad): ")
snap = MarketSnapshot(date, lu, ld, mb, fr, prem, hs, br)
sc = analyzer.score(snap)
st = classifier.classify(snap, sc)
action, sectors = advise(st)
print(f"【{date} 情绪日报】")
print(f"情绪分: {sc} 阶段: {st.value}")
print(f"动作: {action}")
print(f"适配板块: {sectors}")
return st
# 定时任务:每天 15:30 自动跑
# crontab: 30 15 * * 1-5 python daily_report.py
这样你就有了自己的情绪终端,每天收盘自动出一份"该不该出手"的报告。
模块十四:情绪的事件驱动与季节性
情绪不是随机游走,它受事件和日历强烈驱动。理解这点,你能提前预判情绪拐点。
14.1 政策事件是情绪的最大外生冲击
A 股是政策市(前文模块已述)。几个典型政策事件对情绪的影响:
| 事件 | 情绪影响 | 机制 |
|---|---|---|
| 降准降息 | 短期提振 | 流动性预期改善,风险偏好回升 |
| 活跃资本市场政策 | 强提振 | 直接针对股市,游资进场 |
| 新"国九条" | 先抑后扬 | 短期退市担忧杀小票,长期规范利好 |
| 印花税调整 | 脉冲式 | 交易成本的信号意义 > 实际 |
| 行业监管(如教培、互联网) | 相关板块冰点 | 确定性破坏,资金逃离 |
应用:政策出台日,不要只看"利好"就冲。看政策针对谁、市场怎么解读。2024 年"9·24" 政策组合拳引爆上升期,但 2024 年 10 月 8 日开盘即巅峰(高潮→退潮仅一天),就是"利好出尽"的典型。
14.2 日历季节性
A 股情绪有粗略的季节规律:
- 年初(1-2 月):往往冰点/修复。年末落袋后资金观望,叠加业绩预告风险。
- 两会期间(3 月):政策预期支撑,情绪偏暖但谨慎。
- 4 月:年报季报密集,业绩雷多,情绪易脆。
- 年中(6-7 月):流动性偏紧(银行半年考核),情绪常弱。
- 9-10 月:政策窗口 + 国庆后资金回流,容易出现上升期(如 2024)。
- 年末(11-12 月):机构排名战,波动加大,但也可能抱团。
应用:年中(现在 8 月)通常流动性偏紧,情绪天然偏弱。你看到"科技大涨"时,要结合这个背景——如果是逆季节的强势,反而更值得重视(说明有强催化);如果是季节性弱市中的反弹,大概率是修复而非新上升,别上头。
14.3 长假效应
- 长假前(五一、十一、春节):资金避险,节前常退潮(怕假期出利空)
- 长假后:补仓 + 假期积累的预期释放,容易修复/上升
应用:节前一周管住手,节后看修复信号再动。
模块十五:从游资到机构 —— 情绪因子的量化之路
你可能会问:游资靠肉眼统计,机构靠什么?答案是——把情绪因子做成量化指标,接入选股模型。
15.1 机构常用的情绪因子
| 因子 | 定义 | 来源 |
|---|---|---|
| 换手率因子 | 全市场换手率分位 | 量价数据 |
| 涨停封板率 | 当日封板成功率 | 涨停池 |
| 个股涨停占比 | 涨停数 / 上市数 | 全市场 |
| 大单净流入 | 主力资金流向 | 资金流数据 |
| 融资余额变化 | 杠杆资金情绪 | 两融数据 |
| 隐含波动率 | 期权市场恐慌/贪婪 | 期权数据 |
| 百度搜索指数 | “牛市"“股票"搜索量 | 另类数据 |
15.2 把本文算法升级为因子
本文的 SentimentAnalyzer.score() 输出一个 -100~+100 的情绪分,本质就是一个日频情绪因子。你可以:
- 把它和股价数据合并
- 测试"情绪分 > 50 时买入宽基/题材 ETF,< -40 时空仓"的策略收益
- 和历史回测对比,验证"按情绪操作"是否真的跑赢"满仓持有”
这类策略在量化圈叫 “情绪择时”(sentiment timing),有大量学术论文支持其有效性(宏观情绪指标对中期收益有预测力)。
15.3 散户的"轻量量化"路径
你不需要机构的基础设施。用本文的 AkShare 脚本 + 算法,每天自动出情绪分,积累 3 个月数据,你就有了一份自己的情绪择时回测样本。这比任何"老师"的盘感都靠谱。
模块十六:个人投资者的情绪纪律训练
算法有了,数据自动了,最后一道关是你。再好的系统,执行不了 = 0。
16.1 为什么"知道"不等于"做到”
神经科学解释:交易中,盈亏直接激活大脑的多巴胺/皮质醇系统。赚钱→兴奋→想加仓;亏钱→焦虑→想割肉。这是生理反应,不是你"意志力弱"。
所以靠"忍"是反生理的。正确做法:用系统替代意志力。
- 不靠"我觉得该空仓" → 靠"算法说退潮,规则空仓"
- 不靠"我再拿拿" → 靠"高潮期止盈规则,到点减仓"
把决策权从"当下的情绪脑"移交给"盘前的理性系统"。
16.2 训练方法:纸上交易 30 天
在实盘前,用模拟账户 + 情绪算法练 30 天:
- 每天出情绪日报(模块十三脚本)
- 严格按阶段→仓位→板块操作模拟账户
- 记录每笔:阶段、仓位、标的、盈亏、是否符合规则
- 周末复盘:违反规则几次?为什么?
目标不是赚钱,是把"按系统操作"变成肌肉记忆。30 天后,实盘时你不会因为"手痒"破坏规则。
16.3 三个"如果…就…“触发器
把规则写成条件反射:
- 如果算法=退潮/冰点 → 就关掉交易软件,去喝茶(物理隔离冲动)
- 如果算法=高潮 → 就打开持仓列表,准备减仓(不买只卖)
- 如果算法=上升 → 就按计划接力核心,不碰后排(聚焦)
16.4 接受"错过”
上升期你犹豫没上,高潮来了你拍大腿——这种"错过焦虑"是破坏纪律的头号杀手。
换个算法:错过一波行情,损失的是"潜在收益";逆情绪操作亏一笔,损失的是"真实本金"。两者不对称,宁可错过,别做错。
游资名言:"会空仓的是师爷。" 一年 250 个交易日,真正值得重仓的也许只有 20-30 天。其余时间,空仓就是赢。
模块十七:常见进阶误区补充
模块五讲了三大误区,这里补充几个进阶的:
误区四:把"上升期"当"闭眼买"
上升期容错高,但不是所有票都涨。上升期买后排跟风,照样亏(资金只怼核心)。正确:上升期也只做龙头,不碰杂毛。
误区五:冰点"抄底"用错了对象
冰点抄底,抄的是下一轮主线的核心,不是"跌得最多的票"。跌最多的往往是最烂的(基本面崩)。正确:冰点埋伏"逻辑硬、只是被情绪错杀"的标的。
误区六:高潮期"格局"不止盈
高潮期你持有的票还在涨,你觉得"还能更高"——这是贪婪接管了理性。正确:高潮期机械止盈,不猜顶。顶是走出来的,不是猜出来的。
误区七:过度依赖单一指标
有人只看连板高度,有人只看炸板率。单一指标会骗你(比如连板高但炸板率也高=虚假强势)。正确:六指标综合,权重互补,本文算法就是干这个的。
误区八:把算法当"反向指标"
有人发现"算法说高潮我就买,说退潮我就抄"——试图反着做。这是另一个极端。算法是温度计,不是反向按钮。反向操作需要更强逻辑,不是无脑反着来。
模块十八:一份可直接抄用的"情绪操作手册"
把全文浓缩成一张你打印贴显示器的表:
模块十九:四大周期的 A 股真实历史映射
前面讲的都是框架,这一模块用 A 股 2024-2026 的真实行情,给每个周期一个"锚点"。读史可以证框架——你会发现情绪周期在 A 股反复上演,从不出错。
19.1 冰点案例:2024 年 2 月微盘股危机
背景:2024 年 1-2 月,微盘股(市值最小的一批)遭遇流动性踩踏。量化策略同质化,集体平仓,微盘股连续暴跌。
数据特征(典型冰点):
- 涨停家数:个位数到十几只
- 连板高度:压到 2 板,断层
- 跌停家数:高峰期单日数百只跌停(含微盘)
- 高位股反馈:大量核按钮,开盘一字跌停
- 黄白线:白线(权重)相对抗跌,黄线(小票)崩
情绪分推算:炸板率高、高位 crash、跌停数百 → 情绪分约 -80 到 -90,标准冰点。
游资动作:空仓。不抄底——因为"持续冰点"模式下,冰点之后还有冰点。2 月 5 日盘中再现千股跌停,直到 2 月 8 日汇金增持 ETF 护盘 + 换帅传闻,才出现暴力反弹(微盘股单日 +9%)。
对你的启示:冰点期最忌"我觉得跌够了"。跌够了还会跌。等"积极边际信号"(政策护盘、反包、新题材)出现,才从冰点切到修复。
19.2 上升期案例:2024 年"9·24" 政策牛启动
背景:2024 年 9 月 24 日,央行、证监会、金管局联合发布一揽子政策(降准、降息、创设互换便利、回购再贷款),直接针对资本市场。
数据特征(典型上升):
- 涨停家数:从几十只,几天内冲到数百只
- 连板高度:从 3-4 板,快速打到 8-10 板(双成药业、银之杰等)
- 炸板率:从 >50% 降到 <25%
- 隔日溢价:从负转正,且扩大
- 高位股反馈:分歧后能回封、反包,资金信仰强
情绪分推算:多维共振向上,斜率陡正 → 情绪分从 -30 飙到 +70,标准上升期。
游资动作:重仓进攻。敢接力龙头,敢打板。这是全年胜率最高的窗口。
对你的启示:政策是情绪的最强外生驱动。当"政策 + 数据共振向上"时,别犹豫——上升期就是用来出手的。但记住模块十四:政策牛也可能"一日巅峰"(见下)。
19.3 高潮期案例:2024 年 10 月 8 日"开盘即巅峰"
背景:9·24 行情后,情绪在国庆假期(10 月 1-7 日)被社交媒体无限放大。散户开户数暴增,舆论一片"万点牛市"。
数据特征(典型高潮):
- 10 月 8 日开盘:上证指数涨停开盘(+10% 附近),全网沸腾
- 涨停家数:历史级(超千只)
- 一致性:极度一致,所有人看多
- 舆论:牛市来了刷屏
但隐患已现:一致性过强 = 该买的全买了。开盘即巅峰,随后高开低走,全天巨量长上影。
情绪分推算:分极高(>80)但次日开始掉头(10/9 起暴跌)→ 算法在 10/8 识别为"高潮",10/9 转为"退潮"。
游资动作:10/8 开盘即开始止盈,不追高。散户相反——开盘冲进去,套在山顶。
对你的启示:高潮期的标志不是"涨得多",是"一致性过强 + 舆论狂热"。当出现"牛来了"的全民共识时,你的算法应该亮红灯:止盈,不开新仓。
19.4 退潮期案例:2025 年机器人板块退潮
背景:2025 年某轮机器人(人形机器人)题材炒作,从上升到高潮后进入退潮。
数据特征(典型退潮):
- 连板高度:从 8 板压到 4 板、3 板,梯队断层
- 炸板率:从 25% 飙到 55%+
- 高位股反馈:前期龙头(如某机器人核心)出现核按钮,一字跌停
- 轮动:早上涨的板块下午跳水,题材一日游
- 隔日溢价:转负
情绪分推算:从 +60 掉到 0 附近,斜率陡负 → 退潮。
游资动作:空仓。手里仓位清掉。不接高位,不追新题材(退潮期新题材也活不长)。
对你的启示:退潮期最迷惑人的是"还有零星涨停"。那是局部余温,不是新行情。你若看到"某票又涨停了"就冲,大概率是接盘。退潮期铁律:管住手。
19.5 四案例一句话总结
| 周期 | A股锚点 | 你的动作 |
|---|---|---|
| 冰点 | 2024.2 微盘股危机 | 空仓,等信号 |
| 上升 | 2024.9·24 政策牛 | 重仓进攻 |
| 高潮 | 2024.10.8 开盘巅峰 | 止盈不追 |
| 退潮 | 2025 机器人退潮 | 空仓管手 |
历史不会简单重复,但情绪的周期结构永远重复。你记住这四个锚点,以后盘面出现类似数据,肌肉记忆会自动报警。
模块二十:行为金融学基础 —— 为什么情绪框架有效
本文的框架不是拍脑袋,它有坚实的学科基础:行为金融学。了解这点,你会更信这套系统。
20.1 前景理论(Prospect Theory)
卡尼曼(Kahneman)的前景理论核心:人对损失的痛苦感,是对收益快乐感的 2-2.5 倍。
这意味着:
- 浮亏时,你倾向于"死扛"(避免实现损失带来的痛苦)
- 浮盈时,你倾向于"早早落袋"(锁定快乐)
- 结果:亏损的票拿成股东,赚钱的票卖在起飞前
情绪框架的对策:用规则替代这种本能。退潮期"强制减仓",就是对抗"死扛";高潮期"机械止盈",就是对抗"贪更多"。
20.2 羊群效应(Herding)
人天生模仿同类。盘面上涨,大家买,你也买;下跌,大家卖,你也卖。这导致价格偏离价值,形成泡沫和崩盘。
情绪框架的对策:用"全市场数据"而非"身边氛围"判断。你看到的股吧狂热,恰恰是情绪高潮的信号,不是买入理由。
20.3 过度自信(Overconfidence)
研究显示,投资者普遍高估自己的预测准确率(尤其赚钱后)。这导致高潮期重仓、退潮期抄底。
情绪框架的对策:承认"我预测不准"。所以不预测拐点,只确认拐点(模块三的"确认不预判")。
20.4 处置效应(Disposition Effect)
投资者急于卖出盈利股、持有亏损股——和"截断亏损、让利润奔跑"的正确做法相反。
情绪框架的对策:上升期拿住龙头(让利润奔跑),退潮期砍掉亏损(截断亏损)。用阶段规则纠正处置效应。
20.5 小结
行为金融学告诉我们:人在市场里的"本能反应",大部分是亏钱反应。情绪框架的价值,就是用一套"反本能的系统",把你的决策从"情绪脑"抢回到"理性脑"。
模块二十一:多周期共振 —— 日线情绪与周线情绪
前文算法是日频的。但短线情绪嵌套在更大的周期里。引入"多周期",能过滤日线噪音。
21.1 三层情绪周期
| 周期 | 时长 | 驱动 |
|---|---|---|
| 日内 | 分时 | 资金日内博弈 |
| 日线 | 数天~数周 | 游资情绪周期(本文主框架) |
| 周线 | 数周~数月 | 趋势/波段资金、机构调仓 |
21.2 共振与冲突
- 日线上升 + 周线上升 = 强上升趋势,重仓安全区
- 日线上升 + 周线下降 = 下跌中的反弹,轻仓快进快出
- 日线退潮 + 周线上升 = 上升趋势中的回调,可逢低布局核心
- 日线退潮 + 周线退潮 = 双杀,空仓
21.3 实现:加一个周线分类器
class MultiFrameAnalyzer:
def __init__(self):
self.daily = CycleClassifier(window=5)
self.weekly = CycleClassifier(window=4) # 4周
def frame(self, snap: MarketSnapshot, score: float):
d = self.daily.classify(snap, score)
# 周线:用每周五的快照更新
w = self.weekly.classify(snap, score) if snap.date.endswith("5") else None
return d, w
def resonance(self, d: Stage, w: Stage) -> str:
rank = {Stage.ICE:0, Stage.RECOVER:1, Stage.UP:2, Stage.PEAK:3, Stage.DOWN:1}
if w is None:
return "日线主导"
if rank[d] >= rank[w]:
return "共振向上" if rank[d] >= 2 else "共振向下"
return "日线弱于周线(反弹)"
应用:你每天看日线算法,每周五看周线算法。两者共振向上时,是你一年中最该重仓的窗口;双向下时,是你最该空仓的时段。
模块二十二:情绪与指数的量化关系(实证视角)
前文反复说"情绪≠指数"。这一模块用数据说明两者关系,并给你一个"背离预警"工具。
22.1 相关性实测逻辑
构造两个序列:
- 指数日收益(上证/创业板)
- 情绪日分(本文算法输出)
计算滚动 20 日相关系数。实证上,A 股这两者的相关系数常年在 0.3~0.7 波动,且在极端行情下偏离最大:
- 权重护盘日:指数涨、情绪跌 → 相关系数骤降(背离)
- 全面牛市:指数涨、情绪涨 → 相关系数接近 1
22.2 背离预警指标
def divergence_alert(index_ret: float, sentiment_score: float):
"""指数与情绪背离预警"""
if index_ret > 0.01 and sentiment_score < -20:
return "⚠️ 指数红但情绪冰:权重护盘,小票危险,勿追"
if index_ret < -0.01 and sentiment_score > 20:
return "⚠️ 指数绿但情绪暖:小票活跃,可关注题材"
return "✅ 指数与情绪同向,信号一致"
应用:每天把指数涨跌和情绪分输入,一旦出现"指数红情绪冰",立刻警觉——你持小票的话,今天很可能是被护盘掩盖的弱势,别被红盘骗了加仓。
22.3 为什么背离在 A 股特别常见
因为 A 股有"窗口指导式护盘"传统:关键时点(会议、指数整数关)拉银行/石油/运营商维持红盘。这造成指数失真,情绪却诚实。所以游资看黄白线、看情绪指标,不盯上证。
模块二十三:更多实盘案例推演
模块十讲了 3 个场景,这里再补 3 个,覆盖你最可能遇到的情形。
23.1 场景 D:上升期中途的"大分歧日"
某日:指数震荡,涨停数仍多,但高位龙头盘中剧震(从 +8% 砸到 -3% 又拉回 +5%),炸板率从 22% 升到 38%。
算法:情绪分仍在 +40(上升区),但斜率转平,高位股 feedback=diverge。
判断:上升期中的分歧日,不是退潮。游资视角:分歧是换手,只要尾盘回封、次日反包,就是"分歧转一致",反而加强。动作:持有核心,不恐慌割;不新开杂毛。
对你的价值:学会区分"分歧"(健康换手)和"退潮"(真核按钮)。前者拿,后者跑。
23.2 场景 E:新题材首日爆发(冰点后)
某日:市场还在冰点边缘,突然一个全新题材(比如某政策催化)批量涨停 20+ 只,出现 2-3 只首板龙头。
算法:情绪分可能仍在 -30(冰点区),但当日出现"积极边际信号"(新题材首板、炸板率略降)。
判断:冰点修复的早期信号。动作:小仓(≤15%)试错新题材首板龙一,不追后排。如果次日该题材继续晋级、情绪分拐头向上 → 确认修复,加仓。如果一日游 → 止损走人,回到冰点空仓。
对你的价值:冰点后的"第一只蝴蝶"最值得博弈,但必须小仓——因为可能飞不起来。
23.3 场景 F:自己持仓遇到退潮
你持有某科技票,成本附近。今日算法输出"退潮",且该票是高位的(属于被核按钮的阵营)。
算法+规则:退潮期,高位股优先砍。动作:次日开盘清掉,不犹豫。哪怕"觉得还能涨"——退潮期的高位票,多拿一天可能多亏 10%。
对你的价值:规则替你做"不想做"的决定。亏损时人想扛,规则说跑,听规则的。
23.4 三场景速记
| 场景 | 算法信号 | 你的动作 |
|---|---|---|
| 分歧日 | 上升+斜率平+高位diverge | 持有核心,不割 |
| 新题材首日 | 冰点+积极信号 | 小仓试错龙一 |
| 持仓遇退潮 | 退潮+高位 | 开盘清,不扛 |
模块二十四:板块内部轮动 —— 龙头 / 中军 / 补涨的情绪梯度
前文讲了"阶段→板块"的宏观映射。这一模块下沉一层:同一个板块内部,不同位置的票,也随情绪梯度轮动。理解这个,你在上升期才知道"买哪只"。
24.1 板块内的三层结构
一个题材板块,内部按"风险偏好梯度"分三层:
| 层 | 名称 | 特征 | 情绪敏感度 |
|---|---|---|---|
| 第一层 | 龙头(龙一/龙二) | 最早启动、辨识度最高、资金信仰最强 | 最高,情绪好时最猛 |
| 第二层 | 中军 | 大市值、机构重仓、趋势稳 | 中,进可攻退可守 |
| 第三层 | 补涨(后排/首板) | 逻辑稍弱、跟涨、低位 | 低,最后动、最先死 |
24.2 轮动的情绪顺序
情绪从冰点修复到高潮,板块内部按这个顺序点火:
- 冰点→修复:只有绝对龙一有人做(博弈反弹),中军/补涨不动
- 上升早期:龙一连板,中军开始趋势上行(机构进场)
- 上升中期:补涨全面启动(踏空资金外溢到低位)
- 高潮:三层全部暴涨,连最弱的杂毛都涨停(一致性极致)
- 退潮:倒序崩——补涨先死,中军跟跌,龙一最后扛(或核按钮)
24.3 你的操作映射
| 阶段 | 买哪层 | 逻辑 |
|---|---|---|
| 修复 | 只龙一 | 只有核心有资金做 |
| 上升 | 龙一 + 中军 | 扩散到中军,安全且弹性够 |
| 高潮 | 卖,不买 | 三层都涨=该卖了 |
| 退潮 | 空仓 | 补涨先死,别碰任何层 |
关键原则:补涨启动,往往是行情"最后的狂欢"信号。当你看到"之前没动的杂毛都涨停了",不是机会,是警报——说明踏空资金已经没地方去,只能挖后排,行情临近高潮/退潮。
24.4 用算法扩展"板块内选择"
给每只自选股加一个 tier 标签(1=龙头, 2=中军, 3=补涨),算法输出阶段后,自动过滤出该阶段该买的那层:
def pick_tier(stage: Stage):
return {Stage.ICE: [], Stage.RECOVER: [1],
Stage.UP: [1, 2], Stage.PEAK: [], Stage.DOWN: []}[stage]
# 你20只自选股,标好tier后:
# 上升期 -> 算法只列出 tier=1 和 tier=2 的票
# 这就解决了"大涨时不知道买啥"——系统已经按层筛好了
模块二十五:你的 100 万模拟盘 30-60-90 天训练计划
你有一个 100 万模拟账户、20 只自选股(科技电子 8、电力能源 4、其他 8)。这是绝佳的训练场——亏了不心疼,但纪律练出来了。本模块给你一份可执行的训练计划。
25.1 第 1-30 天:建立"情绪日报"习惯
目标:让算法成为每日刚需,不追求盈利。
- 每天 15:30 跑模块十三的脚本,出情绪日报
- 按阶段→仓位→板块,在模拟盘执行(哪怕只是挂单不成交)
- 记录:每天阶段判断对不对?有没有违反规则?
- 周末复盘:30 天里,上升期出手胜率 vs 退潮期出手胜率
验收标准:能连续 30 天不间断出日报,且盘中"临时起意"的交易 < 3 笔。
25.2 第 31-60 天:严格按阶段仓位操作
目标:把仓位和阶段绑定,克服"该重仓时轻、该空仓时满"。
冰点/退潮:模拟盘仓位 = 0(训练"空仓肌肉")
修复:≤15%
上升:按 12.1 公式,但上限 60%(训练期保守)
高潮:持仓清零,只卖不买
每笔交易后写一句话:“符合规则 / 违反规则 + 原因”
第 60 天统计:违反规则的交易,平均盈亏 vs 符合规则的
验收标准:违反规则的交易占比 < 20%,且违反交易的亏损明显大于符合交易。
25.3 第 61-90 天:板块内轮动 + 多周期共振
目标:叠加模块二十四(板块内分层)和模块二十一(周线共振)。
给 20 只自选股标
tier和beta日线+周线双算法,只在"共振向上"时重仓
上升期只买 tier=1/2,不碰补涨
退潮期切换到电力能源(防御组)或空仓
第 90 天出一份"训练总结":胜率、盈亏比、最大回撤、规则遵守率
如果规则遵守率 > 80% 且模拟收益为正 → 可以小资金实盘试水
验收标准:能稳定"按系统操作"3 个月,不因单笔盈亏破坏节奏。
25.4 为什么从模拟开始
实盘时,钱的真实损益会激活你的皮质醇系统(模块十六),理性瞬间掉线。模拟盘隔离了这种生理冲击,让你纯粹练习"系统执行"。等系统在模拟盘跑顺了,实盘时你的"情绪脑"干扰会小很多——因为动作已经自动化。
一句话:模拟盘练的是"纪律",不是"预测"。 预测永远不准,纪律永远值钱。
模块二十六:情绪框架的边界 —— 什么时候不该用情绪交易
本文框架是"短线情绪择时",它有明确的适用边界。超出边界硬用,反而会害你。
26.1 不适用于:长线价值投资
如果你买的是"低估蓝筹 + 长期持有"(比如高股息银行、公用事业),你赚的是企业盈利和分红,不是短线情绪溢价。这时天天看情绪周期,反而会因为"退潮空仓"错过长期慢牛。
区分:
- 短线博弈(打板、接力、题材)→ 用情绪框架
- 长线价投(低估值、高分红、护城河)→ 用基本面框架,忽略日内情绪
你的 20 只自选股里,电力能源(防御组)偏长线,科技电子偏短线。两组用不同框架:科技电子看情绪周期,电力能源看股息率和估值。
26.2 不适用于:指数/ETF 定投
如果你定投沪深 300 ETF,目标是"长期平滑成本",那情绪周期对你意义不大——定投本身就是"无视情绪"的策略。强行择时会让你"退潮时停止定投",反而抬高长期成本。
结论:定投归定投,短线归短线。两套账户、两套逻辑,别混。
26.3 不适用于:事件驱动套利
突发并购、重组、中标等事件,收益来自"事件本身"而非"情绪周期"。这类机会,情绪框架判断不出(算法只看盘面情绪,看不到未公开事件)。
结论:事件套利靠信息优势,不靠情绪框架。但事件兑现后,可以用情绪框架决定"利好出来后买不买"(退潮期利好即跌,模块五误区三)。
26.4 框架的正确边界总结
| 场景 | 用情绪框架? | 替代框架 |
|---|---|---|
| 短线题材博弈 | ✅ 核心适用 | — |
| 打板/接力 | ✅ 核心适用 | — |
| 长线价投 | ❌ | 基本面/股息 |
| ETF 定投 | ❌ | 定投纪律 |
| 事件套利 | ⚠️ 仅用于兑现后 | 信息优势 |
| 仓位管理 | ✅ 辅助 | — |
一句话:情绪框架是"短线博弈的导航仪",不是"投资的万能钥匙"。用对场景,它是神器;用错场景,它是枷锁。
模块二十七:把整套系统装进你的 A 股跟踪系统
你之前在 Windows + Python 上跑过"首板跟踪系统",用 akshare + 东财 API,每日 15:30 推送企微。本文的算法,可以直接嵌进那个系统,让它在每日推送里加一段"情绪日报"。
27.1 集成思路
27.2 推送文案示例(增强版)
这样你每天在企微收到的,不只是"哪些首板",还有"现在该不该出手、出多少、买哪类"。首板系统管"选股",情绪模块管"择时"——两者结合,才是完整的交易系统。
27.3 数据自动化的最后一公里
你已有东财 API 接入经验。六指标里,涨停数/连板/炸板率/隔日溢价都能从东财或 akshare 拉;只有"高位股反馈"需人工(每天答一个问题)。这最后一公里,可以用一个简单的"核心龙头监控"替代:你预设 3-5 只全市场核心龙头,系统每日检查它们的涨跌停状态,自动判断 stable/diverge/crash。
至此,你的情绪终端完全自动化,每天 15:30 自动推送,你只需"看报告、按规则执行"。
模块二十八:数据陷阱与统计口径 —— 你算的情绪分为什么是错的
算法再好,输入脏数据就全废。这一模块讲六个指标最常见的"统计口径坑",你避开了,情绪分才可靠。
28.1 涨停数的口径陷阱
不同数据源对"涨停"的定义不同:
- 含不含 ST:ST 股涨跌幅限制 5%,很多数据源把 ST 涨停也算进去。但 ST 是垃圾股,计入会污染情绪信号。
- 含不含新股:上市首日/前几日无涨跌幅限制的新股,涨停数里常混入。新股涨停不代表情绪,应剔除。
- 含不含北交所:北交所涨跌幅 30%,计算方式不同,混入会扭曲。
正确做法:只统计主板/创业板/科创板的 10% 涨停(剔除 ST、新股、北交所)。本文算法默认此口径。
28.2 炸板率的分母陷阱
炸板率 = 炸板数 / (封板数 + 炸板数)。坑在:
- 有些数据源把"摸板未封"(盘中到过涨停但没封过)也算炸板,虚高炸板率
- 正确定义:炸板 = 曾经封板但后来开板。没封过的"冲高回落"不算
28.3 连板高度的"假高度"
一只票"8 连板",但其中几天是一字板(开盘即涨停,没交易)。一字板不反映真实接力意愿(没人能买到,也没有充分换手)。
正确做法:关注"换手连板高度"而非"总连板高度"。纯一字板的票,情绪含金量低。
28.4 隔日溢价的幸存者偏差
计算"昨日涨停今日平均溢价"时,如果只统计"昨日涨停且今日还在上市的",会漏掉昨日涨停今日停牌/退市的极端案例。小样本下,一两只极端值就能扭曲均值。
正确做法:样本量 < 20 时,用中位数代替平均数,抗极端值。
28.5 跌停数的"隐形跌停"
A 股跌停是 -10%(主板),但有些票跌 -9.5% 没到跌停价,杀伤力一样。只数"跌停"会低估亏钱效应。
正确做法:用"跌幅 > 9% 家数"替代纯跌停数,更全面反映恐慌。
28.6 黄白线的"指数选择"陷阱
黄白线看上证指数时,白线是上证综指(市值加权);看创业板时,白线是创业板指。不同指数的黄白线含义不同。
正确做法:短线情绪主要看上证黄白线(覆盖全市场最广),辅助看创业板黄白线(科技情绪)。
28.7 一句话
垃圾进,垃圾出。情绪算法的可靠性,80% 取决于你的数据清洗。花在口径统一上的每一分钟,都值。
模块二十九:权重敏感性分析 —— 你的参数该怎么调
本文给了一套默认权重和阈值。但每个人的交易风格不同,参数应该微调。这一模块教你科学地调参,而不是瞎试。
29.1 权重调参的逻辑
默认权重:
调参原则:你越依赖哪个指标做决策,它的权重越高。
- 如果你主要做高位接力(打板龙头)→ 提高
high权重到 0.40,降低board - 如果你主要做首板/低位 → 提高
fail和premium权重 - 如果你特别怕系统性风险 → 提高
limitdown权重
29.2 阈值调参的逻辑
评分函数里几个关键阈值:
score_board: 2板=0分基准,每板+15 → 如果你认为"4板才算情绪回暖",改基准为n<=4 时走低score_fail: 0.3 为 0 分点 → 如果你所在市场环境更脆弱,把 0 分点降到 0.25- 阶段划分的 score 阈值(-40/10/55)→ 根据你对"冰点/上升/高潮"的主观定义微调
29.3 不要用历史数据"过度拟合"
调参最大的坑:拿过去 N 天数据,反复调参让算法"完美预测",结果对过去神准、对未来失效。
正确做法:
- 先用通用默认参数(本文给的),跑 1 个月实盘/模拟
- 记录算法的"误判"(比如明明上升它判成修复)
- 只针对系统性误判微调(比如你发现高位股反馈总被低估,才提
high权重) - 微调后,用新的 1 个月数据验证,不回看旧数据
29.4 参数稳定性检验
调参后,做一个简单检验:
def stability_test(snaps, w_variant):
"""用不同权重跑同一批数据,看阶段分类是否剧烈变化"""
results = []
for w in w_variant:
analyzer.W = w
stages = [classifier.classify(s, analyzer.score(s)) for s in snaps]
results.append(stages)
# 如果不同权重下阶段分类差异巨大 -> 你的判断太依赖参数,不可靠
# 如果差异小 -> 参数稳健,结论可信
结论:好的情绪系统,应该"换个权重结论也不变"。如果你的阶段判断对参数极度敏感,说明数据本身信号模糊(可能处于周期交界),这时该空仓观望,而不是调参硬判。
模块三十:术语表(贴墙速查)
| 术语 | 含义 |
|---|---|
| 情绪 | 全市场短线资金当下愿承担风险的程度 |
| 风险偏好 | 同上,愿意追高/接力的意愿 |
| 连板 | 连续 N 个交易日涨停 |
| 连板高度 | 当日市场最高连板数 |
| 炸板 | 封住涨停后开板 |
| 炸板率 | 炸板数 / (封板数+炸板数) |
| 核按钮 | 隔夜挂跌停价卖出,开盘一字跌停 |
| 隔日溢价 | 昨日涨停股今日平均开盘表现 |
| 容错率 | 买错后亏损大小,上升期高、退潮期低 |
| 赚钱效应 | 买入后赚钱的难易度 |
| 扩散度 | 上涨是只涨龙头还是全面涨 |
| 冰点 | 情绪极致绝望 |
| 修复 | 冰点后第一次反弹尝试 |
| 上升 | 风险偏好回升,最适合出手 |
| 高潮 | 一致性极致,该卖不买 |
| 退潮 | 风险偏好回落,管住手 |
| 黄白线 | 白线=权重指数,黄线=等权感受 |
| 龙一/龙二 | 板块内辨识度最高的前两只 |
| 中军 | 板块内大市值趋势核心 |
| 补涨 | 板块内低位跟涨标的 |
| 分歧 | 盘中剧震但承接住,健康换手 |
| 一致 | 资金共识,封板坚决;过度一致=危险 |
| 换手连板 | 充分换手的连板,比一字板含金量高 |
| 情绪分 | 本文算法输出的 -100~+100 综合分 |
| 仓位上限 | 当前阶段允许的最大仓位比例 |
模块三十一:情绪交易 FAQ(你一定会问的问题)
收集了短线交易者最常问的关于情绪的问题,逐条作答。
Q1:算法说"上升期",但我看好的票不涨,怎么办? A:上升期是"环境好",不代表"你选的票涨"。检查:你买的是不是核心(tier 1/2)?是不是当前主线板块?如果买的是后排杂毛,上升期也亏。换核心,或认错止损。
Q2:冰点空仓,结果第二天暴涨,踏空了怎么办? A:冰点后第一天暴涨,大概率是"持续冰点"里的死猫跳,不是真修复。真修复需要连续 2-3 天正反馈确认。你空仓避开了"假反弹套人",长期看是对的。错过一次暴涨,远好于逆情绪抄底被埋。
Q3:高潮期我持有的票还在涨,要不要等更高? A:机械止盈。高潮期"还能涨"是贪婪在说话。设定规则:高潮期每涨 10% 减 1/3,不等顶。顶是走出来的,不是猜出来的。你少赚的最后一段,是规避"高潮变退潮一日腰斩"的保险费。
Q4:退潮期看到某票"形态完美有利好",能例外一次吗? A:不能。模块五误区三讲透了:退潮期个股利好 = 出货理由。你看到的"完美形态",在退潮环境下没人接力,封板即炸。一次例外,可能亏掉前面十次对的积累。规则就是用来"不例外"的。
Q5:算法在冰点和高潮都输出"空仓",那我永远不买? A:不会。冰点→修复→上升,算法会在修复期让你小仓、上升期让你重仓。空仓只占周期的一部分(冰点+退潮+高潮止盈期)。一年 250 个交易日,真正重仓的也许 30-50 天,其余时间空仓或轻仓。这恰恰是盈利的关键——少做,做对。
Q6:我上班没时间看盘,情绪框架适合我吗? A:更适合。你是日线级情绪交易者,不需要盯分时。每天 15:30 看一眼算法日报,决定次日计划即可。反而日内交易者容易被分时情绪带偏,日线框架更稳。
Q7:六指标里哪个最重要? A:高位股反馈(high_status)。它是情绪的"风向标"——高位龙头稳,全市场才敢做;高位龙头崩,全市场跟着砍。算法里它的权重也最高(0.30)。其次炸板率和连板高度。
Q8:情绪框架能用在美股/港股吗? A:核心逻辑通用(风险偏好周期),但细节不同。美股散户占比低、机构主导,情绪周期更平缓;港股受外围和南向资金影响大。A 股的"连板/打板/核按钮"文化是特有的,六指标需按市场调整。不建议直接套用。
Q9:我总是"上升期不敢买、退潮期不想卖",怎么破? A:这是人性,不是你的问题。破法:把决策权交给系统。算法说上升→你只需"执行买入计划",不靠勇气;算法说退潮→你只需"执行清仓计划",不靠毅力。系统替你做你做不了的决定。
Q10:这套东西学多久能上手? A:理解框架 1 天,建立日报习惯 1 周,模拟盘练出纪律 1-3 个月,实盘稳定执行 6-12 个月。前 90 天用模拟盘(你正好有 100 万),别急着实盘。
模块三十五:全文模块索引(导航)
为方便你按需查阅,以下是本文 35 个模块的导览。建议首次通读,之后按需跳转。
基础定义
- 模块零:核心定义 —— 市场情绪到底是什么
- 模块一:情绪的本质 —— 从感觉到可量化变量
周期框架
- 模块二:四大情绪周期深度拆解(上升/高潮/退潮/冰点)
- 模块三:完整循环的动态模型(冰点→修复→上升→高潮→退潮)
- 模块十九:四大周期的 A 股真实历史映射(2024-2026 案例)
观测指标
- 模块四:六大观测指标详解(连板/炸板/高位/溢价/扩散/跌停)
- 模块二十八:数据陷阱与统计口径
认知纠偏
- 模块五:散户三大误区破析
- 模块十七:常见进阶误区补充
- 模块二十:行为金融学基础(为什么框架有效)
- 模块二十六:框架的边界(什么时候不该用)
算法交付
- 模块七:情绪识别算法(SentimentAnalyzer + CycleClassifier)
- 模块八:板块介入信号算法
- 模块十二:仓位的数学(情绪分→仓位)
- 模块二十九:权重敏感性分析(怎么调参)
- 模块三十二:历史回测验证方法论
数据获取
- 模块十三:实时数据获取(AkShare 自动采集六指标)
板块轮动
- 模块六:情绪周期 × 板块轮动矩阵
- 模块二十四:板块内部轮动(龙头/中军/补涨)
- 模块三十四:情绪信号与其他指标共振(北向/两融/ETF)
进阶框架
- 模块十四:事件驱动与季节性
- 模块十五:从游资到机构(情绪因子量化)
- 模块二十一:多周期共振(日线+周线)
- 模块二十二:情绪与指数的量化关系(背离预警)
实战应用
- 模块九:实盘操作流程(日级 SOP)
- 模块十 + 模块二十三:案例推演
- 模块十六:情绪纪律训练
- 模块二十五:你的 100 万模拟盘训练计划
- 模块二十七:集成进你的 A 股跟踪系统
- 模块三十三:情绪曲线可视化
速查
- 模块十一:边界与风险
- 模块十八:情绪操作手册(贴墙版)
- 模块三十:术语表
- 模块三十一:FAQ
结语:情绪是你唯一能控制的变量
回到文章开头的定义:市场情绪 = 全市场短线资金,当下愿意承担风险的程度。
写到这里,我们已经走了很远:从重新定义情绪,到拆解四大周期;从六大观测指标,到一套可运行的识别算法;从仓位数学,到实时数据获取;从 A 股真实案例,到行为金融学的底层解释;从多周期共振,到你的 100 万模拟盘训练计划。
但所有这些,归根结底只回答一个问题:现在,该不该在场上?
你控制不了指数,控制不了主力,控制不了政策,控制不了美联储。你能控制的,只有三件事:
第一,认不认得出当前情绪阶段。 靠六指标,靠算法,不靠"今天心情怎么样"。
第二,阶段和操作匹不匹配。 冰点空仓、上升重仓、高潮止盈、退潮管手——不是建议,是铁律。
第三,管不管得住手。 算法再准,手忍不住买,等于没有算法。把决策从"盘中情绪"移到"盘前计划",让系统替你按下暂停键。
这三者做到,你就在 A 股这个"池子只进不出、对手是算法"的市场里,拿到了最稀缺的东西——节奏感。
节奏感不是天赋,是系统。系统不是圣杯,是纪律。纪律不是意志,是习惯。
所以,如果你今天只记住一句话,记住这句改写自游资口诀的话:
上升大胆做,高潮不追高; 退潮管住手,冰点不急抄; 龙头是风向,算法是锚; 逆情绪操作,大亏之根源。
最后,回到你最初的那段话——“市场情绪不是感觉,是资金集体的风险偏好”。你说得对。而本文做的工作,就是把它从一句感悟,变成了一套你能每天执行的操作系统。
愿你的清净心,在波动的市场里,自有节奏。愿你在每一次想"冲"的时候,先打开算法看一眼阶段;在每一次想"扛"的时候,先看看高位股有没有核按钮。
市场永远在轮回,冰点之后必有上升,高潮之后必有退潮。你要做的,不是预测轮回,而是在对的时间,站在对的一边。
这,就是情绪交易全部的秘密。
模块三十二:历史回测验证方法论 —— 用数据证明系统有效
框架再漂亮,也要经得起历史检验。你是开发者,有 akshare 接入能力,完全能把本文算法跑一遍历史回测,看"按情绪操作"到底比"满仓持有"强多少。本模块给你方法论。
32.1 回测的基本设定
- 标的:沪深 300 ETF(510300)或中证 2000 ETF(563300,更贴短线情绪)
- 周期:2024-01 至 2026-08(覆盖冰点、上升、高潮、退潮完整轮回)
- 策略:情绪分 > 55(上升/高潮)时持有,< 10(冰点/退潮)时空仓,中间持有 50%
- 对比基准:满仓持有 ETF 不动
- 成本:单边万分之 2.5(佣金)+ 印花税(卖出千 0.5),按实际计
32.2 回测流程代码框架
import akshare as ak
import pandas as pd
def backtest_sentiment(start, end):
# 1. 拉取每日市场数据(用模块十三的函数)
records = []
for date in pd.date_range(start, end, freq="B"):
d = date.strftime("%Y%m%d")
try:
lu, ld, mb = get_limit_stats(d)
fr = get_fail_rate(d)
prem = get_next_day_premium(d)
# 高位股反馈需历史数据推断,简化为:mb变动 + 跌停数
hs = "crash" if ld > 30 else ("diverge" if mb < prev_mb else "stable")
prev_mb = mb
snap = MarketSnapshot(d, lu, ld, mb, fr, prem, hs, "narrow")
sc = analyzer.score(snap)
st = classifier.classify(snap, sc)
# 仓位:按模块十二
pos = position_limit(st, sc)
records.append({"date": d, "score": sc, "stage": st.value, "pos": pos})
except Exception as e:
continue
return pd.DataFrame(records)
# 2. 用仓位序列计算收益
def calc_return(df, etf_code="510300"):
etf = ak.fund_etf_hist_em(symbol=etf_code, period="daily")
etf["date"] = etf["日期"]
merged = df.merge(etf[["date", "涨跌幅"]], on="date", how="left")
merged["日收益"] = merged["涨跌幅"] / 100 * merged["pos"].shift(1).fillna(0)
return (1 + merged["日收益"].fillna(0)).cumprod().iloc[-1]
df = backtest_sentiment("20240101", "20260808")
final = calc_return(df)
print(f"情绪择时策略终值: {final:.2f}x")
32.3 你应该关注的指标(不只看收益)
| 指标 | 含义 | 好的系统 |
|---|---|---|
| 总收益 | 区间累计 | 高于基准 |
| 最大回撤 | 最惨那段亏多少 | 远小于基准 |
| 胜率 | 持仓日盈利占比 | >50% 即可 |
| 持仓天数占比 | 空仓时间 | 30-50%(不恋战) |
| 夏普比率 | 收益/波动 | 高于基准 |
重点:情绪系统的价值往往不在"赚更多",而在"回撤更小"。满仓持有经历过 2024.2 微盘股危机,回撤可能 -30%;情绪系统那时空仓,回撤接近 0。长期复利下,低回撤的系统反而终值更高。
32.4 回测的常见谎言
- 未来函数:用"今天才知道的高位股反馈"去判断"昨天的阶段"→ 数据泄露,回测虚高。必须严格用 T-1 及之前的数据判断 T 日。
- 过度拟合:调参让历史完美 → 前文模块二十九讲过,用新数据验证。
- 幸存者偏差:只回测没退市的票 → 用指数 ETF 避免个股退市问题。
- 忽略成本:不算佣金印花税 → 短线高频策略成本吞噬利润,必须计。
32.5 回测结论的预期
基于行为金融学和大量实证研究,预期结论:
- 情绪择时策略的年化收益与满仓持有相近或略低
- 但最大回撤显著更低(可能只有基准的 1/3)
- 夏普比率显著更高(同样收益,波动更小)
- 在 2024.2、2024.10.8 这类极端日,规避了毁灭性回撤
这恰好说明:情绪系统的核心价值是活下来 + 平滑波动,不是"暴富"。对散户而言,低回撤比高收益重要——因为高回撤会触发你的皮质醇反应,让你在底部割肉。
32.6 从回测到实盘的最后一步
回测通过 → 模拟盘 90 天(模块二十五)→ 小资金实盘 → 逐步加仓。
每一步都是"用更小代价验证系统",不跳步。跳步直接实盘,等于用真金白银交学费。
模块三十三:情绪曲线可视化 —— 把抽象分数画成图
数字再清楚,也不如一张图直观。本模块教你用 matplotlib 把情绪分画成曲线,按阶段着色,一眼看出周期位置。
33.1 绘图代码
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
def plot_sentiment(df: pd.DataFrame):
"""df 需含 date(str), score(float), stage(str)"""
df["dt"] = pd.to_datetime(df["date"])
fig, ax = plt.subplots(figsize=(14, 5))
# 阶段底色
stage_color = {
"冰点": "#d62728", "修复": "#ff7f0e", "上升": "#2ca02c",
"高潮": "#1f77b4", "退潮": "#9467bd",
}
# 按阶段给点染色
for stage, c in stage_color.items():
mask = df["stage"] == stage
ax.scatter(df.loc[mask, "dt"], df.loc[mask, "score"],
color=c, label=stage, s=20, zorder=3)
# 情绪分连线
ax.plot(df["dt"], df["score"], color="gray", lw=0.8, alpha=0.6, zorder=2)
# 阈值参考线
for y, label in [(-40, "冰点线"), (10, "弱势线"), (55, "强势线")]:
ax.axhline(y, color="gray", ls="--", lw=0.6, alpha=0.5)
ax.text(df["dt"].iloc[0], y + 1, label, fontsize=8, color="gray")
# 0 轴
ax.axhline(0, color="black", lw=0.8)
ax.set_title("市场情绪周期曲线")
ax.set_ylabel("情绪分 [-100, +100]")
ax.legend(loc="upper left", ncol=5, fontsize=8)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m-%d"))
ax.grid(alpha=0.2)
plt.tight_layout()
plt.savefig("sentiment_curve.png", dpi=120)
plt.show()
# 用模块七的 snaps 演示
demo = pd.DataFrame([
{"date": f"2026-08-{i:02d}", "score": sc, "stage": st.value}
for i, (sc, st) in enumerate(zip(
[-78, -68, -42, -9, 28, 62, 78, 55],
[Stage.ICE, Stage.ICE, Stage.ICE, Stage.RECOVER, Stage.UP, Stage.PEAK, Stage.PEAK, Stage.DOWN]
), 1)
])
plot_sentiment(demo)
33.2 这张图告诉你什么
- 曲线的形状 = 情绪周期。V 形底 = 冰点→修复→上升;倒 V = 高潮→退潮
- 点的颜色 = 当前阶段。一眼看出"现在红多还是绿多"
- 参考线 = 决策边界。分数穿过 -40 线 = 进入冰点区;穿过 55 线 = 进入高潮区
每天更新一个点,一个月后你就有了一条属于自己的情绪 K 线。看着它,你不会再被单日涨跌绑架——因为你看到的是趋势,不是噪声。
33.3 进阶:叠加指数曲线
把情绪分曲线和上证指数曲线画在同一图(双 Y 轴),你能直观看到"情绪≠指数"的背离:
def plot_sentiment_vs_index(df, index_df):
fig, ax1 = plt.subplots(figsize=(14, 5))
ax1.plot(df["dt"], df["score"], color="purple", label="情绪分")
ax1.set_ylabel("情绪分")
ax2 = ax1.twinx()
ax2.plot(index_df["dt"], index_df["close"], color="blue", alpha=0.5, label="上证指数")
ax2.set_ylabel("上证指数")
plt.title("情绪分 vs 上证指数(看背离)")
plt.show()
当出现"指数涨、情绪分跌"的持续背离,就是你前文学的"权重护盘、小票杀跌"的可视化证据。
33.4 把图加进每日推送
你已有企微推送。把 sentiment_curve.png 作为图片消息一起推,每天开盘前看一眼图,比看数字快十倍。视觉化的力量,在于它绕过了你的"文字解读偏差"——图不会骗你,也不会给你找借口。
模块三十四:情绪信号与其他指标的共振验证
情绪框架是"短线风险偏好"的角度。如果叠加其他维度的资金信号,能交叉验证,减少误判。本模块讲三个最实用的共振指标。
34.1 北向资金(陆股通)
含义:外资通过沪深股通净流入 A 股的日度数据,反映"聪明钱"的风险偏好。
与情绪的关系:
- 北向连续净流入 + 情绪上升 → 共振向上,强信号
- 北向净流出 + 情绪上升 → 外资不认同,警惕(可能内资自嗨)
- 北向净流入 + 情绪冰点 → 外资在悄悄抄底,冰点可能临近修复
用法:把北向净流入作为"情绪分的外部确认"。两者同向,置信度高;背离,减仓观望。
def north_bound_confirm(sentiment_score: float, north_net: float):
if sentiment_score > 40 and north_net > 0:
return "共振向上,加仓置信高"
if sentiment_score > 40 and north_net < -5e8: # 净流出超5亿
return "内资自嗨,外资撤退,减仓"
if sentiment_score < -30 and north_net > 0:
return "外资抄底,冰点临近修复"
return "中性"
34.2 两融余额(融资融券)
含义:融资余额 = 散户/游资借钱炒股的总量。它的边际变化比绝对值更有用。
与情绪的关系:
- 融资余额快速攀升 + 情绪上升 → 杠杆资金进场,行情有燃料,但也要防过热
- 融资余额骤降 + 情绪退潮 → 杠杆踩踏,退潮加速,空仓更坚决
- 融资余额历史高位 + 情绪高潮 → 危险信号(杠杆牛末端)
用法:融资余额的周度变化率作为情绪的次级确认。骤降是退潮的"放大器"。
34.3 ETF 净流入(尤其宽基/行业 ETF)
含义:ETF 净申购 = 资金借道 ETF 进场。宽基 ETF(沪深 300、中证 500)净流入,说明机构/长线资金在配。
与情绪的关系:
- 宽基 ETF 持续净流入 + 情绪上升 → 机构认同,行情有持续性
- 行业 ETF(如半导体、机器人)暴增净流入 → 该板块情绪过热,注意高潮
- ETF 净流出 + 情绪退潮 → 资金撤离,空仓
用法:把"行业 ETF 净流入榜"当作"当前热点板块"的确认——和你算法输出的"适配板块"对照,一致则加仓,不一致则谨慎。
34.4 三重共振决策表
| 情绪分 | 北向 | 两融周变 | 综合判断 |
|---|---|---|---|
| 上升 | 净流入 | 升 | 强上升,重仓 |
| 上升 | 净流出 | 升 | 内资自嗨,减仓 |
| 退潮 | 净流出 | 降 | 强退潮,空仓 |
| 冰点 | 净流入 | 降 | 外资抄底,备战修复 |
| 高潮 | 净流入放缓 | 升转平 | 杠杆末端,止盈 |
核心思想:单一指标会骗你,三重共振难骗你。情绪框架是主轴,北向/两融/ETF 是三盏辅助灯。四灯同绿,重仓;四灯分化,观望。
34.5 你的系统集成建议
你已有东财 API 和 akshare 经验,可以把这三个信号也接入每日推送:
这样你的"首板跟踪系统 + 情绪模块 + 资金信号",就构成了一个**选股(首板)+ 择时(情绪)+ 资金验证(北向/两融/ETF)**的完整闭环。在 A 股这种信息不对称的市场,多一个验证维度,就少一分被割的概率。
本文基于游资情绪框架整理与算法化实现,所有代码可直接运行(Python 3.8+,依赖 akshare、matplotlib、pandas)。内容仅供学习研究,不构成任何投资建议。股市有风险,投资需谨慎。
回到开头的定义:市场情绪 = 全市场短线资金,当下愿意承担风险的程度。
你控制不了指数,控制不了主力,控制不了政策。但你能控制:
- 认不认得出当前情绪阶段(靠六指标 + 算法)
- 阶不匹配不匹配合的操作(靠模块三的映射)
- 管不管得住手(靠规则,不靠意志)
这三者做到,你就在 A 股这个"池子只进不出、对手是算法"的市场里,拿到了最稀缺的东西——节奏感。
最后送你一句改写自游资口诀的话:
上升大胆做,高潮不追高; 退潮管住手,冰点不急抄; 龙头是风向,算法是锚; 逆情绪操作,大亏之根源。
愿你的清净心,在波动的市场里,自有节奏。
本文基于游资情绪框架整理与算法化实现,所有代码可直接运行(Python 3.8+)。内容仅供学习研究,不构成任何投资建议。股市有风险,投资需谨慎。