个股分析器(A 股)
针对用户输入的个股名称或代码(如「分析宁德时代」「分析300750」),产出一份图文并茂、以操作建议为核心的分析报告。
报告为自包含 HTML 文件(ECharts 蜡烛图 + 行业地位卡 + 实时行情卡 + 资讯/基本面 + 高亮操作建议横幅),可直接在浏览器打开。
触发场景
- 标准说法:「分析宁德时代」「分析300750」「分析贵州茅台」「分析比亚迪」
- 口语变体同样触发:「看看茅台」「宁德时代怎么样」「帮我分析下比亚迪」「这只票能不能买」
- 用户要求对某一只 A 股做综合研判、给出买卖操作建议
- 不应触发(交由其他技能或通用回答):期货(如「分析沪银」「分析螺纹钢」)、ETF、指数、基金等非 A 股个股场景
工作流程
第 1 步 — 解析股票名称/代码
从用户输入中提取股票中文名或代码(如「分析宁德时代」→ 宁德时代;「分析300750」→ 300750)。
若用户直接给出 6 位代码(如 300750 / 600519),原样使用;若给出中文名或拼音,进入第 2 步由脚本归一化。
第 2 步 — 获取市场数据(脚本)
运行 scripts/fetch_stock.py 一次性获取:标准股票代码与交易所、实时行情快照、近一年日线 K 线、技术指标、所属行业板块与行业内地位(市值排名/市场份额/是否龙头)。
# 在技能根目录下执行;或将脚本路径替换为你的实际绝对路径
python "scripts/fetch_stock.py" \
--query 宁德时代 --output "<工作目录>/market.json"
# 也可直接传代码:
python "scripts/fetch_stock.py" \
--query 300750 --output "<工作目录>/market.json"
- 脚本最后一行打印输出 JSON 的绝对路径,后续步骤以该文件为准。
- 脚本依赖 akshare,首次运行自动安装(需联网)。
- 名称解析:优先用
stock_info_a_code_name()全量代码表做名称/代码归一化(与fetch_stock.py的resolve_stock逻辑一致);6 位代码原样使用,中文名/拼音按「名称」列模糊匹配。 - 行业地位测算:用
stock_individual_info_em()取「行业」字段 →stock_board_industry_cons_em(symbol=行业)取成分股,按总市值排序得到个股行业内排名与市场份额,标记是否龙头。
第 3 步 — 检索最新资讯与基本面(WebSearch)
使用 WebSearch 分别检索两类信息,并注明来源与时间:
- 最新市场资讯(3-5 条,限近期):
查询示例:{股票名} {代码} 最新消息 今日、{股票名} 业绩 公告 研报 2026、{行业} 板块 政策 动态 - 基本面要点(3-5 条):
查询示例:{股票名} 基本面 财务 营收 净利润、{股票名} 竞争优势 护城河、{行业} 景气度 供需格局
行业与个股研究关注重点见references/stock_guide.md。
第 4 步 — 形成操作建议(核心判断)
综合以下三维度给出建议,方向只能是「买入 / 卖出 / 观望」之一:
- 技术面:价格相对 MA5/10/20/60/120/250 的位置、趋势结构(多头/空头排列)、RSI 是否超买/超卖(>70 超买、<30 超卖)、MACD 金叉/死叉、布林带位置、60 日区间位置、年化波动率、换手率异常。
- 基本面:营收/净利润增速、毛利率、ROE、估值(PE/PB 历史分位)、行业景气度、政策与竞争格局。
- 资讯情绪:近期消息多空取向、业绩预告、重大公告与突发事件。
操作建议需给出:方向、置信度(高/中/低)、周期(短线/波段/中线)、一句话核心建议、入场区间、止损位、目标位、仓位建议、3 条左右建议逻辑、2-3 条风险提示。
所有价位须基于第 2 步真实行情与第 3 步事实,严禁编造数据。
第 5 步 — 组装分析 JSON
将第 2 步的 market.json 内容作为基础,补充以下字段后写盘为 analysis.json:
{
"meta": { "stock_name": "宁德时代", "stock_code": "300750", "exchange": "创业板", "industry": "电池", "analysis_date": "2026-08-22 09:48:25" },
"quote": { "last_price": 280.5, "pre_close": 275.0, "open": 276.0, "high": 283.0, "low": 274.5, "change_percent": 2.0, "change_amount": 5.5, "volume": 1234567, "amount": 3.45e10, "turnover": 1.2, "pe": 22.3, "pb": 4.1, "total_mv": 1.23e12, "circ_mv": 1.0e12 },
"kline": [ { "date": "2025-08-21", "open": 0, "high": 0, "low": 0, "close": 0, "volume": 0 }, "..." ],
"industry": { "name": "电池", "board_change_percent": 1.5, "rank_in_industry": 1, "industry_count": 80, "market_share_pct": 18.5, "leader": true },
"technical": { "last_close": 280.5, "ma5": 0, "ma10": 0, "ma20": 0, "ma60": 0, "ma120": 0, "ma250": 0, "rsi14": 0, "macd": {"dif":0,"dea":0,"hist":0}, "boll": {"upper":0,"mid":0,"lower":0}, "annualized_vol_pct": 0, "position_in_60d_pct": 0, "trend": "多头排列" },
"technical_summary": "技术面综述(1-3 句,结合指标与趋势)",
"fundamentals": [ "基本面要点1", "基本面要点2", "..." ],
"news": [
{ "title": "资讯标题", "source": "来源", "date": "2026-08-21", "summary": "要点" }
],
"recommendation": {
"direction": "买入",
"confidence": "中",
"timeframe": "波段",
"summary": "一句话核心建议",
"entry": "270-278",
"stop_loss": "260",
"target": "300",
"position": "单笔不超过总资金30%",
"rationale": ["逻辑1", "逻辑2"],
"risks": ["风险1", "风险2"]
}
}
第 6 步 — 生成报告(脚本)
python "scripts/build_report.py" \
--input "<工作目录>/analysis.json" --output "<工作目录>/<股票名>_分析报告.html"
报告样式约定:涨=红、跌=绿(中国市场惯例);操作建议横幅置于顶部并依方向着色(买入红 / 卖出绿 / 观望灰),醒目突出;行业地位以独立卡片呈现(行业内市值排名/市场份额/龙头标记)。
第 7 步 — 交付
用 present_files 打开生成的 HTML 报告,并向用户简要口述:股票代码与所属行业、最新价与涨跌幅、行业地位(如「电池板块市值第1、龙头」)、核心操作建议(方向+入场/止损/目标)。
依赖
- Python 3.8+,akshare(脚本首次运行自动安装)
- 报告 HTML 通过 CDN 加载 ECharts,需在可联网环境打开
注意事项
- 数据来源:东方财富 / 新浪财经 / akshare 公开接口,行情为延迟快照(盘后≈收盘,盘中≈实时延迟),非逐笔实时。
- 报告末尾含免责声明:本报告由 AI 自动生成,仅供研究参考,不构成投资建议。
- 若股票未被识别,脚本会报错并提示用 6 位代码重试,此时向用户确认名称或改用代码。
- 行业板块名称与成分股排名来自东方财富行业分类,不同机构行业划分口径可能不同,仅作相对参考。
- 网络受限时(akshare 接口不可达),如实告知用户数据获取失败,不要编造行情数字。
- 行情数据以最近一个交易日为准:若当天为周末/节假日等非交易日,脚本自动取最近交易日数据,报告中日期即为实际数据日期(满足「非交易日取最新数据」需求)。