关于 stock-evaluator-v3
stock-evaluator-v3 是用于评估拟买入股票的技能,结合有来源依据的技术面与基本面分析、估值、风险指标、投资者框架评分及建议仪表板。
主要功能
- 01技术面与基本面分析
- 02含安全边际的估值
- 03进阶财务风险指标
- 04八种投资者框架评分
- 05平衡呈现多空观点
- 06提供建议与替代选项
适用场景
- 01买入前评估股票
- 02比较观察名单中的候选股
- 03估算入场与退出价位
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sundial-org/ awesome-openclaw-skills --skill stock-evaluator-v3安装后在 Claude Code 中输入/stock-evaluator-v3确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
ADVANCED-METRICS-GUIDE.mdDASHBOARD-GUIDE.mdEVALUATION-WORKFLOWS.mdVALUATION-GUIDE.md详细介绍
股票评估器(增强版)
⚠️ 关键:必须交付项目清单
每次分析都必须包含以下全部内容:
- ☐ 技术分析(价格走势、指标、关键价位、一目均衡表云图)
- ☐ 基本面分析(业务、财务状况、竞争地位)
- ☐ 高级财务指标(F-Score、Z-Score、M-Score、最大回撤、价值陷阱评分)
- ☐ 投资者角色评分(8 种传奇投资者框架)
- ☐ 估值评估(采用多种方法,并计算安全边际)
- ☐ 多头与空头论据(兼顾双方,并评估平衡性)
- ☐ 明确建议(买入/持有/卖出,并注明信心评级)
- ☐ 替代候选项(若建议卖出,请提供 3–5 个更好的替代选择)
- ☐ 增强版量化风格仪表板(React 仪表板,包含 60 多项指标、一目均衡表、投资者角色、头条新闻和关键备注)
如果无法完成任何一项,请停止并请求澄清。
⚠️ 关键:数据完整性规则
零捏造政策
绝不能捏造、估算或臆造任何数值数据。 仪表板中的每项指标都必须来自:
- 有注明来源的网页搜索结果
- 公司文件(10-K、10-Q、业绩报告)
- 官方金融数据提供商
如果找不到数据 → 使用「N/A」或「--」
必须进行的网页搜索(每次分析的最低要求)
填充仪表板前,必须执行以下搜索:
| 搜索编号 | 查询模板 | 获取的数据 |
|---|---|---|
| 1 | "[TICKER] stock price market cap P/E ratio" | 价格、市值、市盈率 |
| 2 | "[TICKER] ROE ROA profit margin 2024 annual report" | 财务比率 |
| 3 | "[TICKER] revenue growth earnings growth FY2024" | 增长率(已报告) |
| 4 | "[TICKER] Piotroski F-Score" | F-Score(或自行计算) |
| 5 | "[TICKER] insider trading SEC Form 4 2025" | 内部人士买入/卖出情况 |
| 6 | "[TICKER] short interest percentage float" | 空头持仓比例 |
| 7 | "[TICKER] RSI MACD 50-day 200-day moving average beta volatility" | 技术指标 |
| 8 | "[TICKER] analyst price target consensus" | 分析师目标价 |
数据来源优先级
按以下优先顺序使用数据来源:
- 公司官方文件(SEC EDGAR、公司投资者关系页面)
- 交易所数据(NYSE、NASDAQ、LSE 官方数据)
- 经过验证的金融数据(Yahoo Finance、Google Finance、MarketWatch)
- SEC Form 4(仅用于内部人士交易)
- FINRA/交易所(仅用于空头持仓比例)
禁止事项
- 使用训练数据中的任何具体当前数值
- 分析师报告(根据用户偏好)
- 未注明来源的估算值
- 基于「常识」的假设
无法获取数据时的处理方式
| 情况 | 操作 | 显示方式 |
|---|---|---|
| 搜索后仍未找到指标 | 显示「N/A」 | value: "N/A" |
| 数据已过时(超过 1 年) | 注明日期 | value: "15.2% (2023)" |
| 来源之间存在冲突 | 采用最权威的来源 | 在分析中注明 |
| 计算得出的指标(F-Score) | 展示计算过程 | 在文本中说明 |
| 无法获取内部人士数据 | 显示「N/A」 | insBuys: "N/A" |
关键:零表示「确实发生了零」,绝不能用零代替缺失数据。
标准化指标标签
在仪表板中使用以下完全一致的标签(与参考截图相符):
第 1 行:价格与估值 | 财务表现
| 标签 | 备注 |
|---|---|
| Price: | $XX.XX 或 €XX.XX |
| Market Cap: | $XXB 或 €XXB |
| Trailing P/E: | XX.XX |
| Forward P/E: | XX.XX |
| Subsector P/E: | XX.XX 或 N/A |
| PEG (1Y): | X.XX,并附基准(<1) |
| ROE: | XX.XX%,并附基准(>20%) |
| ROA: | XX.XX%,并附基准(>10%) |
| Profit Margin: | XX.XX%,并附基准(>20%) |
| Operative Margin: | XX.XX%,并附基准(>20%)——注意:使用「Operative」,而非「Operating」 |
| Gross Margin: | XX.XX%,并附基准(>40%) |
| ROIC: | XX.X%,并附基准(>15%) |
第 2 行:增长指标 | 风险指标
| 标签 | 说明 |
|---|---|
| Revenue (YoY): | XX.XX%,基准(>10%)——仅限 REPORTED |
| Earning (YoY): | XX.XX%,基准(>0%)——仅限 REPORTED |
| EPS (TTM): | $X.XX |
| Forward EPS: | $X.XX |
| Growth Rates: | 有上限:X.X% / 无上限:X.X% |
| Analyst Target: | $XX.XX |
| CRS (0-1): | X.XX,基准(中等) |
| Debt/Equity (mrq): | X.XX,基准(0.5-1) |
| Piotroski F: | X,基准(≥7) |
| Altman Z: | X.XX,基准(>3) |
| Beneish M: | X.XX,基准(<-1.78) |
| Value Trap: | XX(标签) |
第 3 行:流动性与自由现金流 | 内部人士、情绪与类别
| 标签 | 说明 |
|---|---|
| Current Ratio: | X.XX,基准(1-2) |
| Cash: | $X.XB |
| Debt: | $X.XB 或 N/A |
| FCF Growth 5Y: | XX.X%,基准(>5%) |
| FCF Yield: | X.XX%,基准(>4%) |
| FCF Margin: | XX.XX%,基准(>15%) |
| Payout Ratio: | XX.XX%,基准(<50%) |
| Buys (12M): | X - 来自 SEC Form 4 或 N/A |
| Sells (12M): | X - 来自 SEC Form 4 或 N/A |
| Net Shares (12M): | +/-XXK - 来自 SEC Form 4 或 N/A |
| Short Int (%): | X.X% |
| Sentiment / Articles: | +X.XXX / XX(正面/负面) |
| Stock: [Type] + Div Yield: | 合并:"Stock: Growth" + "Div Yield: X.XX%" |
| Sector/Industry: | 合并:"Sector / Industry" |
第 4 行:质量评分 | 护城河及其他
| 标签 | 说明 |
|---|---|
| CQVS: | XX.XX,含基准范围 |
| Label: | 强/中等/弱 |
| Valuation: | XX.XX |
| Quality: | XX.XX |
| Strength: | XX.XX |
| Integrity: | XX.XX |
| Buffett Moat: | X,基准(4-7) |
| Greenblatt (MF): | EY:X.X% / ROC:X.X% 或 N/A |
| Beta:+ Vol 1Y: | 合并:"Beta: X.XX" + "Vol 1Y: XX.X%" |
| Earnings Predict.: | XX.X%,基准(>80%) |
| Drawdown (5Y): | -XX.X%,含标签(低/中/高) |
| Completeness:+ Data Quality: | 合并:"XX.X%" + "High/Medium/Low" |
标准化基准(唯一可信来源)
使用以下确切阈值进行颜色编码:
| 指标 | 绿色(良好) | 黄色(中性) | 红色(警示) |
|---|---|---|---|
| ROE | >20% | 10-20% | <10% |
| ROA | >10% | 5-10% | <5% |
| Profit Margin | >20% | 10-20% | <10% |
| Operative Margin | >20% | 10-20% | <10% |
| Gross Margin | >40% | 25-40% | <25% |
| ROIC | >15% | 8-15% | <8% |
| Debt/Equity | <1 | 1-2 | >2 |
| Current Ratio | 1-2 | 0.5-1 或 2-3 | <0.5 或 >3 |
| Piotroski F | ≥7 | 4-6 | ≤3 |
| Altman Z | >2.99 | 1.81-2.99 | <1.81 |
| Beneish M | <-2.22 | -2.22 至 -1.78 | >-1.78 |
| PEG (1Y) | <1 | 1-2 | >2 |
| RSI (14) | 30-50 | 50-70 | >70 或 <30 |
| Short Interest | <5% | 5-10% | >10% |
| FCF Yield | >5% | 2-5% | <2% |
| FCF Margin | >15% | 10-15% | <10% |
| Dividend Yield | >2% | 1-2% | <1% 或 >8% |
| Value Trap | 0-39 | 40-59 | 60-100 |
| Max Drawdown | >-30% | -30% 至 -50% | <-50% |
| Revenue Growth | >10% | 0-10% | <0% |
| Earnings Growth | >0% | -10% 至 0% | <-10% |
概述
此技能可对潜在股票投资进行机构级评估。与审视现有持仓的投资组合分析不同,此技能用于评估你正在考虑买入或正在决定是否购买的股票。
评估将回答:
- 我应该买入这只股票吗?
- 我应该以什么价格入场?
- 我应该配置多少资金?
- 我的上行空间和下行风险有多大?
- 我应该何时卖出?
默认货币:€(欧元)
仪表板中的所有货币金额默认均应以**欧元(€)**显示:
- 价格:€42.13
- 市值:€78.3B
- 分析师目标价:€56.45
- 入场价/止损价/目标价:€38、€35、€56
- EPS 值:€1.39、€1.91
重要:使用报告的增长率
对于仪表板指标 “营收增长” 和 “盈利增长”:
- 使用报告的增长率,而非基础、调整后或有机增长数据
- 报告的数字反映了包含外汇、收购和处置影响在内的实际 GAAP/IFRS 数字
- 这能更准确地呈现投资者实际获得的回报
- 例如:如果基础增长率为 7%,但报告的增长率为 2.2%,请使用 2.2%
- 盈利也一样:使用报告的 EPS 增长率,而非调整后的 EPS 增长率
核心用途
股票评估器适用于:
- ✅ 在买入之前评估潜在投资
- ✅ 分析观察名单中的候选标的
- ✅ 获取带有具体价格的买入/持有/卖出建议
- ✅ 比较多个投资机会
- ✅ 寻找比当前考虑的标的更好的替代选择
不适用于:
- ❌ 审视现有投资组合持仓(请使用 Portfolio Analyst 技能)
- ❌ 一般性的股市问题
- ❌ 从零开始筛选或发现股票
- ❌ 期权、衍生品或加密货币分析
评估框架
股票评估的五大支柱
1. 估值评估
- 该股票被低估、估值合理还是高估?
- 多种估值方法(DCF、相对估值、Peter Lynch、资产估值)
- 安全边际要求(15-30%)
- 公允价值估算及置信区间
2. 质量分析
- 商业模式的实力与竞争护城河
- 财务状况与趋势(5-10 年视角)
- 管理层素质与资本配置
- 行业地位与竞争优势
3. 时机评估
- 技术面形态与入场点
- 短期催化剂与事件
- 市场情绪与持仓情况
- 最佳入场价格区间
4. 仓位规模
- 配置建议(占投资组合的百分比)
- 根据确信程度、风险与分散化情况确定
- 最高配置限额
- 风险调整后的仓位规模
5. 确信评级
- 强烈买入:确信程度高、明显低估、风险低
- 买入:机会良好、估值合理、风险适中
- 持有:估值合理,目前没有有力的买入理由
- 回避:估值过高、存在重大风险,或有更好的替代选择
价值陷阱指标
定义
价值陷阱是指某只股票看似被低估(低 P/E、低 P/B),但其低价实际上有合理的基本面原因。尽管看起来“便宜”,股价仍持续下跌。
价值陷阱评分计算(0-100,分数越低 = 越可能是真正的价值,分数越高 = 越可能是陷阱)
评估组成部分(出现陷阱指标时加分):
1. 价格动能(最高 25 分)
- 与市场相比的 6 个月价格变动:若表现落后超过 20%,加 15-25 分
- 12 个月价格变动:持续下跌 = 加 10-20 分
- 若价格动能为正:加 0 分
2. 盈利质量(最高 25 分)
- EPS 趋势(3 年):下降 = 加 10-25 分
- 营收趋势:下降 = 加 5-15 分
- 利润率趋势:收窄 = 加 5-10 分
- 若盈利质量强:加 0 分
3. 资产负债表健康状况(最高 25 分)
- 债务水平是否在上升?加 5-15 分
- 现金流是否为负或正在下降?加 10-20 分
- 营运资本是否在恶化?加 5-10 分
- 若资产负债表健康:加 0 分
4. 估值背景(最高 25 分)
- 低估值倍数是否由基本面恶化所致?加 10-25 分
- 将当前基本面与估值倍数较高时的基本面进行比较
- 若估值有基本面依据:加 0 分
评分公式
Value Trap Score = Momentum Penalty + Quality Penalty + Balance Sheet Penalty + Valuation Penalty
(分数范围为 0 至 100,其中 0 = 确定是真正的价值,100 = 确定是价值陷阱)
分数解读
- 0-19:真正的价值(可能被低估,基本面完好) - 绿色
- 20-39:很可能是真正的价值(有轻微隐忧,需持续关注) - 浅绿色
- 40-59:谨慎区间(信号不一,需谨慎行事) - 黄色
- 60-79:很可能是陷阱(存在多个危险信号) - 橙色
- 80-100:强烈的陷阱信号(回避) - 红色
显示格式
Value Trap: 21 (Genuine)
颜色编码:绿色 <40,黄色 40-60,红色 >60
投资者理念评分
根据 8 位知名投资者的投资理念为每只股票评分(0-10 分)。这有助于用户了解这只股票适合哪类投资者。
1. Warren Buffett 评分
基于《The Warren Buffett Way》——寻找持久的竞争优势
加权关键指标:
- ROE(>20%):2 分
- 利润率(>15%):2 分
- 自由现金流为正且持续增长:2 分
- 护城河强度(品牌、定价能力):2 分
- 盈利可预测:2 分
Buffett 青睐: 可预测的业务、定价能力、较低的资本支出需求、持续盈利能力
2. Charlie Munger 评分
基于《Poor Charlie's Almanack》——思维格栅、逆向思考
重点关注: 哪些方面可能出错(逆向思维原则)
评分: 从 10 分开始,扣除相应分数:
- 高负债(D/E > 2):-3 分
- 盈利波动大:-2 分
- 管理层过往表现不佳:-2 分
- 缺乏竞争护城河:-2 分
- 会计方面存在危险信号:-3 分
3. Ray Dalio 评分
基于《Principles》——全天候投资组合、理解经济机器
关键指标:
- D/E 比率 < 1:2 分
- Beta < 1:2 分
- 不同经济周期下利润率稳定:2 分
- 盈利波动低:2 分
- 具备历史抗衰退能力:2 分
Dalio 青睐: 去杠杆化投资机会、运营效率、抵御周期波动的能力
4. Peter Lynch 评分
基于《One Up on Wall Street》——GARP(合理价格下的成长)
主要指标:PEG 比率(P/E ÷ 增长率)
- PEG < 0.5:10 分
- PEG 0.5-1.0:8 分
- PEG 1.0-1.5:6 分
- PEG 1.5-2.0:4 分
- PEG > 2.0:2 分
调整因素:
- 盈利持续增长:+1 分
- 业务易于理解:+1 分
- 行业衰退:-1 分
5. Benjamin Graham 评分
基于《The Intelligent Investor》——安全边际
Graham 标准(每项 2 分,最高 10 分):
- P/E < 15
- P/B < 1.5
- 流动比率 > 2
- 连续 10 年盈利
- 连续 20 年以上派发股息
6. Joel Greenblatt 评分
基于《The Little Book That Beats the Market》——神奇公式
结合两个排名:
- 盈利收益率(EBIT/EV):越高越好
- 资本回报率(EBIT/净固定资产 + 营运资本):越高越好
评分: 综合排名位于前 10% 得 10 分,其他情况按排名递减
7. John Templeton 评分
基于逆向投资和全球价值投资
关键因素:
- 股价处于多年低点:+3 分
- 不受分析师青睐:+2 分
- 尽管市场悲观,基本面依然强劲:+3 分
- 全球视角(美国以外的投资机会):+2 分
8. George Soros 评分
基于《The Alchemy of Finance》——反身性
关键因素:
- 动量和趋势强度:3 分
- 宏观利好因素:3 分
- 市场看法转变:2 分
- 拐点催化剂:2 分
Soros 青睐: 宏观投资机会、反身性情形、参与趋势
显示格式
在雷达图周围显示 8 个徽章,并标注分数和颜色:
- 绿色(7-10):高度契合
- 黄色(4-6.9):中度契合
- 红色(0-3.9):契合度低
增强型技术分析
一目均衡表分析
需计算的组成部分:
- Tenkan-sen(转换线): (9 个周期的最高价 + 9 个周期的最低价)/ 2
- Kijun-sen(基准线): (26 个周期的最高价 + 26 个周期的最低价)/ 2
- Senkou Span A: (Tenkan-sen + Kijun-sen)/ 2,向前绘制 26 个周期
- Senkou Span B: (52 个周期的最高价 + 52 个周期的最低价)/ 2,向前绘制 26 个周期
- Chikou Span(迟行线): 当前收盘价向后绘制 26 个周期
云层(Kumo): Senkou Span A 与 Senkou Span B 之间的区域
需识别并显示的信号:
- TK 看涨交叉: Tenkan-sen 向上穿过 Kijun-sen(看涨)——用 ◆ 标记
- TK 看跌交叉: Tenkan-sen 向下穿过 Kijun-sen(看跌)——用 ◆ 标记
- Kumo 看涨扭转: 云层从红色变为绿色——用 ◆ 标记
- Kumo 看跌扭转: 云层从绿色变为红色——用 ◆ 标记
- 价格与云层的关系: 云层上方(看涨)、云层下方(看跌)、云层内(中性)
双重 PEG 比率
- **PEG(1 年):**市盈率 ÷ 1 年远期增长预期
- **PEG(5 年):**市盈率 ÷ 5 年历史增长率
- 两者从不同角度评估增长估值
FCF 利润率
- **公式:**自由现金流 / 营收 × 100
- 基准:>15% 为优秀,>10% 为良好
- 显示相对于销售额的现金生成效率
新闻情绪与卖空比例
- **新闻情绪:**基于近期文章情绪,取值范围为 -1 至 +1
- **卖空比例:**被卖空的流通股占比(>10% = 高,<5% = 低)
- 两者均可反映市场情绪以及潜在的逼空或反转
基本面分析流程
1. 了解业务(始终优先)
分析内容:
- 公司做什么?(产品、服务、商业模式)
- 营收来源及构成
- 目标客户和市场
- 竞争优势(护城河来源)
- 市场地位和份额
- 行业动态与趋势
管理层评估:
- CEO 的背景、任期和过往业绩
- CFO 和核心高管
- 资本配置决策(股息、回购、收购、研发)
- 管理层薪酬与股东利益的一致性
- 内部人交易模式(买入是看涨信号)
- 从财报电话会议和致股东信评估领导力
竞争地位:
- 市场份额及趋势
- 主要竞争对手(找出 3–5 家直接同行)
- 这家公司有哪些差异化优势?
- 是否具备可持续的竞争优势?
2. 财务分析(5–10 年视角)
研究流程顺序:
- 先看最新的 10-K——了解当前业务和近期业绩
- 回溯过去 5–10 年的历史 10-K——了解发展历程
- 查看最近 2–3 年的 10-Q——了解当前走势
- 查阅委托书——了解公司治理和薪酬
要分析的关键指标:
质量基准:
- ROE > 15%(股本回报率)
- 利润率 > 15%
- 毛利率 > 30%
- 债务 < 年营收
- 自由现金流为正且持续增长
- 5 年营收增长(经通胀调整)
需评估的趋势:
- 营收增长走势(加速、稳定还是减速?)
- 利润率扩张或收缩(原因是什么?)
- 现金流的一致性和质量
- 资产负债表实力(债务水平、流动性)
- 投入资本回报率(ROIC)
- 营运资本管理
警示信号:
- 营收增长但利润率下降
- 自由现金流为负或不稳定
- 债务增长快于现金生成
- 市场份额流失
- 频繁未达到业绩指引
- 会计违规
3. 竞争护城河评估
护城河强度:宽 / 窄 / 无
评估来源:
- 网络效应:用户越多,产品是否越好用?
- 品牌忠诚度:品牌实力是否带来定价能力?
- 转换成本:转换是否困难或成本高昂?
- 监管壁垒:许可证、专利、法规?
- 成本优势:规模、技术、地理位置?
- 无形资产:专利、商标、专有数据?
护城河持久性:
- 优势能维持多久?
- 什么因素可能侵蚀护城河?
- 护城河是在增强还是减弱?
同行对比: 将该公司的护城河与 3–5 家直接竞争对手进行比较:
- 市场份额趋势
- 盈利能力指标(利润率、ROE)
- 增长率
- 财务实力
4. 高级财务健康指标
除了基本质量指标外,还要计算以下高级评分,以获得更深入的洞察:
Piotroski F-Score(财务实力)
目的:通过盈利能力、杠杆和运营效率衡量财务实力,满分为 9 分。
评分(0-9 分,分数越高越好):
盈利能力(4 分):
- ROA > 0:+1
- 经营现金流 > 0:+1
- ROA 同比改善:+1
- 经营现金流 > 净利润(盈利质量):+1
杠杆/流动性(3 分):
- 长期债务同比减少:+1
- 流动比率同比改善:+1
- 过去一年未发行新股:+1
运营效率(2 分):
- 毛利率同比改善:+1
- 资产周转率同比改善:+1
解读:
- 8-9:财务健康状况极佳
- 6-7:财务健康状况良好
- 4-5:财务健康状况尚可
- 0-3:财务健康状况较弱
Altman Z-Score(破产风险)
目的:预测未来 2 年内发生破产的概率。
公式(适用于上市制造业公司): Z = 1.2(A) + 1.4(B) + 3.3(C) + 0.6(D) + 1.0(E)
其中:
- A = 营运资本 / 总资产
- B = 留存收益 / 总资产
- C = EBIT / 总资产
- D = 市值 / 总负债
- E = 销售额 / 总资产
解读:
- Z > 2.99:安全区(破产风险低)
- Z 1.81-2.99:灰色区(风险中等)
- Z < 1.81:困境区(破产风险高)
注意:非制造业公司需进行调整(系数不同)。
Beneish M-Score(盈余操纵检测)
目的:识别盈余操纵的可能性。
关键指标(简化方法):
- 应收账款周转天数指数(上升 = 警示)
- 毛利率指数(下降 = 警示)
- 资产质量指数(上升 = 警示)
- 销售增长指数(增长过快 = 警示)
- 折旧指数(下降 = 警示)
- 销售及管理费用指数(变化不成比例 = 警示)
- 杠杆指数(上升 = 警示)
- 总应计项目 / 总资产(较高 = 警示)
解读:
- M-Score > -1.78:可能操纵盈余(红色警报)
- M-Score < -1.78:不太可能操纵盈余(清白)
实用检查(如果无法获得完整 M-Score):
- 应计项目是否长期相对于现金流偏高?
- 应收账款周转天数是否比营收增长更快?
- 营收增长的同时,利润率是否下降?
- 是否有会计重述或审计师变更?
最大回撤(5 年)
目的:衡量价格从峰值到谷底的最大跌幅。
计算方法:
- 找出过去 5 年内的最高价格
- 找出价格回升前随后出现的最低价格
- 最大回撤 % = (最低价 - 最高价) / 最高价 × 100
解读:
- 0-20%:波动性低(防御型股票)
- 20-40%:波动性中等(典型股票)
- 40-60%:波动性高(周期型/成长型)
- >60%:波动性极高(投机型)
综合评分
实力评分(0-100): 综合考量:
- 财务指标(F-Score 的贡献)
- 盈利能力(ROE、利润率)
- 增长率
- 市场地位
诚信评分(0-100): 综合考量:
- M-Score(盈余质量)
- 现金流与盈利的一致性
- 会计实务
- 管理层透明度
可预测性评分(0-100): 综合考量:
- 营收稳定性(低波动)
- 盈利稳定性
- 商业模式稳定性
- 周期性评估
数据质量评分(0-100):
- 财务数据的完整性
- 文件的时效性
- 审计师质量
- 信息披露透明度
5. 风险分析
公司特定风险:
- 执行风险(管理层能否兑现承诺?)
- 竞争风险(市场份额流失、新进入者)
- 产品集中度(依赖单一产品)
- 客户集中度(少数大客户)
- 关键人物风险(对 CEO 的依赖)
- 财务困境风险(Z-Score 评估)
- 盈利质量风险(M-Score 评估)
行业风险:
- 颠覆性变化(技术或商业模式)
- 周期性(对经济的敏感度)
- 监管(政策变化)
- 商品化(定价能力减弱)
- 结构性衰退(长期逆风)
宏观风险:
- 经济(衰退、通胀、利率)
- 地缘政治(贸易战、冲突)
- 货币(外汇敞口)
- 市场(估值水平、市场情绪)
整体风险水平:低 / 中等 / 高
综合风险评分:(0-1 分,越低越好)
- 综合考量:Z-Score、波动率、杠杆、盈利质量
- <0.30:低风险
- 0.30-0.60:中等风险
-
0.60:高风险
估值评估
使用多种估值方法,综合得出公允价值估值。
必需的估值方法
1. DCF 分析(贴现现金流)
- 预测自由现金流(5-10 年)
- 应用适当的折现率(WACC)
- 计算终值
- 纳入安全边际:15-30%
- 使用不同假设进行敏感性分析
2. 相对估值
- 与 3-5 家直接同行公司进行比较
- 关键倍数:P/E、EV/EBITDA、Price/Sales、Price/Book
- 根据增长差异进行调整
- 考虑行业特定倍数
- 同时采用当前和历史同行平均值
3. Peter Lynch 公允价值
- 合理价格增长框架
- 将 P/E 与增长率比较(PEG 比率)
- 当 P/E ≈ 增长率时,视为公允价值
- 根据质量因素进行调整
4. 资产估值法(适用时)
- 适用于 REIT、金融企业、资产密集型公司
- 账面价值或重置成本
- 净资产价值计算
估值综合
公允价值估值:€X.XX
为各方法分配适当权重:
- DCF:40%(现金流可靠时)
- 相对估值:30%(同行比较)
- Peter Lynch:30%(按增长调整)
安全边际:
- 当前价格与公允价值相比:折价/溢价 X%
- 要求:最低 15% 的安全边际
- 充足:15-30% 的安全边际
- 极佳:>30% 的安全边际
估值结论:
- 低估:低于公允价值 >15%(买入机会)
- 估值合理:在公允价值 ±15% 范围内(持有)
- 高估:高于公允价值 >15%(规避/卖出)
技术分析(入场时机)
重点是寻找最佳入场点,而非进行全面技术分析。
关键技术要素
1. 价格走势(过去 30-60 天)
- 当前趋势:上升趋势 / 下降趋势 / 区间震荡
- 近期价格形态
- 成交量趋势(上涨时是否放量?)
- 动能评估
2. 关键价位
- 支撑位:买盘开始出现的位置
- 主要支撑位:€X.XX
- 次要支撑位:€X.XX
- 阻力位:卖压开始加大的位置
- 主要阻力位:€X.XX
- 次要阻力位:€X.XX
3. 技术指标
- RSI(相对强弱指数):
-
70 = 超买(可能回调)
- <30 = 超卖(可能反弹)
- 40-60 = 中性
-
- MACD(移动平均收敛发散指标):
- 看涨交叉 / 看跌交叉 / 中性
- 动能正在增强还是减弱?
- 移动平均线:
- 50 日均线:€X.XX(价格在上方/下方?)
- 200 日均线:€X.XX(趋势指标)
4. 入场评估
- 技术形态:看涨 / 中性 / 看跌
- 最佳入场方式:等待回调至支撑位 / 按市价买入 / 等待突破
- 入场价格区间:€X.XX - €X.XX
- 高于此价位应规避:€X.XX(风险回报不佳)
多空观点分析
必须遵守:每项分析都必须公允地呈现多空双方观点。
看涨情景(乐观情景)
潜在上涨空间:+X% 至 €X.XX
- [关键看涨理由 1,附具体证据]
- [关键看涨理由 2,附具体证据]
- [关键看涨理由 3,附具体证据]
要实现这一情景,需要满足以下条件:
- [必要条件 1]
- [必要条件 2]
看跌情景(悲观情景)
潜在下跌空间:-X% 至 €X.XX
- [关键看跌理由 1,附具体证据]
- [关键看跌理由 2,附具体证据]
- [关键看跌理由 3,附具体证据]
出现以下情况时,这一情景可能发生:
- [风险触发因素 1]
- [风险触发因素 2]
平衡评估
哪个情景的概率更高:[看涨 / 看跌 / 均衡]
[说明哪个情景更有可能,需考虑:
- 各方证据的质量
- 历史先例
- 管理层的过往业绩
- 行业动态
- 当前估值]
投资建议框架
买入建议标准
- 公允价值比当前价格高出 >15%(具有充足的安全边际)
- 基本面强劲或正在改善
- 技术面合理或看涨
- 存在明确的催化因素
- 风险水平可接受
- 信心等级:强烈买入或买入
持有建议标准
- 公允价值在当前价格的 ±15% 以内
- 基本面稳定,缺乏有力的催化因素
- 其他地方可能存在更好的机会
- 等待更好的买入价格
- 信心等级:持有
卖出/回避建议标准
- 公允价值比当前价格低 >15%(估值过高)
- 基本面恶化
- 风险显著
- 存在更好的替代选择
- 必须提供 3-5 个替代候选标的
- 信心等级:回避
仓位配置框架
基于以下因素给出配置建议:
信心 + 风险 = 仓位规模
强烈买入(高信心、低风险):
- 仓位规模:占投资组合的 5-8%
- 上限:10%
买入(中等信心、中等风险):
- 仓位规模:占投资组合的 3-5%
- 上限:7%
投机性/高风险:
- 仓位规模:占投资组合的 1-3%
- 上限:5%
考虑因素:
- 分散投资需求(避免行业集中)
- 与现有持仓的相关性
- 投资组合的整体风险
- 流动性需求
- 用户的风险承受能力(根据项目上下文)
买入与卖出策略
买入策略
不采用分批建仓策略——建议一次性买入:
如果建议买入:
- 理想买入价格:€X.XX - €X.XX(最佳区间)
- 最高买入价格:€X.XX(高于此价格,风险回报不利)
- 操作方式:
- “按市价立即买入”(如果当前价格合适)
- “等待回调至 €X.XX 支撑位”(如果股价已大幅上涨)
- “突破 €X.XX 后买入”(如果出现突破形态)
- “不要在 €X.XX 以上买入”(如果估值过高)
卖出策略
价格目标(12 个月): €X.XX(上涨空间 +X%)
- 保守情景:€X.XX
- 基准情景:€X.XX
- 乐观情景:€X.XX
止损位: €X.XX(最大亏损 -X%)
- 技术止损:跌破关键支撑位
- 基本面止损:投资逻辑被破坏时
以下情况出现时卖出(投资逻辑被破坏的条件):
- [具体的基本面恶化]
- [具体的竞争威胁]
- [具体的估值阈值]
持有期限:
- 预期时间范围:[6-12 个月 / 1-3 年 / 3-5+ 年]
- 根据投资类型确定(波段交易或长期持有)
催化因素识别
识别可能推动股价表现的具体事件。
近期(0-6 个月):
- 即将公布的财报:[日期]
- 产品发布:[事件]
- 监管决定:[预计时间]
- 行业事件:[会议、数据发布]
中期(6-18 个月):
- 市场扩张计划
- 新产品周期
- 利润率提升举措
- 战略合作伙伴关系
长期(18+ 个月):
- 行业结构性趋势
- 市场份额提升
- 技术领先地位
- 商业模式演变
关键分析约束
关键原则:
-
基本面分析不使用媒体报道或新闻
- 仅使用公司文件(10-K、10-Q、8-K、委托书)
- 使用财报电话会议文字记录
- 不要依赖新闻文章或新闻稿
- 例外:可使用新闻了解近期进展,但须在公司文件中核实
-
重视幅度,而非精确度
- 重点关注安全边际良好(>15%)的股票
- 不需要完美的预测
- 大致正确胜过精确地错误
- 保守假设优于乐观假设
-
着眼长期
- 分析 5-10 年的趋势,而不只是最近几个季度
- 区分暂时性挫折与结构性问题
- 可持续的竞争优势最为重要
- 区分短期噪声与长期信号
-
比较同类对象
- 与 3-5 家直接竞争对手进行基准比较
- 不要只与广泛市场指数比较
- 使用行业特定指标和基准
- 根据公司规模和成熟度进行调整
-
保持求真务实
- 承认局限性和未知因素
- 公正呈现看涨和看跌的论据
- 适当时坦言“我不知道”
- 根据证据变化更新观点
输出模板
# [SYMBOL] - [Company Name] Evaluation
## ⚠️ DELIVERABLES CHECKLIST ✓
☑ Technical Analysis Complete
☑ Fundamental Analysis Complete
☑ Valuation Assessment Complete
☑ Bull vs. Bear Case Complete
☑ Clear Recommendation: **[BUY / HOLD / SELL]**
☑ Alternative Candidates: [If SELL, list 3-5 alternatives below]
---
## 📊 Executive Summary
[2-3 sentence bottom-line assessment with key reasoning]
**Recommendation: [BUY / HOLD / SELL]**
**Conviction: [Strong Buy / Buy / Hold / Avoid]**
---
## 💰 Valuation Assessment
**Fair Value Estimate: €X.XX** (Current: €X.XX)
- **Margin of Safety: X%** [Adequate >15% / Insufficient <15%]
- **Valuation: [UNDERVALUED / FAIRLY VALUED / OVERVALUED]**
| Valuation Method | Fair Value | vs. Current | Weight |
|-----------------|-----------|-------------|--------|
| DCF Analysis | €X.XX | +X% | 40% |
| Peer Relative | €X.XX | +X% | 30% |
| Peter Lynch | €X.XX | +X% | 30% |
| **Weighted Average** | **€X.XX** | **+X%** | **100%** |
**Assumptions:**
- DCF: [Key assumptions - growth rate, margins, discount rate]
- Margin of safety applied: X%
---
## 🏢 Business & Competitive Analysis
### What They Do
[2-3 paragraph business model summary:
- Core products/services
- Revenue breakdown
- Target markets
- Business model]
### Competitive Advantages
**Moat Strength: [Wide / Narrow / None]**
1. **[Advantage 1]**: [Detailed explanation with evidence]
2. **[Advantage 2]**: [Detailed explanation with evidence]
3. **[Advantage 3]**: [Detailed explanation with evidence]
**Moat Durability:** [How sustainable are these advantages? 3-5 years? 10+ years?]
### Management Quality Assessment
**Overall Rating: [Excellent / Good / Adequate / Concerning]**
- **CEO**: [Name] - [Background, tenure]
- Track record: [Achievements/concerns]
- Capital allocation: [Shareholder-friendly? Smart acquisitions?]
- **CFO**: [Name] - [Financial stewardship]
- **Insider Trading**: [Recent buying/selling activity]
- **Key Insight**: [Overall management assessment]
### Competitive Position
**Market Position:**
- Market share: X% (#X in industry)
- Share trend: [Gaining / Stable / Losing]
**Key Competitors:** [List 3-5 direct peers]
**Peer Comparison:**
| Company | Mkt Cap | Revenue Growth | Profit Margin | ROE | P/E | Moat |
|---------|---------|---------------|---------------|-----|-----|------|
| [Target] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 1] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 2] | €XB | X% | X% | X.X | X.X | [Rating] |
| [Peer 3] | €XB | X% | X% | X% | X.X | [Rating] |
**Competitive Assessment:** [Is this the best company in the sector?]
---
## 📈 Financial Health Analysis
### Quality Metrics vs. Benchmarks
| Metric | Current | 1Y Ago | 3Y Ago | 5Y Ago | Target | Status |
|--------|---------|--------|--------|--------|--------|--------|
| ROE | X% | X% | X% | X% | >15% | [✓/✗] |
| Profit Margin | X% | X% | X% | X% | >15% | [✓/✗] |
| Gross Margin | X% | X% | X% | X% | >30% | [✓/✗] |
| Revenue Growth | X% | X% | X% | X% | >0% | [✓/✗] |
| Debt/Revenue | X.X | X.X | X.X | X.X | <1.0 | [✓/✗] |
| FCF | €XM | €XM | €XM | €XM | Positive | [✓/✗] |
### Advanced Financial Health Scores
**Piotroski F-Score: X/9** [Excellent 8-9 / Good 6-7 / Adequate 4-5 / Weak 0-3]
*Profitability:* X/4
- ROA positive: [✓/✗]
- Operating CF positive: [✓/✗]
- ROA improving: [✓/✗]
- CF > Net Income: [✓/✗]
*Leverage:* X/3
- Debt decreasing: [✓/✗]
- Current ratio improving: [✓/✗]
- No dilution: [✓/✗]
*Efficiency:* X/2
- Margin improving: [✓/✗]
- Turnover improving: [✓/✗]
**Assessment:** [Detailed interpretation of F-Score]
**Altman Z-Score: X.XX** [Safe >2.99 / Grey 1.81-2.99 / Distress <1.81]
- **Bankruptcy Risk:** [Low / Moderate / High]
- **Interpretation:** [Explanation of Z-Score and financial stability]
**Beneish M-Score: X.XX** [Clean <-1.78 / Warning >-1.78]
- **Earnings Quality:** [High / Moderate / Questionable]
- **Red Flags:** [List any concerning indicators or state "None"]
**Max Drawdown (5Y): -X%** [Low <20% / Moderate 20-40% / High 40-60% / Extreme >60%]
- **Volatility Assessment:** [Low/Moderate/High volatility explanation]
- **Peak price:** €X.XX ([Date])
- **Trough price:** €X.XX ([Date])
### Consolidated Scores
**Strength Score: X/100** (Financial power and market position)
**Integrity Score: X/100** (Earnings quality and transparency)
**Predictability Score: X/100** (Business consistency)
**Data Quality Score: X/100** (Information completeness)
**Overall Quality Rating: [Elite / Strong / Good / Adequate / Weak]**
### Financial Trends (5-10 Year View)
**Revenue:**
- [Trend description: growth rate, consistency, drivers]
- [Any concerning patterns?]
**Margins:**
- Gross margin: [Expanding / Stable / Declining]
- Operating margin: [Trend]
- Net margin: [Trend]
- Drivers: [Why are margins moving this way?]
**Cash Flow:**
- Operating cash flow: [Trend and quality]
- Free cash flow: [Consistency, conversion]
- Capital allocation: [Dividends, buybacks, capex, acquisitions]
**Balance Sheet:**
- Debt levels: [Conservative / Moderate / High]
- Liquidity: [Strong / Adequate / Concerning]
- Trend: [Strengthening / Stable / Weakening]
### 🚩 Red Flags
[List any concerning trends or issues, or state "None identified"]
---
## 📉 Technical Analysis & Entry Timing
### Price Action (Last 30-60 Days)
- **Current Price**: €X.XX
- **52-Week Range**: €X.XX - €X.XX
- **30-day Change**: [+/-X%]
- **Trend**: [Uptrend / Downtrend / Range-bound]
- **Volume**: [Increasing / Decreasing / Normal]
### Key Technical Levels
**Support Levels:**
- **Primary Support: €X.XX** - [Significance/reason]
- **Secondary Support: €X.XX** - [Significance/reason]
**Resistance Levels:**
- **Primary Resistance: €X.XX** - [Significance/reason]
- **Secondary Resistance: €X.XX** - [Significance/reason]
### Technical Indicators
**RSI**: X.X [Overbought >70 / Neutral 30-70 / Oversold <30]
**MACD**: [Bullish crossover / Bearish crossover / Neutral]
- Interpretation: [Momentum assessment]
**Moving Averages:**
- 50-day MA: €X.XX - Price is [above/below]
- 200-day MA: €X.XX - Price is [above/below]
- Golden/Death Cross: [Any recent crossovers?]
### Entry Assessment
**Technical Setup: [Bullish / Neutral / Bearish]**
**Optimal Entry Strategy:**
- [Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
- **Ideal Entry Range: €X.XX - €X.XX**
- **Maximum Buy Price: €X.XX** (avoid above this)
**Momentum: [Strong Bullish / Bullish / Neutral / Bearish / Strong Bearish]**
---
## ⚖️ Bull vs. Bear Case
### 🐂 Bull Case
**Potential Upside: €X.XX (+X%)**
1. **[Bull Argument 1]**: [Specific evidence and reasoning]
2. **[Bull Argument 2]**: [Specific evidence and reasoning]
3. **[Bull Argument 3]**: [Specific evidence and reasoning]
**For this to play out:**
- [Required condition 1]
- [Required condition 2]
**Probability: [High / Moderate / Low]**
### 🐻 Bear Case
**Potential Downside: €X.XX (-X%)**
1. **[Bear Argument 1]**: [Specific risk and reasoning]
2. **[Bear Argument 2]**: [Specific risk and reasoning]
3. **[Bear Argument 3]**: [Specific risk and reasoning]
**This happens if:**
- [Risk trigger 1]
- [Risk trigger 2]
**Probability: [High / Moderate / Low]**
### ⚖️ Balance Assessment
**Which case is more probable: [Bull / Bear / Balanced]**
[2-3 paragraph explanation of:
- Weight of evidence for each side
- Historical precedent
- Management track record
- Industry dynamics
- Current valuation
- Risk/reward assessment]
---
## ⚠️ Risk Analysis
**Overall Risk Level: [Low / Moderate / High]**
### Key Risks
**1. [Risk Category - e.g., Competition Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**2. [Risk Category - e.g., Execution Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**3. [Risk Category - e.g., Valuation Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**4. [Risk Category - e.g., Macro Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
### Risk Mitigation
[How does the company/investment address these risks?]
[What reduces the risk in this investment?]
---
## 🎯 Catalysts & Timeline
### Near-Term (0-6 months)
- **[Date]**: [Specific catalyst - earnings, product launch, etc.]
- **[Date]**: [Specific catalyst]
### Medium-Term (6-18 months)
- [Expected development 1]
- [Expected development 2]
### Long-Term (18+ months)
- [Structural trend 1]
- [Structural trend 2]
**Expected Timeline to Target**: [6-12 months / 1-3 years / 3-5+ years]
---
## 💡 Investment Recommendation
### **RECOMMENDATION: [BUY / HOLD / SELL]**
### **Conviction: [Strong Buy / Buy / Hold / Avoid]**
### Rationale
[2-3 paragraph synthesis of entire analysis:
- Why this recommendation?
- What makes it compelling (or not)?
- How does valuation + fundamentals + technicals + catalysts = this conclusion?
- What's the risk/reward?]
---
## 📍 Entry Strategy (if BUY)
**Ideal Entry Price: €X.XX - €X.XX**
- Reasoning: [Why this range?]
**Maximum Acceptable Price: €X.XX**
- Above this: Risk/reward unfavorable
**Approach:**
- [Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
- Reasoning: [Current technical setup justification]
**DO NOT BUY IF:**
- Price exceeds €X.XX without fundamental improvement
- [Other specific condition]
---
## 🎯 Exit Strategy
### Price Targets (12-Month Horizon)
- **Conservative**: €X.XX (+X%)
- **Base Case**: €X.XX (+X%)
- **Optimistic**: €X.XX (+X%)
### Stop Loss
**Stop Loss: €X.XX (-X% maximum loss)**
- Technical: Below €X.XX support
- Fundamental: If [thesis-breaking condition]
### Sell Conditions (Thesis-Breaking)
Exit position if any of these occur:
1. [Specific fundamental deterioration - e.g., "ROE drops below 10% for 2 consecutive quarters"]
2. [Specific competitive threat - e.g., "Loses >5% market share to competitor"]
3. [Specific valuation threshold - e.g., "Reaches €X.XX (>50% above fair value)"]
### Hold Duration
**Expected Timeframe**: [6-12 months / 1-3 years / 3-5+ years]
- Based on: [Investment type - swing trade vs. long-term hold]
---
## 📏 Position Sizing
### Recommended Allocation: X-X% of portfolio
**Specific Recommendation: X%**
**Rationale:**
- Conviction level: [Strong Buy / Buy → drives size]
- Risk level: [Low / Moderate / High → constrains size]
- Diversification: [Sector exposure, correlation with existing holdings]
- Liquidity: [Can exit position easily?]
**Maximum Allocation: X%**
- Risk management limit
- Don't exceed even if highly convicted
### Sizing Guidelines Applied:
- Strong Buy + Low Risk = 5-8% (max 10%)
- Buy + Moderate Risk = 3-5% (max 7%)
- Speculative + High Risk = 1-3% (max 5%)
---
## 🔑 Key Takeaways
### Top 3 Reasons to Invest
1. [Most compelling positive factor]
2. [Second most compelling positive factor]
3. [Third most compelling positive factor]
### Top 3 Concerns
1. [Biggest risk or concern]
2. [Second biggest risk or concern]
3. [Third biggest risk or concern]
### One-Sentence Investment Thesis
[Single sentence capturing the complete investment case - why buy or avoid]
---
## 📚 Research Documentation
**Sources Consulted:**
- 10-K filings: [Fiscal years reviewed - e.g., FY2020-2024]
- 10-Q filings: [Recent quarters - e.g., Q1-Q3 2025]
- Earnings calls: [Dates reviewed]
- Proxy statements: [Years reviewed]
- Management letters: [Years reviewed]
- Competitor analysis: [Companies benchmarked]
**Analysis Depth:**
- Historical period analyzed: [X years]
- Peer companies compared: [Number and names]
- Valuation methods used: [DCF, Relative, Peter Lynch, Asset-based]
**Confidence Level: [High / Medium / Low]**
- **Based on**: [Quality and completeness of available data]
- **Gaps**: [Any areas where information is limited or unavailable]
- **Limitations**: [Any constraints in the analysis]
---
## 🔄 Alternative Candidates (Required if SELL/AVOID)
[If recommending SELL or AVOID, provide 3-5 better investment alternatives with brief rationale for each]
### Alternative 1: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
### Alternative 2: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
### Alternative 3: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
[Continue for 4-5 alternatives if SELL recommendation]
---
**Analysis Date**: [Current Date]
**Next Review**: [Suggested review date based on catalysts or timeline]
**Analyst**: Claude Stock Evaluator
---
## 📊 Quant-Style Dashboard
**FINAL MANDATORY STEP**: Create a React artifact using the standardized quant-style dashboard template with:
**Required Data to Populate:**
- ✅ All 48 metrics across 8 sections (calculated above)
- ✅ Historical price data (5 years, 6-12 points)
- ✅ 1-year price + 6-month forecast (4-6 points)
- ✅ MACD data (3-5 recent points)
- ✅ RSI data (3-5 recent points)
- ✅ Radar chart (12 metrics, normalized 0-100)
- ✅ Bull case (target + 5 points)
- ✅ Bear case (target + 5 points)
- ✅ Entry/exit strategy (5 values)
**Use the EXACT template code provided in the skill instructions above.**
**DO NOT use placeholder values - populate with actual calculated data from this analysis.**
[Create the React artifact here using the quant-style template]
量化风格仪表板产物
**必须:**完成全文分析后,使用标准化的量化风格模板创建 React 仪表板产物。
仪表板模板结构
仪表板采用特定的机构级格式,包含:
1. 标题区域(橙色背景)
- 格式:
TICKER - Company Name
2. 八个指标区域(2 列网格)
| 左列 | 右列 |
|---|---|
| 价格与估值(蓝色) | 财务表现(绿色) |
| 增长指标(翠绿色) | 风险指标(红色) |
| 流动性与自由现金流(青色) | 内部人士与市场情绪(紫色) |
| 质量评分(橙色) | 护城河及其他(灰色) |
每个区域:6 个指标框,包含数值、标签、基准和颜色编码
3. 图表区域(3 列网格)
-
左侧:线性价格图表 + MACD
- 价格、内在价值、市场价值线
- 5 年历史数据
- 下方显示 MACD 指标
-
中间:雷达图 + 1 年预测
- 12 个维度的雷达图(标准化为 0-100)
- 综合建议徽章
- 1 年价格 + 6 个月预测
-
右侧:对数价格图表 + RSI
- 对数刻度价格历史
- 内在价值对比
- 下方显示 RSI(14)指标
4. 关键说明区域(可展开的折叠面板)
- 3 列布局:看涨论据 | 看跌论据 | 入场/退出策略
- 点击可展开/折叠
5. 页脚
- 分析日期、数据来源、建议
各区域所需指标
价格与估值(6 个指标):
- 价格、市值、滚动市盈率、预期市盈率、子行业典型市盈率、PEG 比率
财务表现(6 个指标):
- ROE、ROA、利润率、营业利润率、毛利率、ROIC
增长指标(6 个指标):
- 收入增长率(5 年)、盈利增长率、每股收益(TTM)、预期每股收益、分析师评级、目标价
风险指标(6 个指标):
- 负债权益比、综合风险、F-Score、Z-Score、M-Score、最大回撤(5 年)
流动性与自由现金流(6 个指标):
- 流动比率、现金总额、债务总额、自由现金流增长率(5 年)、自由现金流收益率、派息率
内部人士与市场情绪(6 个指标):
- 内部人士买入(12 个月)、内部人士卖出(12 个月)、净股数(12 个月)、RSI(14 天)、股票类型、行业
质量评分(6 个指标):
- CQVS、标签、估值评分、质量评分、实力评分、诚信评分
护城河及其他(6 个指标):
- 护城河评分(0-10)、Beta、可预测性、数据质量、完整性、股息收益率
雷达图指标(12 项,标准化为 0-100)
- 营收增长(标准化:X% 的增长率 → 20% 及以上时为 100)
- 营业利润率(标准化:X% → 30% 及以上时为 100)
- 毛利率(标准化:X% → 60% 及以上时为 100)
- 利润率(标准化:X% → 25% 及以上时为 100)
- ROE(标准化:X% → 30% 及以上时为 100)
- 风险评分(综合风险的反向值:100 - risk*100)
- Beta 评分(反向值:beta=0.5 时为 100,beta=1.5 时为 50,beta=2.5+ 时为 0)
- P/市场折价(100 = 严重低估,50 = 估值合理,0 = 高估)
- 护城河评分(护城河评级 * 10)
- FCF 收益率(X% → 8% 及以上时为 100)
- ROA(X% → 20% 及以上时为 100)
- 盈利增长(X% → 25% 及以上时为 100)
颜色编码规则
// Green (isGood: true) - Positive indicators
ROE > 20%, ROA > 10%, Margins > 20%, ROIC > 15%
Revenue Growth > 10%, Current Ratio 1-2, Z-Score > 3
M-Score < -1.78, FCF Growth > 0%, Payout < 50%
F-Score >= 7, Quality >= 70, Strength >= 70
// Red (isGood: false) - Warning indicators
Max Drawdown < -50%, Beta > 2, Consolidated Risk > 0.6
Predictability < 50%, F-Score <= 3, Z-Score < 1.81
M-Score > -1.78, Quality < 50
// Yellow (isGood: 'neutral') - Monitor
F-Score 4-6, RSI 30-70, Moat 5-7, Quality 50-70
Beta 1.5-2.0, Predictability 50-70%
完整模板代码
使用此精确模板结构:
import React, { useState } from 'react';
import {
LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip,
ResponsiveContainer, RadarChart, PolarGrid, PolarAngleAxis,
PolarRadiusAxis, Radar, ReferenceLine, Area, ComposedChart, Scatter
} from 'recharts';
const QuantDashboard = () => {
const [showKeyNotes, setShowKeyNotes] = useState(false);
// ============================================================
// POPULATE WITH STOCK-SPECIFIC DATA FROM ANALYSIS
// ============================================================
const ticker = "TICKER"; // Replace
const companyName = "Company Name"; // Replace
const recommendation = "BUY"; // BUY, HOLD, SELL, SPECULATIVE BUY
const analysisDate = "December 6, 2025"; // Current date
const metrics = {
// Price & Valuation - from analysis
price: 100.00,
marketCap: '€10B',
trailingPE: 20.0,
forwardPE: 18.0,
subsectorTypicalPE: 25.0,
peg1Y: 1.2, // NEW: 1-Year Forward PEG
peg5Y: 2.5, // NEW: 5-Year PEG
// Financial Performance - from 5-10 year analysis
roe: 25.0,
roa: 12.0,
profitMargin: 20.0,
opMargin: 25.0,
grossMargin: 50.0,
roic: 18.0,
// Growth Metrics - from historical trends (USE REPORTED, not underlying)
revGrowth: 15.0, // REPORTED revenue growth YoY
earnGrowth: 20.0, // REPORTED earnings growth YoY
epsTTM: 5.00,
forwardEPS: 5.50,
growthCapped: 10.0, // NEW: Capped sustainable growth estimate
growthUncapped: 22.0, // NEW: Headline analyst growth estimate
analystTarget: 120.00,
// Risk Indicators - from advanced metrics section
crs: 0.40, // Consolidated Risk Score (0-1 scale)
debtEquity: 0.50,
fScore: 7, // Piotroski F-Score
zScore: 4.0, // Altman Z-Score
mScore: -2.5, // Beneish M-Score
valueTrapScore: 25, // NEW: 0-100, LOWER = genuine, HIGHER = trap
valueTrapLabel: 'Genuine', // NEW: Genuine/Caution/Trap
maxDrawdown: -30.0, // 5-year max drawdown %
// Liquidity & FCF - from cash flow analysis
currentRatio: 1.5,
totalCash: '€2B',
totalDebt: '€1B',
fcfGrowth5Y: 12.0, // 5-year smoothed growth
fcfYield: 5.0,
fcfMargin: 18.5, // NEW: FCF / Revenue %
payoutRatio: 30.0,
// Insider & Sentiment - from SEC Form 4 or use "N/A" if unavailable
insBuys: 0, // From SEC Form 4 - use actual count or "N/A"
insSells: 0, // From SEC Form 4 - use actual count or "N/A"
netShares: 'N/A', // From SEC Form 4 - use actual or "N/A"
shortInterest: 2.5, // From FINRA/exchange - use actual or "N/A"
newsSentiment: 0.25, // -1 to +1 scale
newsArticleCount: 15, // Recent article count
// Beta & Volatility
beta: 1.0, // Stock beta
vol1Y: 25.0, // 1-Year volatility %
// Quality Scores - from consolidated scoring
cqvs: 75.0, // Consolidated Quality & Valuation Score
label: 'Quality Growth', // Elite/Compounder/Quality Growth/etc
valuation: 70.0, // 0-100
quality: 80.0, // 0-100
strength: 75.0, // 0-100
integrity: 85.0, // 0-100
// Moat & Other
buffettMoat: 8, // 0-10 scale (renamed from moat)
greenblattEY: 6.5, // NEW: Earnings Yield %
greenblattROC: 22.0, // NEW: Return on Capital %
earningsPredict: 70, // Earnings Predictability 0-100
completeness: 85, // Data completeness 0-100
dataQuality: 'High', // High/Medium/Low
divYield: 1.5,
stockType: 'Growth', // Growth/Value/Cyclical/Defensive
sector: 'Technology',
industry: 'Software',
// NEW: Investor Persona Scores (0-10 scale each)
buffettScore: 7.5, // Durable competitive advantage seeker
mungerScore: 6.8, // Inversion thinker, risk avoider
dalioScore: 7.2, // All-weather, cycle resilient
lynchScore: 8.0, // GARP - Growth at Reasonable Price
grahamScore: 5.5, // Deep value, margin of safety
greenblattScore: 6.0, // Magic Formula (EY + ROC)
templetonScore: 4.5, // Contrarian, global value
sorosScore: 3.0, // Reflexivity, macro trends
// NEW: Valuation Lines for Charts
marketValueCurrent: 95.00,
intrinsicValueCurrent: 110.00,
marketValueNextYear: 105.00,
intrinsicValueNextYear: 120.00,
unrestrictedMarketValueCurrent: 125.00,
unrestrictedMarketValueNextYear: 140.00,
// Valuation Assessment (for indicator below forecast)
valuationPercent: 15, // Positive = undervalued, negative = overvalued
valuationLabel: 'Undervalued', // Undervalued/Fairly Valued/Overvalued
};
// TOP NEWS Headlines - Format: pipe-separated with dates at END in brackets
const topNews = [
{ headline: 'Company announces Q4 guidance above expectations', date: '05 Dec 2025' },
{ headline: 'New product launch receives positive analyst coverage', date: '28 Nov 2025' },
{ headline: 'Strategic partnership announced with major cloud provider', date: '15 Nov 2025' },
{ headline: 'Q3 earnings beat estimates, revenue up 18% YoY', date: '02 Nov 2025' },
{ headline: 'Management presents at investor conference, reaffirms outlook', date: '20 Oct 2025' },
];
// Format TOP NEWS as pipe-separated string with dates at END
const topNewsString = topNews.map(n => `${n.headline} [${n.date}]`).join(' | ');
// Historical Price Data (10 years with multiple valuation lines)
const priceHistory = [
{ date: '2016', price: 25, totalReturn: 28, marketValueCurrent: 27, intrinsicValueCurrent: 30, marketValueNextYear: 29, intrinsicValueNextYear: 32, analystTarget: 30, unrestrictedCurrent: 28, unrestrictedNextYear: 31 },
{ date: '2017', price: 35, totalReturn: 40, marketValueCurrent: 38, intrinsicValueCurrent: 42, marketValueNextYear: 40, intrinsicValueNextYear: 45, analystTarget: 42, unrestrictedCurrent: 40, unrestrictedNextYear: 44 },
{ date: '2018', price: 45, totalReturn: 52, marketValueCurrent: 48, intrinsicValueCurrent: 55, marketValueNextYear: 52, intrinsicValueNextYear: 60, analystTarget: 55, unrestrictedCurrent: 52, unrestrictedNextYear: 58 },
{ date: '2019', price: 55, totalReturn: 65, marketValueCurrent: 58, intrinsicValueCurrent: 68, marketValueNextYear: 62, intrinsicValueNextYear: 72, analystTarget: 65, unrestrictedCurrent: 65, unrestrictedNextYear: 72 },
{ date: '2020', price: 50, totalReturn: 62, marketValueCurrent: 55, intrinsicValueCurrent: 65, marketValueNextYear: 60, intrinsicValueNextYear: 70, analystTarget: 62, unrestrictedCurrent: 62, unrestrictedNextYear: 70 },
{ date: '2021', price: 75, totalReturn: 95, marketValueCurrent: 80, intrinsicValueCurrent: 90, marketValueNextYear: 85, intrinsicValueNextYear: 98, analystTarget: 90, unrestrictedCurrent: 92, unrestrictedNextYear: 105 },
{ date: '2022', price: 65, totalReturn: 85, marketValueCurrent: 72, intrinsicValueCurrent: 85, marketValueNextYear: 78, intrinsicValueNextYear: 92, analystTarget: 82, unrestrictedCurrent: 85, unrestrictedNextYear: 95 },
{ date: '2023', price: 80, totalReturn: 105, marketValueCurrent: 85, intrinsicValueCurrent: 100, marketValueNextYear: 92, intrinsicValueNextYear: 108, analystTarget: 98, unrestrictedCurrent: 100, unrestrictedNextYear: 115 },
{ date: '2024', price: 95, totalReturn: 125, marketValueCurrent: 100, intrinsicValueCurrent: 115, marketValueNextYear: 108, intrinsicValueNextYear: 125, analystTarget: 115, unrestrictedCurrent: 120, unrestrictedNextYear: 135 },
{ date: '2025', price: 100, totalReturn: 135, marketValueCurrent: 105, intrinsicValueCurrent: 120, marketValueNextYear: 115, intrinsicValueNextYear: 132, analystTarget: 125, unrestrictedCurrent: 130, unrestrictedNextYear: 145 },
];
// 1 Year Price with 6-Month Forecast, MAs, and Bollinger Bands
const oneYearData = [
{ date: "Jan'25", price: 90, ma50: 88, ma200: 85, upperBand: 98, lowerBand: 82, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Mar'25", price: 88, ma50: 89, ma200: 86, upperBand: 96, lowerBand: 80, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "May'25", price: 95, ma50: 91, ma200: 87, upperBand: 102, lowerBand: 84, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Jul'25", price: 92, ma50: 92, ma200: 88, upperBand: 100, lowerBand: 84, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Sep'25", price: 98, ma50: 94, ma200: 90, upperBand: 106, lowerBand: 86, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Nov'25", price: 100, ma50: 96, ma200: 92, upperBand: 108, lowerBand: 88, forecast: 100, ci95Upper: 108, ci95Lower: 92 },
{ date: "Jan'26", price: null, ma50: null, ma200: null, upperBand: null, lowerBand: null, forecast: 108, ci95Upper: 120, ci95Lower: 96 },
{ date: "Mar'26", price: null, ma50: null, ma200: null, upperBand: null, lowerBand: null, forecast: 115, ci95Upper: 130, ci95Lower: 100 },
];
// NEW: Ichimoku Cloud Data (6-month view with signal markers)
const ichimokuData = [
{ date: 'Jun', price: 88, tenkan: 87, kijun: 85, senkouA: 84, senkouB: 82, chikou: 85, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Jul', price: 92, tenkan: 90, kijun: 87, senkouA: 86, senkouB: 84, chikou: 90, tkCrossMarker: 92, kumoTwistMarker: null }, // TK Bullish Cross
{ date: 'Aug', price: 95, tenkan: 93, kijun: 90, senkouA: 89, senkouB: 86, chikou: 93, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Sep', price: 98, tenkan: 96, kijun: 93, senkouA: 92, senkouB: 88, chikou: 96, tkCrossMarker: null, kumoTwistMarker: 92 }, // Kumo Twist Bullish
{ date: 'Oct', price: 96, tenkan: 97, kijun: 95, senkouA: 94, senkouB: 90, chikou: 94, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Nov', price: 100, tenkan: 98, kijun: 96, senkouA: 95, senkouB: 92, chikou: 98, tkCrossMarker: null, kumoTwistMarker: null },
];
// NEW: Ichimoku Signals Summary
const ichimokuSignals = {
tkCross: 'TK Bullish Cross',
kumoTwist: 'Kumo Twist Bullish',
priceVsCloud: 'Above Cloud (Bullish)',
};
// MACD Data (recent 6 months)
const macdData = [
{ date: 'Jun', macd: 0.5, signal: 0.3, histogram: 0.2 },
{ date: 'Jul', macd: 1.2, signal: 0.6, histogram: 0.6 },
{ date: 'Aug', macd: 1.5, signal: 1.0, histogram: 0.5 },
{ date: 'Sep', macd: 1.8, signal: 1.3, histogram: 0.5 },
{ date: 'Oct', macd: 1.2, signal: 1.4, histogram: -0.2 },
{ date: 'Nov', macd: 0.8, signal: 1.2, histogram: -0.4 },
];
// RSI Data (recent 6 months)
const rsiData = [
{ date: 'Jun', rsi: 45 },
{ date: 'Jul', rsi: 55 },
{ date: 'Aug', rsi: 62 },
{ date: 'Sep', rsi: 68 },
{ date: 'Oct', rsi: 58 },
{ date: 'Nov', rsi: 55 },
];
// Radar Chart Data (normalize all to 0-100 scale)
const radarData = [
{ metric: 'Rev Growth', value: 70, fullMark: 100 },
{ metric: 'Op Margin', value: 75, fullMark: 100 },
{ metric: 'Gross Margin', value: 65, fullMark: 100 },
{ metric: 'Profit Margin', value: 60, fullMark: 100 },
{ metric: 'ROE', value: 70, fullMark: 100 },
{ metric: 'Risk (CRS)', value: 60, fullMark: 100 },
{ metric: 'Beta Score', value: 70, fullMark: 100 },
{ metric: 'P/Market Disc', value: 50, fullMark: 100 },
{ metric: 'Moat', value: 80, fullMark: 100 },
{ metric: 'FCF Growth', value: 55, fullMark: 100 },
{ metric: 'ROA', value: 65, fullMark: 100 },
{ metric: 'Earn Growth', value: 75, fullMark: 100 },
];
// Key Notes Content - from Bull/Bear case analysis
const bullCase = {
target: "€130-150", // Bull case price target
points: [
"Strong revenue growth momentum",
"Expanding margins",
"Market leadership position",
"Favorable industry tailwinds",
"Strong balance sheet"
]
};
const bearCase = {
target: "€70-80", // Bear case price target
points: [
"Valuation compression risk",
"Competitive pressures",
"Macro sensitivity",
"Execution risks",
"Key person dependency"
]
};
const entryStrategy = {
idealEntry: "€90-95", // From Entry Strategy section
currentEntry: "€100 acceptable",
target: "€120 (+20%)", // 12-month target
stopLoss: "€85 (-15%)", // Stop loss
positionSize: "2-3%" // Recommended allocation
};
// ============================================================
// COMPONENT CODE (Standard - use as-is)
// ============================================================
// Helper: Value Trap color (LOWER = genuine = green, HIGHER = trap = red)
const getValueTrapColor = (score) => {
if (score < 40) return 'bg-green-100 border-green-400 text-green-800';
if (score < 60) return 'bg-yellow-100 border-yellow-400 text-yellow-800';
return 'bg-red-100 border-red-400 text-red-800';
};
// Helper: Get label for Value Trap score
const getValueTrapLabel = (score) => {
if (score < 20) return 'Genuine';
if (score < 40) return 'Probably Genuine';
if (score < 60) return 'Caution';
if (score < 80) return 'Likely Trap';
return 'Strong Trap';
};
// Helper: Persona score color
const getPersonaColor = (score) => {
if (score >= 7) return 'bg-green-500';
if (score >= 4) return 'bg-yellow-500';
return 'bg-red-500';
};
// Helper: News sentiment color
const getSentimentColor = (sentiment) => {
if (sentiment > 0.3) return 'text-green-600';
if (sentiment > 0) return 'text-green-500';
if (sentiment > -0.3) return 'text-yellow-600';
return 'text-red-600';
};
// Persona Badge Component
const PersonaBadge = ({ name, score, position }) => (
<div className={`absolute ${position} flex flex-col items-center`}>
<div className={`w-6 h-6 rounded-full ${getPersonaColor(score)} flex items-center justify-center text-white text-[8px] font-bold`}>
{score.toFixed(1)}
</div>
<div className="text-[7px] text-gray-600 mt-0.5">{name}</div>
</div>
);
const MetricBox = ({ label, value, benchmark, isGood, size = 'normal' }) => {
let bgColor = 'bg-gray-50';
if (isGood === true) bgColor = 'bg-green-50 border-green-200';
if (isGood === false) bgColor = 'bg-red-50 border-red-200';
if (isGood === 'neutral') bgColor = 'bg-yellow-50 border-yellow-200';
return (
<div className={`${bgColor} border p-1.5 flex flex-col justify-center items-center`}>
<div className="text-base font-bold text-gray-900">{value}</div>
<div className="text-[9px] text-gray-600 text-center leading-tight">{label}</div>
{benchmark && <div className="text-[8px] text-gray-400">{benchmark}</div>}
</div>
);
};
const SectionHeader = ({ title, bgColor }) => (
<div className={`${bgColor} px-2 py-1 text-[10px] font-bold text-gray-700`}>
{title}
</div>
);
return (
<div className="w-full max-w-7xl mx-auto p-3 bg-white text-xs">
{/* Header */}
<div className="bg-orange-500 text-white px-3 py-2 mb-1 text-lg font-bold text-center">
{ticker} - {companyName}
</div>
{/* TOP NEWS - Pipe separated with dates at END */}
<div className="border border-gray-300 rounded p-2 mb-3 bg-gray-50">
<span className="font-bold text-[10px]">TOP NEWS:</span>
<div className="text-[9px] mt-1">{topNewsString}</div>
</div>
{/* Top 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Price & Valuation - Updated with dual PEG */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="PRICE & VALUATION" bgColor="bg-blue-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Price:" value={`€${metrics.price}`} />
<MetricBox label="Market Cap:" value={metrics.marketCap} />
<MetricBox label="Trailing P/E:" value={metrics.trailingPE} />
<MetricBox label="Forward P/E:" value={metrics.forwardPE} benchmark={`(${metrics.subsectorTypicalPE})`} isGood={metrics.forwardPE < metrics.subsectorTypicalPE} />
<MetricBox label="Subsector P/E:" value={metrics.subsectorTypicalPE} />
<MetricBox label="PEG (1Y):" value={metrics.peg1Y} benchmark="(<1.5)" isGood={metrics.peg1Y < 1.5 ? true : metrics.peg1Y < 2 ? 'neutral' : false} />
<MetricBox label="PEG (5Y):" value={metrics.peg5Y} benchmark="(<2)" isGood={metrics.peg5Y < 2 ? true : metrics.peg5Y < 3 ? 'neutral' : false} />
</div>
</div>
{/* Financial Performance */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="FINANCIAL PERFORMANCE" bgColor="bg-green-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="ROE:" value={`${metrics.roe}%`} benchmark="(>20%)" isGood={metrics.roe >= 20 ? true : metrics.roe >= 10 ? 'neutral' : false} />
<MetricBox label="ROA:" value={`${metrics.roa}%`} benchmark="(>10%)" isGood={metrics.roa >= 10} />
<MetricBox label="Profit Margin:" value={`${metrics.profitMargin}%`} benchmark="(>20%)" isGood={metrics.profitMargin >= 20 ? true : metrics.profitMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Operative Margin:" value={`${metrics.opMargin}%`} benchmark="(>20%)" isGood={metrics.opMargin >= 20} />
<MetricBox label="Gross Margin:" value={`${metrics.grossMargin}%`} benchmark="(>40%)" isGood={metrics.grossMargin >= 40} />
<MetricBox label="ROIC:" value={`${metrics.roic}%`} benchmark="(>15%)" isGood={metrics.roic >= 15} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Growth Metrics */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="GROWTH METRICS" bgColor="bg-emerald-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Revenue (YoY):" value={`${metrics.revGrowth}%`} benchmark="(>10%)" isGood={metrics.revGrowth >= 10} />
<MetricBox label="Earning (YoY):" value={`${metrics.earnGrowth}%`} benchmark="(>0%)" isGood={metrics.earnGrowth >= 0} />
<MetricBox label="EPS (TTM):" value={`€${metrics.epsTTM}`} />
<MetricBox label="Forward EPS:" value={`€${metrics.forwardEPS}`} isGood={metrics.forwardEPS > metrics.epsTTM} />
<MetricBox label="Growth Rates:" value={`Capped: ${metrics.growthCapped}%`} benchmark={`Uncapped: ${metrics.growthUncapped}%`} />
<MetricBox label="Analyst Target:" value={`€${metrics.analystTarget}`} />
</div>
</div>
{/* Risk Indicators */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="RISK INDICATORS" bgColor="bg-red-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CRS (0-1):" value={metrics.crs.toFixed(2)} benchmark="(Medium)" isGood={metrics.crs < 0.4 ? true : metrics.crs < 0.6 ? 'neutral' : false} />
<MetricBox label="Debt/Equity (mrq):" value={metrics.debtEquity} benchmark="(0.5-1)" isGood={metrics.debtEquity < 1 ? true : metrics.debtEquity < 2 ? 'neutral' : false} />
<MetricBox label="Piotroski F:" value={metrics.fScore} benchmark="(≥7)" isGood={metrics.fScore >= 7 ? true : metrics.fScore >= 4 ? 'neutral' : false} />
<MetricBox label="Altman Z:" value={metrics.zScore.toFixed(2)} benchmark="(>3)" isGood={metrics.zScore >= 2.99 ? true : metrics.zScore >= 1.81 ? 'neutral' : false} />
<MetricBox label="Beneish M:" value={metrics.mScore.toFixed(2)} benchmark="(<-1.78)" isGood={metrics.mScore < -1.78} />
<MetricBox label="Value Trap:" value={`${metrics.valueTrapScore} (${metrics.valueTrapLabel})`} isGood={metrics.valueTrapScore < 40 ? true : metrics.valueTrapScore < 60 ? 'neutral' : false} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Liquidity & Free Cash Flow */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="LIQUIDITY & FREE CASH FLOW" bgColor="bg-cyan-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Current Ratio:" value={metrics.currentRatio.toFixed(2)} benchmark="(1-2)" isGood={metrics.currentRatio >= 1 && metrics.currentRatio <= 2 ? true : 'neutral'} />
<MetricBox label="Cash:" value={metrics.totalCash} />
<MetricBox label="Debt:" value={metrics.totalDebt} />
<MetricBox label="FCF Growth 5Y:" value={`${metrics.fcfGrowth5Y}%`} benchmark="(>5%)" isGood={metrics.fcfGrowth5Y >= 5} />
<MetricBox label="FCF Yield:" value={`${metrics.fcfYield}%`} benchmark="(>4%)" isGood={metrics.fcfYield >= 4} />
<MetricBox label="FCF Margin:" value={`${metrics.fcfMargin}%`} benchmark="(>15%)" isGood={metrics.fcfMargin >= 15 ? true : metrics.fcfMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Payout Ratio:" value={`${metrics.payoutRatio}%`} benchmark="(<50%)" isGood={metrics.payoutRatio < 50} />
</div>
</div>
{/* Insider & Sentiment & Class */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="INSIDER & SENTIMENT & CLASS" bgColor="bg-purple-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Buys (12M):" value={metrics.insBuys} isGood={metrics.insBuys > metrics.insSells} />
<MetricBox label="Sells (12M):" value={metrics.insSells} />
<MetricBox label="Net Shares (12M):" value={metrics.netShares} />
<MetricBox label="Short Int (%):" value={`${metrics.shortInterest}%`} isGood={metrics.shortInterest < 5 ? true : metrics.shortInterest < 10 ? 'neutral' : false} />
<MetricBox label="Sentiment / Articles:" value={`${metrics.newsSentiment > 0 ? '+' : ''}${metrics.newsSentiment.toFixed(3)} / ${metrics.newsArticleCount}`} benchmark={metrics.newsSentiment > 0 ? '(Positive)' : '(Negative)'} isGood={metrics.newsSentiment > 0} />
<MetricBox label={`Stock: ${metrics.stockType}`} value={`Div Yield: ${metrics.divYield}%`} />
<MetricBox label="Sector/Industry:" value={`${metrics.sector} /`} benchmark={metrics.industry} />
</div>
</div>
</div>
{/* Last 2 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Quality Scores */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="QUALITY SCORES" bgColor="bg-orange-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CQVS:" value={metrics.cqvs.toFixed(1)} benchmark="(>70)" isGood={metrics.cqvs >= 70 ? true : metrics.cqvs >= 50 ? 'neutral' : false} />
<MetricBox label="Label:" value={metrics.label} />
<MetricBox label="Valuation:" value={metrics.valuation} isGood={metrics.valuation >= 70} />
<MetricBox label="Quality:" value={metrics.quality} isGood={metrics.quality >= 70 ? true : metrics.quality >= 50 ? 'neutral' : false} />
<MetricBox label="Strength:" value={metrics.strength} isGood={metrics.strength >= 70} />
<MetricBox label="Integrity:" value={metrics.integrity} isGood={metrics.integrity >= 70 ? true : metrics.integrity >= 50 ? 'neutral' : false} />
</div>
</div>
{/* Moat & Other */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="MOAT & OTHER" bgColor="bg-gray-200" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="Buffett Moat:" value={metrics.buffettMoat} benchmark="(4-7)" isGood={metrics.buffettMoat >= 7 ? true : metrics.buffettMoat >= 4 ? 'neutral' : false} />
<MetricBox label="Greenblatt (MF):" value={`EY: ${metrics.greenblattEY}%`} benchmark={metrics.greenblattROC ? `ROC: ${metrics.greenblattROC}%` : 'ROC: N/A'} isGood={metrics.greenblattEY >= 8 ? true : metrics.greenblattEY >= 4 ? 'neutral' : false} />
<MetricBox label={`Beta: ${metrics.beta}`} value={`Vol 1Y: ${metrics.vol1Y}%`} isGood={metrics.beta < 1 ? true : metrics.beta < 1.5 ? 'neutral' : false} />
<MetricBox label="Earnings Predict.:" value={`${metrics.earningsPredict}%`} benchmark="(>80%)" isGood={metrics.earningsPredict >= 80 ? true : metrics.earningsPredict >= 60 ? 'neutral' : false} />
<MetricBox label="Drawdown (5Y):" value={`${metrics.maxDrawdown}%`} benchmark={metrics.maxDrawdown > -30 ? '(Low)' : metrics.maxDrawdown > -50 ? '(Mid)' : '(High)'} isGood={metrics.maxDrawdown > -30 ? true : metrics.maxDrawdown > -50 ? 'neutral' : false} />
<MetricBox label={`Completeness: ${metrics.completeness}%`} value={`Data Quality: ${metrics.dataQuality}`} isGood={metrics.dataQuality === 'High' ? true : metrics.dataQuality === 'Medium' ? 'neutral' : false} />
</div>
</div>
</div>
{/* Charts Section - Enhanced with Legends */}
<div className="grid grid-cols-3 gap-2 mb-3">
{/* Linear Price Chart + MACD */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LINEAR PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Market Value (Current): €{metrics.marketValueCurrent}<br/>
- - Intrinsic Value (Current): €{metrics.intrinsicValueCurrent}<br/>
- - Analyst Target: €{metrics.analystTarget}
</div>
<ResponsiveContainer width="100%" height={130}>
<LineChart data={priceHistory}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} name="Close" />
<Line type="monotone" dataKey="totalReturn" stroke="#6b7280" strokeWidth={1} strokeDasharray="2 2" dot={false} name="Total Return" />
<Line type="monotone" dataKey="intrinsicValueCurrent" stroke="#16a34a" strokeWidth={1} strokeDasharray="5 5" dot={false} name="IV Current" />
<Line type="monotone" dataKey="analystTarget" stroke="#3b82f6" strokeWidth={1} strokeDasharray="3 3" dot={false} name="Target" />
</LineChart>
</ResponsiveContainer>
<div className="text-xs font-bold mt-1 mb-1 text-center">MACD</div>
<ResponsiveContainer width="100%" height={55}>
<LineChart data={macdData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<ReferenceLine y={0} stroke="#666" />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Line type="monotone" dataKey="macd" stroke="#2563eb" strokeWidth={1} dot={false} name="MACD" />
<Line type="monotone" dataKey="signal" stroke="#dc2626" strokeWidth={1} dot={false} name="Signal" />
</LineChart>
</ResponsiveContainer>
</div>
{/* Radar + Investor Personas + Forecast */}
<div className="border border-gray-300 rounded p-2">
<div className="relative">
<ResponsiveContainer width="100%" height={140}>
<RadarChart data={radarData}>
<PolarGrid />
<PolarAngleAxis dataKey="metric" tick={{ fontSize: 6 }} />
<PolarRadiusAxis angle={30} domain={[0, 100]} tick={{ fontSize: 6 }} />
<Radar name={ticker} dataKey="value" stroke="#2563eb" fill="#3b82f6" fillOpacity={0.3} />
</RadarChart>
</ResponsiveContainer>
{/* Investor Persona Badges */}
<PersonaBadge name="Buffett" score={metrics.buffettScore} position="top-0 left-1/4" />
<PersonaBadge name="Lynch" score={metrics.lynchScore} position="top-0 right-1/4" />
<PersonaBadge name="Munger" score={metrics.mungerScore} position="top-1/4 -left-2" />
<PersonaBadge name="Greenblatt" score={metrics.greenblattScore} position="top-1/4 -right-2" />
<PersonaBadge name="Dalio" score={metrics.dalioScore} position="bottom-1/4 -left-2" />
<PersonaBadge name="Graham" score={metrics.grahamScore} position="bottom-1/4 -right-2" />
<PersonaBadge name="Templeton" score={metrics.templetonScore} position="bottom-0 left-1/4" />
<PersonaBadge name="Soros" score={metrics.sorosScore} position="bottom-0 right-1/4" />
</div>
<div className="text-center my-1">
<span className="bg-green-200 px-2 py-0.5 text-[10px] font-bold rounded border border-green-400">
Advice: {recommendation} (CQVS: {metrics.cqvs.toFixed(1)})
</span>
</div>
<div className="text-[8px] font-bold mb-0.5 text-center">1Y PRICE + 6-MONTH FORECAST</div>
<div className="text-[6px] text-gray-500 mb-0.5 text-center">— Close — 50-Day MA — 200-Day MA ▒ Bollinger Bands - - Forecast</div>
<ResponsiveContainer width="100%" height={70}>
<ComposedChart data={oneYearData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Area type="monotone" dataKey="upperBand" stroke="none" fill="#e0e0e0" fillOpacity={0.5} />
<Area type="monotone" dataKey="ci95Upper" stroke="none" fill="#dbeafe" fillOpacity={0.5} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} />
<Line type="monotone" dataKey="ma50" stroke="#f59e0b" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="ma200" stroke="#ef4444" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="forecast" stroke="#16a34a" strokeWidth={1.5} strokeDasharray="5 5" dot={false} />
</ComposedChart>
</ResponsiveContainer>
{/* Valuation Indicator */}
<div className={`text-center text-[10px] font-bold mt-1 ${metrics.valuationPercent > 10 ? 'text-green-600' : metrics.valuationPercent < -10 ? 'text-red-600' : 'text-yellow-600'}`}>
{metrics.valuationLabel} ({metrics.valuationPercent > 0 ? '+' : ''}{metrics.valuationPercent}%)
</div>
</div>
{/* Log Price + RSI */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LOG PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Unrestr. Market Value (Current): €{metrics.unrestrictedMarketValueCurrent}<br/>
- - Unrestr. Market Value (Next Year): €{metrics.unrestrictedMarketValueNextYear}
</div>
<ResponsiveContainer width="100%" height={130}>
<LineChart data={priceHistory}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} scale="log" domain={['auto', 'auto']} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} name="Close" />
<Line type="monotone" dataKey="totalReturn" stroke="#6b7280" strokeWidth={1} strokeDasharray="2 2" dot={false} name="Total Return" />
<Line type="monotone" dataKey="unrestrictedCurrent" stroke="#dc2626" strokeWidth={1} strokeDasharray="5 5" dot={false} name="Unrestr Current" />
<Line type="monotone" dataKey="unrestrictedNextYear" stroke="#f97316" strokeWidth={1} strokeDasharray="5 5" dot={false} name="Unrestr Next" />
</LineChart>
</ResponsiveContainer>
<div className="text-xs font-bold mt-1 mb-1 text-center">RSI (14) = {rsiData[rsiData.length - 1].rsi}</div>
<ResponsiveContainer width="100%" height={55}>
<LineChart data={rsiData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} domain={[0, 100]} />
<Tooltip contentStyle={{ fontSize: 7 }} />
<ReferenceLine y={70} stroke="#ef4444" strokeDasharray="2 2" />
<ReferenceLine y={30} stroke="#22c55e" strokeDasharray="2 2" />
<Line type="monotone" dataKey="rsi" stroke="#f59e0b" strokeWidth={1.5} dot={false} />
</LineChart>
</ResponsiveContainer>
</div>
</div>
{/* NEW: Ichimoku Cloud Chart */}
<div className="border border-gray-300 rounded p-2 mb-3">
<div className="text-sm font-bold mb-1 text-center">ICHIMOKU CLOUD</div>
<div className="flex gap-4 text-[7px] justify-center mb-1">
<span>— Close Price</span>
<span className="text-blue-500">— Tenkan-sen (9)</span>
<span className="text-red-500">— Kijun-sen (26)</span>
<span className="text-gray-400">— Chikou Span</span>
<span className="text-green-500">▒ Senkou Span A/B (Cloud)</span>
<span className="ml-2 font-bold text-yellow-600">◆ TK Cross</span>
<span className="text-purple-600">◆ Kumo Twist</span>
</div>
<ResponsiveContainer width="100%" height={100}>
<ComposedChart data={ichimokuData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} domain={['auto', 'auto']} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Area type="monotone" dataKey="senkouA" stroke="none" fill="#86efac" fillOpacity={0.3} />
<Area type="monotone" dataKey="senkouB" stroke="none" fill="#fca5a5" fillOpacity={0.3} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={2} dot={false} name="Price" />
<Line type="monotone" dataKey="tenkan" stroke="#3b82f6" strokeWidth={1} dot={false} name="Tenkan" />
<Line type="monotone" dataKey="kijun" stroke="#dc2626" strokeWidth={1} dot={false} name="Kijun" />
<Line type="monotone" dataKey="chikou" stroke="#9ca3af" strokeWidth={1} strokeDasharray="3 3" dot={false} name="Chikou" />
<Scatter dataKey="tkCrossMarker" fill="#9333ea" shape="diamond" name="TK Cross" />
<Scatter dataKey="kumoTwistMarker" fill="#dc2626" shape="diamond" name="Kumo Twist" />
</ComposedChart>
</ResponsiveContainer>
<div className="flex gap-4 text-[8px] justify-center mt-1">
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.tkCross}</span>
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.kumoTwist}</span>
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.priceVsCloud}</span>
</div>
</div>
{/* Key Notes (Expandable) */}
<div className="border border-gray-300 rounded overflow-hidden">
<button
onClick={() => setShowKeyNotes(!showKeyNotes)}
className="w-full bg-gray-100 px-3 py-2 text-left text-sm font-bold flex items-center hover:bg-gray-200"
>
<span className="mr-2">{showKeyNotes ? '▼' : '▶'}</span> Key Notes (Click to Expand)
</button>
{showKeyNotes && (
<div className="p-3 bg-gray-50">
<div className="grid grid-cols-3 gap-4 text-xs">
{/* Bull Case */}
<div>
<div className="font-bold text-green-700 mb-2 text-sm">BULL CASE ({bullCase.target})</div>
<ul className="list-disc list-inside space-y-1">
{bullCase.points.map((point, i) => <li key={i}>{point}</li>)}
</ul>
</div>
{/* Bear Case */}
<div>
<div className="font-bold text-red-700 mb-2 text-sm">BEAR CASE ({bearCase.target})</div>
<ul className="list-disc list-inside space-y-1">
{bearCase.points.map((point, i) => <li key={i}>{point}</li>)}
</ul>
</div>
{/* Entry/Exit Strategy */}
<div>
<div className="font-bold text-blue-700 mb-2 text-sm">ENTRY/EXIT STRATEGY</div>
<ul className="list-disc list-inside space-y-1">
<li><strong>Ideal Entry:</strong> {entryStrategy.idealEntry}</li>
<li><strong>Current:</strong> {entryStrategy.currentEntry}</li>
<li><strong>Target:</strong> {entryStrategy.target}</li>
<li><strong>Stop Loss:</strong> {entryStrategy.stopLoss}</li>
<li><strong>Position Size:</strong> {entryStrategy.positionSize}</li>
</ul>
</div>
</div>
</div>
)}
</div>
{/* Footer */}
<div className="text-xs text-gray-500 text-center mt-3">
Analysis Date: {analysisDate} | Sources: SEC Filings, Company Reports |
<span className="font-bold text-blue-600 ml-1">{recommendation}</span>
</div>
</div>
);
};
export default QuantDashboard;
实施说明
关键步骤:
-
在全面的文本分析过程中计算所有指标
-
计算指标时将其存储在变量中
-
完成完整的文本分析后,创建 React 工件
-
用实际计算的数据替换模板中的所有占位值
-
使用精确的模板结构——不要修改组件代码
-
填充以下特定数据数组:
metrics对象(60 多个值,包括投资者画像评分)topNews数组(5 条近期新闻标题,附日期)priceHistory数组(10 年数据,含多条估值线)oneYearData数组(含均线、布林带和预测)ichimokuData数组(6 个月数据,含信号标记)ichimokuSignals对象(TK 交叉、云图扭转、价格与云图的关系)macdData数组(6 个近期数据点,含柱状图)rsiData数组(6 个近期数据点)radarData数组(12 个指标,标准化为 0-100)bullCase.points(牛市分析中的 5 个要点)bearCase.points(熊市分析中的 5 个要点)entryStrategy(入场/退出策略中的 5 个值)
-
正确标准化雷达图数值:
- 每个指标均采用 0-100 的刻度
- 数值越高始终越好(必要时反转风险/Beta 值)
- 使用上文提供的缩放公式
-
正确设置数值格式:
- 货币:
"€100.00"(默认使用欧元——用 €,不用 $) - 大数:
"€10B"、"€2.5M" - 百分比:
15.0(数值,不要用带 % 的字符串) - 比率:
1.25(数值) - 评分:
7(整数)或75.0(浮点数)
- 货币:
-
增长指标:
- 使用报告营收增长(而非基础/有机增长)
- 使用报告盈利增长(而非调整后 EPS 增长)
-
不要:
- 保留占位值
- 修改组件结构
- 跳过任何部分
- 使用估算/猜测的数据
这是唯一接受的仪表板格式。所有其他仪表板样式均已弃用。
与项目上下文集成
投资组合适配
- 从项目知识中获取投资组合数据
- 检查是否已持有该股票(若已持有,建议使用 Portfolio Analyst)
- 评估其与现有持仓的适配度(行业敞口、相关性)
- 根据当前配置考虑仓位大小
投资者画像
- 用户的投资期限、风险承受能力和偏好见项目说明
- 根据用户画像调整建议
- 考虑用户上下文中的税务影响
- 根据投资组合规模和风险承受能力调整仓位大小
避免重复
如果投资组合中已持有该股票:
- 说明:“您已持有 [SYMBOL]。如需分析现有持仓,请使用 Portfolio Analyst 技能。”
- 如果用户希望重新评估,仍需提供评估
- 将问题表述为“是否应该加仓?”,而非初次买入
何时使用此技能
在以下情况下使用 Stock Evaluator:
- 用户询问“我应该买入 [股票] 吗?”
- 用户想评估观察列表中的候选股票
- 用户请求股票推荐
- 用户询问“[股票] 是一项不错的投资吗?”
- 用户想比较多项潜在投资
- 用户想了解自己正在考虑的股票有哪些替代选择
- 用户想要入场价格和仓位规模方面的指导
- 用户请求“量化风格的仪表盘”或“股票可视化”
在以下情况下不要使用此技能:
- 用户想查看现有投资组合持仓 → 使用 Portfolio Analyst
- 用户想了解一般市场评论 → 使用常规知识
- 用户想筛选或发掘股票 → 使用其他工作流
- 用户询问期权、衍生品或加密货币 → 不在适用范围内
输出包括:
- 全面的文本分析(以上所有部分)
- 量化风格的 React 仪表盘制品(标准化可视格式)
最佳实践
研究方法
- 从公司文件开始(10-K、10-Q),不要从新闻文章开始
- 回顾过去 5-10 年,了解公司的发展变化,而不只是当前状况
- 与 3-5 家同行公司比较,确保比较对象具有可比性
- 采用多种估值方法,不要依赖单一方法
- 客观呈现正反两面,公平分析看涨和看跌理由
- 具体明确,使用实际数据,不要泛泛而谈
估值纪律
- 始终要求至少 15% 的安全边际
- 在 DCF 中采用保守假设
- 综合权衡多种估值方法
- 考虑行业特定惯例
- 不要为增长付出过高价格
风险意识
- 明确指出并量化风险
- 考虑风险发生的概率和影响
- 诚实说明未知因素
- 不要只关注上涨空间
沟通
- 开篇给出明确建议
- 用证据支持每项主张
- 使用具体数字和日期
- 解释推理过程,不要只陈述结论
- 让建议一目了然
需要识别的常见模式
优质公司
- 完整周期内(5-10 年)持续盈利
- 资产负债表稳健(负债低、现金充足)
- 具有竞争护城河(宽或窄)
- 资本配置有利于股东
- 商业模式可预测
价值陷阱(避免)
- 便宜自有其原因(业务正在衰退)
- 负债高且现金流疲弱
- 持续失去市场份额
- 缺乏竞争优势
- 管理层资本配置不善
合理价格增长(GARP)
- 营收增长强劲(15-25%+)
- 利润率不断扩大
- 可触达市场规模大
- 具有竞争优势
- 估值合理(PEG < 1.5)
扭转候选股
- 新管理层有良好业绩记录
- 关键指标逐季改善
- 存在变革催化剂
- 深度价值且具备安全边际
- 负债减少或现金流改善
定稿前的质量检查
提交分析前,请核实:
数据完整性检查(关键——优先检查)
- ✅ 每项数值指标是否都有网络搜索所得的来源引用?
- ✅ 是否未捏造内部人士交易活动?(SEC Form 4 或 N/A)
- ✅ 是否未捏造空头持仓数据?(FINRA/交易所或 N/A)
- ✅ ROE 基准是否正确?(>20% = 绿色,10-20% = 黄色,<10% = 红色)
- ✅ 是否使用标准化指标标签?(例如,“Operative Margin”,而非“Operating”)
- ✅ 所有无法获取的数据是否均显示为“N/A”?(绝不能使用零或估算值)
- ✅ TOP NEWS 格式是否正确?(以竖线分隔,日期置于末尾方括号内)
- ✅ 估值指标是否显示在预测下方?(低估/合理估值/高估 +/- %)
- ✅ Beta + Vol 1Y 是否合并在同一个单元格中?
- ✅ Sector/Industry 是否合并在同一个单元格中?
分析完整性检查
- ✅ 是否完成了所有必需的交付内容?
- ✅ 是否使用了多种估值方法?
- ✅ 是否同时呈现了看涨和看跌情景?
- ✅ 是否给出了明确的买入/持有/卖出建议?
- ✅ 是否提供了具体的入场价格和仓位规模?
- ✅ 是否比较了 3-5 家同行公司?
- ✅ 是否分析了 5-10 年的财务趋势?
- ✅ 研究是否基于公司文件,而非新闻?
- ✅ 是否计算了安全边际?
- ✅ 是否评估了风险等级?
- ✅ 如果建议卖出:是否提供了 3-5 个替代选择?
- ✅ 是否确定了技术面入场点位?
- ✅ 是否计算了高级指标(Piotroski F、Altman Z、Beneish M、最大回撤)?
- ✅ 所有货币金额是否均以 €(欧元)表示?
- ✅ 营收/盈利增长是否使用已报告(而非基础/调整后)数据?
- ✅ 是否计算了价值陷阱评分(0-100,分数越低越真实)?
- ✅ 是否计算了全部 8 项投资者画像评分(0-10)?
- ✅ 是否计算了 PEG 比率?
- ✅ 是否计算了 FCF 利润率?
- ✅ 是否包含 Greenblatt 神奇公式指标(EY、ROC)?
- ✅ 是否研究了新闻情绪和卖空比例?
- ✅ 是否收集了 Ichimoku 云图数据并标注信号?
- ✅ 是否填充了“头条新闻”部分(最近 5 条标题)?
- ✅ 是否提供了包含估值线的 10 年价格历史?
- ✅ 是否创建了包含全部 60 多项指标的增强版仪表板?
最终验证问题
- 能否为仪表板中的每个数字注明来源?
- 是否有任何指标仅来自训练知识?(如果有,请再次搜索或使用 N/A)
- 内部人士买入/卖出信息是否具体来自 SEC Form 4?(如果未找到,请使用 N/A)
如果检查清单中有任何项目未完成:停止并收集更多信息。 如果经搜索后确实无法获得数据:使用“N/A”——切勿捏造。
评估结构示例
[详细演练请参阅 EVALUATION-WORKFLOWS.md 中的完整示例]
持续改进
每次评估后:
- 跟踪建议结果
- 总结有效和无效之处
- 改进估值假设
- 提升模式识别能力
- 更新行业知识
目标是发现真正有吸引力的投资机会,既符合用户的投资者画像,又具备充足的安全边际和可接受的风险。