A 股价值选股与分析
目标
把一个或多个关键词转化为可复核的 A 股候选清单和分析报告。明确给出排名与优先研究对象,但把“筛选分数”与“未来收益预测”分开,不使用“稳赚、必涨、保证收益”等表述。
必须交付
在 a-share-output/<keyword-slug>-<YYYYMMDD-HHMM>/ 中生成:
candidates.csv # 筛选前的原始候选与指标
screening.csv # 脚本产生的过滤、评分、覆盖率和排名
analysis.json # 唯一事实源
report.md # 可阅读的完整分析报告
若用户指定目录则改用用户目录。遵循 references/output-contract.md,最后同时给出报告绝对路径、数据截止时间、前 3–5 名候选和一行核心理由。
一键默认值
用户只输入“选股”或一个宽泛关键词时,直接采用:
- 策略:质量价值均衡。
- 持有观察周期:1–3 年。
- 市场:沪、深、北交易所普通 A 股。
- 初筛:非 ST/*ST、正常交易、上市至少 3 年、连续盈利至少 3 年、最近审计意见为标准无保留、近 3 年无已核实重大违法。
- 流动性:总市值不低于 50 亿元,60 日平均成交额不低于 5000 万元;用户指定小盘或北交所策略时可调整并记录。
- 结果:深挖 8–12 家,最终给 3–5 家;宽泛选股尽量分布在至少 3 个行业。
- 财务窗口:最近 5 个完整年度、最新已披露中报/季报和一致口径 TTM。
仅当关键词无法确定市场范围,或用户要求个性化仓位而未提供期限与风险承受能力时,最多追问一个问题;普通选股直接执行并记录假设。
工作流
1. 解释关键词
把输入拆成行业/主题、策略偏好、约束和排除项。不要把“股价低”当成“估值低”:用户输入“10 元以下”等价格条件时可以筛选,但仍用企业价值与盈利、现金流和资产质量判断便宜程度。
根据关键词切换重点:
高股息:提高股息可持续性、自由现金流覆盖和负债安全权重。低估值:同时检查历史分位、行业分位和盈利是否处于周期高点。成长价值:提高 ROIC、研发效率、收入与自由现金流成长权重。- 行业词:限定同行比较,使用对应行业模型。
ST/困境反转/摘帽:单列特殊情形,不套用默认价值模型,不与常规候选混排。
2. 冻结数据时点
始终联网获取当前信息。开始时记录:
- 报告生成时间与时区。
- 行情价格时间、最近交易日和复权口径。
- 最新年度/季度财务期间。
- 公告、新闻和监管检索截止时间。
行情原则上不晚于最近一个交易日。不得把不同财务期、复权口径或币种的数据直接混算。
3. 建立候选池并核验来源
按照 references/source-hierarchy.md 检索。先用行情/财务数据源建立 20–50 家初始候选,再用巨潮资讯、交易所、公司定期报告和监管信息核验入围者。
对每个关键数字保存值、单位、期间、计算公式和原始 URL。二手聚合数据只用于发现候选;入围股票的利润、现金流、股本、分红、审计意见和重大风险必须回到公告或交易所材料核验。
4. 应用硬过滤
生成 candidates.csv,至少包含基础身份、硬过滤字段、行业模型和对应财务指标。运行:
python <skill-dir>/scripts/score_candidates.py \
<output-dir>/candidates.csv \
--output <output-dir>/screening.csv \
--config <skill-dir>/references/scoring-config.json \
--profile <balanced|dividend|low-valuation|growth-value>
除非用户明确覆盖,否则剔除:ST/*ST、暂停或异常交易、上市不足 3 年、连续盈利不足 3 年、非标准审计意见、负净资产、近 3 年已核实重大违法,以及低于默认市值/流动性门槛的公司。
5. 行业内评分
按照 references/screening-method.md 选择 general、bank、insurer、broker 或 holding-company 模型。分数只用于排序,不代替商业质量判断。联营/合营投资贡献主要利润、母公司现金流与合并利润明显错配的控股平台使用 holding-company,不得用普通经营现金流比率误判。
执行以下检查:
- 在同一行业内计算质量、估值、成长、股东回报和风险分位;同行不足时退回同模型比较。
- 把缺失指标计入覆盖率;覆盖率低于 70% 或当前 profile 的核心必需指标未核验,公司不得进入最终名单。
- 对周期股使用中周期利润和正常化利润率,不能用景气顶点的低 PE 直接判定便宜。
- 对金融股使用行业专属资产质量、资本充足率或偿付能力指标,不能照搬工业企业净负债指标。
- 保留被过滤原因与未入选的高关注候选,避免只展示幸存者。
6. 深挖前 8–12 家
逐家公司检查:
- 商业模式、盈利来源、竞争优势及其变化方向。
- 最近 5 年 ROE/ROIC、利润含金量、自由现金流与资本开支。
- 收入确认、应收、存货、商誉、资本化支出和非经常性损益。
- 有息负债、担保、关联交易、大股东质押、减持与再融资。
- 审计意见、问询函、处罚、诉讼和退市风险。
- 分红、回购、股权激励与资本配置是否创造每股价值。
发现管理层诚信、重大财务造假或无法解释的现金流问题时直接否决,不用低估值抵消。
7. 估值与安全边际
阅读 references/valuation-playbook.md。每个最终候选至少使用两种适合行业的方法,或明确说明为什么只能可靠使用一种。
- 给出悲观、基准、乐观三组关键假设。
- 给出合理价值区间,而不是单点目标价。
- 同时展示当前价格、价值区间、隐含安全边际和估值敏感性。
- 将历史/同行倍数作为交叉检查,不把高增长假设当作既定事实。
8. 形成最终名单
综合定量排名与深度核验,给出 3–5 家候选。每家公司必须包含:
- 一句话结论与入选逻辑。
- 业务与护城河判断。
- 财务质量、估值区间和安全边际。
- 1–3 个可验证催化剂。
- 至少 3 个关键风险。
- 至少 2 个使投资逻辑失效的量化或事件条件。
- 未来每季应跟踪的指标。
- 至少 3 个来源,其中至少 1 个为定期报告、交易所公告或监管材料。
9. 渲染并验收
完成 analysis.json 后运行:
python <skill-dir>/scripts/render_report.py <output-dir>
python <skill-dir>/scripts/validate_output.py <output-dir>
修复全部 ERROR,直到退出码为 0。最终检查价格/财报时点、股票代码、来源链接、估值假设、风险和失效条件是否一致。
结论表达
- 用“优先研究、进入观察池、估值等待、暂不入选”表达结论。
- 当当前价低于合理价值区间时仍检查基本面与数据可靠性,不机械写成买入。
- 当证据不足时减少候选数量或明确暂不入选,不为凑数降低门槛。
- 用户要求仓位建议时,先结合期限、最大可承受回撤、流动性需求和现有行业暴露;不凭关键词假设个人财务情况。
失败降级
- 全市场筛选器或批量接口不可用:从公开行业成分、指数成分和高相关公司中建立至少 5–8 家可核验的小样本池,将
universe.exhaustive设为false,并在comparison_scope与limitations标明“非穷尽样本”;不得声称覆盖全部 A 股或给出全市场最优排名,也不要为抓取安装非官方客户端或长期重试。 - 最近交易日行情不可得:使用最后一个可核验收盘价并显著标明截止日,安全边际只代表该日口径;连历史价格也无法核验的公司不得进入
shortlist。 - 财报或公告无法核验:该公司不得进入最终候选,可列入“待补证据”。
- 同行样本过少:改用同模型分位并披露比较范围,不伪造行业排名。
- 估值方法分歧过大:扩大区间、降低确定性并写出主导变量,不取简单平均掩盖分歧。