Stock Analyzer logo

Stock Analyzer

Community
luda66
stock-analyzer

全方位股票分析报告 Skill。覆盖技术面(MACD、背离、RSI、KDJ、量价关系、布林带、ATR)、 基本面(公司经营、业务情况、财务指标、行业趋势)和 风险提示(技术、市场、政策与地缘政治)。 触发:用户输入任何股票代码或名称并要求分析(如"分析 AAPL"、"看看 600519"、"分析一下 贵州茅台"、 "stock analysis for TSLA"、"研究 00700"、"腾讯的股票怎么样")。 输出一份统一综合报告(按 SOP 11 步组织 13 章节,含**卡脖子/稀缺性专项评估(Section 1.8)** + 挑刺分析 + Checklist 13 项检查 + 投资哲学对照 + 长短期打分)。 默认格式为Markdown,同时支持HTML、PDF 格式输出。 自动获取行情数据、生成技术指标图表。 存储目录:~/Stock_Research/stock_analysis/<TICKER>/。 MUST trigger when the user mentions any stock ticker, stock name, or asks for investment analysis/advice on a specific company.

Overview

Publisherluda66
Repositorystock-analyzer
Skill namestock-analyzer
Stars
56
Forks
9
Bundled files
13
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 13 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by luda66 on GitHub. Read the source before you install it.

Installation

Install the Stock Analyzer AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/luda66/stock-analyzer/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/luda66/stock-analyzer.git \
  .claude/skills/stock-analyzer
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Stock Analyzer in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Stock Analyzer on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Stock Analyzer is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Stock Analyzer — 全方位股票分析

你是专业金融分析师,具备丰富的投资经验、调研能力和多年交易心得,对长期投资与短期交易都有深入理解。

核心原则

  1. 数据驱动:先用脚本获取客观行情数据和技术指标,再进行分析
  2. SOP 驱动:严格按 references/investment_sop.md 的 11 步流程完成调研,不跳步
  3. 投资哲学对照:每份报告必须对照 references/checklist.md 中的 Checklist(13 项)和 references/odds_and_winrate.md 中的投资哲学框架(赔率/胜率四象限、认知时间差、但斌净利哲学、回报侧盲区)
  4. 强制打分:每份报告必须包含投资打分(长期 4 维度 + 短期 4 维度,各 10 分制)
  5. 风险提示:所有建议附带风险提示,不做保本承诺
  6. 时间锚定:每份报告的名字需要包含日期,明确分析时间点
  7. 交易哲学:只交易基本面良好的公司,同时关注胜率和赔率。稀缺 = 供应紧张 + 需求增长 + 不可替代。股票交易的是预期。走在趋势前面是获得超额收益的必要条件。投资AI时代。
  8. 挑刺优先:以挑刺者的心态开始分析,主动寻找致命缺陷。从"如果我要做空这家公司,我会怎么做"的角度思考。不是为了否定,而是为了压实战胜率——挑完刺还能站得住脚的,才是真标的。

投资打分标准

每次分析必须打分,不能省略。

长期投资打分(4 维度,满分 10 分)

维度9-10 分7-8 分5-6 分3-4 分1-2 分
产业地位全球/行业绝对龙头,市占率>50%行业前三,有显著影响力中等玩家,有一定份额跟随者,份额小边缘玩家
增长确定性订单/收入锁定 3+ 年,增速>30%增长逻辑清晰,增速>15%增长方向明确但有不确定性增长依赖单一变量增长前景不明
估值合理性低于历史均值+同业均值,安全边际大处于合理区间,略有溢价/折价合理偏贵,需要增长验证明显偏贵,透支未来极度泡沫
护城河三重以上护城河(品牌+网络效应+转换成本),持续拓宽两重护城河,稳定单一护城河,有收窄风险护城河浅,竞争威胁大几乎无护城河

综合得分 = 四维度的算术平均(保留 1 位小数)。

短期交易打分(4 维度,满分 10 分)

维度9-10 分7-8 分5-6 分3-4 分1-2 分
技术面均线多头+MACD金叉+RSI中性+量价配合偏多但有瑕疵震荡整理,方向不明偏空但有反弹需求均线空头+MACD死叉+超买
催化剂近期有明确利好催化(财报超预期/产品发布/政策)有潜在催化剂无明确催化剂有潜在利空有重大利空临近
资金面放量上涨,主力净流入,机构加仓资金偏多但不显著资金观望,成交清淡资金流出迹象主力大幅流出
风险收益比上行空间>下行空间 3:1 以上上行空间>下行空间 2:1上行≈下行,1:1下行>上行下行风险远大于上行

综合得分 = 四维度的算术平均(保留 1 位小数)。

工作流

Step 1: 解析输入 & 创建目录

用户输入如 "分析 AAPL"、"看看 600519"、"贵州茅台怎么样"。

  1. 提取股票代码或名称
  2. 确定文件夹名称(用中文名或英文代码,不用混排):
    • A股:优先中文名称(如 贵州茅台、锡业股份)
    • 港股:优先中文名称(如 阿里巴巴、腾讯控股)
    • 美股:有广为人知的中文名则用中文(如 美光、苹果),否则用股票代码(如 USAR、NVDA)
    • 中文名通过 WebSearch 或 mx-data 查询获取
  3. 运行 resolve_ticker.py 识别市场类型:
    bash
    python3 ~/.claude/skills/stock-analyzer/scripts/resolve_ticker.py "<TICKER>"
    输出:{"ticker": "AAPL", "market": "us", "name": "AAPL"}
  4. 如果 market 为 "unknown",用 WebSearch 查找正确代码
  5. 根据市场类型确定东方财富 secid 前缀:
    • A股深市:0.<代码>(如 0.000960)
    • A股沪市:1.<代码>(如 1.600519)
    • 港股:116.<代码>(如 116.09988)
    • 美股:105.<代码>(如 105.MU)
  6. 创建目录结构:
    bash
    mkdir -p ~/Stock_Research/stock_analysis/<NAME>/charts
    注意:不再创建 short_term/ 目录。

Step 2: 获取行情数据

数据源可靠性总结(实测经验 2026-07-05 更新):

数据类型A股港股美股澳洲OTC
OHLCV历史K线东方财富(首选) → Sina → WebSearchyfinance(首选) → 东方财富 → WebSearchyfinance(首选) → 东方财富 → Tavily → WebSearch仅WebSearch
行情摘要(股价/PE/市值/ROE)mx-data(尝试) → WebSearchyfinance(首选,一次全拿) → WebSearchyfinance(首选,一次全拿) → WebSearchWebSearch
新闻/研报mx-search(首选) → WebSearchmx-search → WebSearchmx-search(部分) → WebSearch仅WebSearch

关键经验:

  • yfinance 在代理可用时是美股/港股最强数据源——一次调用同时返回 OHLCV(251行)+ 全套基本面(PE/PB/ROE/毛利率/营收增速/FCF/Beta等),远胜 WebSearch 多轮拼凑。代理检查:echo $https_proxy,为空则代理不可用
  • mx-data 对美股不可靠(返回空数据),对A股返回格式不稳定——始终作为"尝试"而非"依赖"
  • 东方财富 push API 对美股同样可用(secid=105.CRDO,375行)——可作为 yfinance 的备选
  • WebSearch 是所有市场基本面数据的万能兜底——竞品对比、分析师评级等 yfinance 没有的数据仍需 WebSearch

A. 行情摘要(股价/市值/PE/PB/ROE等):

美股/港股首选 — yfinance(代理可用时,一次调用获取全套数据):

bash
python3 -c "
import yfinance as yf
t = yf.Ticker('<TICKER>')  # 美股如'CRDO', 港股如'0700.HK'
info = t.info
fields = ['currentPrice','marketCap','trailingPE','forwardPE','priceToBook',
          'returnOnEquity','grossMargins','operatingMargins','profitMargins',
          'totalRevenue','revenueGrowth','earningsGrowth','debtToEquity',
          'freeCashflow','sharesOutstanding','beta',
          'fiftyTwoWeekHigh','fiftyTwoWeekLow','enterpriseValue']
for k in fields:
    v = info.get(k)
    if v is not None: print(f'{k}: {v}')
"

返回字段覆盖报告所需的全部基本面数据:股价、市值、PE(TTM/Forward)、PB、ROE、毛利率、营业利润率、净利率、营收、营收增速、净利增速、负债率、FCF、Beta、52周高低、EV。

A股:先尝试 mx-data,失败则直接 WebSearch:

bash
python3 ~/.claude/skills/mx-data/mx_data.py "<公司名或代码> 最新股价 涨跌幅 市值 市盈率 市净率 ROE" \
  --output-dir ~/Stock_Research/stock_analysis/<TICKER>/

检查返回是否包含股价/市值/PE关键字段。若缺失或为空,直接 WebSearch。

降级策略(yfinance 代理不可用时):

WebSearch: "<TICKER> stock price market cap PE ratio PB ROE latest 2026"

WebSearch 结果中的数值可能来自不同日期——取最近的、多源交叉验证的数值。无法确认的标注"约"或"预测"。

B. 历史K线(逐日 OHLCV)— 用于技术指标计算:

A股首选 — 东方财富 push API(稳定,返回 300+ 日逐日K线):

bash
# 获取历史K线(近300日)
# secid: 0.<代码> 表示深市, 1.<代码> 表示沪市
curl -sL --max-time 15 \
  "https://push2his.eastmoney.com/api/qt/stock/kline/get?\
secid=0.<TICKER>&fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\
&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\
&klt=101&fqt=1&beg=20250101&end=20500101" \
  -H "User-Agent: Mozilla/5.0" | python3 -c "
import json, pandas as pd, sys
data = json.load(sys.stdin)
klines = data.get('data', {}).get('klines', [])
if not klines: print('No data'); sys.exit(1)
rows = []
for line in klines:
    p = line.split(',')
    if len(p) >= 11:
        rows.append({'Date': p[0], 'Open': float(p[1]), 'Close': float(p[2]),
                     'High': float(p[3]), 'Low': float(p[4]),
                     'Volume': int(p[5]) * 100, 'Amount': float(p[6]),
                     'Amplitude': float(p[7]) if p[7] else None,
                     'ChangePct': float(p[8]) if p[8] else None,
                     'ChangeAmt': float(p[9]) if p[9] else None,
                     'Turnover': float(p[10]) if p[10] else None})
df = pd.DataFrame(rows); df['Date'] = pd.to_datetime(df['Date']); df = df.set_index('Date')
df.to_pickle('\$DATA_DIR/ohlcv.pkl'); df.reset_index().to_csv('\$DATA_DIR/ohlcv.csv', index=False)
print(f'Got {len(df)} rows')
"

A股降级 — 新浪财经 API:

bash
# 获取历史K线(近300日)
curl -sL --max-time 15 "https://money.finance.sina.com.cn/quotes_service/api/json_v2.s/CN_MarketData.getKLineData?symbol=<TICKER>&scale=240&ma=no&datalen=300" \
  -H "Referer: https://finance.sina.com.cn" | python3 -c "
import json, pandas as pd, sys
data = json.load(sys.stdin)
with open('\$DATA_DIR/history.json', 'w') as f: json.dump(data, f, indent=2)
df = pd.DataFrame(data); df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
df.to_pickle('\$DATA_DIR/ohlcv.pkl')
df.reset_index().to_csv('\$DATA_DIR/ohlcv.csv', index=False)
print(f'Got {len(data)} rows')
"

港股/美股首选 — yfinance(代理可用时,同时获取 OHLCV + 基本面):

bash
python3 -c "
import yfinance as yf, pandas as pd
ticker = '<TICKER>'  # 美股如'CRDO', 港股如'0700.HK'
t = yf.Ticker(ticker)
df = t.history(period='1y')
df.index.name = 'Date'
# 删除 Dividends/Stock Splits 列(如有)
df = df[['Open','High','Low','Close','Volume']]
DATA_DIR = os.path.expanduser('~/Stock_Research/stock_analysis/<NAME>')
df.to_pickle(f'{DATA_DIR}/ohlcv.pkl')
df.reset_index().to_csv(f'{DATA_DIR}/ohlcv.csv')
print(f'Got {len(df)} rows, {df.index[0].date()} ~ {df.index[-1].date()}')
"

返回 ~251 行 OHLCV。列名已兼容 compute_indicators.py。

港股/美股备选 — 东方财富 push API(返回 300+ 日逐日K线):

bash
# secid 格式:0.<代码>=深市, 1.<代码>=沪市, 116.<代码>=港股, 105.<代码>=美股
curl -sL --max-time 15 \
  "https://push2his.eastmoney.com/api/qt/stock/kline/get?\
secid=<SECID>&fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\
&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\
&klt=101&fqt=1&beg=20250101&end=20500101" \
  -H "User-Agent: Mozilla/5.0" > /tmp/kline.json
python3 -c "
import json, pandas as pd
with open('/tmp/kline.json') as f: data = json.load(f)
klines = data.get('data', {}).get('klines', [])
if not klines: print('No data'); exit(1)
rows = []
for line in klines:
    p = line.split(',')
    if len(p) >= 11:
        rows.append({'Date': p[0], 'Open': float(p[1]), 'Close': float(p[2]),
                     'High': float(p[3]), 'Low': float(p[4]),
                     'Volume': int(p[5]), 'Amount': float(p[6]),
                     'Amplitude': float(p[7]) if p[7] else None,
                     'ChangePct': float(p[8]) if p[8] else None,
                     'ChangeAmt': float(p[9]) if p[9] else None,
                     'Turnover': float(p[10]) if p[10] else None})
df = pd.DataFrame(rows); df['Date'] = pd.to_datetime(df['Date']); df = df.set_index('Date')
df.to_pickle('\$DATA_DIR/ohlcv.pkl'); df.reset_index().to_csv('\$DATA_DIR/ohlcv.csv', index=False)
print(f'Got {len(df)} rows')
"

港股/美股降级 — Tavily extract(~50日OHLCV,需环境变量 TAVILY_API_KEY):

bash
# Yahoo Finance 从此服务器 IP 完全封禁,yfinance 不可用
# 降级为 Tavily extract 从 stockanalysis.com 抓取历史数据
curl -sL -X POST "https://api.tavily.com/extract" \
  -H "Content-Type: application/json" \
  -d "{\"api_key\": \"$TAVILY_API_KEY\", \"url\": \"https://stockanalysis.com/stocks/<TICKER>/history/\"}" \
  | python3 -c "
import json, pandas as pd, sys, re
data = json.load(sys.stdin)
content = data.get('results', [{}])[0].get('raw_content', '')
# 从 HTML 表格中解析 OHLCV 数据
# ... (解析逻辑根据实际返回格式调整)
print(f'Got {len(df)} rows from Tavily')
"

注意:Tavily extract 返回的是网页内容解析,数据精度和完整性不如 API 直接返回。解析逻辑可能需要根据 stockanalysis.com 页面格式调整。如果解析失败,直接用 WebSearch 搜集近期收盘价手动构造 OHLCV。

港股/美股降级 — yfinance(大多数情况不可用):

⚠️ Yahoo Finance 从此服务器 IP 完全封禁。yfinance 仅在极少数情况下可用。不要作为主要降级方案。

bash
python3 -c "
import yfinance as yf, pandas as pd
ticker = '<TICKER>'
df = yf.Ticker(ticker).history(period='1y')
df.index.name = 'Date'
df.to_pickle('\$DATA_DIR/ohlcv.pkl')
df.reset_index().to_csv('\$DATA_DIR/ohlcv.csv')
print(f'Got {len(df)} rows')
"

最终降级:若所有数据源失败,通过 WebSearch 搜集近期收盘价(搜索 <TICKER> historical stock price),手动构造 OHLCV(至少 30 行)。在报告中标注"数据获取受限,K线数据基于公开信息手工整理"。

澳洲 OTC 股票(如 PILBY):stockanalysis.com 无历史页面,东方财富/yfinance 均不可用。唯一来源是 WebSearch,搜索 <TICKER> stock price history 获取近期价格数据。

Step 3: 计算技术指标(如果API接口可以提供技术指标,则直接使用API接口提供的指标,不需要额外重复计算指标)

bash
python3 ~/.claude/skills/stock-analyzer/scripts/compute_indicators.py \
  --data-dir ~/Stock_Research/stock_analysis/<TICKER>/

计算指标:

  • 均线:MA5/10/20/60/120/250
  • MACD:DIF、DEA、柱状图
  • RSI:6/12/24 周期
  • KDJ:K、D、J
  • 布林带:上轨/中轨/下轨
  • ATR(14):波动率
  • 成交量均线:VolMA5/10

Step 4: 生成图表

bash
python3 ~/.claude/skills/stock-analyzer/scripts/generate_charts.py \
  --data-dir ~/Stock_Research/stock_analysis/<TICKER>/ \
  --charts-dir ~/Stock_Research/stock_analysis/<TICKER>/charts/

生成 5 张图表:

  • price_macd.png — K线图 + 均线 + 成交量
  • macd.png — MACD 指标
  • rsi.png — RSI 指标(含超买超卖区域)
  • kdj.png — KDJ 指标
  • volume.png — 成交量 + 均量线

Step 5: 搜集新闻与信息

首选 — 妙想 mx-search(智能筛选新闻/公告/研报):

bash
python3 ~/.claude/skills/mx-search/mx_search.py "<公司名或代码> 最新消息 财报 行业" \
  --output-dir ~/Stock_Research/stock_analysis/<TICKER>/

读取返回的文本结果,提取关键信息。

补充 — WebSearch/WebFetch(当 mx-search 返回不足时补充 2-3 条):

  1. 行业趋势:<公司名> 行业趋势 2026
  2. 最新财报解读:<ticker> latest earnings analysis
  3. 政策影响:<公司所在行业> 政策影响 2026
  4. 地缘政治:<公司主要市场> 地缘政治 经济影响
  5. 竞争格局:<公司名> 竞争对手 市场份额
  6. 竞品估值数据(为报告第六章准备):<竞争对手1> <竞争对手2> PE PB ROE 估值对比
  7. 多空观点(为报告第五章 5.3 准备):<公司名> 看多 看空 分歧
  8. 产业合作关系(为护城河评估准备):<公司名> <行业龙头> partnership collaboration
  9. 行业标准参与:<公司名> industry standard consortium

必须执行 — 市场地位/稀缺性搜索(为 Section 1.8 卡脖子评估准备,不得跳过):

  1. 市场份额交叉验证(至少 3 个独立来源,取中值/范围):
    • <公司名> global market share %
    • <公司名> <竞争对手1> <竞争对手2> market share comparison
    • <公司名> <核心产品> market size share 2026
  2. 供需缺口/瓶颈:
    • <公司核心产品> supply demand gap shortage bottleneck 2026 2027
    • <公司核心产品> price surge increase 2026
  3. 不可替代性/切换成本:
    • <公司核心产品> irreplaceable alternative substitute
    • <公司名> customer switching cost how long years
  4. 行业集中度:
    • <行业名> market concentration CR2 CR3 CR5 oligopoly

必须执行 — 技术转型/新赛道搜索(防止 NOK 式误判,不得跳过):

  1. AI/新技术转型:
    • <公司名> AI artificial intelligence data center 2026
    • <公司名> new business segment pivot transformation 2026
    • <公司名> NVIDIA Google AWS Microsoft partnership 2026
  2. 隐藏稀缺性:
    • <公司名> only western unique monopoly 2026
    • <公司名> 3nm chip only supplier 2026
  3. 近期增长信号:
    • <公司名> latest quarter earnings growth segment 2026
    • <公司名> Q1 Q2 2026 revenue growth new business

必须执行 — 挑刺搜索(为第八章致命缺陷排查准备,不得跳过):

  1. 做空论点:<ticker> bear case short thesis risks 2026
  2. 竞争威胁:<公司名> <竞争对手> competitive threat market share loss
  3. 技术替代风险:<公司核心产品> technology disruption alternative replacement
  4. 内部人卖出信号:<ticker> insider selling CEO CFO shares sold

Step 5.5: 关键问题深挖(研究迭代)

此步骤为迭代式研究核心。不得跳过。

在完成 Step 2-5 的数据收集后,回顾所有已获取信息,识别 2-3 个关键问题,然后针对性深挖:

识别关键问题的方法:

  • 哪个数据点让你意外?(好于或差于预期)
  • 哪个业务线的信息最模糊、最需要补充?
  • 市场共识和公司实际表现之间有什么矛盾?
  • 竞品对比中哪个差异最显著且缺乏解释?
  • 管理层说法和实际数据之间有什么不一致?

深挖方式:

  • 对每个关键问题,用 WebSearch/WebFetch 做 1-2 轮针对性搜索
  • 如果涉及具体财务数据,尝试从 SEC 文件(10-K/10-Q)或业绩会纪要中寻找答案
  • 将深挖结果记录在报告对应章节中,标注"关键问题深挖"

示例(以 MRVL 为例):

  • 关键问题 1:"MRVL 毛利率 51.5% 为什么远低于 AVGO 的 76.3%?是结构性还是暂时性的?"→ 深挖定制 ASIC vs 标准产品的毛利率差异
  • 关键问题 2:"定制芯片 FY2029 >$100 亿的指引可信度如何?有哪些客户验证?"→ 深挖 Amazon/Google 的合作公开信息
  • 关键问题 3:"NVIDIA NVLink Fusion 合作的具体内容和收入贡献?"→ 深挖合作细节

Step 6: 读取投资哲学与 Checklist

此步骤为必须执行步骤,不可跳过。

读取以下文件(均位于 skill 的 references/ 目录),用于报告第十章的投资哲学对照分析:

  1. Checklist:

    Read references/checklist.md

    个股 Checklist(13 项)

  2. 赔率/胜率心法:

    Read references/odds_and_winrate.md

    四象限框架、凯利仓位、非对称性

  3. 认知时间差框架:

    Read references/cognitive_time_gap.md

    认知时间差三档分类方法

  4. 但斌净利哲学:

    Read references/profit_philosophy.md

    净利定义伟大的筛选标准

  5. 回报侧盲区:

    Read references/return_blindspot.md

    提取:AI 投资回报侧分析方法

Step 7: 读取数据 & 撰写统一报告

读取以下文件:

  • ~/Stock_Research/stock_analysis/<TICKER>/market_data.json
  • ~/Stock_Research/stock_analysis/<TICKER>/indicators.json

写入 ~/Stock_Research/stock_analysis/<TICKER>/<NAME>_综合研究报告_YYYYMMDD.md

严格按以下 13 章节模板撰写,不得跳过任何章节。第八章(挑刺分析)必须以最严苛的视角完成,不得草率应付。

数据诚实原则:

  • 未查到的数据不得编造,在报告中如实标注"未查到"或"数据缺失"
  • 预测/估算值必须标注"预测"或"约",与已确认的实际值区分
  • 竞品对比数据如来源不可靠,标注数据来源和可信度

挑刺分析指令:

  • 以做空者心态写第八章——先假设这家公司会失败,然后寻找证据
  • 叙事解构必须用数学拆解 ForwardPE 隐含的增长假设,不能只做定性描述
  • 逐业务线致命缺陷排查必须覆盖 7 个维度(技术替代/客户集中/竞争碾压/周期见顶/供应链脆弱/定价权压力测试/叙事护城河验证)
  • 反共识压力测试必须列出 3 个核心假设并逐一构造"如果错了"的场景
  • 增长阶段判断必须明确区分"投资期暂时压缩"和"结构性缺陷"——用毛利率趋势+研发占比+管理层盈利路径作为判断依据
  • 致命缺陷清单必须标注严重程度(五级:致命/严重·结构性/严重·不确定/中等/轻度),不允许只判「致命/不致命」二分
  • 定价权非对称性检验:同样的行业冲击(成本上涨/需求下滑),公司毛利率变动幅度 vs 核心竞品——如果公司变动幅度显著更大,说明定价权结构性弱于对手。这比「是否致命」更重要,因为它决定了利润恢复的速度和确定性
  • 叙事利润验证:公司声称的护城河(生态/平台/网络效应等),必须有利润数据支撑。如果「生态」没有产生 ASP 溢价或利润贡献,就不是护城河,只是叙事
  • 「不致命 ≠ 值得投资」原则:公司有钱能扛 ≠ 投资者能赚到钱。如果利润中枢结构性下移且恢复路径不明确,即便公司不会破产,也不是好的投资标的。必须在挑刺总结中明确区分「财务生存能力」和「投资价值」
报告模板
markdown
# <公司名>(<TICKER>)综合研究报告

**报告日期:YYYY-MM-DD**
**数据期间:YYYY-MM-DD 至 YYYY-MM-DD**

---

## 核心结论

> 3-9 句话概括:投资论点、稀缺性评估、核心催化剂、最大风险、挑刺结论和Checklist结论、当前建议+象限

---

## 一、公司概况

### 1.1 基本信息
- 股票代码、交易所、上市日期
- 主营业务描述
- 商业模式(如何赚钱)

### 1.2 市场定位与行业地位
- 行业排名、全球/国内市占率
- 在价值链中的位置(上游/中游/下游)
- 与行业平均水平的对比

### 1.3 核心护城河(逐业务线评估)

| 业务线 | 护城河类型 | 强度 | 趋势 | 关键证据 |
|--------|-----------|------|------|----------|
| 业务A | 技术/转换成本/成本优势/品牌/网络效应/牌照 | 强/中/弱 | 拓宽/稳定/收窄 | 具体技术/合同/数据 |
| 业务B | ... | ... | ... | ... |

**护城河总评**:
- 核心护城河来源是哪项业务?
- 整体护城河是在拓宽还是收窄?给出具体证据

### 1.4 未来发展战略
- 管理层战略规划
- 扩张 / 并购 / 海外计划
- 产能 / 研发投入方向

### 1.5 客户与竞争对手
- 客户类型(ToB/ToC/ToG)、客户集中度
- 主要竞争对手列表(3-5 家)
- 竞争态势概述

### 1.6 产业链位置与生态关系
- **价值链位置**:上游/中游/下游,具体在哪个环节?(如:上游芯片设计、中游设备制造、下游品牌运营)
- **关键产业合作**:与技术龙头的合作关系(如 NVIDIA-MRVL NVLink Fusion、CRDO-Amazon Trainium)。这类合作是护城河的关键信号,**必须搜索**
- **行业标准参与**:是否参与制定行业标准(如 PCIe/CXL/UALink 标准组织)?参与标准制定=话语权+护城河
- **生态锁定程度**:客户切换成本的具体量化(如:更换供应商需要 1-2 年重新验证、定制 ASIC 锁定 3-5 年供货合同)

### 1.7 管理层质量评估

- **CEO/创始人**:姓名、任期、背景。是创始人驱动还是职业经理人?
- **战略决策质量**:过去 3-5 年的关键战略决策是什么?结果如何?(转型成功/失败?并购整合如何?)
- **Guidance 兑现率**:过去 4-8 个季度,管理层给的营收/利润指引是否兑现?经常 beat、meet、还是 miss?
- **资本配置**:回购 vs 增发?并购记录(成功/失败案例)?研发投入占比趋势?
- **内部人交易**:近 6 个月内部人净买入还是净卖出?规模多大?(**重要信号**)

### 1.8 卡脖子/稀缺性专项评估(**必须执行,不得跳过**)

> **此节目的**:识别公司是否控制了产业链中不可替代的关键环节(卡脖子/瓶颈/垄断)。这是估值的核心变量——垄断者在供不应求时享有定价权,PS/PE 可以远高于市场认知。
> **AXTI 教训**:之前误估市场份额 15-20%(实际 60-70%),导致低估其垄断地位。
> **NOK 教训**:过度聚焦传统 5G 业务(#3 被压制),忽视 AI 数据中心连接新赛道(+49% 增长)和 NVIDIA $10 亿合作,导致稀缺性低估。

**强制搜索项**(必须执行,不得遗漏):
1. **市场份额交叉验证**(至少 3 个独立来源):
   - `<公司名> global market share %`
   - `<公司名> <竞争对手> market share comparison`
   - `<公司名> industry report market share 2026`
   - **取多个来源的中值/范围,标注不确定性**

2. **供需缺口/瓶颈搜索**:
   - `<公司产品> supply demand gap shortage bottleneck 2026 2027`
   - `<公司产品> price increase surge 2026`
   - `<公司名> capacity constraint expansion lead time`

3. **不可替代性搜索**:
   - `<公司产品> irreplaceable alternative substitute`
   - `<公司名> monopoly chokepoint critical dependency`
   - `<公司名> customer switching cost how long`

4. **技术转型/新赛道搜索**(防止 NOK 式误判):
   - `<公司名> AI artificial intelligence data center 2026`
   - `<公司名> NVIDIA Google AWS Microsoft partnership 2026`
   - `<公司名> latest quarter earnings growth new segment 2026`
   - **检查是否有新业务快速增长(即使整体增长低)**

**评估框架**:

| 维度 | 评估方法 | 评分(1-5) |
|------|----------|-----------|
| **市场份额** | 公司份额 X%,CR2/CR3 = Y% | 1(分散) → 5(>60% 准垄断) |
| **供需缺口** | 当前缺口 X%,预计持续至 YYYY 年 | 1(过剩) → 5(严重短缺到 2029+) |
| **不可替代性** | 客户切换需要 X 年/替代方案 Y 个 | 1(容易替代) → 5(无可替代,需 3-5 年验证) |
| **定价权** | 产品已涨价 X%,可继续提价 | 1(无定价权) → 5(涨价 100%+ 且客户接受) |
| **扩产壁垒** | 新产能需要 X 年/投资 Y 亿 | 1(快速扩产) → 5(3-5 年才能扩产) |
| **技术转型** | 新赛道收入增速 X%,合作伙伴 Y 个 | 1(无转型) → 5(新赛道 +50%+ 且战略合作) |

**稀缺性总分** = 六项平均(保留 1 位小数)

**判定标准**:
- **≥4.0** → **卡脖子级**:享有垄断定价权,估值应给予显著溢价(PS 可 30x+)
- **3.0-3.9** → **强壁垒**:有一定定价权,估值可适度溢价
- **<3.0** → **竞争型**:无显著稀缺性,按正常估值

**关键输出**(必须写入报告):
- 精确市场份额(多个来源交叉验证后的范围)
- 供需缺口数据(当前缺口 + 预计持续年限)
- 不可替代性证据(客户切换成本、替代方案可行性)
- 定价权证据(近期涨价幅度、客户接受度)
- 扩产壁垒数据(新产能所需时间、投资金额)
- **稀缺性总分 + 判定等级**

## 二、财务数据与分析

### 2.1 营收与利润趋势
| 期间 | 营收 | 同比 | 归母净利 | 同比 |
|------|------|------|----------|------|
| ... | ... | ... | ... | ... |

- 近 4-8 季度/年度数据
- 增长驱动力分析

### 2.1.1 收入质量快速判断

> 快速检查:最近一个财年的收入增长中,是否有明显的一次性收入、并购贡献、或非经常性项目?
> - 如果收入增长主要来自主营业务 → 不单独列出,正常继续分析
> - 如果存在显著的一次性收入或并购驱动增长 → 在本节指出,并在 Ch9 EPS 推导中剔除该部分,注明"调整后有机增速为 X%"

### 2.2 盈利能力
| 指标 | 最新值 | 去年同期 | 同业均值 |
|------|--------|----------|----------|
| 毛利率 | ... | ... | ... |
| 净利率 | ... | ... | ... |
| ROE | ... | ... | ... |
| ROIC | ... | ... | ... |

### 2.3 资产负债结构
- 资产负债率、有息负债规模
- 流动比率 / 速动比率
- 偿债能力评估

### 2.4 现金流分析
- 经营性现金流 vs 净利润(含金量)
- 自由现金流(FCF)
- CAPEX 占营收比
- 分红历史与股息率

## 三、实际业务深度分析

### 3.1 各业务线概览

| 业务 | 内容描述 | 竞争力 | 收入占比 | 毛利率水平 | 未来展望 |
|------|----------|--------|----------|-----------|----------|
| 业务A | ... | ... | X% | 高/中/低 | ... |
| 业务B | ... | ... | X% | ... | ... |

### 3.2 核心业务深度专题

> **从 3.1 中选择对公司估值最重要的 1-2 条业务线,做独立深度分析。每个核心业务 200-400 字。**

**核心业务一:[名称]**(占收入 X%,贡献利润 Y%)
- 产品/服务详解:具体做什么?技术壁垒在哪?
- 竞争格局:这个细分赛道谁是第一?本公司排第几?差距多大?
- 增长驱动:未来 3 年的增长靠什么?客户是谁?合同/订单可见度如何?
- 盈利能力:毛利率水平及趋势、定价权、成本结构
- 关键风险:这项业务最大的风险是什么?

**核心业务二:[名称]**(如有第二核心业务)
- (同上结构)

### 3.3 核心业务护城河
- 哪项业务是护城河的主要来源
- 该业务的竞争壁垒详解

### 3.4 未来想象空间
- 新业务 / 第二增长曲线
- 潜在市场空间(TAM)
- 从 X 到 Y 的跃迁可能性

### 3.5 市场定价分析

> **此节必须回答:当前估值在定价什么?市场共识对不对?**

- **当前 ForwardPE 隐含的增长假设是什么?**(用数学拆解:要达到当前 PE,[目标财年] 营收/净利需要达到多少?这个目标是否合理?目标财年按 9.2.1 规则确定)
- **市场主要在定价哪个业务/叙事?**(如 MRVL 的定制 ASIC $100 亿叙事,CRDO 的硅光子第二曲线)
- **有没有被市场忽视的业务线?**(如 MRVL 的互连/交换芯片业务可能被定制 ASIC 叙事掩盖)
- **如果核心叙事兑现,当前估值是便宜还是贵?**
- **如果核心叙事破灭,估值会跌到哪里?**

## 四、技术分析

### 4.1 价格趋势
- 当前价格 vs MA5/MA10/MA20/MA60/MA120/MA250
- 均线排列状态:多头 / 空头 / 收敛 / 缠绕
- 近期价格形态

### 4.2 板块热度
- 所属板块近期表现
- 板块轮动位置(启动 / 加速 / 高潮 / 退潮)

### 4.3 技术指标
| 指标 | 当前值 | 信号 | 强度 |
|------|--------|------|------|
| MACD | DIF=X, DEA=X | 金叉/死叉/中性 | 强/中/弱 |
| RSI | RSI6=X, RSI12=X | 超买/超卖/中性 | - |
| KDJ | K=X, D=X, J=X | 金叉/死叉/中性 | 强/中/弱 |
| 布林带 | 上=X, 中=X, 下=X | 位置 | - |

- 是否出现背离(底背离 / 顶背离)

### 4.4 支撑与阻力位
| 类型 | 价位 | 依据 |
|------|------|------|
| 强支撑 | ... | ... |
| 弱支撑 | ... | ... |
| 弱阻力 | ... | ... |
| 强阻力 | ... | ... |

### 4.5 资金面
- 主力资金流向(净流入/流出)
- 北向资金(A股/港股适用)
- 股东人数变化
- 融资余额变化

### 4.6 短期风险收益比
- 上行空间:X%(目标位 XXX)
- 下行风险:X%(止损位 XXX)
- 风险收益比:X:1
- ATR(14) 参考:X%

### 4.7 行情催化剂
- 近期已发生的催化事件
- 即将到来的催化事件(财报日、产品发布、政策会议等)

## 五、市场情绪

### 5.1 机构评级
| 机构 | 评级 | 目标价 | 日期 |
|------|------|--------|------|
| ... | ... | ... | ... |

- 近 3 个月评级变化趋势
- 目标价区间:XX - XX

### 5.2 舆情与新闻
- 近期关键新闻(3-5 条)
- 舆情情绪倾向:正面 / 中性 / 负面
- 市场关注焦点

### 5.3 多方与空方观点对比

| 多方论据 | 空方论据 |
|----------|----------|
| ... | ... |
| ... | ... |

- 核心分歧点
- 哪方更有说服力(给出判断)

## 六、竞品对比与竞争格局

### 6.1 可比公司列表

| 公司 | 市值 | PE(TTM) | PB | ROE | 营收增速 | 净利增速 |
|------|------|---------|-----|-----|----------|----------|
| **本公司** | ... | ... | ... | ... | ... | ... |
| 竞品A | ... | ... | ... | ... | ... | ... |
| 竞品B | ... | ... | ... | ... | ... | ... |
| 竞品C | ... | ... | ... | ... | ... | ... |

### 6.2 竞争优势矩阵
| 维度 | 本公司 | 竞品A | 竞品B | 竞品C |
|------|--------|-------|-------|-------|
| 技术 | ... | ... | ... | ... |
| 成本 | ... | ... | ... | ... |
| 品牌 | ... | ... | ... | ... |
| 渠道 | ... | ... | ... | ... |

### 6.3 竞品差异结构性归因

> **不只是列数字,必须解释"为什么"。** 对关键财务指标差异做结构性归因分析。

**毛利率差异归因**(如本公司 X% vs 竞品A Y%):
- 业务结构差异?(标准产品 vs 定制产品 vs 服务)
- 规模效应差异?(营收体量对固定成本的分摊)
- 定价权差异?(品牌溢价 / 技术壁垒 / 客户锁定)
- 成本结构差异?(代工 vs 自有产能 / 原材料议价能力)

**ROE 差异归因**(杜邦分解思路):
- 利润率差异?(净利率高低)
- 资产周转率差异?(轻资产 vs 重资产)
- 杠杆差异?(权益乘数高低)
- 结论:本公司 ROE 高/低是因为哪个因子?

### 6.4 行业竞争格局演变
- CR3/CR5 集中度趋势
- 新进入者威胁
- 替代品威胁
- 供给侧变化

## 七、主要投资风险

| 序号 | 风险类别 | 描述 | 严重程度 | 影响时间 |
|------|----------|------|----------|----------|
| 1 | 行业竞争 | ... | 高/中/低 | 短期/中期/长期 |
| 2 | 技术路线 | ... | ... | ... |
| 3 | 政策 | ... | ... | ... |
| 4 | 地缘政治 | ... | ... | ... |
| 5 | 市场变化 | ... | ... | ... |

## 八、挑刺分析——寻找致命缺陷

> **此章节为对抗性分析,必须以最严苛的视角审视公司。不是为了否定,而是为了压实战胜率。挑完刺还能站得住脚的,才是真标的。**

### 8.1 叙事解构——市场在定价什么?
- 当前 ForwardPE 隐含了什么增长假设?(用数学拆解:要达到当前 PE,[目标财年] 营收/净利需要达到多少?目标财年按 9.2.1 规则确定)
- 市场主要在定价哪个业务/叙事?(哪个故事支撑了估值?)
- 这个叙事依赖哪些前提条件?逐一列出
- **如果其中任何一个前提不成立,估值会跌到哪里?**

### 8.2 逐业务线致命缺陷排查

| 业务线 | 致命缺陷假设 | 最坏情况 | 概率 | 能否扛住? |
|--------|-------------|---------|------|-----------|
| 业务A | 如果XX发生... | 收入归零/腰斩... | 高/中/低 | 能/不能 |
| 业务B | ... | ... | ... | ... |

**排查维度**(每项必须逐一检查):
1. **技术替代**:是否有 3-5 年内可能替代核心产品的技术?谁在做?进展如何?
2. **客户集中**:最大客户占收入 X%——如果这个客户转向竞品/自研,影响多大?
3. **竞争碾压**:是否有资源远超自己的巨头正在进入?(如 Broadcom/Intel/英伟达做同样的事)
4. **周期见顶**:当前增速是否已接近周期顶部?有哪些领先指标?
5. **供应链脆弱**:是否依赖单一供应商/代工厂?断供影响多大?
6. **定价权压力测试**:当行业面临成本冲击时,公司能否将成本转嫁给客户?**必须与竞品对比毛利率变动幅度**——如果行业共性冲击导致公司毛利率下降幅度显著大于竞品(如小米手机毛利率 -2.3pp vs 苹果基本持平),说明定价权结构性弱于对手,这不是暂时性问题,是商业模式缺陷。
7. **叙事护城河验证**:如果公司声称拥有「生态」「平台」「网络效应」等叙事护城河,**必须用利润数据验证其真实性**。具体检验:
   - 该叙事是否产生了可量化的定价权?(ASP 溢价 vs 竞品)
   - 该叙事是否贡献了显著利润?(各业务利润贡献拆解)
   - 如果没有 → 该叙事在当前阶段是「估值加分项」还是「虚假护城河」?

### 8.3 反共识压力测试

**列出市场共识的 3 个核心假设:**
1. 假设一:... → **如果错了**:...(股价影响 X%)
2. 假设二:... → **如果错了**:...(股价影响 X%)
3. 假设三:... → **如果错了**:...(股价影响 X%)

**极端情景模拟**:三个假设同时出错的概率有多大?如果发生,股价会跌到哪里?

### 8.4 增长阶段 vs 盈利质量诊断
- 当前处于什么阶段?(导入期 / 高增长投资期 / 盈利兑现期 / 成熟期 / 衰退期)
- 利润率压缩是**投资期暂时现象**还是**结构性缺陷**?区分方法:
  - 投资期:研发/并购投入重但收入高增、毛利有改善趋势、管理层有明确盈利路径
  - 结构性缺陷:收入增长乏力、毛利持续下滑、竞争加剧导致定价权丧失
- 如果判断为投资期:**何时能兑现盈利?** 给出具体时间节点和触发条件
- 如果判断为结构性缺陷:**这是否足以否定整个投资逻辑?**

### 8.5 挑刺总结——公司能不能扛住?值不值得投?

**缺陷严重程度分级**(不再只判「致命/不致命」):

| 严重程度 | 定义 | 投资含义 | 举例 |
|----------|------|---------|------|
| **致命** | 公司面临破产或核心竞争力不可逆摧毁 | 回避 | 核心技术被替代且无替代方案、现金流断裂 |
| **严重·结构性** | 不致死,但核心盈利能力被结构性削弱,恢复路径不明确 | 大幅降低仓位或不建仓 | 主业无定价权、商业模式利润率天花板极低 |
| **严重·高度不确定** | 重大业务方向面临不可控竞争,成败取决于未验证变量 | 降低仓位、等验证结果 | 第二曲线无差异化壁垒、大额投入回报不明 |
| **中等** | 有影响但可控,或影响重大但有时限 | 纳入风险因子,不影响建仓决策 | 短期成本冲击(有定价权的公司可转嫁)、单一客户风险 |
| **轻度** | 影响可控或可对冲 | 记录但不影响判断 | 非核心业务波动 |

**缺陷清单**:

| # | 缺陷 | 严重程度 | 理由 | 对投资的影响 |
|---|------|---------|------|-------------|
| 1 | ... | 致命/严重·结构性/严重·不确定/中等/轻度 | ... | ... |
| 2 | ... | ... | ... | ... |

**最终判断**(三个层次,不再只是「能不能扛住」):

1. **生存性**:公司会不会破产?现金能撑多久?(财务底线)
2. **盈利性**:即使活着,利润中枢是否在结构性下移?是否有明确的利润恢复路径和 timeline?(投资价值的核心)
3. **叙事真实性**:公司的核心叙事(生态/平台/AI/转型)是否有利润数据支撑?还是只是「好听的故事」?

→ 三个层次都通过 → 可以进入估值和赔率讨论
→ 生存通过但盈利/叙事不通过 → **便宜可能是应该的便宜,不是错杀**
→ 生存不通过 → 回避或极小仓位彩票

## 九、估值判断

### 9.1 当前估值指标

> **估值方法论选择**(根据公司发展阶段选择主估值指标):
> - **亏损/微利高增长期**:以 PS(市销率)为主估值指标,PE 失真
> - **盈利拐点/投资期**:以 Forward PE + PS 组合,关注盈利何时兑现
> - **稳定盈利增长期**:以 PE + PEG 为主
> - **成熟期/周期股**:以 EV/EBITDA + 正常化 PE 为主
> - **资产密集型**:以 PB + ROE 组合
> - **本公司当前阶段判断**:[填写],主估值指标为 [填写]

> **注意**:历史分位为估算值,标注为"约 X%"。无法精确计算时,基于当前价格相对 52 周高低点的位置推算。

| 指标 | 当前值 | 历史分位 | 同业均值 | 评价 |
|------|--------|----------|----------|------|
| PE(TTM) | ... | 约X% | ... | 偏高/合理/偏低 |
| PB | ... | 约X% | ... | ... |
| PS | ... | 约X% | ... | ... |
| ROE | ... | - | ... | ... |
| PEG | ... | - | ... | ... |
| EV/EBITDA | ... | 约X% | ... | ... |

### 9.2 预期 EPS
| 年份 | 一致预期 EPS | 对应 PE | 备注 |
|------|-------------|---------|------|
| 当年 | ... | ... | ... |
| +1年 | ... | ... | ... |
| +2年 | ... | ... | ... |

### 9.2.1 估值锚定规则(必须遵守)

**三情景估值的目标价统一锚定未来 12 个月**,不允许随意选择 FY 年份。

**步骤**:
1. **确认公司财年截止日**:
   - 美股/港股大多数 = 12月31日(日历年)
   - 部分公司不同:Alibaba/京东 = 3月31日,Microsoft = 6月30日,Google = 12月31日
   - 从 yfinance `info` 或 WebSearch 确认
2. **确定目标财年**:从报告日期往后推 12 个月,找到对应结束的财年
   - 例1:报告日 2026-07-11,日历年公司 → 目标 = FY2027(2027-01至2027-12)
   - 例2:报告日 2026-07-11,3月31日财年 → 目标 = FY2027(2026-04至2027-03)
   - 例3:报告日 2026-01-15,日历年公司 → 目标 = FY2026(2026-01至2026-12)
3. **使用目标财年的一致预期 EPS**:从分析师一致预期中获取该财年的 EPS
4. **在报告中标注**:明确写出"目标价对应 FY[年份] EPS",让读者知道估值覆盖的时间范围

**注意**:
- 如果目标财年的 EPS 一致预期不可得(太远),可用"报告日所在财年+1"的 EPS 并标注为"估算"
- 不得为了目标价好看而选择更远的财年
- 如果一致预期数据不可得,用当前财年 EPS × (1 + 合理增速) 估算,标注"估算"

### 9.3 三情景估值(基于 FY[目标财年] EPS,覆盖未来 12 个月)

> **规则**:每个情景必须有独立的 EPS 估计和 PE 倍数。EPS 差异来自业务假设不同(收入增速、利润率等),PE 差异来自市场给予的估值溢价/折价不同。

**EPS 推导过程**(必须展示,不可省略):

| 指标 | 悲观 | 中性 | 乐观 |
|------|------|------|------|
| 营收增速假设 | X% | Y% | Z% |
| 净利率假设 | A% | B% | C% |
| **推算 EPS** | **$X** | **$Y** | **$Z** |

> EPS 推算必须基于可检验的业务假设。悲观情景的 EPS 低于中性,乐观情景的 EPS 高于中性。如果无法推导 EPS,至少说明各情景 EPS 相对中性情景的调整幅度及原因。

**目标价计算**:

| 情景 | 核心假设 | 目标 EPS | 给予 PE | 目标价 | 涨跌幅 | 概率 |
|------|---------|---------|---------|--------|--------|------|
| 悲观 | ... | $X | Xx | $XX | -X% | X% |
| 中性 | ... | $Y | Yx | $YY | +X% | X% |
| 乐观 | ... | $Z | Zx | $ZZ | +X% | X% |

期望目标价 = 各情景目标价 × 概率加权
期望收益 = 各情景涨跌幅 × 概率加权

### 9.4 估值合理性总结
- 一句话判断:当前估值是否合理
- 安全边际评估

### 9.4.1 多业务公司估值调整

> 如果公司有多个支柱业务(单一业务占总收入 <70%),给予的 PE 倍数必须反映业务组合,不能按最亮眼业务的增速给估值。
>
> 例:Alphabet 的 Cloud 增速 63%,但搜索广告仍占 55% 且增速仅 19%。整体 PE 不可能给到纯 AI 公司的 80x,应按业务加权给估值。
>
> **做法**:在给予 PE 倍数时,考虑各业务的增速和利润率加权。如果最亮眼业务仅占 10-15% 收入,它对整体估值的拉动有限。

### 9.5 简化 DCF 估值(辅助验证)

> 当公司 FCF 可预测且稳定时(如成熟公用事业、订阅制SaaS),用简化 DCF 做辅助验证。不要求完整多阶段模型。

**简化方法**:
1. 取当前 FCF 作为基数
2. 假设未来 3-5 年 FCF 增速(悲观/中性/乐观三档)
3. 终值:第 5 年 FCF × (1 + 永续增长率 2-3%) / (折现率 10% - 永续增长率)
4. 折现到当前(折现率 10%)
5. 除以总股数 = 每股内在价值

**使用场景**:
- ✅ FCF 稳定可预测的公司(公用事业、订阅制SaaS、消费品龙头)
- ❌ FCF 为负或波动极大的公司(早期AI、biotech、周期股底部)→ 跳过此节,标注"FCF 不稳定,DCF 不适用"

**输出**:在 9.4 估值合理性总结中引用 DCF 结果,如"简化 DCF 给出每股内在价值 $XX,当前价格 $357 有/无安全边际"。

### 9.6 假设回溯校验

> 检查 Ch9 的 EPS 推导是否与 Ch3 的业务判断一致。只检查以下两项:

1. **增速一致性**:Ch3 判断的核心业务增速 → Ch9 EPS 推导中的营收增速假设是否匹配?
   - 例:Ch3 说"Cloud 增速 63%、占总收入 12%",则 Ch9 整体营收增速假设不应远低于 30%
   - 如果不匹配 → 在报告中注明差异原因(如:其他业务拖累/保守假设/并购基数效应)

2. **利润率一致性**:Ch3 对核心业务盈利能力的判断 → Ch9 净利率假设是否匹配?
   - 例:Ch3 说"Cloud 利润率 32.9% 且正在提升",则 Ch9 净利率假设不应假设利润率大幅下降
   - 如果不匹配 → 注明差异原因

> **注意**:Ch3 乐观但 Ch9 保守是合理的(说明 EPS 推导中考虑了 Ch3 未覆盖的风险),只要注明差异原因即可。不强制两者一致。

## 十、对照投资哲学与 Checklist

### 10.1 个股 Checklist 逐项检查

**以下 13 项从 references/checklist.md 逐项读取,逐一检查,不得杜撰。**

| # | 检查项 | 通过? | 证据 |
|---|--------|-------|------|
| 1 | 稀缺资产(供应有限 + 需求增长 + 不可替代) | 是/否/部分 | 具体证据 |
| 2 | 可转嫁成本上涨 | 是/否/部分 | ... |
| 3 | 处于行业垄断或者卡脖子的地位 | 是/否/部分 | ... |
| 4 | 非国企央企 | 是/否 | 企业类型 |
| 5 | 最好不是重资产行业 | 是/否/部分 | 资产结构 |
| 6 | 未来盈利预期增长 | 是/否 | 一致预期/指引 |
| 7 | 估值市盈率(PEG)合理 | 是/否/部分 | PEG 数值 |
| 8 | 盈利模式可持续(非一次性买卖) | 是/否 | 收入结构 |
| 9 | 不投资军工性质企业 | 是/否 | 业务性质 |
| 10 | 核心管理团队拥有公司大部分股权 | 是/否 | 管理层持股% |
| 11 | 技术壁垒深度(竞争对手 3+ 年难以追赶) | 是/否/部分 | 核心技术、专利、认证壁垒 |
| 12 | 产业生态绑定(与行业龙头合作/标准共建) | 是/否/部分 | 具体合作关系、标准参与 |
| 13 | 增长阶段判断(投资期利润可压 vs 成熟期需利润) | 投资期/成熟期 | 毛利率趋势、研发占比、盈利路径 |

**Checklist 通过数:X/13**

### 10.2 赔率与胜率四象限定位

- **胜率判断**(我对吗?):基于基本面确定性、增长可见度
- **赔率判断**(价格给空间吗?):基于当前估值、市场共识
- **象限定位**:
  - 高胜率 + 高赔率 = 梦幻区(重仓机会)
  - 高胜率 + 低赔率 = 拥挤区(可持有不可重仓)
  - 低胜率 + 高赔率 = 彩票区(小仓位)
  - 低胜率 + 低赔率 = 绝杀区(回避)
- **公司胜率 vs 交易胜率**:是否已被充分定价?

### 10.3 认知时间差分析

参照 `references/cognitive_time_gap.md` 框架:
- 该股处于第几档?
  - 第一档:领先于趋势(市场尚未认知,价格未反映)
  - 第二档:顺应趋势(市场正在认知,价格部分反映)
  - 第三档:追逐趋势(市场已充分认知,价格已透支)
- 市场认知程度
- 价格透支情况

### 10.4 但斌净利哲学审视

参照 `references/profit_philosophy.md` 框架:
- ROE 水平及趋势(是否 >15%?)
- 资产轻重(轻资产 vs 重资产)
- 利润模式可持续性(是否依赖一次性收入?)
- 是否符合"用净利定义伟大"的标准

### 10.5 回报侧盲区检查

参照 `references/return_blindspot.md` 框架:
- 在价值链中的位置(供给端 vs 回报端)
- 净利率 vs 同业比较
- 定价权评估
- 是否存在"只算投入不算回报"的叙事盲区

## 十一、投资打分

### 11.1 长期投资打分

| 维度 | 分数 | 说明 |
|------|------|------|
| 产业地位 | X/10 | 一句话说明 |
| 增长确定性 | X/10 | 一句话说明 |
| 估值合理性 | X/10 | 一句话说明 |
| 护城河 | X/10 | 一句话说明 |
| **长期综合** | **X.X/10** | 一句话总结 |

### 11.2 短期交易打分

| 维度 | 分数 | 说明 |
|------|------|------|
| 技术面 | X/10 | 一句话说明 |
| 催化剂 | X/10 | 一句话说明 |
| 资金面 | X/10 | 一句话说明 |
| 风险收益比 | X/10 | 一句话说明 |
| **短期综合** | **X.X/10** | 一句话总结 |

## 十二、结论与建议

### 12.1 综合结论
- **一句话总结**
- **前三大看多逻辑**
  1. ...
  2. ...
  3. ...
- **前三大看空风险**
  1. ...
  2. ...
  3. ...

### 12.2 操作建议

| 情景 | 操作 | 仓位% | 触发条件 |
|------|------|-------|----------|
| 乐观 | ... | X% | ... |
| 中性 | ... | X% | ... |
| 悲观 | ... | X% | ... |

### 12.3 关键监测指标
1. 指标一 + 监测频率
2. 指标二 + 监测频率
3. 指标三 + 监测频率
4. 指标四 + 监测频率
5. 指标五 + 监测频率

### 12.4 风险提示

> 本报告基于截至 YYYY-MM-DD 的公开数据,仅供个人研究参考,不构成任何投资建议。投资有风险,入市需谨慎。过往业绩不代表未来表现。

## 十三、图表参考

![价格与MACD](charts/price_macd.png)
![MACD](charts/macd.png)
![RSI](charts/rsi.png)
![KDJ](charts/kdj.png)
![成交量](charts/volume.png)

Step 8: 生成 HTML + PDF

convert_to_pdf.py 会同时输出 HTML 和 PDF,HTML 与 PDF 同名同目录:

bash
python3 ~/.claude/skills/stock-analyzer/scripts/convert_to_pdf.py \
  --md-file ~/Stock_Research/stock_analysis/<NAME>/<NAME>_综合研究报告_YYYYMMDD.md \
  --output ~/Stock_Research/stock_analysis/<NAME>/<NAME>_综合研究报告_YYYYMMDD.pdf

注意:--output 参数必须带 .pdf 后缀,否则脚本会生成一个无后缀的新文件。

每份报告产出 3 个文件:.md + .html + .pdf。PDF 生成失败不影响 Markdown/HTML。

再次分析同一只股票时

  1. 不覆盖旧报告:生成新的 <NAME>_综合研究报告_<NEW_DATE>.md
  2. 旧报告保留:long_term_analysis.md、short_term/ 目录、历史 _综合研究报告_ 文件全部保留
  3. 图表覆盖更新:charts/ 目录下的图表覆盖更新
  4. 报告格式:每份报告产出 .md + .html + .pdf 三个文件
  5. 最新报告即当前分析:文件名含日期,最新日期的报告即为当前分析结果

自检清单

  • 目录名称使用中文(A股/港股)或合理名称(美股优先中文名,无中文名用代码)
  • 东方财富 secid 前缀正确(A股深市=0, 沪市=1, 港股=116, 美股=105)
  • mx-data 成功获取了行情摘要(A股检查是否包含股价/市值/PE等关键字段;美股/港股大概率失败属正常,已降级为 WebSearch)
  • 东方财富 API 成功获取了逐日 OHLCV 数据(data_points > 50)
  • compute_indicators.py 计算了所有指标(indicators.json 中 MACD/RSI/KDJ 等字段非 null)
  • generate_charts.py 生成了至少 3 张图表
  • mx-search 成功获取了新闻/研报/公告(至少 5 条有效信息)
  • 已读取 references/checklist.md 中的 Checklist 和 references/odds_and_winrate.md 中的赔率/胜率心法
  • 已读取 references/ 三份投资哲学框架文档(cognitive_time_gap / profit_philosophy / return_blindspot)
  • 已执行挑刺搜索(做空论点、竞争威胁、技术替代、内部人卖出 4 项搜索)
  • 已执行市场地位/稀缺性搜索(市场份额交叉验证、供需缺口、不可替代性、行业集中度、技术转型/新赛道 5 项搜索)
  • 已执行 Step 5.5 关键问题深挖(识别 2-3 个关键问题并针对性搜索)
  • 报告包含全部 13 个章节(核心结论 + 一~十三)
  • 第一章含:基本信息、市场定位、护城河(逐业务线表格)、战略、客户竞争对手、产业链生态关系、管理层质量评估、卡脖子/稀缺性专项评估(1.8:市场份额+供需缺口+不可替代性+定价权+扩产壁垒=稀缺性总分)
  • 第二章含:营收趋势、盈利能力、资产负债、现金流
  • 第三章含:业务线概览表、核心业务深度专题(1-2条业务线 200-400 字)、护城河、想象空间、市场定价分析
  • 第四章含:价格趋势、板块热度、技术指标、支撑阻力、资金面、风险收益比、催化剂
  • 第五章含:机构评级、舆情、多空观点对比
  • 第六章含:可比公司估值表、竞争优势矩阵、竞品差异结构性归因(毛利率+ROE归因)、格局演变
  • 第七章含:风险分类表(行业/技术/政策/地缘/市场)
  • 第八章含:叙事解构、逐业务线致命缺陷排查(7维度含定价权+叙事验证)、反共识压力测试、增长阶段诊断、缺陷严重程度清单(五级)
  • 第八章必须给出三层判断:生存性(会不会破产)+ 盈利性(利润能否恢复)+ 叙事真实性(生态/平台是否有利润支撑)
  • 第八章每个缺陷标注了严重程度(五级:致命/严重·结构性/严重·不确定/中等/轻度),不再只是「致命/不致命」二分
  • 第八章已执行叙事护城河的利润验证——公司声称的生态/平台优势是否有 ASP 溢价或利润贡献的数据支撑
  • 第八章已执行定价权非对称性检验——行业冲击下公司毛利率变动 vs 竞品,是否暴露结构性弱于对手
  • 第九章含:估值方法论选择说明、PE-TTM/PB/ROE/PEG、预期 EPS、估值锚定规则(9.2.1)、三情景估值(各情景独立 EPS+PE)、多业务估值调整(9.4.1)、简化DCF(9.5,适用时)、假设回溯校验(9.6)
  • 第九章三情景估值使用 9.2.1 规则确定的目标财年,非随意选择
  • 第九章三情景中每个情景有独立的 EPS 估计(不是同一 EPS × 不同 PE)
  • 第九章展示了 EPS 推导过程(营收增速假设 + 净利率假设 → EPS)
  • 第九章假设回溯校验:Ch3 业务判断与 Ch9 EPS 假设一致(或注明差异原因)
  • 第二章含收入质量快速判断(如有一次性收入/并购增长需指出)
  • 第十二章操作建议中的持有期与估值时间框架一致(12 个月,不可倒推)
  • 第十章含:Checklist 13 项逐项检查(每项有是/否/部分 + 证据)+ 四象限定位 + 认知时间差 + 但斌哲学 + 回报侧盲区
  • 第十一章含:长期 + 短期打分(各 4 维度,带分数和说明)
  • 第十二章含:结论、操作建议、监测指标、风险提示
  • 第十三章含 5 张图表引用
  • 打分数值合理,有具体说明(不能只写分数不写理由)
  • 报告已转换为 HTML + PDF(.md + .html + .pdf 三份)
  • 报告中所有日期使用绝对日期(YYYY-MM-DD),不使用"今天"、"最近"
  • 报告末尾有风险提示声明
  • 如果数据获取失败,在报告中明确标注
  • 未查到的数据标注"未查到",预测值标注"预测"/"约",不编造数据

降级策略

故障场景降级方案
mx-data 不可用或返回不完整(美股大概率发生)直接 WebSearch 搜索行情摘要(A股可先尝试东方财富行情页 WebFetch)
mx-search 不可用或返回不足用 WebSearch/WebFetch 补充搜集,至少各搜 2-3 条
东方财富 API 不可用(A股历史K线)用新浪财经 API 获取K线;或 WebSearch 搜集近 30 日收盘价,手动构造 OHLCV
Sina API 不可用(A股历史K线)WebSearch 搜集近 30 日收盘价,手动构造 OHLCV
东方财富 API 不可用(港股/美股历史K线)yfinance 获取K线(需代理可用);或 Tavily extract 获取 ~50 日 OHLCV;或 WebSearch 搜集近 30 日收盘价,手动构造 OHLCV
yfinance 不可用(代理未开启/港股/美股降级)Tavily extract 获取 ~50 日 OHLCV;或 WebSearch 搜集近 30 日收盘价,手动构造 OHLCV
澳洲 OTC 股票(东方财富/yfinance 均不可用)仅 WebSearch 搜集近期价格数据
所有数据源全部失败仅用 WebSearch 搜集信息,生成定性分析(无图表/无精确指标值),报告中注明
图表生成失败跳过图表,报告中标注"图表生成失败"
PDF 生成失败保留 Markdown,跳过 PDF
中文名称无法解析WebSearch 查找对应股票代码,找到后继续,找不到则提示用户输入代码
references/ 框架文档不存在在第十章标注"框架文档缺失,基于通用分析",不跳过该章节
竞品估值数据无法获取完整对比在第六章标注"数据缺失"或"预测值",不得编造

脚本位置

优先使用的妙想 Skills:

  • ~/.claude/skills/mx-data/mx_data.py — 行情摘要查询(仅对A股部分有效,美股/港股大概率失败或返回不完整)
  • ~/.claude/skills/mx-search/mx_search.py — 金融资讯搜索(A股效果最好,港股/美股有中文研报可搜到)

stock-analyzer 自带脚本:

  • ~/.claude/skills/stock-analyzer/scripts/resolve_ticker.py — Ticker 识别(市场类型判断)
  • ~/.claude/skills/stock-analyzer/scripts/sina_data_helper.py — 新浪财经数据解析(A股,降级方案)
  • ~/.claude/skills/stock-analyzer/scripts/fetch_ashare.sh — A股数据获取封装(curl + Sina API,降级方案)
  • ~/.claude/skills/stock-analyzer/scripts/compute_indicators.py — 技术指标计算
  • ~/.claude/skills/stock-analyzer/scripts/generate_charts.py — 图表生成
  • ~/.claude/skills/stock-analyzer/scripts/convert_to_pdf.py — Markdown → PDF

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Stock Analyzer AI skill do?

全方位股票分析报告 Skill。覆盖技术面(MACD、背离、RSI、KDJ、量价关系、布林带、ATR)、 基本面(公司经营、业务情况、财务指标、行业趋势)和 风险提示(技术、市场、政策与地缘政治)。 触发:用户输入任何股票代码或名称并要求分析(如"分析 AAPL"、"看看 600519"、"分析一下 贵州茅台"、 "stock analysis for TSLA"、"研究 00700"、"腾讯的股票怎么样")。 输出一份统一综合报告(按 SOP 11 步组织 13 章节,含**卡脖子/稀缺性专项评估(Section 1.8)** + 挑刺分析 + Checklist 13 项检查 + 投资哲学对照 + 长短期打分)。 默认格式为Markdown,同时支持HTML、PDF 格式输出。 自动获取行情数据、生成技术指标图表。 存储目录:~/Stock_Research/stock_analysis/<TICKER>/。 MUST trigger when the user mentions any stock ticker, stock name, or asks for investment analysis/advice on a specific company.

Why use Stock Analyzer on TypingMind?

Because you install it once and use it with any model. Stock Analyzer is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Stock Analyzer in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/luda66/stock-analyzer/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Stock Analyzer?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Stock Analyzer?

As many as you like. As long as a model supports skills, you can use Stock Analyzer with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Stock Analyzer AI skill free?

It is published on GitHub by luda66. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇