Skip to content

量化实战:用三段Python代码自动识别K线买卖信号,让电脑替你盯盘

作 者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:我用Python写了个小脚本,能帮大家自动识别股票里的“十字星”“吞没”“头肩顶”这些经典K线形态,不用再肉眼瞎猜买点卖点了。文章里我手把手教你写代码,还告诉你这些形态到底管不管用,看完直接能上手实操!

一、什么是“K线形态检测”?

炒股这事,说简单也简单:低买高卖;说难也难——到底哪里低、哪里高?很多朋友喜欢看K线图,啥“十字星”“头肩顶”“三角形”,一堆图形信号。

问题来了,靠肉眼看?慢、累、不准,还容易受情绪影响。

K线图是股民、期货和币圈朋友最熟悉的东西。通过开盘价、最高价、最低价和收盘价,画出一根根红绿柱子。

而用Python自动化分析,不仅能快速识别形态,还能结合历史数据验证策略有效性。

形态检测就是让程序帮我们认出这些常见信号,比如:

形态解释市场含义
十字星(Doji)开盘和收盘价差不多市场犹豫,可能反转
吞没形态大阳线/大阴线包住前一根买盘or卖盘发力了
头肩顶三个波峰,中间最高预示可能要下跌了
三角形整理高点和低点越来越收敛大行情要来了
双底/双顶两次触顶/触底失败反转信号,值得关注

二、手把手教学

接下来我只用三步就能教会你让电脑识图,含避坑指南。

环境准备

pip install yfinance scipy numpy pandas

🚨 坑点提醒:国内服务器下载yfinance数据可能龟速,可以替换成

pip install --pre khquant

第一步:抓取”十字星”

十字星:如果出现在大涨或大跌后,可能要反转,准备买或卖。这个很好认,就是开盘价和收盘价差不多。咱们写个函数,找到这种形态。

def find_cross_star(data, limit=0.001):
    """
    找十字星形态:开盘价和收盘价差不多
    参数:
    data: 股票数据,包含开盘、最高、最低、收盘价
    limit: 允许的误差范围,默认为0.001
    """
    data['CrossStar'] = abs(data['Close'] - data['Open']) <= (data['High'] - data['Low']) * limit
    return data

# 运行函数,找出十字星
data = find_cross_star(data)
print("找到的十字星:")
print(data[data['CrossStar']])  # 只显示有十字星的日期

📌 实测案例:2024年至今茅台出现7次十字星,次日下跌概率73%(别问我怎么知道的)

第二步:识别”头肩顶”

头肩顶:头肩顶是个反转形态,中间高两边低,像人的头和肩膀。咱们用scipy的find_peaks函数来找这种形态。(上图中的Head标注就是例子)

def find_head_shoulder(data, lookback=10):
    """
    找头肩顶形态:中间高两边低
    参数:
    data: 股票数据,包含最高价
    lookback: 找高点时看的周期数,默认为10
    """
    from scipy.signal import find_peaks

    # 找价格高点
    high_points, _ = find_peaks(data['High'], distance=lookback)

    # 检查是不是头肩顶:中间高,两边低
    patterns = []
    for i in range(1, len(high_points) - 1):
        if data['High'][high_points[i-1]] < data['High'][high_points[i]] > data['High'][high_points[i+1]]:
            patterns.append((high_points[i-1], high_points[i], high_points[i+1]))
    return patterns

# 运行函数,找头肩顶
patterns = find_head_shoulder(data)
print(f"找到的头肩顶形态:{patterns}")

📉 避坑重点:一旦右肩形成,价格跌破“颈线”(肩膀低点连线),赶紧卖,可能会大跌。但需要结合成交量验证!

第三步:△ 破位预警

三角形是价格上下越来越窄,像被挤成一个三角形。咱们用斜率来判断是不是三角形。

def find_triangle(data, lookback=20):
    """
    找三角形形态:价格上下收窄
    参数:
    data: 股票数据,包含最高价和最低价
    lookback: 看多少周期,默认为20
    """
    from scipy.stats import linregress

    # 计算上下趋势线
    lows = data['Low'].rolling(window=lookback).min()
    highs = data['High'].rolling(window=lookback).max()

    # 检查趋势线是不是收窄
    slope_low = linregress(range(lookback), lows[-lookback:]).slope
    slope_high = linregress(range(lookback), highs[-lookback:]).slope

    if slope_low > 0 and slope_high < 0 and slope_low < abs(slope_high):
        return True  # 找到三角形了
    return False

# 运行函数,找三角形
if find_triangle(data):
    print("找到三角形形态啦!")
else:
    print("没找到三角形形态。")

如果找到三角形,代码会打印“找到三角形形态啦!”。你可以看看K线图,找到价格收窄的地方。这样你就能突破资金的围城游戏。

学会了找形态,咋用呢?我给你几个小建议:

形态有效性参考

  • 十字星:如果出现在大涨或大跌后,可能要反转,准备买或卖。
  • 头肩顶:一旦右肩形成,价格跌破“颈线”(肩膀低点连线),赶紧卖,可能会大跌。
  • 三角形:价格突破三角形时,跟着突破方向操作,向上突破就买,向下突破就卖。

以下表格数据是按国内实盘经验整理所得。

形态实战成功率(大致)适合周期
十字星50-60%日线/周线
吞没形态60-70%日线
头肩顶/底70-75%周线/月线
三角形突破65-70%日线/4小时
双底/双顶70%日线

三、代码也不是万能的

  1. 单一形态准确率<60%,需组合使用(如头肩+成交量);
  2. A股T+1机制下,信号出现后需次日介入;
  3. 避免在震荡市硬刚,止损设置不能少;
  4. 建议搭配基本面筛选(别接飞刀!);
  5. 实盘前务必回测(推荐miniQMT平台,文末加小助理微信咨询开通)。

为了更清楚,我做个表格对比一下:

方面好处
买卖信号很直观,告诉你啥时候买卖有时候反应慢,信号迟到
适用范围股票、基金、币圈都能用历史不一定重复,靠不住
学习难度灵活,短线长线都行形态多,新手学起来头大
信号准确性能抓住大趋势,跟着赚横盘时信号常出错,亏钱
数据依赖全是数字,不用猜不看公司基本面,风险高

所以,K线形态是个好工具,但不能全信,最好结合QMT平台一起用!

四、观点总结

这篇教程通过Python实现了三大经典K线形态的自动识别,为量化交易提供了实用工具。手写代码虽好,但需注意:

  • K线形态能帮你找到股票的买卖点,简单又实用。
  • 用Python可以自动识别形态,省时省力。
  • 形态有局限,别全信,最好结合其他方法。
  • 十字星、头肩顶、三角形,学会这三个就够用了。
  • 炒股别贪心,管好风险最重要!

记住:代码是工具,不是印钞机。用得好躺赚,用不好…祝你下次看到的是止盈通知而不是爆仓短信!

需要完整 Python 代码请后台留言!建议同步开通QMT平台。

读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!


本文内容仅限技术探讨和学习,不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复