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

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

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

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

今天,我就带大家从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、大消费这些板块
  • 留意次日竞价,量能、情绪是否延续
  • 配合盘口、分时进一步确认

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

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

相关推荐
Tomorrow'sThinker26 分钟前
✍️ Python 批量设置 Word 文档多级字体样式(标题/正文/名称/小节)
python·自动化·word·excel
一块plus43 分钟前
深度详解 Revive 和 Precompile 技术路径
后端·设计模式·架构
秋难降1 小时前
Python 知识点详解(三)
python·编程语言
iOS开发上架哦1 小时前
没有Mac如何完成iOS 上架:iOS App 上架App Store流程
后端
晴空月明1 小时前
分布式系统高可用性设计-负载均衡与容错机制深度解析
后端
Honyee1 小时前
java使用UCanAccess操作Access
java·后端
八苦1 小时前
留个VKProxy性能测试记录
后端
SimonKing1 小时前
你的Redis分布式锁还在裸奔?看门狗机制让锁更安全!
java·后端·程序员
追逐时光者1 小时前
一个 .NET 开源、免费、以社区为中心的单元测试框架
后端·.net
chao_7891 小时前
二分查找篇——寻找旋转排序数组中的最小值【LeetCode】
python·线性代数·算法·leetcode·矩阵