stock-picks
GitHub基于A股每日复盘与个股深度分析,利用L2微观结构等多维度模型筛选未来大概率走强的股票,生成包含候选榜及Top个股分析的PDF报告。
Trigger Scenarios
Install
npx skills add qusong0627/QuantMind --skill stock-picks -g -y
SKILL.md
Frontmatter
{
"name": "stock-picks",
"description": "每日复盘后的股票推荐(多维度选股)— 综合 A股每日复盘(市场方向\/板块\/资金\/新闻情绪)+ 个股深度分析(9层),用多维度筛选条件(L2微观结构为主\/模型融合分\/仓位信号\/板块强度\/新闻情绪)从全市场挑出未来几天大概率走强的股票,支持跨多日聚合(--window),输出候选榜 + 综合复盘 + Top 个股深度分析,落盘 PDF 到股票报告目录。用户说「选股」「推荐股票」「每日推荐」「明日看好」「选股推荐」「复盘后选股」时使用:跑复盘取数 → pick_candidates 多维打分 → Top N 深分 → 综合报告 → PDF。触发词:选股、股票推荐、每日推荐、明日看好、推荐股票、今日选股"
}
⚙️ 运行环境契约(最高优先级,先于本文其余内容执行)
本技能可能运行在 QuantBot(QwenPaw 容器) 或宿主机/本地 Claude Code。执行前先探测环境(
which docker、API 连通性),并遵守以下映射规则:
- 后端 API 地址:QwenPaw / 容器网络内一律用
http://quantmind:8000(quantmind是 docker 网络别名);仅宿主机调试用http://127.0.0.1:8000。正文中出现的127.0.0.1:8000、localhost:800x,在 QwenPaw 环境下自动替换为http://quantmind:8000。- 取数脚本执行:凡 import 了
pandas / duckdb / psycopg2 / numpy / sqlalchemy等重依赖或backend包的脚本,必须在 quantmind 容器内执行(QwenPaw 本地 venv 无这些依赖):脚本源三选一:宿主机 repodocker cp <脚本路径> quantmind:/tmp/<脚本名> && docker exec -w /app quantmind python3 /tmp/<脚本名> <参数>skills/<name>/scripts/、QwenPaw 工作区/app/working/workspaces/default/skills/<name>/scripts/、挂载目录/quantmind/skills/<name>/scripts/。纯标准库脚本(无重依赖)可在 QwenPaw 本地直接跑。- 报告落盘:股票报告页可见的 MD/PDF 报告,直接写
/data/reports/trading_agents/{市场或类别}/{股票名}/(QwenPaw 对/app/db有写权限,直接写文件,不要 docker cp);过程数据 facts 写/data/reports/<类别>/(/data可写)。- MD → PDF 转换(按优先级降级): ①
docker exec -w /app quantmind python3 backend/scripts/md_to_pdf_report.py <输入.md> <输出.pdf>(研报级排版,首选); ② docker 不可用时,改用 QwenPaw 内置- 本文中的
~/.claude、cp -r ... ~/.claude/skills等说明仅适用于本地 Claude Code 维护者,QuantBot 不要执行。
stock-picks — 每日复盘后的股票推荐(多维度选股)
把「每日复盘」(市场广度)和「个股深度分析」(个股深度)两张皮缝起来:先用复盘产物定市场环境(该不该进场、主线在哪、资金方向),再用多维度筛选条件从全市场挑候选,对 Top N 做 9 层深分,最后输出一份报告:综合复盘 + 候选榜 + Top 个股深分。报告 Markdown + PDF,落盘前端「股票报告」页可见目录,聊天回复速览。
定位:[[daily-review]] 是广度(今天市场发生了什么),[[stock-market-analysis]] 是深度(某只股票值不值得看),本 skill 是两者合一的推荐——先选再深挖,产出可执行的候选池,不是复盘报告。
⚠️ 铁律(先读,最高优先级)
| 陷阱 | 正确口径 |
|---|---|
| 推荐不是承诺 | 所有候选是「多维信号合成的相对强势」,不是「明天必涨」。报告必须带风险声明 + 数据滞后声明 |
| ST 股默认排除 | ST/*ST/退 有 5% 涨跌幅限制 + 退市风险,pick_candidates.py 默认排除(--keep-st 才保留) |
| 信号日取最近「全量」推理日 | 默认 = distinct symbol ≥ 1000 的那天(engine_signal_scores),避免最近只推理了几十只的残日;--date 可显式指定 |
| 分数单位 | fusion_score 是模型预测分(非涨跌幅);position_score 0~1 是半凯利仓位;pct_industry 是行业截面百分位 |
| L2 是 T+5/T+10 信号 | VPIN 族正 IC(高分偏多)、vol_persistence 等负 IC(高分偏空)——看状态分位,别当单日信号 |
| 趋势不纳入 | 模型分数趋势维度按需求移除——打分只用 L2/融合/仓位/板块/新闻,不参与排名 |
| L2 主导 | L2 权重(40%) > 融合分(30%):L2 是 T+5/T+10 信号,先看订单簿微结构,再看模型预测 |
执行流程(固定 6 步)
第 1 步:跑每日复盘取数(复用 [[daily-review]])
# ① 宿主机:daily_review.py 出 指数/广度/板块/资金/L1/L2 + 模型推理信号 + 次日方向
cd <repo>/skills/daily-review/scripts
python3 daily_review.py --date 20260821 # 不带 --date 取最新交易日
# ② 容器内:news_review.py 聚合当日新闻情绪(先跑这个,新闻维度才能加权)
docker cp <repo>/skills/daily-review/scripts/news_review.py quantmind:/tmp/
docker exec quantmind python3 /tmp/news_review.py --date 20260821
产出:data/reports/daily_review/{YYYY-MM-DD}_stats.json + {YYYY-MM-DD}_facts.md + {YYYY-MM-DD}_news.json。
这一步给推荐提供:市场方向(六维)、主线板块、资金流向、新闻聚焦板块、L2 微观结构状态——推荐必须和市场环境自洽(大盘空仓日不该推满仓,杀跌板块的个股即使分数高也要警惕)。
第 2 步:多维度选股(本 skill 脚本)
python3 <repo>/skills/stock-picks/scripts/pick_candidates.py --data-date 20260821 --window 3 --top 30 --json # 跨3日聚合
python3 <repo>/skills/stock-picks/scripts/pick_candidates.py --data-date 20260821 --window 1 --top 30 --json # 严格单日(无未来视觉)
python3 <repo>/skills/stock-picks/scripts/pick_candidates.py --top 30 --json # 默认最近全量推理日
python3 <repo>/skills/stock-picks/scripts/pick_candidates.py --top 30 --json --no-l2 # 跳过 L2(更快)
产出:data/reports/stock_picks/{YYYYMMDD}_picks.json(全量候选 + 每维分解)+ {YYYYMMDD}_picks.md(排名表骨架)。
多维度打分 = 六维加权(满分 1.0,L2 主导):L2 40% / 融合 25% / L1动量 15% / 仓位 10% / 板块 5% / 新闻 5%。趋势不纳入。单模型铁律:只用默认日推模型(5eea5418)的单一 run 分数,杜绝多模型融合。默认精选 5 只。
跨日聚合:--window N 从数据日起往前 N 个推理日,每股取跨日复合分均值后排名(--window 1 = 严格单日无未来视觉)。
硬过滤:① 无融合分数剔除;② 仓位门 position_score>0 或 行业百分位≥80%(避免大盘空仓日推满仓);③ 默认排除 ST。
未含维度(如当日无 news.json、L2 分区缺失)时该维中性 0.5,picks.md 头部会标注「未含:L2, 新闻」——报告里要声明,不能假装都有。
第 3 步:Top N 深分(复用 [[stock-market-analysis]])
对候选榜前 5~10 只跑 9 层深分,取 --json 输出供报告引用:
python3 <repo>/scripts/stock_9layer_fetch.py 001237.SZ --json # 宿主机
# 输出 /tmp/001237_9layer.json(23 因子 vs 全市场截面分位 + IC 方向)
深分重点核对(和候选维度互相印证,发现矛盾要写进报告):
- L3 技术位:候选时点 vs MA20/前高——分数高但跌破 MA20 的是矛盾项
- L4b 微观结构:正 IC 因子(VPIN 族)是否处于健康分位
- L6 模型:该股历史推理信号 vs 当日融合分,是否一致
- L7 新闻:有没有个股直接消息/相关行业消息,和三步纵深结论
第 4 步:综合报告写作(Markdown,模板见下)
报告 = facts.md 的事实 + picks 骨架的数字 + 深分的数值 + 你的解读。facts/picks/深分没有的数字禁止出现。 推荐榜数字必须照抄 picks.json,深分数字必须照抄 /tmp/{code}_9layer.json,禁止臆造。
第 5 步:Markdown → PDF + 落盘(必做,只发 /tmp = 未交付)
# Markdown → PDF(研报风,复用 md_to_pdf_report.py)
docker cp 选股推荐.md quantmind:/tmp/picks.md
docker exec quantmind bash -lc "cd /app && python3 backend/scripts/md_to_pdf_report.py /tmp/picks.md /tmp/picks.pdf"
docker cp quantmind:/tmp/picks.pdf 选股推荐.pdf
# 落盘股票报告目录(宿主机必须 docker cp,目录 owner 是容器 root)
docker cp 选股推荐.md quantmind:/data/reports/trading_agents/每日选股/每日选股推荐_2026-08-21.md
docker cp 选股推荐.pdf quantmind:/data/reports/trading_agents/每日选股/每日选股推荐_2026-08-21.pdf
落盘后 ls 确认 md + pdf 都在(前端「股票报告」页 → 每日选股 文件夹)。
第 6 步:聊天回复速览
**每日选股推荐 2026-08-21(周五)**
一句话:…(市场环境 → 推荐逻辑 → 候选池特征)
市场:上证 +0.01% / 深成 +0.45%;涨停 64 / 跌停 14;主线 …;资金 …;次日方向 看多/看空(xx/11,★★★)
Top5 候选(五维综合,L2 主导):
1. 惠康科技 001237 — L2 0.80 / 融合 0.0365 / 仓位 84% / 行业分位 100%
2. 今天国际 300532 — …(每只 1 行,标注最强维度 + 该股风险点)
3. …
深分亮点:Top3 中 X 只技术位健康、L2 VPIN 分位 >70%……(哪些候选通过了深分、哪些有矛盾)
⚠️ 以上为模型信号合成的相对强势候选,非投资建议;数据截至 2026-08-21(两融/北向滞后见数据说明)
→ 完整报告已落盘「股票报告 → 每日选股」目录
多维度筛选条件详解(写报告时逐维引用)
| 维度 | 权重 | 数据源 | 怎么判读 |
|---|---|---|---|
| L2 微观结构 | 40% | l2_factors 正 IC 因子 + 负 IC 因子(负 IC 反转) |
正 IC 高=知情资金活跃;负 IC 低=毒性/波动小;健康分 = 0.5×正IC分位 + 0.5×(1−负IC分位) |
| 模型融合分数 | 30% | engine_signal_scores.fusion_score 幅度归一 |
融合分越高=模型预测收益越强;用默认单模型(日推模型) |
| 仓位信号 | 15% | quality.position.position_score |
0.8+ = 强行业地位 + 半凯利高仓位;<0.3 弱;数据缺失不拦 |
| 板块强度 | 10% | industry_top10_avg 截面分位 + 板块超级大单净额 |
行业头部强度 + 当日板块大单净流入(跌市抄底方向反推) |
| 新闻情绪 | 5% | news_review.py 产物 news.json |
net_ratio>0 偏多;有直接个股新闻的优先 |
报告里每只候选必须能说清「它强在哪几个维度」+「弱在哪」,禁止只贴数字不解读。候选若和市场主线、次日方向冲突,必须明说。
报告模板
# 每日选股推荐 2026-08-21(周五)
> **报告日期**:2026-08-21
> **数据截至**:2026-08-21(信号日)
> **口径**:候选来自最近全量推理日 engine_signal_scores + l2_factors + 当日新闻情绪;五维加权(L2 40/融合 30/仓位 15/板块 10/新闻 5,趋势不纳入)
## 一、市场环境(综合复盘,从 facts.md 提炼)
指数/广度/量能/主线/资金 2-4 句 + 次日方向(六维合成)+ 一句话「该不该进场/什么风格占优」。
**这里定推荐基调**:市场偏强推进攻型,震荡降仓位,弱势只列观察不推荐。
## 二、候选榜(Top10,照抄 picks.md)
表格:# / 代码 / 名称 / 综合分 / L2 / 融合 / 仓位 / 行业分位 / 覆盖日 / 行业 / 板块大单
每只标注最强维度 + 一句话依据。
## 三、Top 个股深度分析(前 3-5 只,用 stock_9layer_fetch --json 结果)
每只分节:
### {名称}({代码})
- **候选维度**:最强维度 + 分数
- **9层核对**:L3 技术位(vs MA20)、L4b 微观结构(VPIN 分位)、L6 模型一致性、L7 新闻(三步纵深结论)
- **风险点**:弱维度 / 技术矛盾 / 板块杀跌风险
- **综合判断**:推荐 / 观察 / 剔除(剔除要写原因)
## 四、推荐逻辑与风险声明
- 候选池与市场主线一致性:命中/偏离
- 数据滞后声明(从 facts.md 复制)
- ⚠️ 本报告为模型信号合成的相对强势候选,非投资建议。股市有风险,投资需谨慎。
## 五、明日验证清单
2-4 条可验证预期(明天能判断对错的):如「Top5 平均跑赢全市场」「候选集中板块继续走强」等
维护
- 核心脚本:
scripts/pick_candidates.py(宿主机跑;PGengine_signal_scores+stock_aliases,QuantDBl2_factors,news_review.py产物) - 依赖技能:
[[daily-review]](复盘取数)、[[stock-market-analysis]](深分)、[[quantdb-fields]](单位口径) - 权重/阈值改
pick_candidates.py顶部常量(W_*、_POSITION_GATE、_MIN_SIGNAL_COVERAGE) - 单测:
cd scripts && python3 -m pytest tests/ -q(覆盖打分/过滤/趋势/单位)
Version History
- 2b47c67 Current 2026-09-02 21:03


