作 者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:我用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% | 日线 |
三、代码也不是万能的
- 单一形态准确率<60%,需组合使用(如头肩+成交量);
- A股T+1机制下,信号出现后需次日介入;
- 避免在震荡市硬刚,止损设置不能少;
- 建议搭配基本面筛选(别接飞刀!);
- 实盘前务必回测(推荐miniQMT平台,文末加小助理微信咨询开通)。
为了更清楚,我做个表格对比一下:
方面 | 好处 | 坑 |
---|---|---|
买卖信号 | 很直观,告诉你啥时候买卖 | 有时候反应慢,信号迟到 |
适用范围 | 股票、基金、币圈都能用 | 历史不一定重复,靠不住 |
学习难度 | 灵活,短线长线都行 | 形态多,新手学起来头大 |
信号准确性 | 能抓住大趋势,跟着赚 | 横盘时信号常出错,亏钱 |
数据依赖 | 全是数字,不用猜 | 不看公司基本面,风险高 |
所以,K线形态是个好工具,但不能全信,最好结合QMT平台一起用!
四、观点总结
这篇教程通过Python实现了三大经典K线形态的自动识别,为量化交易提供了实用工具。手写代码虽好,但需注意:
- K线形态能帮你找到股票的买卖点,简单又实用。
- 用Python可以自动识别形态,省时省力。
- 形态有局限,别全信,最好结合其他方法。
- 十字星、头肩顶、三角形,学会这三个就够用了。
- 炒股别贪心,管好风险最重要!
记住:代码是工具,不是印钞机。用得好躺赚,用不好…祝你下次看到的是止盈通知而不是爆仓短信!

需要完整 Python 代码请后台留言!建议同步开通QMT平台。
读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!
本文内容仅限技术探讨和学习,不构成任何投资建议。
Be First to Comment