Back to skills
SKILL.md
Stock Screener
BSecurity载体筛选(v3 主用)——给定一条已立项主线,筛出可买载体(ETF + 龙头股)并做强弱排序,附排序理由,写回主线页「载体清单」。也保留 v2 的策略选股工具库(放量突破/低位反转/业绩成长/主力异动等条件筛股)。只筛不分析:账户适配、参考条件位、买卖裁决全部交给 stock-buddy。触发:给这条主线筛载体、XX主线买什么、有哪些ETF能买、找龙头、载体排序、选股、筛股、筛池子、按条件选股。不触发:分析某只持仓、要不要买、某只股票怎么样、企稳了吗(这些归 stock-buddy)。
- 2 stars
- 0 votes
- 0 copies
- 1 view
- Added September 6, 2026
Works with
Security analysis
75/100- Modifies startup scripts or system services for persistence
Pro scans all 6 files and shows the line behind each finding
npx -y skills add Taosheng777/a-share-mainline-os --skill stock-screener --agent claude-codeAre you the author of Stock Screener?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/taosheng777-stock-screener)---
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 不作买入裁决。
Files in this skill
- SKILL.md
- agents/openai.yaml
- references/scoring.md
- references/strategy-presets.md
- scripts/screen.py
- tests/test_screen.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.