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

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

你有没有遇到过这种情况:一只票在那横着躺了半个多月,不涨也不跌,跟冬眠了一样,然后某天突然一个大阳线冲天而起,配合着放量,一口气就突破了之前的震荡区间------你心里一激灵,觉得这是不是要起飞了?🎯

那么问题来了,这种"横盘突破"到底靠不靠谱?什么情况下是"假突破"骗炮,什么情况下是真牛启动前的预兆?有没有可能用量化的方式,把这种图形筛出来、统计清楚、搞明白背后的胜率?

今天,我就带大家从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

这个函数干了三件事:

  1. 判断20日区间是否振幅小于5%
  2. 判断今天是不是阳线、放量
  3. 判断今天是否突破了过去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、大消费这些板块
  • 留意次日竞价,量能、情绪是否延续
  • 配合盘口、分时进一步确认

也就是说,图形是筛子,判断是你做的活。

需要回测源码的关注我领取

相关推荐
看海天一色听风起雨落20 分钟前
Python学习之装饰器
开发语言·python·学习
cyforkk21 分钟前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
程序员爱钓鱼1 小时前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
XiaoMu_0011 小时前
基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现
python·信息可视化·旅游
THMAIL1 小时前
深度学习从入门到精通 - 生成对抗网络(GAN)实战:创造逼真图像的魔法艺术
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·cnn
桦说编程1 小时前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik1 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
我没想到原来他们都是一堆坏人2 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
总有刁民想爱朕ha3 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘