载体筛选(v3 主用)——给定一条已立项主线,筛出可买载体(ETF + 龙头股)并做强弱排序,附排序理由,写回主线页「载体清单」。也保留 v2 的策略选股工具库(放量突破/低位反转/业绩成长/主力异动等条件筛股)。只筛不分析:账户适配、参考条件位、买卖裁决全部交给 stock-buddy。触发:给这条主线筛载体、XX主线买什么、有哪些ETF能买、找龙头、载体排序、选股、筛股、筛池子、按条件选股。不触发:分析某只持仓、要不要买、某只股票怎么样、企稳了吗(这些归 stock-buddy)。
Scanned 9/6/2026
Install to Claude Code
npx -y skills add Taosheng777/a-share-mainline-os --skill stock-screener --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Stock Screener?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/taosheng777-stock-screener)More formats (shields.io, HTML) on the badges page.
---
name: stock-screener
description: 载体筛选(v3 主用)——给定一条已立项主线,筛出可买载体(ETF + 龙头股)并做强弱排序,附排序理由,写回主线页「载体清单」。也保留 v2 的策略选股工具库(放量突破/低位反转/业绩成长/主力异动等条件筛股)。只筛不分析:账户适配、参考条件位、买卖裁决全部交给 stock-buddy。触发:给这条主线筛载体、XX主线买什么、有哪些ETF能买、找龙头、载体排序、选股、筛股、筛池子、按条件选股。不触发:分析某只持仓、要不要买、某只股票怎么样、企稳了吗(这些归 stock-buddy)。
---
# 载体筛选 / 选股(stock-screener)
本 SKILL.md 即运行时唯一执行依据(自包含);产品设计与决策合同见仓库 `docs/`。
**v3 定位**:主线决策链的**载体环节**——「这条主线要买,买什么」。产出载体清单 + 强弱排序 + 排序理由,交给 `stock-buddy` 做账户适配与参考条件位。**与 stock-buddy 严格不重叠。**
## 运行时配置(先做,fail closed)
1. 读取环境变量 `ASM_CONFIG` 指向的 JSON;未设置时读取 `~/.config/a-share-mainline/config.json`。文件不存在、JSON 非对象或缺 `vault_root` 时,停止并给出配置指引,不猜路径。
2. `vault_root` 是 vault 唯一绝对路径;下文所有 `投资笔记/` 与相对目录都从它派生。`screen.py` 也遵守同一配置。
3. `wencai_cli` 可覆盖问财 CLI;未配置时按当前 skills 根目录下的同级 `hithink-market-query/scripts/cli.py` 自动发现。
4. `ifind_evidence_helper` 是可选适配器;未配置就标明降级,core 名单照常完成。
5. commit 前缀从 `git_identity` 读取:优先取当前平台 adapter 键(`claude` / `codex`),其次 `default`,均无则用中性 `[ai]`。下文以 `<git_identity>` 表示解析结果。
## 能力边界(铁律)
| ✅ 做(本 skill) | ❌ 不做(交给 stock-buddy) |
|---|---|
| 主线 → 载体候选发现(ETF / 龙头股) | 主线本身成不成立(那是提名答辩) |
| 相关度校验、剔除名不副实 | 账户适配(持仓重叠、交易权限) |
| 资金/强度/流动性/弹性打分排序 | 参考条件位(进场/加减仓/退出) |
| 排序理由(可溯源到数据) | 买入/观察/放弃裁决、止损止盈、仓位 |
| 载体 T+N 跟踪(验排序准不准) | 主线退潮判定 |
**越界自检**:用户若问"这只能不能买 / 估值贵不贵 / 这条主线还行吗",**不作答**,软提示:
> 这属于深度研判。对该标的或主线说「用 stock-buddy 分析」即可。
---
## 模式一 · 载体筛选(v3 主流程)
### 第 1 步 · 确认主线已立项
读 `<vault_root>/05-主线追踪/` 下该主线页,取**叙事、关键词、死亡条件、当前阶段**、已有载体清单。
**没有立项主线就没有载体筛选**——提示用户先让 `stock-daily` 提名、拍板建页,或用 `stock-buddy` 做提名答辩。不要凭一个主题名就开筛。
### 第 2 步 · 载 Key 与选源
`source ~/.zshrc`。三条通道额度与鉴权互相独立,**任一条能取到就不许写「未取得」**。
**调用顺序**(为省问财额度,从上往下试):
| 调用顺序 | 通道 | 载体筛选用它拿什么 | 额度 |
|---|---|---|---|
| 1 | `a-stock-data`(东财/腾讯/通达信/百度) | §3.7 行业排名(含 `leader` 领涨股)· §3.8 板块资金流 行业/概念×今日/5日/10日 · §3.3 个股所属板块归属 · §4.5 个股资金流 120 日 · §1.2 腾讯批量行情(ETF 也支持) | 零鉴权、无额度 |
| 2 | `hithink-finance` CLI | 行情快照/K线/指数成分(快照不含 ETF) | 额度独立于问财,Key 在钥匙串(看 `auth status` 不是 `doctor`) |
| 3 | 问财 `hithink-market-query` | 主题 ETF 检索、ETF 技术指标与资金流、复合条件筛股问句 | 每日额度有限、三个 skill 共用,**仅限正面清单内场景** |
**权威性**(同一数字多源冲突时以谁为准):`hithink-finance`(T1 官方结构化) > 问财(T2) > `a-stock-data`(T3 公开爬取)。写入 vault 的数字,若 T1 取得到则以 T1 为准并标注来源。
> **T 编号表权威性,不是调用顺序。** 这两条不是同一个排序:调用顺序管的是"先问谁省钱",权威性管的是"打架听谁的"。任何地方都不得把 a-stock-data 说成比 hithink-finance 更权威,也不得把问财说成应该优先调用。
**问财正面清单**(只有这四类准调问财,清单外一律走前两条通道):
1. ETF 主题检索(按关键词找 ETF)
2. ETF 技术指标与资金流
3. 复合条件筛股问句(screen.py 的核心能力)
4. 复盘的涨跌家数四问句(属 `stock-daily`,本 skill 不调)
行业排名、板块资金流、概念归属、K线、个股资金流一律走 `a-stock-data`。
> **问财额度纪律的唯一事实源:`投资笔记/00-系统/AI操作规则.md` §问财额度纪律**(与 `stock-daily`、`stock-buddy` 共用一个额度池,无法预查余额,耗尽才知道)。本 skill 是三者中的**查询大户**:
> - **15:00 让位**:交易日 15:00 前跑**模式二策略选股**(`screen.py` 翻页最多 4 次调用,是复盘全天预算的一半)必须先告知「这会占掉今天复盘的问财额度」并等用户确认。**模式一载体筛选消耗 1–3 次,不受此限,直接跑。**
> 沙箱内 Python `requests` 走 `HTTPS_PROXY` 连东财会失败,**用 `curl` 拉 JSON 再解析**,或 `session.trust_env = False`。
### 第 3 步 · 候选发现(三路)
1. **主题 ETF**:问财「{主线关键词}ETF 最新价 成交额 换手率」,或 a-stock-data 腾讯批量行情核对。ETF 是机动仓的主力载体——分散、免个股暴雷。
2. **行业龙头**:a-stock-data §3.7 `industry_comparison()` 找到主线对应行业,取其 `leader` 领涨股;§3.8 `board_fund_flow()` 的行业/概念榜同样带领涨股。
3. **概念成分**:对已知强势个股用 §3.3 `eastmoney_concept_blocks()` 反查所属概念,找出与主线叙事同源的板块,再取该板块成分。
候选控制在 **8–15 个**,太多说明主线定义太宽,回去收窄叙事。
### 第 4 步 · 相关度校验(v3 特有,必做)
逐个判断**是否真承载这条主线的叙事**:
- ETF 看**成分与主线的实际重叠**,不能只看名字像。名字带"科技"不等于承载算力硬件。
- 个股看**主营与催化剂的关联**,蹭概念的直接剔除。
- 剔除的要写明理由,不静默丢弃。
### 第 5 步 · 打分排序
四个维度,全部可溯源到具体数据:
| 维度 | 取什么 | 口径 |
|---|---|---|
| **资金承接** | 近 5 日主力净流入(个股 §4.5,板块 §3.8,ETF 用问财资金流) | 权重最高——载体没资金就是空转 |
| **相对强度** | 载体近 N 日涨幅 vs 主线对应行业指数同期 | 跑赢为正,跑输为负 |
| **流动性** | 日均成交额 | ETF 尤其关键,量太小冲击成本吃掉收益;低于阈值直接剔除而非扣分 |
| **弹性** | 载体涨跌幅 / 行业指数涨跌幅(近期均值) | 弹性高=进攻,低=稳;不是越高越好,要与用户打法匹配 |
排序方法沿用 `references/scoring.md` 的池内 rank 百分位加权,**缺字段不计入并重归一,不编数据**。
**排序理由只能用上面四类可验证依据**,不能写"感觉更纯正"这类无法证伪的说法。
### 第 6 步 · 交接与写回
交接给同套件的 `stock-buddy`(契约在它的 `references/selection-handoff.md`):主线页路径、候选与排序、四维分项、剔除名单与理由、数据日、字段缺口。
`stock-buddy` 完成账户适配与参考条件位后,写回**主线页的「载体清单」区**:
| 排序 | 载体 | 代码 | 类型 | 排序理由 | 数据日 |
- **v3 不再新建 `09-选股池跟踪/选股批次/` 批次页**——载体清单就在主线页里,不另建第二份事实源。
- 排序变化要留痕,不静默覆盖。
### 第 7 步 · 载体 T+N 跟踪
**验证对象是「AI 载体排序准不准」,不是「这只票涨没涨」。**
- 按真实 A 股交易日做 T+N,取载体相对**主线对应行业指数**与**沪深300**的表现。
- 核心指标:排序第 1 的载体是否确实跑赢排序靠后的(**排序有效性**),而不只是绝对收益。
- **必记 Spearman 秩相关(载体排序 vs 区间收益),这是固定指标、不是可选项。**只记批均收益是不够的——**批均为正而秩相关为负,说明赚的钱和打分无关**,此时「排序第 1」这个结论是假的。
- **样本约束**:载体清单通常只有 3–5 只,**单批秩相关噪声极大,不得据单批下任何结论**(包括反向结论)。按**累计多批**评估,先攒样本,**不急着调本 skill 的四维打分权重**。
- 载体不足 3 只时写 `样本不足,不计算秩相关`,不硬算。
- 打分排序能力在被累计样本验证为正之前,只能当作**待验证假设**陈述,不得写成「本 skill 的排序已被证明有效」。
- 写回主线页载体清单区下方的「载体排序 T+N 跟踪」表;主线归档时随主线页一起封存。
### 第 8 步 · 收尾提交(每次写盘必做)
```bash
cd "<vault_root>"
git add -- '05-主线追踪'
git commit -m "<git_identity> 主线载体 <主线名> YYYY-MM-DD"
git rev-parse --short HEAD
```
- **白名单严格限于 `05-主线追踪/`**;本 skill 不写持仓卡、纪律卡、盘面日志或旧选股批次。
- 若 `git status` 显示白名单外还有未提交改动,**不要 `git add -A`**,在回告里列出来交给用户。
- 提交失败 → 报告 git 阻塞,**不得声称已完成**。但**本轮没写盘就没有提交步骤**:`git status` 干净时直接说明"本轮未写盘",不要去跑一次注定失败的空提交,更不能把它报成 git 阻塞。
---
## 模式二 · 策略选股(v2 工具库,保留)
原五策略矩阵与 `screen.py` **完整保留**,用于主线之外的机会扫描、盘面结构验证,或用户直接要求按条件筛股。
```bash
source ~/.zshrc
python3 "<stock-screener skill目录>/scripts/screen.py" --preset 放量突破 --top 15
python3 "<stock-screener skill目录>/scripts/screen.py" --query "今日主力净流入居前 换手率大于5% 非ST" --top 15
```
- 参数:`--top N`(默认 15)、`--max-records`(默认 100)、`--no-exclude-holdings`、`--no-enrich`、`--report-date YYYY-MM-DD`。`--report-date` 只设置报告展示与文件名标签,不改变运行时取数时点;默认优先使用实际数据日,无法推断时使用本地运行日。`--date` 仅为兼容旧调用保留的 legacy alias,语义相同。
- 模板目录与写问句经验见 `references/strategy-presets.md`;打分口径见 `references/scoring.md`。
- 问财只下发问句里出现过的指标列;行情类打分列由脚本内置腾讯 enrichment 覆盖(零问财额度),失败自动降级并在 JSON `enrich.note` 标记。
- 脚本只读 `03-持仓跟踪/持仓.md` 做"排除已持仓",**不写不维护**。`holdings_missing=true` 要在对话里说明。
- **已知边界 · 代码字段两种**:问财返回的 ETF 记录用 `基金代码` 字段,股票记录用 `股票代码`。`screen.py` 的去重与"排除已持仓"必须两者兼容——只认 `股票代码` 会让 ETF 结果拿到空代码,导致去重把多只 ETF 当成同一条合并、排除已持仓也漏掉已持有的 ETF。跑含 ETF 的问句后,检查输出里代码列是否为空来确认。
**v3 变化**:策略选股**不再自动建批次页、不再登记台账**。它现在是一个**扫描工具**——出名单后由用户决定是否值得作为主线提名素材,或直接交 `stock-buddy` 看某一只。要建档只有一条路:形成主线并立项。
---
## 可选 · iFinD 本地历史证据(opt-in,默认关闭)
**默认不启用**。仅当用户明确要"本地历史覆盖体检 / iFinD 本地证据"时加 `--ifind-local-evidence`(可选 `--ifind-as-of YYYY-MM-DD`)。
- 只在名单形成之后运行,把代码交给离线只读 helper,在输出 JSON 追加独立键 `ifind_local_evidence`,**不参与排名、打分、候选准入**。
- 逐只给:输入序号(保序)、匹配状态、覆盖起止/有效交易日数、覆盖等级、可用/不可用字段、缺失说明。每只必须标注 helper 本次返回的**数据截止日**,并说明覆盖统计不是历史对齐日的 PIT 截面。
- 市场状态:未传 `--ifind-as-of` 一律"不适用";对齐日晚于 helper 返回的数据截止日时同样写"不适用(晚于数据截止日)"。
- **fail-closed**:helper/node 缺失、契约不符、无匹配 → `available=false` 并说明原因,**core 名单照常输出**。
- ⚠️ 这是用户自行安装的外部历史证据适配器;本仓库不附带 helper 或数据。只作历史证据使用,不得当近期事实。
---
## 硬边界
- 不下单、不碰交易、不动钱。
- 不编数据:缺字段标缺口。**写「未取得」前必须走完第 2 步的三条通道**,全失败才准写并注明是哪三条。熔断与降级分两级,不要混:
- **单一通道失败或额度耗尽 ≠ 熔断**,必须先走完第 2 步调用顺序的三条通道。
- 三条通道都拿不到该数据项 → **该数据项熔断**:写 `未取得(三源均失败:<逐条列出>)`,**任务其余部分照常完成**(例如某只候选的 5 日资金流三源皆无,就把它标缺口、按"缺字段不计入并重归一"处理,其余候选照常打分排序)。
- **整轮任务停止**只在两种情况:① 关键数据项全部熔断致结论无依据;② 数据日异常或晚于系统当天。
- 本条在额度/接口失败场景下**覆盖**"额度耗尽即立即停止该任务"的旧表述。
- 不同来源行业分类口径不同(同花顺行业 vs 东财行业),分别标注,不混算。
- 不做深度投资分析(边界表右列全交 stock-buddy)。
- **不算账户绩效**:净值、TWR、回撤、仓位、集中度一律不碰,交给同花顺。v2 的集中度/现金/持仓数量硬线已废除,不要再套。
- 每份产出末尾固定:
> 本工具仅用于研究与决策支持;提供方非持牌证券投资咨询机构,本工具及其输出不构成投资建议,不代下单,使用者风险自担。数据来源:<本次运行实际使用的数据源>;数据日:YYYY-MM-DD,均以本次运行输出为准。
- screen.py 纯标准库,不引重型依赖。
## 与 stock-buddy 的关系
- **数据层**:共用三条通道(a-stock-data / 问财 / hithink-finance)。
- **持仓层**:只读 `03-持仓跟踪/持仓.md` 做"排除已持仓",**不写不维护**。
- **交接**:本 skill 出候选与排序,`stock-buddy` 做账户适配、条件位与裁决;本 skill 不作买入裁决。
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!