个股诊断大师(Stock Diagnosis Master)
输入一个股票代码或名称,产出一份结构完整、结论明确的个股技术诊断报告。
分析体系 = 缠论结构(分型/笔/中枢/背驰/买卖点)+ 传统指标(均线/MACD/KDJ/RSI/BOLL/量能/ATR)双轨验证。
> ⚠️ 合规铁律(不可弱化):本 Skill 输出的一切内容均为技术研究参考,
> 不构成任何证券投资建议。任何对外输出都必须包含 「市场有风险,投资需谨慎」,
> 并披露内容为 AI 依据历史行情自动生成。报告头部与尾部的风险提示缺一不可。
何时使用
- 用户问「某某股票现在能不能买 / 该不该卖 / 走势怎么样」
- 用户要求诊断或分析某只股票的趋势、买卖点、支撑压力、仓位、止损
- 用户要一份个股技术面诊断报告
- 用户提到缠论、背驰、中枢、一二三类买卖点、分型、笔
- 用户提到金叉死叉、均线排列、MACD 背离、KDJ 超买超卖
- 关键词:个股诊断、技术分析、趋势判断、买卖点、支撑位、压力位、仓位管理、止损、评级、缠论、背驰、中枢
环境准备
依赖
pip install -r requirements.txt
> 依赖仅有三项:requests / pandas / numpy,无重型第三方依赖。
> Python 版本要求 3.10+(实测 3.13 可用)。
数据源说明
| 用途 | 接口 | 编码 | 限流 |
|---|---|---|---|
| K线(日/周/月,前复权) | web.ifzq.gtimg.cn/appstock/app/fqkline/get |
UTF-8 | 无 |
| 实时快照(价格/PE/PB/市值/换手) | qt.gtimg.cn/q= |
GBK | 无 |
| 名称/拼音反查代码 | smartbox.gtimg.cn/s3/ |
GBK | 无 |
> 本 Skill 全程本地计算,不上传任何数据。 所有网络请求只向腾讯财经公开行情接口发起,
> 请求内容仅为股票代码,不含任何用户隐私信息。
>
> ⚠️ 编码坑:qt.gtimg.cn 与 smartbox.gtimg.cn 返回 GBK 编码,且 smartbox
> 的中文名是 \uXXXX 字面量转义(不是真正的 Unicode 字符),需要额外解码一次。
> 代码里已封装 _http_get(..., encoding="gbk") 与 _unescape_unicode() 处理。
>
> 之所以不用 mootdx(通达信 TCP 协议),是因为实测在部分网络环境下 TCP 7709 端口不通、
> 返回空数据;腾讯 HTTP 接口稳定且不封 IP、无需 key。
使用方法
快速开始
# 用代码分析
python scripts/analyze_stock.py 600519
# 用名称分析(自动反查代码)
python scripts/analyze_stock.py 贵州茅台
python scripts/analyze_stock.py 茅台 # 简称、拼音 gzmt 都可以
python scripts/analyze_stock.py byd
# 输出到文件
python scripts/analyze_stock.py 600519 --out report.md
# 周线分析
python scripts/analyze_stock.py 600519 --freq week
# 切换缠论笔口径(默认 strict 老笔)
python scripts/analyze_stock.py 600519 --bi-standard new
参数
| 参数 | 默认 | 说明 |
|---|---|---|
symbol |
必填 | 股票代码(600519)或名称(贵州茅台)/ 拼音(gzmt) |
--freq |
day |
分析周期:day 日线 / week 周线 / month 月线 |
--count |
500 |
K线根数。500 根日线 ≈ 2 年,足够缠论结构分析 |
--bi-standard |
strict |
缠论笔口径:strict 老笔(间隔≥5根K线)/ new 新笔(间隔≥1根合并K线) |
--out |
无 | 输出 Markdown 文件路径;不指定则打印到控制台 |
作为 Python 模块调用
import sys
sys.path.insert(0, "scripts")
from analyze_stock import analyze
report_md, summary = analyze("600519", freq="day", count=500)
print(report_md) # 完整 Markdown 报告
print(summary["rating"], summary["score"]) # 评级 / 评分
报告结构
生成的报告包含 8 个章节:
| 章节 | 内容 |
|---|---|
| 一、结论速览 | 评级星级、综合评分、趋势、中枢位置、最近买卖点、关键支撑压力、止损位、建议仓位、风险收益比 |
| 二、行情概览 | 最新价、涨跌幅、开高低收、成交额、换手率、量比、PE/PB、市值、涨跌停价 |
| 三、趋势分析 | 七维分项打分表(均线/MACD/KDJ/RSI/量能/BOLL/缠论结构)+ 常用指标快照与状态判读 |
| 四、缠论结构分析 | 合并K线统计、中枢列表、最近6笔走势、背驰判定 |
| 五、买卖点识别 | 一二三类买卖点全清单,每个信号标注日期、价格、强度、技术依据 |
| 六、关键价位 | 压力位/支撑位(含距离、类型、强度、依据)+ 止损位及最大亏损比例 |
| 七、仓位管理 | 建议仓位及依据、加仓点、减仓点、风险收益比 |
| 八、综合结论 | 评级、操作建议、多头依据、风险提示(趋势/均线/指标/结构/纪律/免责) |
核心算法说明
缠论实现口径
分析链路:K线包含处理 → 分型 → 笔 → 中枢 → 背驰 → 买卖点
| 环节 | 实现口径 |
|---|---|
| 包含处理 | 向上处理取高高、向下处理取低低;记录合并K线对应的原始索引 |
| 分型 | 三根合并K线确认,顶分型(中间高点最高且低点最高)、底分型对称 |
| 笔(默认老笔) | 顶底分型之间至少间隔 5 根原始K线,与通达信等主流软件口径一致 |
| 笔(新笔,可选) | 顶底分型之间至少间隔 1 根合并K线,更灵敏但噪音大 |
| 中枢 | 连续三段笔的重叠区间 [max(低点), min(高点)],要求 ZG > ZD;延伸上限 12 笔 |
| 背驰 | MACD 面积衰减法:同向两段,价格创新高/新低但力度衰减 ≥15% 判定为背驰 |
| 买卖点 | 一买=底背驰;二买=底部抬高;三买=突破中枢后回踩不破 ZG(卖点对称) |
> 为什么默认老笔? 实测 500 根日线用新笔口径会产生 78 段笔(过碎、噪音大),
> 老笔口径产生 46 段(每笔跨度 3-11 根K线),结构更清晰、更符合实战研判习惯。
趋势评分(-100 ~ +100)
七个维度加权归一化:
| 维度 | 权重 | 考察点 |
|---|---|---|
| 均线系统 | 24 | 多头/空头排列、价格与 MA20/MA60 关系 |
| 缠论结构 | 28 | 笔的高低点序列、价格与中枢位置、背驰 |
| MACD | 18 | DIF/DEA 位置、金叉死叉、零轴关系 |
| KDJ | 13 | 金叉死叉、超买超卖 |
| 量能 | 12 | 量价配合、5日/20日均量比 |
| RSI | 10 | 强弱区、超买超卖 |
| BOLL | 8 | 通道位置 |
评分 → 评级映射:
| 评分 | 星级 | 评级 |
|---|---|---|
| ≥ 55 | ★★★★★ | 强烈买入 |
| 25 ~ 54 | ★★★★☆ | 买入 |
| -24 ~ 24 | ★★★☆☆ | 持有/观望 |
| -54 ~ -25 | ★★☆☆☆ | 减持 |
| ≤ -55 | ★☆☆☆☆ | 卖出 |
止损位与仓位
止损位:取「最近有效支撑」(中枢下沿 / 下跌笔低点 / 2×ATR / MA20 / MA60)中
最贴近现价者,再做幅度约束——不低于 3%(避免被日常波动打掉)、不高于 12%
(控制单笔风险)。
仓位:趋势评级基准仓位(强势上涨 70% → 弱势下跌 0%),再按波动率
(ATR/价格)调整 ±10~20%,存在背驰时再 ±15~20%。
多周期分析(重要)
日/周/月三周期必须分别分析后交叉验证,原因有三:
- 未完成K线口径不同:日线取上一交易日收盘、周线取上一完整周收盘、月线取上一完整月收盘。
报告头部会标注「⏳ 已剔除未完成K线」,避免盘中半截K线污染全部指标。 - 年化波动率换算不同:日线 √244 / 周线 √52 / 月线 √12,统一用 √244 会让周线波动率虚高约 2.17 倍。
- 大级别滞后性:月线数据截止于上一自然月末,不反映当月已发生的行情。
出现「月线 4 星买入 / 日周线 3 星观望」的多周期背离时,须以小级别优先判断短期风险,
并在结论中显式说明背离成因。
各周期推荐取数根数(重要)
缠论的包含处理是从数据集第一根开始链式推进的,取数起点不同会导致合并K线划分位移,
进而逐级影响分型、笔、中枢的识别结果。因此 --count 不是一个可以随便调的参数。
| 周期 | 推荐 count | 覆盖跨度 | 说明 |
|---|---|---|---|
| 日线 | 500 |
≈ 2 年 | 默认,兼顾笔的数量与结构清晰 |
| 周线 | 300 |
≈ 5.8 年 | 中线研判够用;取 500 会拉到 9.6 年,噪音增多 |
| 月线 | 120 |
≈ 10 年 | 数据不足时结构不完整 |
> 实测案例(长信科技 300088 周线,同一时点):-count 300 → 评分 -21「持有/观望」;
> -count 500 → 评分 -30「减持」;-count 800 → 评分 -21「持有/观望」。
> 差异源于 500 根起点下多识别出 2026-06-26 的一处顶背驰。
> 这不是程序错误,是缠论方法论的固有敏感性。
>
> 使用纪律:跨期对比或多周期对比时,务必固定同一 count,否则结论不可比;
> 也不要因为某次结果不合预期就去调 count——那是在挑数据而不是在验证结论。
输出示例(节选)
### ★★★★☆ 买入 | 综合评分 **+34** / 100
| 维度 | 结论 |
|------|------|
| **当前趋势** | 上涨(温和上涨,多头) |
| **缠论中枢** | [40.21, 41.98] 现价位于**中枢上方** |
| **最近买点** | 第三类买点 2026-08-18 @41.05(中) |
| **止损位** | **40.01**(跌破 MA20 均线) |
| **建议仓位** | 30% 仓位(温和上涨,波动率正常) |
文件结构
stock-diagnosis-master/
├── SKILL.md # 本文件
├── README.md # 快速上手说明
├── requirements.txt # Python 依赖
├── LICENSE.txt # MIT 许可证(须带扩展名,skillhub 拒收无扩展名文件)
├── references/
│ └── chan_theory.md # 缠论概念速查与口径说明
└── scripts/
├── data.py # 数据层:K线拉取、名称反查、快照、指标计算
├── chan.py # 缠论核心:包含处理/分型/笔/中枢/背驰/买卖点
├── analyze.py # 分析层:趋势评分/关键价位/仓位管理/综合评级
├── report.py # 报告层:Markdown 报告生成
└── analyze_stock.py # 主入口:命令行接口
重要限制与免责
- 仅覆盖 A 股(沪深京)。港股/美股/ETF 需另行适配。
- 数据为前复权,历史价格会随分红送股变动,跨期比较时注意。
- 实时快照在非交易时段为最后收盘值。开盘前(约 09:15 前)接口当日字段
为空,此时报告会明确标注「⏰ 开盘前快照」,并用上一交易日的开/高/低收盘
数据填充,不会出现「今开 0.00」这类无意义数据。 - 未完成K线自动剔除:当前日/周/月尚未走完时,最后一根K线会被剔除,
报告头部标注「⏳ 已剔除未完成K线」。必须用日期+时间判定而非仅看形态——
仅凭「OHLC 相同 + 量极小」判定会在连续竞价开始后失效。 - 关键价位设有可操作性区间约束(重要):
- 压力位须高于现价,且距现价 ≥1.5%(贴身阻力对交易无指导意义);
- 减仓点须高于现价,且距现价 ≤25%(挂在 +79% 的历史高点毫无意义);
- 加仓点须在现价 ±12% 内(中枢上沿过远时,行情性质已变,应重新分析);
- 支撑位须低于现价,距现价 ≤25%。 - 极端深跌股会出现「数据真空区」:若股价连续暴跌导致所有历史筹码与
缠论结构均在现价上方,报告会显著提示「现价下方无历史结构支撑」,并给出
统计性参考位(2×ATR 下沿、-10% 位)——这些不是有效技术支撑,破位后
可能快速下探,风险高于常态。 - 加仓点为空是合法的分析结论:趋势偏空且 12% 区间内无有效结构位时,
正确建议就是「不建议加仓」,报告会给出条件式介入说明而非硬塞价位。 - 缠论结构依赖参数选择(笔口径、背驰阈值),不同口径结果会有差异;
本 Skill 默认口径已在多只标的上验证,但不构成唯一正确解。 - 投资风险揭示(合规强制):本 Skill 的全部输出均为技术研究参考,
不构成任何证券投资建议。引用「技术分析存在滞后性与失效可能」,
必须明示 「市场有风险,投资需谨慎」 并完成 AI 生成内容披露。
生成报告时头部与尾部须同时保留风险提示,不得删除或弱化。 - 本 Skill 全程本地计算,不上传任何数据。所有请求仅向腾讯财经
公开行情接口发起,请求内容为股票代码,不含用户隐私信息。
常见问题
Q:为什么不用 mootdx / akshare?
A:mootdx 走 TCP 7709,实测部分网络环境不通(返回空数据);akshare 是第三方封装、
版本兼容问题多。本 Skill 直连腾讯公开 HTTP 接口,零第三方数据依赖,稳定且不封 IP。
Q:名称反查返回乱码?
A:smartbox.gtimg.cn 返回 GBK 编码 + \uXXXX 字面量转义,需用
_http_get(..., encoding="gbk") 配合 _unescape_unicode() 处理。
代码已封装,若自行调用请注意。
Q:缠论笔太多/太少怎么办?
A:调整 --bi-standard。默认 strict(老笔)适合日线级别研判;
new(新笔)更灵敏,适合短线但噪音大。也可调整 --count 改变K线根数。
Q:为什么没有顶背驰/底背驰?
A:背驰需要「价格创新高/新低 + MACD 力度衰减」同时成立。若当前走势力度与
前段相当,就不会触发背驰——这本身是有意义的结论(说明趋势力度未衰竭)。
报告只保留最近 3 笔内的背驰,更早的背驰已失效。
Q:风险收益比很高但评级是「减持」,矛盾吗?
A:不矛盾。赔率高(止损近、空间远)不等于胜率高。趋势偏空时属逆势博弈,
报告会在该处显示 ⚠️ 提示,明确不建议据此建仓。
Q:周线报告的波动率为什么和日线差那么多?
A:年化换算系数不同(日 √244 / 周 √52 / 月 √12)。周线用的是 √(周内收益率方差),
不能用日线系数,否则虚高约 2.17 倍。
Q:同一只股票换个 --count,结论怎么就变了?
A:这是缠论的固有特性,不是算错。包含处理从第一根K线链式推进,起点变了,
后续合并/分型/笔的划分会逐级位移。具体差异见上文「各周期推荐取数根数」。
对策是固定推荐根数做对比,不要反复试不同 count。
作者:zhuangzhu | 版本:1.0.0 | 许可:MIT