第 6 章 · 04 涨停洗盘:强势股回踩的确认信号 本节摘要:本节精读 Sequoia-X 的「事件形态类」策略——涨停洗盘。这是 A 股独有的形态:主力昨日拉涨停(封板吸筹)后,今日故意砸盘放量收阴(洗出浮筹),但收盘不破昨日收盘价(守住支撑)。这种「涨停+放量阴线不破支撑」的组合,是主力洗盘完毕的标志——意味着短期获利盘被洗出,主力即将拉升。本节会讲清涨停洗盘的市场逻辑、四个条件(昨日涨停 + 今日收阴 + 今日放量 + 支撑不破)的工程含义、与「下降中继」的关键区别,最后用一段可运行的代码让你亲手验证。 内容来源:原项目涨停洗盘策略模块精读。 ⚠️ 风险提示:涨停洗盘在 A 股实战中是真信号,但单独使用失败率高——下跌趋势中也会出现「昨日涨停、昨日跌停」的「一字断魂刀」伪信号。
本节摘要:本节精读 Sequoia-X 的「事件形态类」策略——涨停洗盘。这是 A 股独有的形态:主力昨日拉涨停(封板吸筹)后,今日故意砸盘放量收阴(洗出浮筹),但收盘不破昨日收盘价(守住支撑)。这种「涨停+放量阴线不破支撑」的组合,是主力洗盘完毕的标志——意味着短期获利盘被洗出,主力即将拉升。本节会讲清涨停洗盘的市场逻辑、四个条件(昨日涨停 + 今日收阴 + 今日放量 + 支撑不破)的工程含义、与「下降中继」的关键区别,最后用一段可运行的代码让你亲手验证。
内容来源:原项目涨停洗盘策略模块精读。
⚠️ 风险提示:涨停洗盘在 A 股实战中是真信号,但单独使用失败率高——下跌趋势中也会出现「昨日涨停、昨日跌停」的「一字断魂刀」伪信号。必须叠加「不破昨收」作为关键支撑确认。
阅读完本节,你应当能够:
涨停洗盘是 A 股主力拉升前常用的操盘手法:
阶段 1:昨日涨停 主力在关键位置拉涨停——封死涨停板,**吸筹 + 锁定筹码** │ ▼ 阶段 2:今日放量阴线(洗盘) 主力**故意砸盘**——放出「**出货**」的假象,**吓出浮筹** 但**收盘价不破昨收**——守住关键支撑 │ ▼ 阶段 3:次日 / 之后拉升 浮筹被洗出 → 抛压减轻 → 主力继续拉升
形态示意:
股价 ↑ │ │ ┌─┐ ← 昨日涨停(封板) │ │ │ │ │ │ │ ──┘ └─── ← 昨收(关键支撑位) │ / \ │ / \ 阴线 ← 今日放量收阴 │ / \ │/ \ └─────────────────────→ 时间 昨日 今日
关键点:今日收盘价不破昨收——这是「洗盘」与「出货」的关键分水岭。
# 条件 1:昨日涨停 limit_up_yesterday = prev1["close"] >= prev2["close"] * 1.095 # 条件 2:今日收阴 bearish_today = today["close"] < today["open"] # 条件 3:今日放量 volume_surge = today["volume"] > prev1["volume"] * 2.0 # 条件 4:支撑不破 support_hold = today["low"] >= prev1["close"] if limit_up_yesterday and bearish_today and volume_surge and support_hold: selected.append(symbol)
limit_up_yesterday = prev1["close"] >= prev2["close"] * 1.095
A 股主板涨停板是 10%,考虑四舍五入误差,用 1.095 而不是 1.10 留出微小容差。
为什么不要求「昨日一字涨停」?
bearish_today = today["close"] < today["open"]
今日必须收阴线(close < open)——这是「洗盘形态」的标志:主力故意砸盘让价格低于开盘。
注意:收阴不一定是跌——今日「开盘 11 元、收盘 10.95 元」虽然 close < open(收阴),但相对昨日「close 10.5 元」仍是涨的——这是「高开低走收阴」,正是洗盘典型形态。
volume_surge = today["volume"] > prev1["volume"] * 2.0
为什么要求今日量 ≥ 昨日 2 倍?
这是一个**「保守阈值」**——宁可漏过一些真信号,也要避免「无量假洗盘」。
support_hold = today["low"] >= prev1["close"]
今日最低价 ≥ 昨日收盘价——这是「洗盘」与「出货」的分水岭。
# 反面教材:只看「阴线 + 放量」不看的支撑 if bearish_today and volume_surge: # ❌ 没有支撑不破 selected.append(symbol) # 会选到「**出货**」的标的
下面这段代码用合成数据演示「涨停洗盘」的四个条件如何过滤:
# shakeout_demo.py # 可运行:涨停洗盘策略验证 import numpy as np import pandas as pd def detect_shakeout(df: pd.DataFrame) -> tuple[bool, list[str]]: """返回 (是否洗盘, 原因列表)""" reasons = [] if len(df) < 3: return False, ["数据不足 3 根"] prev2 = df.iloc[-3] # 前日 prev1 = df.iloc[-2] # 昨日 today = df.iloc[-1] # 今日 limit_up = prev1["close"] >= prev2["close"] * 1.095 bearish = today["close"] < today["open"] surge = today["volume"] > prev1["volume"] * 2.0 support = today["low"] >= prev1["close"] if not limit_up: reasons.append(f"昨日未涨停:{prev1['close']/prev2['close']:.3f}(需 ≥ 1.095)") if not bearish: reasons.append("今日未收阴线") if not surge: reasons.append(f"放量不足:今/昨 = {today['volume']/prev1['volume']:.2f}(需 > 2.0)") if not support: reasons.append(f"支撑已破:今低 {today['low']:.2f} < 昨收 {prev1['close']:.2f}") return limit_up and bearish and surge and support, reasons def make_shakeout_case() -> pd.DataFrame: """造一个标准涨停洗盘。""" # 前日 10.0 → 昨日 11.0(涨停 +10%) # 今日高开 11.2 → 砸到 10.9(最低,仍 ≥ 11.0... 这里需要调整) # 实际涨停洗盘:昨收 11.0,今日 high 11.4 / low 11.05 / close 10.9 # 即 high 11.4 > 11.0 但 low 11.05 ≥ 11.0,且 close 10.9 < open 11.2 → 收阴 return pd.DataFrame({ "open": [10.0, 10.5, 11.2], # 前日、昨、今 "close": [10.5, 11.0, 10.9], # 昨涨停、今收阴 "high": [10.7, 11.1, 11.4], "low": [9.9, 10.4, 11.05], # 今日低 11.05 > 昨收 11.0(守住支撑) "volume": [1e6, 1e6, 2.5e6], # 今日放量 2.5x }) def make_non_shakeout_cases() -> dict[str, pd.DataFrame]: np.random.seed(0) return { "昨日未涨停": pd.DataFrame({ "open": [10.0, 10.5, 11.0], "close": [10.5, 10.8, 10.7], # 昨日只涨 2.86% "high": [10.6, 10.9, 11.0], "low": [9.9, 10.4, 10.6], "volume": [1e6, 1e6, 2.5e6], }), "支撑已破(出货)": pd.DataFrame({ "open": [10.0, 10.5, 11.0], "close": [10.5, 11.0, 10.4], # 昨涨停 "high": [10.6, 11.1, 11.0], "low": [9.9, 10.4, 10.2], # 今日低 10.2 < 昨收 11.0(破支撑) "volume": [1e6, 1e6, 2.5e6], }), "无量阴线": pd.DataFrame({ "open": [10.0, 10.5, 11.0], "close": [10.5, 11.0, 10.9], "high": [10.6, 11.1, 11.0], "low": [9.9, 10.4, 10.9], # 守支撑 "volume": [1e6, 1e6, 1.2e6], # 缩量 }), } if __name__ == "__main__": passed, reasons = detect_shakeout(make_shakeout_case()) print(f"【标准涨停洗盘】 {'✅ 入选' if passed else '❌ 不选'}") for r in reasons: print(f" - {r}") print() for name, df in make_non_shakeout_cases().items(): passed, reasons = detect_shakeout(df) print(f"【{name}】 {'✅ 入选' if passed else '❌ 不选'}") for r in reasons: print(f" - {r}") print()
预期输出:
【标准涨停洗盘】 ✅ 入选 【昨日未涨停】 ❌ 不选 - 昨日未涨停:1.029(需 ≥ 1.095) 【支撑已破(出货)】 ❌ 不选 - 支撑已破:今低 10.20 < 昨收 11.00 【无量阴线】 ❌ 不选 - 放量不足:今/昨 = 1.20(需 > 2.0)
这段代码清晰展示:「支撑不破」是「洗盘」与「出货」的关键分水岭——少了这条就会选到「真出货」的标的。
这是 A 股操盘里最容易混淆的两种形态,对比记忆:
| 维度 | 洗盘 | 出货 |
|---|---|---|
| 主力意图 | 洗出浮筹,为拉升做准备 | 派发筹码,获利了结 |
| 昨收 | 涨停(强主力) | 可能涨停(一日游) |
| 今开 | 高开(吸引跟风盘) | 高开(吸引接盘侠) |
| 今低 | 守昨收(不破支撑) | 破昨收(杀跌出货) |
| 成交量 | 显著放量(2 倍+) | 异常放量(3~5 倍) |
| 后续走势 | 继续上涨 | 继续下跌 |
「支撑不破」是核心分水岭——其他条件相同的情况下,只看这一条就能区分洗盘与出货。
_MIN_BARS = 3Sequoia-X 的涨停洗盘策略要求的最小 K 线数是 3(只要有前日、昨、今三天)。这是七套策略里要求最低的——因为只用了最近三天的形态。
| 策略 | _MIN_BARS |
原因 |
|---|---|---|
| 海龟突破 | 21 | 需要 20 日窗口 |
| 均线金叉 | 20 | 需要 20 日均线 |
| 高窄旗形 | 40 | 需要 40 日窗口 |
| 涨停洗盘 | 3 | 只看 3 天 |
| 上升趋势跌停 | 60 | 需要 60 日均线 |
| RPS | 120 | 需要 120 日窗口 |
_MIN_BARS不是「数据越多越好」,而是「需要的最少数据」——少了算不了,多了无所谓。
| 市况 | 信号表现 |
|---|---|
| 强势股回踩 | 信号最可靠——主力洗盘后拉升 |
| 板块整体回调 | 容易把「正常回调」误判为「洗盘」 |
| 个股黑天鹅 | 「一字断魂刀」——昨涨停今跌停,支撑已破会被策略过滤 |
| 政策市 | 单日突发涨跌停,支撑不破是巧合 |
涨停洗盘 ✅ ← 本节 │ ▼ 下一节(第 05 节)上升趋势跌停:错杀机会的捕捉
_MIN_BARS = 3:只要求 3 根 K 线,是七套策略里要求最低的。配套教学脚本:
images/shakeout_demo.py——可用任意合成数据验证洗盘识别。
下一节,我们看与「涨停洗盘」互为镜像的另一类形态——上升趋势跌停:捕捉趋势中的错杀机会。