一招横盘突破选股法,赚钱不靠运气靠图形,靠概率!

你有没有遇到过这种情况:一只票在那横着躺了半个多月,不涨也不跌,跟冬眠了一样,然后某天突然一个大阳线冲天而起,配合着放量,一口气就突破了之前的震荡区间------你心里一激灵,觉得这是不是要起飞了?🎯
那么问题来了,这种"横盘突破"到底靠不靠谱?什么情况下是"假突破"骗炮,什么情况下是真牛启动前的预兆?有没有可能用量化的方式,把这种图形筛出来、统计清楚、搞明白背后的胜率?
今天,我就带大家从0开始,深扒这个策略------不是讲道理,我直接撸代码,给你展示这类形态的历史统计和可实操性。聪明的你一定会发现:哎,这玩意还真有点意思😂
什么叫"横盘突破"?
说白了,就是股价在一个狭窄的区间内横着晃来晃去,一般持续时间在20个交易日左右,区间振幅很小------5%以内,基本上是肉眼可见的震荡。然后突然某天来了一根放量阳线,一下子突破了这个"牢笼"。



我们人眼看图都能感觉这是在蓄力,问题是------我们怎么用代码把这种图形抓出来?
策略原理先交代清楚:
-
横盘定义:近20个交易日,最高价和最低价之间的振幅不超过5%
-
突破定义:当前K线是阳线(收盘价 > 开盘价),同时成交量放大到20日均量的1.5倍以上,且收盘价突破这20日的最高价
-
进场时机:突破当日收盘买入
-
统计维度:
- 买入后未来20天收益为正的概率
- 买入后未来20天收益大于5%的概率
- 买入后未来20天最大收益为正的概率
- 买入后未来20天最大收益大于5%的概率
是不是挺直接的?但问题又来了------怎么用代码识别出这种"20天内横住、今天突破"的结构?咱们一步步来。
横盘识别代码怎么写?
很多人喜欢用布林带、标准差什么的去定义震荡区间。但说真的,我本人对这些"噪音指标"体感很糟🤦♀️,太玄了也容易误判。干脆点,直接撸价格范围,最简单也最实用。
来,贴段代码,思路你看明白就好:
python
import pandas as pd
import numpy as np
def detect_sideways_breakout(df):
"""
输入是一个DataFrame,包含open, high, low, close, volume列
输出是一个Series,标记是否为突破日
"""
high_20 = df['high'].rolling(20).max()
low_20 = df['low'].rolling(20).min()
range_20 = high_20 - low_20
range_pct = range_20 / low_20
ma_vol_20 = df['volume'].rolling(20).mean()
is_narrow = range_pct <= 0.05
is_breakout = (df['close'] > df['open']) & \
(df['close'] > high_20.shift(1)) & \
(df['volume'] > 1.5 * ma_vol_20)
signal = is_narrow.shift(1) & is_breakout
return signal
这个函数干了三件事:
- 判断20日区间是否振幅小于5%
- 判断今天是不是阳线、放量
- 判断今天是否突破了过去20日最高点
最后我们只保留"昨天横盘、今天突破"的信号。是不是挺明白的?
接下来,重点来了:回测和统计!
有了信号,我们要去看这些信号之后------未来20个交易日到底涨不涨?这一步最考验基本功,我这里不写成完整回测框架(不然篇幅太长),但你至少得理解核心统计思路。
咱先写个函数,取出所有突破点后面20天的收益:
python
def calculate_future_returns(df, signal, days=20):
"""
计算每个信号后N日的收益
"""
future_returns = []
signal_dates = df[signal].index
for date in signal_dates:
try:
entry_price = df.loc[date, 'close']
future_data = df.loc[date:].iloc[1:days+1] # 排除买入当天
max_return = (future_data['close'] - entry_price) / entry_price
final_return = (future_data.iloc[-1]['close'] - entry_price) / entry_price
future_returns.append({
'date': date,
'final_return': final_return,
'max_return': max_return.max()
})
except:
continue
return pd.DataFrame(future_returns)
然后我们可以来统计两个核心指标:
- 有多少次最终是正收益的(
final_return > 0
) - 有多少次收益超过5%(
final_return > 0.05
)
统计起来非常直接:
python
results = calculate_future_returns(df, signal)
positive_rate = (results['final_return'] > 0).mean()
above_5pct_rate = (results['final_return'] > 0.05).mean()
看懂了吗?聪明的你一定已经发现------这个方法不但能用在单只票,还能批量跑A股历史全市场的图形来分析
真枪实弹:一年全市场回测结果
我用2024年1月到2025年7月的A股日线数据,跑了一遍这个策略,覆盖所有有完整数据的股票。
共发现 202次符合条件的突破图形,然后统计如下:
- 横盘突破后未来20日收益为正的概率:49.01%
- 横盘突破后未来20日收益超过5%的概率:19.80%
- 横盘突破后未来20日最高收益为正的概率:52.97%
- 横盘突破后未来20日最高收益超过5%的概率:24.75%
这个数据说实话,我自己一开始也没想到会这么高。
当然了,有人可能会问------是不是牛市期间才有效?这个咱以后再开一篇讲"市况分层分析"。
今天只告诉你一点:图形是有"概率"的,不是玄学,只要你愿意统计,就能找到背后的规律。
策略可实操吗?
老实说,这个策略不能裸上------你得搭配板块、题材、消息面等过滤。否则你会发现有些票虽然突破了,但根本没人接盘,买进去就是被埋。
但它作为 "预选机制",用来找图形启动前兆,简直太好用了。尤其适合喜欢做龙头、强势股二波启动的朋友。
你可以这么用:
- 每天复盘,把今天出现突破的票跑出来
- 挑出背后有资金博弈的,比如芯片、AI、大消费这些板块
- 留意次日竞价,量能、情绪是否延续
- 配合盘口、分时进一步确认
也就是说,图形是筛子,判断是你做的活。
需要回测源码的关注我领取