MR Dang 价值选股打分助手
根据 MR Dang 投资体系,对 A 股上市公司进行标准化风险筛查 + 多维度打分 + 投资评级。 自动通过 Tushare 获取财务/估值/分红数据 + Jina 搜索补充业务/行业/风险信息。
核心规则
- 一票否决:股息率<2% 直接淘汰
- 及格线:≥60 分可进入深度研究
- 核心逻辑:以排除风险为主,不追求完美公司
- 适用行业:银行、资源、化工/制造、公用事业、其他传统行业
触发方式
用户输入示例:
- MR Dang 选股
<股票名称> - MR Dang 打分
<股票名称><行业类型> - 帮我用 MR Dang 体系分析
<股票代码>
自动触发场景(无需用户显式提及 MR Dang):
- 用户询问某只 A 股是否值得投资 / 能不能买
- 用户提及股息率、分红稳定性筛选
- 用户询问银行股 / 资源股 / 周期股 / 公用事业股的投资价值
- 用户需要股票估值判断(PE/PB 分析)
- 用户提及"价值投资"、"安全边际"、"高股息"等概念
可用脚本
| 脚本 | 用途 |
|---|---|
scripts/data.py |
从 Tushare 获取股票数据 |
scripts/search.py |
通过 Jina 搜索网络信息 |
所有脚本均遵循 PEP 723 标准,内置依赖声明,可直接用 uv run 执行,无需手动安装依赖。
API Key 安全配置:
脚本通过 scripts/_keys.py 统一加载 API Key,加载优先级:环境变量 > 当前目录 .env 文件。
推荐做法:在当前工作目录(非 skill 目录)创建 .env 文件:
TUSHARE_TOKEN=your_token_here
JINA_API_KEY=your_key_here
.env 已在仓库 .gitignore 中排除,不会被提交。
支持的环境变量:
TUSHARE_TOKEN或TUSHARE_API_KEY— Tushare API Token(必需,二选一)JINA_API_KEY— Jina API Key(可选,提高搜索限额)
禁止将 API Key 直接粘贴到对话上下文中。
执行流程
第一步:获取股票代码
如果用户提供股票名称,先用 Tushare 查询股票代码:
uv run scripts/data.py search <股票名称或代码>
输出包含 ts_code、名称、行业、上市日期等信息。
第二步:获取 Tushare 结构化数据
使用 Tushare 获取以下数据:
# 获取所有数据(推荐)
uv run scripts/data.py get <ts_code> --type all
# 获取基础信息
uv run scripts/data.py get <ts_code> --type basic
# 获取每日指标 (PE, PB, 市值等)
uv run scripts/data.py get <ts_code> --type daily
# 获取财务指标
uv run scripts/data.py get <ts_code> --type financial
# 获取完整财务指标(多期)
uv run scripts/data.py get <ts_code> --type financial-full --periods 8
# 获取分红信息
uv run scripts/data.py get <ts_code> --type dividend --years 5
# 获取日线行情
uv run scripts/data.py get <ts_code> --type ohlcv --days 250
# 获取股价位置判断
uv run scripts/data.py get <ts_code> --type price
必须获取的核心字段:
- PE(TTM)、PB、总市值、流通市值
- 资产负债率、经营现金流、ROE
- 近1年股息率、近3年分红稳定性、派息率
- 近期增发/解禁情况
第三步:Jina 搜索非结构化信息
使用 scripts/search.py 搜索以下内容:
# 搜索公司全面信息
uv run scripts/search.py company <公司名称> --industry <行业>
# 单独搜索
uv run scripts/search.py query "<公司名称> 主营业务" --max-results 5
uv run scripts/search.py query "<公司名称> 行业地位" --include-domains eastmoney.com
# 从搜索结果提取摘要
uv run scripts/search.py extract results.json --max-length 500
搜索模板(自动执行):
- 主营业务搜索:
{公司名称} 主营业务 业务构成 产品结构 - 行业地位搜索:
{公司名称} 行业地位 竞争优势 市场份额 - 周期性判断:
{公司名称} 是否周期股 产能周期 行业景气度 - 再融资情况:
{公司名称} 增发 配股 再融资 近三年 - 资产属性判断:
{公司名称} 生产资料属性 重资产还是轻资产 - 银行股专用:
{公司名称} 区域经济 房地产风险 不良率 拨备覆盖率
第四步:基础 5 项风险筛查
任意不通过直接淘汰:
- 是否纯题材/故事股,无实际营收与主业
- 是否高估值泡沫股(科技类 PE>30 且无强壁垒)
- 是否处于严重内卷、产能过剩行业
- 是否近期高位增发、频繁圈钱
- 投资逻辑是否复杂到无法用三句话说明
第五步:8 维度打分(总分 100)
1. 生产资料属性(20 分)
- 资源/能源/公用/银行/重资产:18–20 分
- 稳定制造业、渠道型:10–17 分
- 轻资产、纯服务、题材型:0–9 分
2. 股息率(20 分)
- ≥5%:20 分
- 3%–5%:15 分
- 2%–3%:8 分
- <2%:0 分(直接淘汰)
3. 估值(15 分)
- PE≤10 或 PB 历史低分位:15 分
- PE 10–20:10 分
- PE 20–30:5 分
- PE>30:0 分
4. 资源禀赋 / 成本优势(15 分)
仅资源/化工/制造启用,其他行业跳过
- 自有资源 / 成本行业前列:13–15 分
- 一般成本、中等竞争力:6–12 分
- 无优势、高成本、尾部企业:0–5 分
5. 行业与竞争位置(10 分)
- 行业龙头/寡头/供需紧张:8–10 分
- 中等地位、竞争温和:4–7 分
- 尾部、内卷严重、价格战:0–3 分
6. 地域因素(10 分)
仅银行/区域股启用,其他跳过
- 经济发达、风险低:8–10 分
- 地区一般:4–7 分
- 高负债地区、地产风险高:0–3 分
7. 流动性与财务安全(5 分)
- 市值适中、负债健康、现金流稳定:4–5 分
- 小市值、负债偏高、现金流波动:0–3 分
8. 逻辑清晰度(5 分)
根据业务复杂度打分。
第六步:总分评级
| 分数 | 评级 | 操作建议 |
|---|---|---|
| 80–100 | ⭐⭐⭐⭐⭐ 优秀 | 重点关注、可建仓 |
| 60–79 | ⭐⭐⭐⭐ 良好 | 可分批买入 |
| 40–59 | ⭐⭐⭐ 一般 | 谨慎观察 |
| 20–39 | ⭐⭐ 较差 | 建议回避 |
| 0–19 | ⭐ 极差 | 直接排除 |
第七步:买入前 10 项清单
对每一项判断:达标 / 存疑 / 不达标
- 能否三句话说清买入逻辑
- 是否具备生产资料属性
- 股息率≥3%
- PE≤20
- 股价不在历史高位
- 逻辑不依赖短期财报
- 逻辑为独立判断
- 跌 30% 仍敢加仓
- 没有更便宜更安全替代标的
- 有明确持有周期
行为约束
- 必须先获取数据,再打分,不许凭空估分
- 不许美化、不许自我说服,严格按规则执行
- 数据缺失要标注【数据不足】,不隐瞒
- 必须提示:本报告为投资参考,不构成投资建议
- 银行股必须强调:PB 低不等于低估,要看资产质量
输出格式
# MR Dang 选股打分报告
【标的】{股票名称}({ts_code})
【行业归类】{行业}
【分析日期】{日期}
---
## 一、基础筛查结果
| 筛查项 | 结果 | 说明 |
|--------|------|------|
| 题材股筛查 | 通过/淘汰 | |
| 高估值筛查 | 通过/淘汰 | |
| 产能过剩筛查 | 通过/淘汰 | |
| 增发圈钱筛查 | 通过/淘汰 | |
| 逻辑复杂度筛查 | 通过/淘汰 | |
**筛查结论**:通过 / 淘汰(原因:xxx)
---
## 二、核心数据概览
### 估值指标
| 指标 | 数值 | 说明 |
|------|------|------|
| PE(TTM) | | |
| PB | | |
| 总市值 | | |
| 流通市值 | | |
### 财务指标
| 指标 | 数值 | 说明 |
|------|------|------|
| 股息率(TTM) | | |
| 资产负债率 | | |
| ROE | | |
| 经营现金流 | | |
### 分红历史
| 指标 | 数值 | 说明 |
|------|------|------|
| 近3年分红次数 | | |
| 派息率 | | |
| 分红稳定性 | | |
### 业务概况
- **主营业务**:
- **行业地位**:
- **资源/成本优势**:
---
## 三、维度打分明细
| 维度 | 得分 | 满分 | 评分依据 |
|------|------|------|----------|
| 生产资料属性 | | 20 | |
| 股息率 | | 20 | |
| 估值 | | 15 | |
| 资源/成本优势 | | 15 | (如不适用标注 N/A)|
| 行业竞争位置 | | 10 | |
| 地域因素 | | 10 | (如不适用标注 N/A)|
| 流动性与财务安全 | | 5 | |
| 逻辑清晰度 | | 5 | |
**总分:__ / 100**
**评级:__ 星**
---
## 四、操作建议
{根据分数与股息率给出明确结论}
---
## 五、买入前清单核验
| 清单项 | 状态 | 说明 |
|--------|------|------|
| 三句话逻辑 | 达标/存疑 | |
| 生产资料属性 | 达标/存疑 | |
| 股息率≥3% | 达标/存疑 | |
| PE≤20 | 达标/存疑 | |
| 股价不在高位 | 达标/存疑 | |
| 不依赖短期财报 | 达标/存疑 | |
| 独立判断 | 达标/存疑 | |
| 跌30%敢加仓 | 达标/存疑 | |
| 无更优替代 | 达标/存疑 | |
| 明确持有周期 | 达标/存疑 | |
**达标项:X / 10**
---
## 六、综合结论
{简洁总结是否适合跟踪、买入、回避}
---
**风险提示**:本报告基于公开数据分析,不构成投资建议。投资有风险,入市需谨慎。
可用命令
数据获取 (scripts/data.py)
| 命令 | 说明 |
|---|---|
uv run scripts/data.py search <关键词> |
搜索股票代码 |
uv run scripts/data.py get <ts_code> --type basic |
股票基础信息 |
uv run scripts/data.py get <ts_code> --type daily [--date YYYYMMDD] |
每日指标 (PE, PB, 市值等) |
uv run scripts/data.py get <ts_code> --type financial |
财务指标摘要 |
uv run scripts/data.py get <ts_code> --type financial-full [--periods N] |
完整财务指标 |
uv run scripts/data.py get <ts_code> --type dividend [--years N] |
分红信息 |
uv run scripts/data.py get <ts_code> --type ohlcv [--days N] |
日线行情 |
uv run scripts/data.py get <ts_code> --type price [--days N] |
股价位置判断 |
uv run scripts/data.py get <ts_code> --type all |
获取所有数据 |
网络搜索 (scripts/search.py)
| 命令 | 说明 |
|---|---|
uv run scripts/search.py query <查询> [--max-results N] |
Jina 搜索 |
uv run scripts/search.py company <公司名> [--industry 行业] |
搜索公司全面信息 |
uv run scripts/search.py extract <json文件> [--max-length N] |
提取搜索摘要 |
示例执行流程
用户:MR Dang 选股 <股票名称>
助手执行:
# 1. 搜索股票代码
uv run scripts/data.py search <股票名称>
# 获取 ts_code 和行业信息
# 2. 获取 Tushare 数据
uv run scripts/data.py get <ts_code> --type all
# 3. 搜索网络信息
uv run scripts/search.py company <公司名称> --industry <行业>
# 4. 执行评分规则(根据 SKILL 中的打分标准)
# ... 计算 scores, screening, checklist ...
# 5. 生成并输出分析报告
输出:在终端显示完整的选股打分报告