{"id":"95912d4f-e425-4070-9a8d-3eff9dd66e63","entityType":"agent","slug":"clawhub-chinfi-codex-tushare-daily-market-sense","name":"Tushare Daily Market Sense","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chinfi-codex-tushare-daily-market-sense","canonicalPath":"/agent/clawhub-chinfi-codex-tushare-daily-market-sense","generatedAt":"2026-10-11T21:01:19.666Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":null},"description":"基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌... Skill: Tushare Daily Market Sense Owner: chinfi-codex Summary: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌... Tags: latest:2.0.3 Version history: v2.0.3 | 2026-06-01T00:59:11.450Z | user Analyst-style tone and report template refinement with bundled shared runtime helpers. v2.0.2 | 2026-05-20T01:09:56.626","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s175ywf2hg7sy9p90712m993ah83g0p6:tushare-daily-market-sense","sourceUrl":"https://clawhub.ai/chinfi-codex/tushare-daily-market-sense","homepage":"https://clawhub.ai/chinfi-codex/skills/tushare-daily-market-sense","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chinfi-codex/tushare-daily-market-sense","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chinfi-codex/skills/tushare-daily-market-sense","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":null},"stars":null,"forks":null,"downloads":1023,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"2.0.3","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:57:57.601Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T16:57:57.660Z","lastCrawledAt":"2026-10-11T16:57:57.601Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T16:57:57.601Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.3","createdAt":"2026-06-01T00:59:11.450Z","changelog":"Analyst-style tone and report template refinement with bundled shared runtime helpers.","fileCount":34,"zipByteSize":121542},{"version":"2.0.2","createdAt":"2026-05-20T01:09:56.626Z","changelog":"Fix PostgreSQL-backed market_history export so HTML Market History charts refresh through the requested trading date; bundle shared db_core for standalone published runtime.","fileCount":24,"zipByteSize":112237},{"version":"2.0.1","createdAt":"2026-05-16T01:50:38.741Z","changelog":"Add mainline leadership and elasticity stock tiers with intraday fallback evidence.","fileCount":20,"zipByteSize":67968},{"version":"2.0.0","createdAt":"2026-05-11T11:15:33.392Z","changelog":"Clean runtime package for Daily Market Sense skill","fileCount":20,"zipByteSize":60896}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175ywf2hg7sy9p90712m993ah83g0p6:tushare-daily-market-sense","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T21:01:19.664Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chinfi-codex-tushare-daily-market-sense/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":null},"readme":"Skill: Tushare Daily Market Sense\n\nOwner: chinfi-codex\n\nSummary: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌...\n\nTags: latest:2.0.3\n\nVersion history:\n\nv2.0.3 | 2026-06-01T00:59:11.450Z | user\n\nAnalyst-style tone and report template refinement with bundled shared runtime helpers.\n\nv2.0.2 | 2026-05-20T01:09:56.626Z | user\n\nFix PostgreSQL-backed market_history export so HTML Market History charts refresh through the requested trading date; bundle shared db_core for standalone published runtime.\n\nv2.0.1 | 2026-05-16T01:50:38.741Z | user\n\nAdd mainline leadership and elasticity stock tiers with intraday fallback evidence.\n\nv2.0.0 | 2026-05-11T11:15:33.392Z | user\n\nClean runtime package for Daily Market Sense skill\n\nArchive index:\n\nArchive v2.0.3: 34 files, 121542 bytes\n\nFiles: reference/market_data.csv (8694b), reference/market_data.json (166861b), reference/methodology/module1_trend.md (1497b), reference/methodology/module2_concentration.md (613b), reference/methodology/module3_money_effect.md (3155b), reference/methodology/module4_decline.md (960b), reference/methodology/module5_feature_groups.md (1963b), reference/methodology/output_discipline.md (2369b), reference/report_template.md (9358b), reference/template/section1.md (1131b), reference/template/section2.md (526b), reference/template/section3.md (1774b), reference/template/section4.md (894b), reference/template/section5.md (1263b), scripts/_shared/db_core.py (10168b), scripts/_shared/db_ping.py (2635b), scripts/_shared/html_report/__init__.py (650b), scripts/_shared/html_report/builder.py (6931b), scripts/_shared/html_report/chart_hook.py (647b), scripts/_shared/html_report/markdown_engine.py (6151b), scripts/_shared/html_report/README.md (1928b), scripts/_shared/html_report/safe_json.py (589b), scripts/_shared/html_report/text_validator.py (2832b), scripts/_shared/html_report/themes/default.css (12912b), scripts/_shared/html_report/themes/print.css (11021b), scripts/_shared/POSTGRESQL.md (2616b), scripts/db_adapter.py (10129b), scripts/market_panel.py (169383b), scripts/migrate_stock_to_pg.py (10459b), scripts/render_report_html.py (33683b), scripts/run_daily_panel.py (8167b), skill-card.md (3410b), SKILL.md (12122b), _meta.json (145b)\n\nFile v2.0.3:SKILL.md\n\n---\nname: tushare-daily-market-sense\ndescription: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌停/指数数据做量化选股观察时，必须优先使用本 skill。本 skill 先生成确定性证据包，再由模型或 Codex/Claude Code 等通用 agent 的 subagent 编排能力按模块撰写；不在脚本中调用 LLM，不提供买卖建议，不按申万、同花顺、东方财富等现成行业/概念口径分组。\nversion: 2.0.3\n---\n\n# Tushare Daily Market Sense\n\n## 目标\n\n基于 Tushare 日线、指数、成交额与本地情绪历史，为 A 股盘后复盘生成结构化研报：盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析。\n\n不做单股基本面深度研究、港股/美股/基金/期货/加密分析、超短线交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON；主题归纳、风险措辞和研报写作由模型完成。\n\n## 核心理念\n\n成交额优先。所有强弱判断都要有成交额证据：上涨主线按成交额厚度确认，爆量下跌按放量异常与跌幅强度识别，特征分组按命中规则与成交额证据分开呈现。\n\n主题主线由模型基于业务事实临时归纳，不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。\n\n## 工作流程\n\n1. 确定交易日：解析“今天/最近”或具体日期，默认只使用 `D` 及以前数据；只有用户明确要求后验时才允许 `--allow-future`。\n2. 生成证据包：运行 `scripts/run_daily_panel.py`。脚本会直接调用数据管线，写出完整 evidence、轻量 `report_context` 和模块级 JSON。\n3. 选择撰写模式：\n   - 有 subagent 编排能力时，主 agent 将 5 个模块 JSON 分发给 5 个 subagent 并行撰写。\n   - 没有 subagent 能力时，按同样模块顺序单会话执行，每次只加载当前模块的 JSON、方法论和模板段。\n4. 聚合成稿：主 agent 读取 6 段输出、`assembled_checks.json` 与 `reference/methodology/output_discipline.md`，补一句话盘面判断、风险传导提示和最终语气校准。默认不做外部收评校验、不搜索第三方行情综述、不在报告中加入“外部校验参考”；只有用户明确要求时才补充外部来源。\n5. 按需生成 HTML：当用户要求 HTML、网页、可视化报告或截图风格输出时，先完成并核对 `reports/report_YYYYMMDD.md`，再运行 `scripts/render_report_html.py` 生成同日期 HTML。HTML 是展示层产物，不新增研报判断、不删减 Markdown 正文；若同目录存在 `evidence_YYYYMMDD_utf8.json`，HTML 会自动读取其中的上证指数、创业板指数 120 日 K 线并插入对应指数趋势分析前。\n6. 证据包边界：`reports/evidence_YYYYMMDD_utf8.json` 是本 skill 的 Market Evidence Pack，只属于 skill 输出目录。即使在 AlphaVault 中写入趋势复盘，也不要把该证据包复制或登记为 `RAW/crawlers/` 来源；AlphaVault 侧只写最终趋势复盘 Markdown/HTML、索引和日志。\n7. 清理临时产物：确认 `reports/report_YYYYMMDD.md` 已写入并可读后，删除同日期的临时证据与上下文文件，只保留最终报告。若已按需生成 HTML，则同时保留 `reports/report_YYYYMMDD.html`。必须清理：\n   - `reports/evidence_YYYYMMDD_utf8.json`\n   - `reports/evidence_YYYYMMDD_utf8.stderr.log`\n   - `reports/report_context_YYYYMMDD.json`\n   - `reports/module_context_YYYYMMDD/`\n   不要删除 `reports/report_YYYYMMDD.md` 和已生成的 `reports/report_YYYYMMDD.html`，不要跨日期批量清理，除非用户明确要求。\n\n## 数据获取\n\n环境变量：\n\n```bash\nTUSHARE_TOKEN=your_token\nALPHA_DB_BACKEND=postgresql\nALPHA_PG_URL=postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp\n```\n\n数据库连接统一走 `scripts/_shared/db_core.py`（开发仓库中为 `shared/db_core.py`）。首次进入任意 Agent 环境时先运行 `python3 scripts/_shared/db_ping.py --alpha-schema`；源仓库开发态用 `python3 ../../shared/db_ping.py --alpha-schema`。如果不能使用 Unix socket，再把 `ALPHA_PG_URL` 改为 `postgresql://alpha_user:alpha_pass@localhost:5432/alpha_data`。\n\n运行脚本会先更新 `reference/market_data.csv`，并同步维护派生文件 `reference/market_data.json`，再生成情绪趋势：AKShare `stock_market_activity_legu()` 默认提供上涨、涨停、下跌、跌停、平盘、活跃度、情绪值、成交额等盘面情绪字段；搜狐涨跌停历史页仅在 AKShare 不可用或字段缺失时作为 fallback；Tushare `margin` 汇总 T-1 交易日融资净买入，Tushare `daily` 与 `daily_basic.circ_mv` 计算流通市值加权的全市场换手率。因此环境中还需安装 `akshare`。\n\n基础命令：\n\n```powershell\ncd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH\n```\n\n主要输出：\n\n- `reports/evidence_YYYYMMDD_utf8.json`：完整证据包。\n- `reports/report_context_YYYYMMDD.json`：兼容旧流程的轻量上下文。\n- `reports/module_context_YYYYMMDD/`：供 subagent 分工的模块级 JSON。\n- `reference/market_data.json`：`market_data.csv` 的全量派生 JSON，按交易日升序保留所有列、清洗数值并提供 `series` 给 HTML 趋势图使用。\n\n这些文件中，evidence、report_context 和 module_context 是研报撰写过程中的临时产物。最终报告生成并核对后，应按工作流程第 7 步删除，只保留 `reports/report_YYYYMMDD.md`、按需生成的 `reports/report_YYYYMMDD.html`，以及长期维护的 `reference/market_data.csv` / `reference/market_data.json`。\n\nHTML 输出命令：\n\n```powershell\npython scripts\\render_report_html.py --input reports\\report_20260429.md [--theme default|print]\n```\n\n默认输出 `reports/report_20260429.html`，并将 `reference/market_data.json` 内嵌到 HTML 中。本地浏览器可直接打开，图表不依赖外部 CDN。`--theme` 默认 `default`（Claude UI 暖橙）；`--theme print` 为黑白衬线、A4 友好，适合导出 PDF 或邮件附件。样式模板由仓库通用 `shared/html_report`（同步到 `scripts/_shared/html_report/`）提供，与 `a-stock-analyzer` 共用。\n\n常用参数：\n\n| 参数 | 含义 | 默认 |\n|---|---|---:|\n| `--fetch-workers` | cache/API 获取线程数；排查限流时设为 1 | 6 |\n| `--index-kline-days` | HTML 上证/创业板 K 线展示窗口，独立于 `--market-trend-days` | 120 |\n| `--money-pct-threshold` | 赚钱效应最低当日涨幅 | 7.0 |\n| `--money-amount-threshold` | 赚钱效应最低成交额，单位亿元 | 2.0 |\n| `--decline-pct-max` | 爆量下跌最大当日涨幅 | -3.0 |\n| `--decline-volume-ratio` | 爆量下跌最低 20 日放量倍数 | 2.0 |\n| `--capacity-market-cap-threshold` | 容量上涨最低总市值，单位亿元，严格大于 | 70.0 |\n| `--capacity-amount-threshold` | 容量上涨最低成交额，单位亿元，严格大于 | 5.0 |\n| `--capacity-pct-threshold` | 容量上涨最低当日涨幅，严格大于 | 8.0 |\n| `--feature-sample-limit` | 模块 5 每组最大样本数 | 60 |\n\n## Subagent 编排契约\n\n主 agent 先生成模块级 JSON，然后按下列最小上下文分发。每个 subagent 只看自己的模块数据，不读取其他模块数据。\n\n| 模块 | JSON | 方法论 | 模板 |\n|---|---|---|---|\n| 1 盘面趋势 | `module1_market_trend.json` | `reference/methodology/module1_trend.md` | `reference/template/section1.md` |\n| 2 集中度 | `module2_concentration.json` | `reference/methodology/module2_concentration.md` | `reference/template/section2.md` |\n| 3 赚钱效应 | `module3_money_effect.json` | `reference/methodology/module3_money_effect.md` | `reference/template/section3.md` |\n| 4 爆量下跌 | `module4_decline.json` | `reference/methodology/module4_decline.md` | `reference/template/section4.md` |\n| 5 特征分组 | `module5_feature_groups.json` | `reference/methodology/module5_feature_groups.md` | `reference/template/section5.md` |\n\n聚合 agent 额外读取：\n\n- `assembled_checks.json`：M3 赚钱效应池与 M4 爆量下跌池的确定性交叉检查。\n- `reference/methodology/output_discipline.md`：最终成稿纪律。\n\nPython 不调用 Anthropic API、不调用任何 LLM、不硬编码模型名。Codex、Claude Code 或其他通用 agent 的 subagent 编排能力负责并行撰写。\n\n## 输出规范\n\n完整研报按五个模块输出。每个判断段先给自然语言结论，再选择少量关键证据支撑；表格承载细项数据，段落解释这些数据意味着进攻、分歧、退潮、修复、拥挤还是扩散。所有强弱判断都要能回到成交额、放量倍数、涨跌幅、相对收益或回撤证据，但不要把所有可用指标塞进同一段。模块 3 的主题分组只作为内部推理步骤，不输出单独的主题分组陈列表，赚钱效应总览后直接进入主线判定。\n\n**文风默认（项目级硬性要求）：**\n\n- **文风讲人话，减少机械与僵硬。** 像跟懂行的人当面把一件事讲清楚那样写，句子通顺、有逻辑衔接，该解释因果和给判断时把话说透。避免模板腔、翻译腔和套话——别成段堆砌\"综上所述\"\"值得注意的是\"\"总体来看\"，别把每条都写成生硬的\"主语+动词+宾语\"公式句，也别为了凑结构把话说断、只丢关键词。\n- **同项罗列优先用 list，但每条要说人话。** 同一维度的多个条目（多个信号、多只个股观察点、多项风险传导）拆成 bullet 或编号，一条一项，别塞进一个长段落；但每条用完整通顺的话写，不要退化成\"字段A - 字段B - 字段C\"式的横杠拼接。结构化对照（指标 × 数值、分组 × 判定）才用表格。\n\n文风目标：僵硬度约 5/10。报告应像一位有经验的盘后研究员在做复盘：先给人能立刻理解的盘面状态，再用少量关键数字支撑，最后给出下一交易日需要验证的条件。避免把所有可用指标都塞进段落；同一自然段最多放 2-3 个核心数字，其余数字放表格。\n\n每个一级大章节（1-5）里已有的总结/定性段落必须使用 Markdown 高亮样式 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”。不要为了高亮额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n\n禁止输出买卖建议。可以写“风险传导”“持续性待验证”“主线确认度”，不要写“买入/卖出/止损/目标价”。\n\nHTML 输出只改变呈现方式：必须保留 Markdown 研报中的所有文字、表格、引用和免责声明。`==...==` 高亮段落在 HTML 中渲染为浅蓝提示块；正文前可以增加 `market_data.json` 驱动的趋势图区域。若可读取同日期 evidence，HTML 可以在“上证指数趋势”“创业板指数趋势”正文前插入对应指数的 120 日 K 线图，并在图中展示成交金额柱；也可以在 3.3、5.2、5.3 股票明细表下方插入表内股票的 120 日 K 线图。这些图表只展示 evidence 中已有的 OHLC 与成交金额数据，不得新增与 Markdown 不一致的分析结论。\n\n## 示例\n\n用户：`复盘 2026-04-29 的 A 股盘面，重点看赚钱效应和容量上涨。`\n\n执行：\n\n```powershell\npython scripts\\run_daily_panel.py --asof 20260429\n```\n\n然后按 subagent 契约加载 `reports/module_context_20260429/` 下的模块 JSON。若没有 subagent，就顺序加载每个模块的 JSON + 方法论 + 模板段，最后聚合为完整研报。\n\nFile v2.0.3:scripts/_shared/html_report/README.md\n\n# shared/html_report\n\n仓库级 HTML 报告渲染器。各 skill 在 SKILL.md 工作流末端调用它,把 Markdown 研报 + JSON 证据包套成一份自包含的 HTML 单页。\n\n## 调用方式\n\n```python\nimport sys\nfrom pathlib import Path\nsys.path.insert(0, str(Path(__file__).parent / \"_shared\"))\n\nfrom html_report import HtmlReportBuilder, ChartHook\n\nbuilder = HtmlReportBuilder(\n    title=\"600519 贵州茅台 基本面分析\",\n    theme=\"default\",                    # \"default\" 或 \"print\"\n    meta_text=\"600519 · 贵州茅台 · 2026-05-23\",\n)\nbuilder.add_chart_hook(ChartHook(\n    name=\"valuation-band\",\n    payload={\"bands\": {...}, \"series\": [...]},\n    js=VALUATION_BAND_JS,               # 字符串,在 IIFE 内执行,可读 __payload\n))\nbuilder.add_ui_decoration(SUMMARY_HERO_JS)  # 可选:把 \"核心判断\" 段升格成 hero 卡\n\nhtml = builder.render(markdown_text)        # validate_text_preserved 自动跑\nPath(out_path).write_text(html, encoding=\"utf-8\")\n```\n\n## ChartHook JS 协议\n\n每个 hook 的 JS 在专属 IIFE 中执行,渲染器自动注入:\n\n- `__payload` — 当前 hook 的 payload(已经 JSON.parse)\n- `window.__chartData` — 整个 envelope `{ hookName: payload, ... }`,供需要跨 hook 取数据的场景\n\n```js\n/* 示例 hook JS */\nconst root = document.getElementById(\"report-body\");\nif (!root) return;\nconst series = __payload.series || [];\n// ... 构造 SVG 插入到 root\n```\n\n## 主题\n\n- `default`:Claude-UI 暖橙 + 数据红绿,默认值\n- `print`:黑白衬线、A4 友好、移除 hover/动效,适合导出 PDF 或邮件附件\n\n新增主题:在 `themes/` 下放 `<name>.css`,`list_themes()` 自动发现。SVG 图表色板由各 hook JS 控制,主题层不强制约束。\n\n## 同步路径\n\n仓库源码位于 `shared/html_report/`。通过 `skill-sync.yaml` 的 `shared.bundles` 同步到目标 skill 的 `scripts/_shared/html_report/`,各 skill 用 `sys.path` 引导导入。\n\nFile v2.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7450t2xk0c4fzwzv90194pgd82q8yk\",\n  \"slug\": \"tushare-daily-market-sense\",\n  \"version\": \"2.0.3\",\n  \"publishedAt\": 1780275551450\n}\n\nFile v2.0.3:scripts/_shared/POSTGRESQL.md\n\n# CH Skills PostgreSQL 连接契约\n\n本仓库所有需要数据库的 skill 默认使用同一套 PostgreSQL 连接入口：`shared/db_core.py`。不要在单个 skill 里重新发明连接配置、连接池或表存在性检查。\n\n## 快速连接\n\n在仓库根目录验证连接：\n\n```bash\nexport ALPHA_DB_BACKEND=postgresql\nexport ALPHA_PG_URL=\"${ALPHA_PG_URL:-postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp}\"\npython3 shared/db_ping.py --alpha-schema\n```\n\n如果当前环境没有 Unix socket，改用 TCP：\n\n```bash\nexport ALPHA_PG_URL=\"postgresql://alpha_user:alpha_pass@localhost:5432/alpha_data\"\npython3 shared/db_ping.py --alpha-schema\n```\n\n在同步后的 skill 包里验证连接：\n\n```bash\npython3 scripts/_shared/db_ping.py --alpha-schema\n```\n\n## 环境变量优先级\n\n| 变量 | 作用 | 默认 |\n|---|---|---|\n| `ALPHA_DB_BACKEND` | `postgresql` 或 `sqlite` | `postgresql` |\n| `ALPHA_PG_URL` | CH Skills 标准 PostgreSQL DSN，最高优先级 | 空 |\n| `DATABASE_URL` | 通用 Agent / 调度器兼容 fallback | 空 |\n| 内置 DSN | 未设置前两者时使用 Unix socket | `postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp` |\n| `ALPHA_PG_CONNECT_TIMEOUT` | 连接超时秒数 | `5` |\n| `ALPHA_PG_POOL_MAX` | 单进程连接池上限 | `8` |\n| `ALPHA_SQLITE_DIR` | SQLite fallback 目录 | 当前目录 |\n\n`ALPHA_PG_URL` 是唯一推荐写法；`DATABASE_URL` 只是为了兼容某些 Agent 沙箱或 scheduler 已经注入的环境。\n\n## 新 skill 接入方式\n\n脚本只依赖 `db_core`，不要直接依赖 `psycopg2.connect`：\n\n```python\nimport sys\nfrom pathlib import Path\n\nSCRIPT_DIR = Path(__file__).resolve().parent\nBUNDLED_SHARED = SCRIPT_DIR / \"_shared\"\nDEV_SHARED = SCRIPT_DIR.parents[2] / \"shared\"\nsys.path.insert(0, str(BUNDLED_SHARED if BUNDLED_SHARED.exists() else DEV_SHARED))\n\nfrom db_core import get_connection, table_exists\n```\n\n若 skill 会被同步到各 Agent 目录，并且需要数据库，在 `skill-sync.yaml` 的 `shared.bundles` 中把它加入 `skills` 列表，让 `shared/` 被打包到 `scripts/_shared/`。\n\n## 诊断顺序\n\n1. 先跑 `python3 shared/db_ping.py --alpha-schema`，确认是连接问题、依赖问题还是 schema 问题。\n2. 如果报 `psycopg2 is required`，安装 `psycopg2-binary`，或临时设置 `ALPHA_DB_BACKEND=sqlite`。\n3. 如果 socket DSN 失败，换成 `localhost:5432` TCP DSN。\n4. 如果连接成功但缺表，执行 `psql -d alpha_data -f init_alpha_data.sql` 初始化 schema。\n5. 不要把 `.env`、真实口令或个人云数据库地址提交进仓库；文档和日志只能输出脱敏 DSN。\n\nFile v2.0.3:reference/methodology/module1_trend.md\n\n# 模块 1：盘面趋势\n\n使用 `module1_market_trend.json`。\n\n只分析：\n\n- 上证指数\n- 创业板指数\n- `market.trend.sentiment`\n- `market.temperature`\n\n不要加入科创板、风格指数、融资、创业板 PE、外围资产或新闻解释。\n\n分析框架：\n\n1. 情绪趋势：结合量能温度、全市场换手率、情绪温度和广度温度。若情绪历史不可用，只保留当日盘面快照。\n2. 上证趋势：判断趋势阶段、量价质量、均线位置和最近支撑压力。\n3. 创业板趋势：使用同样四项框架，并与上证强弱对比。\n4. 盘面定性：明确写成共振、背离或分化。\n\n写作要求：\n\n- 不要把单日涨跌写成趋势。\n- 上证指数趋势、创业板指数趋势只写文字段落，不输出表格。指数数据用于支撑判断，关键数值直接嵌入句子，例如“收盘站上 MA20，成交额为近 20 日均量 1.2 倍，临近 20 日压力位”。这样避免指数部分挤占篇幅，也让报告重点回到盘面判断。\n- 指数上涨但缩量时，写“反弹质量待确认”。\n- 成交额与全市场换手率同步抬升、上涨家数同步改善时，写“良性放量加速，风险中性偏高”。\n- 全市场换手率上升但上涨/下跌家数转弱时，写“换手加速但承接分化，风险升温”。\n- 指数强但广度/情绪弱时，写“指数掩盖分化”。\n- 情绪先修复但指数未确认时，写“情绪先行修复但指数尚未确认”。\n\nFile v2.0.3:reference/methodology/module2_concentration.md\n\n# 模块 2：成交额集中度\n\n使用 `module2_concentration.json`。\n\n目标：说明市场成交额是集中在少数前排股票，还是相对均衡分布。\n\n读取：\n\n- Top10/20/50/100 成交额占比\n- 相对前一交易日变化\n- 近 10 日 Top50 集中度趋势\n- 成交额前排样本\n\n写作要求：\n\n- Top10/20 集中度越高，说明拥挤度越高、市场越窄。\n- Top50 集中度连续抬升，可能说明共识正在形成。\n- 成交额前排股票只能作为证据，不能机械当作主题分类器。\n- 只有当前排样本能支撑拥挤度判断时，才点名 1-3 个例子。\n\nFile v2.0.3:reference/methodology/module3_money_effect.md\n\n# 模块 3：赚钱效应与上涨主线\n\n使用 `module3_money_effect.json`。\n\n候选池：`pct_chg >= 7%` 且成交额 `>= 2 亿`，按成交额降序排列。\n\n工作步骤：\n\n1. 概括候选数、合计成交额、成交额占比、收益中位数和近似涨停数。\n2. 按业务事实、产品环节、事件催化和同步量价行为归纳临时主题，作为内部判定步骤。\n3. 每组至少 3 只股票；不足 3 只归入“其他/孤立强势股”，但不要输出单独的主题分组陈列表。\n4. 每组计算代表股、入选数、组合计成交额和组内成交额占比；这些指标只进入主线判定、领导股/弹性股和总结句。\n5. 评定主线确认度：\n   - ★★★：组成交额占比 >= 30%，5 日涨幅中位 > 0，5 日相对收益中位 > 0，连续放量天数中位 >= 2。\n   - ★★：满足 4 条中的 3 条。\n   - ★：满足 2 条或更少，或缺少组内扩散。\n6. 上涨主线表只展示 ★★ 与 ★★★ 主题；★ 主题只用于“资金轮动/局部异动”结论，不进入主线表。\n7. 评定位置判断：基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断，只输出“高位趋势”或“低位启动”。无法充分证明低位启动时，默认写“高位趋势”。\n8. 对每个 ★★ / ★★★ 主线做组内分层：列出领导股与弹性股。领导股优先看成交额承载、市场辨识度、产业链核心地位和收盘承接；弹性股优先看主线相关性、换手/放量活跃、5 日相对强、收盘承接、市值不过分笨重、股性活。\n\n组内分层口径：\n\n- 领导股不是涨幅最高股，而是最能承载主线共识的股票。优先级为：组内成交额厚度 > 市场辨识度 > 产业链核心地位 > 收盘承接。\n- 弹性股不是杂毛补涨股，必须仍属于该主线。优先选择 `elasticity_hint_score` 较高、`turnover_rate`/`amount_ratio_20d` 活跃、`rel_ret_5d` 为正、`close_to_high` 较好的样本。\n- 先后强弱基于成交额、放量、相对收益、换手率、收盘贴近日高和 120 日位置等日线字段判断。\n- 产业链地位不能由脚本硬判。模型只能基于可确认的主营、公告、公开业务事实或常识性产业链位置判断；不确定时写“产业链地位待核验”。\n\n写作要求：\n\n- 成交额占比是第一门槛；不要因为股票名称看起来有想象力就提升低成交额主题的评级。\n- 主题分组是内部工作，不作为独立小节输出；报告从赚钱效应总览后直接进入主线判定。\n- 候选稀疏或没有主题达到足够成交额厚度时，定性为资金轮动，而不是确认主线。\n- 若没有 ★★ 或 ★★★ 主题，主线表下写“无二星/三星主线，赚钱效应偏资金轮动”。\n- 输出清晰的 ★★★ 领导股名单，供最终聚合做交叉检查；若没有 ★★★ 主线，写“今日无三星主线领导股”。\n- 每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；如果证据不足，不要硬凑数量。\n\nFile v2.0.3:reference/methodology/module4_decline.md\n\n# 模块 4：爆量下跌风险\n\n使用 `module4_decline.json`。\n\n候选池：`pct_chg <= -3%`，`amount_ratio_20d >= 2.0`，成交额 `>= 1 亿`，按 `decline_intensity = amount_ratio_20d * abs(pct_chg)` 降序排列。\n\n风险分组必须基于证据：\n\n- 高位抱团瓦解：距 120 日高点回撤较浅，前期强势，今日突然放量崩塌。\n- 业绩雷/事件冲击：单日跌幅大，成交额明显放大。\n- 退潮补跌：5 日已偏弱，今日继续放量下跌。\n- ST/风险股出清：ST/退名称，通常接近跌停。\n- 流动性杀跌：没有清晰叙事，只体现异常卖压。\n- 主线内部分歧：与模块 3 强主题相关，但不一定是代表股本身。\n\n写作要求：\n\n- 不要纳入正常成交的小跌个股。\n- 明确风险是孤立、集中，还是与此前强方向有关。\n- M3/M4 交叉检查在聚合阶段读取 `assembled_checks.json`；本模块不要自行编造最终的主线见顶预警。\n\nFile v2.0.3:reference/methodology/module5_feature_groups.md\n\n# 模块 5：特征分组分析\n\n使用 `module5_feature_groups.json`。\n\n模块 5 固定输出三组股票清单：\n\n- 容量上涨：来自 `groups.capacity_up`，要求当天总市值 > 70 亿、成交额 > 5 亿、涨幅 > 8%，并排除北交所与 ST，按涨幅降序输出。\n- 科创板月线突破：来自 `groups.star_120_high_monthly_breakout`，要求科创板、今日收盘突破前 120 日高点、真实自然月 K 突破此前完整月份高点，并排除高位趋势延续样本。\n- 10:30 前涨停：来自 `groups.early_limit_up_1030`，参考 ch-stock 特征分组页，使用 JRJ 涨停池，要求首次封板时间不晚于 10:30、总市值不低于 50 亿，并过滤 ST。\n\n写作规则：\n\n- 三组各自独立输出股票列表，不做组间横向对比，不写“哪组更强”的排序结论。\n- 每组必须使用 Markdown 表格列出股票；无候选时写“暂无命中”，不要编造近似候选。\n- 10:30 前涨停组如果 `available=false`，写明数据源不可用和 error，不用日涨幅近似替代。\n- 容量上涨组重点引用涨幅、成交额、总市值、换手率和量比；它表达的是“能容纳资金的强上涨”，不是低位启动判断。\n- 科创板月线突破组重点引用 120 日新高幅度、月线突破幅度、成交额、近 5/20 日涨幅和 120 日位置。\n- 10:30 前涨停组重点引用首次封板时间、总市值、成交额、涨幅和开板次数。\n\n交叉命中上涨归因：\n\n- 仅当 `overlap_hits` 非空时输出 5.4。\n- 交叉命中是本节重点，必须逐只分析，不只列名单。\n- 归因只基于证据包中的确定性事实和模型对业务/事件的常识归纳，不调用脚本里的 LLM，不写外部新闻已证实之类无法追溯的断言。\n- 归因结构建议为：命中组别 → 量价位置 → 资金行为 → 可能上涨驱动 → 待验证点。\n- 不得输出买入、卖出、仓位、止损、目标价。\n\nFile v2.0.3:reference/methodology/output_discipline.md\n\n# 输出纪律\n\n每个模块和最终聚合都要遵守本文件。\n\n- 证据优先：所有强弱判断都要能回到候选数、成交额、成交额占比、放量倍数、涨跌幅、相对收益或回撤证据，但正文只挑最能解释状态的证据。\n- 成交额优先：没有成交额支撑的价格波动只是弱证据；成交额集中、异常放量和持续换手权重更高。\n- 不套现成行业标签：不要机械使用申万、同花顺、东方财富概念。主题只能从公司业务事实、产品环节、事件催化和同步量价行为中临时归纳。\n- 不写投资建议：禁止写买入、卖出、加仓、止损、目标价或组合配置指令。\n- 特征分组可以写“观察优先级”“持续性待验证”“交叉命中值得重点跟踪”等研究判断，但这些只表示证据强弱和跟踪优先级，不得延伸成具体交易指令。\n- 不写空话：不要写“板块轮动明显”“资金关注度提升”“情绪较好”这类没有数字支撑的句子。\n- 事实与判断分开：表格承载数据，段落解释数据意味着什么、哪些结论仍未确认。\n- 人话先行：每个判断段第一句必须是自然语言结论，不以连续数字开头。例：“今天不是主线结束，而是强主线掩盖了弱广度。”\n- 数字限流：同一自然段最多出现 3 个关键数字；超过部分放入表格，不在段落里复述。\n- 少写审计句：减少“必须包含、暂不升级、需确认、候选数、占比、交叉结果”这类机械串联。保留边界判断，但要写成交易观察语言。\n- 每节只回答一个问题：这节到底说明“进攻、分歧、退潮、修复、拥挤、扩散”中的哪一种状态。\n- 高亮定性段落：每个一级大章节（1-5）里已有的总结/定性段落必须用 `==...==` 包裹，例如”盘面定性””拥挤度判断””主线 vs 资金轮动结论””风险传导提示””特征分组一句话判断”。不要额外新增”本节总结”段落；高亮的是原本就承担总结作用的段落。\n- 数据缺失或模块跳过时，要明确说明，并引用脚本给出的跳过原因。\n- 最终聚合要引用 `assembled_checks.json` 的 M3/M4 交叉检查；只有 M3 ★★★ 主线代表股也出现在爆量下跌池中，才升级为主线见顶预警。\n\nFile v2.0.3:reference/report_template.md\n\n## 一句话盘面判断\n\n[第一句：用一句人话定性今天的盘面，不以连续数字开头。]\n\n[第二句：只放 2-3 个最能支撑判断的关键证据；其余数字留在表格中。]\n\n[第三句：说明下一交易日最重要的验证条件。]\n\n**📈 1. 盘面趋势**\n\n> 数据基础：`market_trend`。本模块只看上证指数、创业板指数和 `reference/market_data.csv` 情绪趋势；不加入科创板、风格指数、融资、创业板 PE、外围资产。\n\n**1.1 情绪趋势**\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额（万亿） |  | 5日均 / 20日均 | 缩量/平稳/放量 |\n| 全市场换手率 |  | 5日均 / 20日均 | 加速/平稳/降温 |\n| 活跃度 |  | 5日均 | 冰点/弱修复/中性/偏热/过热 |\n| 上涨家数 / 下跌家数 |  | 上涨占比 / 5日均 | 普涨/普跌/分化/修复 |\n| 涨停数 / 跌停数 |  | 涨停跌停比 / 5日均 | 情绪扩张/退潮 |\n\n==情绪判断：[先用一句话说明情绪状态，再选择 2-3 个最关键证据支撑。不要罗列所有指标。若 `market_trend.sentiment.available=false`，写\"情绪历史不可用，仅保留当日盘面快照\"，不要补写活跃度趋势。若指标之间矛盾，优先解释矛盾本身。表格保留，但段落不要复述表格。]==\n\n**1.2 上证指数趋势**\n\n[只写文字段落，不要使用表格。先判断趋势阶段，再挑 2-3 个量价或位置证据。只写最关键证据，不做长篇技术分析。]\n\n**1.3 创业板指数趋势**\n\n[只写文字段落，不要使用表格。先判断创业板相对上证是更强、更弱还是同步，再挑 2-3 个量价或位置证据。]\n\n**1.4 盘面定性：指数与情绪是共振、背离还是分化**\n\n==[2-4 句。先说明上证与创业板、指数与情绪是共振、背离还是分化，再选 2-3 个关键证据解释。若指数强但情绪弱，写\"指数掩盖分化\"；若指数弱但情绪修复，写\"情绪先行修复但指数尚未确认\"；若上证强、创业板弱，写\"权重强于成长\"或相反。]==\n\n**🎯 2. 成交额集中度与拥挤度**\n\n| 指标 | 今日 | 前一交易日 | 变化 |\n|---|---:|---:|---:|\n| Top10 成交额占比 |  |  |  |\n| Top20 成交额占比 |  |  |  |\n| Top50 成交额占比 |  |  |  |\n| Top100 成交额占比 |  |  |  |\n\n| 近 10 日集中度趋势 | 数值 |\n|---|---:|\n| Top50 区间变化 |  |\n| Top50 上行天数 |  |\n\n==拥挤度判断：[先回答资金是在拥挤、扩散还是均衡，再选择 2-3 个 Top 集中度或前排成交额证据。如有典型成交额前排个股，举 1-3 例即可。表格已有的数值不要逐项复述。]==\n\n**💰🔥 3. 赚钱效应与上涨主线**\n\n> 数据基础：`money_effect_samples`（pct_chg ≥ 7% 且 成交额 ≥ 2 亿，按成交额降序）。\n\n**3.1 赚钱效应总览**\n\n| 指标 | 数值 |\n|---|---:|\n| 候选股票数 |  |\n| 候选股合计成交额（亿元） |  |\n| 候选股合计成交额占当日全市场比 |  |\n| 候选股涨幅中位 / 最大 |  /  |\n| 候选股 5 日涨幅中位 |  |\n| 候选股 5 日相对指数超额中位 |  |\n| 近似涨停数（pct_chg ≥ 9.8%） |  |\n\n==一句话判断：[先用自然语言判断是局部强主线、多线开花还是稀疏轮动，再用 1-2 个关键证据支撑。]==\n\n**3.2 主线判定（只展示 ★★ / ★★★ 主线）**\n\n| 主题 | 主线确认度 | 位置判断 | 拥挤度 | 催化逻辑 |\n|---|---|---|---|---|\n|  | ★★★/★★ | 高位趋势/低位启动 | 高/中/低 |  |\n\n判定规则（严格按此评级，不可主观放宽）：\n- ★★★ 主线：组成交额占比 ≥ 30% + 5 日涨幅中位 > 0 + 5 日相对超额中位 > 0 + 连续放量天数中位 ≥ 2\n- ★★ 潜在主线：满足 4 条中的 3 条\n- ★ 局部异动：满足 ≤ 2 条\n\n展示规则：本表只保留 ★★ 与 ★★★ 主题；★ 主题只参与“资金轮动/局部异动”判断，不进入主线表。若没有 ★★ 或 ★★★ 主题，写“无二星/三星主线，赚钱效应偏资金轮动”。\n分组只作为模型内部判定步骤：不输出单独的主题分组陈列表；主线表中直接呈现达到 ★★ / ★★★ 的主题及证据。\n位置判断：只写“高位趋势”或“低位启动”。基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断；无法充分证明低位启动时，默认写“高位趋势”。\n拥挤度：高 = 组内代表股同时在第 2 模块成交额 Top10/20；中 = 仅 1 只入 Top20；低 = 无代表股入 Top20。\n催化逻辑：有明确事件用一句话写明；无则写\"无明确事件催化，量价驱动\"。\n\n**3.3 ★★/★★★ 主线领导股与弹性股**（每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；证据不足时不要硬凑）\n\n| 主题 | 层级 | 股票 | 当日涨幅 | 成交额(亿) | 放量倍数 | 换手率 | 5日相对超额 | 收盘贴近日高 | 股性/地位说明 |\n|---|---|---|---:|---:|---:|---:|---:|---:|---|\n|  | 领导股/弹性股 |  |  |  |  |  |  |  |  |\n\n分层口径：领导股看成交额承载、辨识度、产业链核心地位和收盘承接；弹性股看换手/放量、相对强度、收盘承接、市值弹性和股性。收盘贴近日高使用 `close_to_high`。产业链地位不确定时写“产业链地位待核验”。\n\n==**主线 vs 资金轮动结论**：[先定性今天是主线进攻、资金轮动还是局部扩散。≥1 个 ★★★ 主线 = 主线行情；全部 ≤ ★★ = 资金轮动。如同时给出\"局部主线 vs 全面扩散\"的判断，例：上涨占比 < 50% 时即便有 ★★★ 主线也属于局部主线行情。用 2-3 个关键证据说明即可，不要把主题分组过程写成审计清单。]==\n\n**🧊 4. 亏钱效应（爆量下跌）**\n\n> 数据基础：`volume_decline_samples`（pct_chg ≤ -3% 且 放量倍数 ≥ 2x 且 成交额 ≥ 1 亿，按 decline_intensity 降序）。\n\n==[一句话判断：先说明亏钱效应是在退潮、分歧还是局部释放，再选择 2-3 个关键证据。如有典型样本贡献的成交额值得点名，在此处直接说明。不再单独列总览表。]==\n\n**4.1 风险类型归纳（模型分组，不套行业标签）**\n\n| 风险类型 | 代表股（按 decline_intensity TOP5） | 共同特征 | 入选数 | 跌幅中位 | 放量倍数中位 | 距120日高点中位 | 风险定性 |\n|---|---|---|---:|---:|---:|---:|---|\n|  |  |  |  |  |  |  |  |\n|  |  |  |  |  |  |  |  |\n\n参考类型：高位抱团瓦解、业绩雷/事件冲击、退潮补跌、ST/风险股出清、流动性杀跌、主线内部分歧。\n\n风险定性写法（具体描述，不要写\"加速/趋稳/局部\"这类抽象词）：例如\"主线内部分歧加剧\"、\"高位筹码松动\"、\"弱势股出清\"、\"局部补跌\"、\"业绩雷扩散\"。每类要给出共同特征，仅靠跌幅相近不构成一类。\n\n**4.2 高强度爆量下跌个股明细**（按 decline_intensity 排序，前 10-15 只）\n\n| 排名 | 股票 | 当日跌幅 | 放量倍数 | decline_intensity | 成交额(亿) | 5日跌幅 | 距120日高点 | 风险归类 |\n|---:|---|---:|---:|---:|---:|---:|---:|---|\n| 1 |  |  |  |  |  |  |  |  |\n| 2 |  |  |  |  |  |  |  |  |\n\n==**风险传导提示**：[第 3 模块 ★★★ 主线代表股若进入 4.2 明细且属\"退潮补跌\"或\"高位抱团瓦解\"，写成主线核心承接破坏；如果只是大方向内部其他股票出现爆量下跌（不是 ★★★ 主线代表股本身），写成\"主线内部开始松动，但核心承接尚未破坏\"。先说明风险有没有传到主线核心，再用少量证据支撑。]==\n\n**🌱 5. 特征分组分析**\n\n> 数据基础：`feature_group_analysis_samples`。三组分别输出：容量上涨、科创板月线突破、10:30 前涨停；若存在 `overlap_hits`，重点分析交叉命中股票的上涨归因。\n\n==一句话判断：[先说明特征分组更像进攻扩散、局部试错还是低效轮动，再选 2-3 个组别证据。三组明细表保留完整数字，段落不要复述全部候选数。]==\n\n**5.1 容量上涨明细**\n\n| 股票 | 涨幅 | 成交额(亿) | 总市值(亿) | 流通市值(亿) | 收盘 | 换手率 | 量比 |\n|---|---:|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.2 科创板月线突破明细**\n\n| 股票 | 涨幅 | 成交额(亿) | 收盘 | 前120日高点 | 月线突破幅度 | 5日涨幅 | 20日涨幅 | 120日位置 |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.3 10:30 前涨停明细**\n\n| 股票 | 首次封板 | 涨幅 | 成交额(亿) | 总市值(亿) | 开板次数 | 收盘 |\n|---|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |\n\n若 `available=false`，写明 JRJ 数据不可用和 error，不使用涨幅近似替代。无候选时写“暂无命中”。\n\n**5.4 交叉命中上涨归因**\n\n仅当 `overlap_hits` 非空时输出本段；为空时写：今日三组之间无交叉命中股票。\n\n| 股票 | 命中组别 | 上涨归因 | 关键证据 | 待验证点 |\n|---|---|---|---|---|\n|  |  |  |  |  |\n\n以上基于 Tushare 历史交易数据和本地生成证据包，不构成投资建议。\n\nFile v2.0.3:reference/template/section1.md\n\n# 1. 盘面趋势\n\n## 1.1 情绪趋势\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额 |  |  |  |\n| 全市场换手率 |  |  |  |\n| 活跃度 |  |  |  |\n| 上涨/下跌家数 |  |  |  |\n| 涨停/跌停数 |  |  |  |\n\n情绪判断：[先用一句话说明情绪状态，再选择 2-3 个最关键证据支撑。不要罗列所有指标。若指标之间矛盾，优先解释矛盾本身。表格保留，但段落不要复述表格。]\n\n## 1.2 指数趋势\n\n上证指数趋势判断：[只用文字段落，不要使用表格。先判断趋势阶段，再挑 2-3 个量价或位置证据；不要把均线、支撑压力和涨跌幅全部塞进同一段。]\n\n创业板趋势判断：[只用文字段落，不要使用表格。先说明创业板相对上证更强、更弱还是同步，再挑 2-3 个量价或位置证据。]\n\n## 1.3 盘面定性\n\n==[先说明指数与情绪是共振、背离还是分化，再选 2-3 个关键证据解释。若指数强但广度弱，重点写“指数掩盖分化”；若情绪先修复但指数未确认，重点写“修复还缺指数确认”。]==\n\nArchive v2.0.2: 24 files, 112237 bytes\n\nFiles: reference/market_data.csv (8694b), reference/market_data.json (150613b), reference/methodology/module1_trend.md (1497b), reference/methodology/module2_concentration.md (613b), reference/methodology/module3_money_effect.md (3046b), reference/methodology/module4_decline.md (960b), reference/methodology/module5_feature_groups.md (1903b), reference/methodology/module5_low_position.md (2551b), reference/methodology/output_discipline.md (1721b), reference/report_template.md (10376b), reference/template/section1.md (1295b), reference/template/section2.md (503b), reference/template/section3.md (1893b), reference/template/section4.md (776b), reference/template/section5.md (1323b), scripts/_shared/db_core.py (6071b), scripts/db_adapter.py (10129b), scripts/market_panel.py (194260b), scripts/migrate_stock_to_pg.py (10459b), scripts/render_report_html.py (62532b), scripts/run_daily_panel.py (8132b), skill-card.md (3337b), SKILL.md (9578b), _meta.json (145b)\n\nFile v2.0.2:SKILL.md\n\n---\nname: tushare-daily-market-sense\ndescription: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、低位异动/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌停/指数数据做量化选股观察时，必须优先使用本 skill。本 skill 先生成确定性证据包，再由模型或 Codex/Claude Code 等通用 agent 的 subagent 编排能力按模块撰写；不在脚本中调用 LLM，不提供买卖建议，不按申万、同花顺、东方财富等现成行业/概念口径分组。\nversion: 2.0.2\n---\n\n# Tushare Daily Market Sense\n\n## 目标\n\n基于 Tushare 日线、指数、成交额与本地情绪历史，为 A 股盘后复盘生成结构化研报：盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析。\n\n不做单股基本面深度研究、港股/美股/基金/期货/加密分析、分钟级交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON；主题归纳、风险措辞和研报写作由模型完成。\n\n## 核心理念\n\n成交额优先。所有强弱判断都要有成交额证据：上涨主线按成交额厚度确认，爆量下跌按放量异常与跌幅强度识别，特征分组按命中规则与成交额证据分开呈现。\n\n主题主线由模型基于业务事实临时归纳，不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。\n\n## 工作流程\n\n1. 确定交易日：解析“今天/最近”或具体日期，默认只使用 `D` 及以前数据；只有用户明确要求后验时才允许 `--allow-future`。\n2. 生成证据包：运行 `scripts/run_daily_panel.py`。脚本会直接调用数据管线，写出完整 evidence、轻量 `report_context` 和模块级 JSON。\n3. 选择撰写模式：\n   - 有 subagent 编排能力时，主 agent 将 5 个模块 JSON 分发给 5 个 subagent 并行撰写。\n   - 没有 subagent 能力时，按同样模块顺序单会话执行，每次只加载当前模块的 JSON、方法论和模板段。\n4. 聚合成稿：主 agent 读取 6 段输出、`assembled_checks.json` 与 `reference/methodology/output_discipline.md`，补一句话盘面判断、风险传导提示和最终语气校准。默认不做外部收评校验、不搜索第三方行情综述、不在报告中加入“外部校验参考”；只有用户明确要求时才补充外部来源。\n5. 按需生成 HTML：当用户要求 HTML、网页、可视化报告或截图风格输出时，先完成并核对 `reports/report_YYYYMMDD.md`，再运行 `scripts/render_report_html.py` 生成同日期 HTML。HTML 是展示层产物，不新增研报判断、不删减 Markdown 正文；若同目录存在 `evidence_YYYYMMDD_utf8.json`，HTML 会自动读取其中的上证指数、创业板指数 120 日 K 线并插入对应指数趋势分析前。\n6. 清理临时产物：确认 `reports/report_YYYYMMDD.md` 已写入并可读后，删除同日期的临时证据与上下文文件，只保留最终报告。若已按需生成 HTML，则同时保留 `reports/report_YYYYMMDD.html`。必须清理：\n   - `reports/evidence_YYYYMMDD_utf8.json`\n   - `reports/evidence_YYYYMMDD_utf8.stderr.log`\n   - `reports/report_context_YYYYMMDD.json`\n   - `reports/module_context_YYYYMMDD/`\n   不要删除 `reports/report_YYYYMMDD.md` 和已生成的 `reports/report_YYYYMMDD.html`，不要跨日期批量清理，除非用户明确要求。\n\n## 数据获取\n\n环境变量：\n\n```bash\nTUSHARE_TOKEN=your_token\n```\n\n运行脚本会先更新 `reference/market_data.csv`，并同步维护派生文件 `reference/market_data.json`，再生成情绪趋势：AKShare `stock_market_activity_legu()` 默认提供上涨、涨停、下跌、跌停、平盘、活跃度、情绪值、成交额等盘面情绪字段；搜狐涨跌停历史页仅在 AKShare 不可用或字段缺失时作为 fallback；Tushare `margin` 汇总 T-1 交易日融资净买入，Tushare `daily` 与 `daily_basic.circ_mv` 计算流通市值加权的全市场换手率。因此环境中还需安装 `akshare`。\n\n基础命令：\n\n```powershell\ncd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH\n```\n\n主要输出：\n\n- `reports/evidence_YYYYMMDD_utf8.json`：完整证据包。\n- `reports/report_context_YYYYMMDD.json`：兼容旧流程的轻量上下文。\n- `reports/module_context_YYYYMMDD/`：供 subagent 分工的模块级 JSON。\n- `reference/market_data.json`：`market_data.csv` 的全量派生 JSON，按交易日升序保留所有列、清洗数值并提供 `series` 给 HTML 趋势图使用。\n\n这些文件中，evidence、report_context 和 module_context 是研报撰写过程中的临时产物。最终报告生成并核对后，应按工作流程第 6 步删除，只保留 `reports/report_YYYYMMDD.md`、按需生成的 `reports/report_YYYYMMDD.html`，以及长期维护的 `reference/market_data.csv` / `reference/market_data.json`。\n\nHTML 输出命令：\n\n```powershell\npython scripts\\render_report_html.py --input reports\\report_20260429.md\n```\n\n默认输出 `reports/report_20260429.html`，并将 `reference/market_data.json` 内嵌到 HTML 中。本地浏览器可直接打开，图表不依赖外部 CDN。\n\n常用参数：\n\n| 参数 | 含义 | 默认 |\n|---|---|---:|\n| `--fetch-workers` | cache/API 获取线程数；排查限流时设为 1 | 6 |\n| `--index-kline-days` | HTML 上证/创业板 K 线展示窗口，独立于 `--market-trend-days` | 120 |\n| `--money-pct-threshold` | 赚钱效应最低当日涨幅 | 7.0 |\n| `--money-amount-threshold` | 赚钱效应最低成交额，单位亿元 | 2.0 |\n| `--intraday-freq` | 赚钱效应候选股分钟增强频率；用于日内高点时间 | 1min |\n| `--skip-intraday` | 跳过分钟行情增强；无 Tushare 分钟权限或排查限流时使用 | false |\n| `--intraday-workers` | 分钟行情抓取线程数；保持小并发避免限流 | 2 |\n| `--decline-pct-max` | 爆量下跌最大当日涨幅 | -3.0 |\n| `--decline-volume-ratio` | 爆量下跌最低 20 日放量倍数 | 2.0 |\n| `--low-lookback-days` | 低位放量触发回看窗口 | 5 |\n\n## Subagent 编排契约\n\n主 agent 先生成模块级 JSON，然后按下列最小上下文分发。每个 subagent 只看自己的模块数据，不读取其他模块数据。\n\n| 模块 | JSON | 方法论 | 模板 |\n|---|---|---|---|\n| 1 盘面趋势 | `module1_market_trend.json` | `reference/methodology/module1_trend.md` | `reference/template/section1.md` |\n| 2 集中度 | `module2_concentration.json` | `reference/methodology/module2_concentration.md` | `reference/template/section2.md` |\n| 3 赚钱效应 | `module3_money_effect.json` | `reference/methodology/module3_money_effect.md` | `reference/template/section3.md` |\n| 4 爆量下跌 | `module4_decline.json` | `reference/methodology/module4_decline.md` | `reference/template/section4.md` |\n| 5 特征分组 | `module5_feature_groups.json` | `reference/methodology/module5_feature_groups.md` | `reference/template/section5.md` |\n\n聚合 agent 额外读取：\n\n- `assembled_checks.json`：M3 赚钱效应池与 M4 爆量下跌池的确定性交叉检查。\n- `reference/methodology/output_discipline.md`：最终成稿纪律。\n\nPython 不调用 Anthropic API、不调用任何 LLM、不硬编码模型名。Codex、Claude Code 或其他通用 agent 的 subagent 编排能力负责并行撰写。\n\n## 输出规范\n\n完整研报按五个模块输出。每段结论先行，表格只放关键证据，所有强弱判断必须有成交额或放量倍数支撑。不要写“板块轮动明显”这类空句；要写“候选数、合计成交额、最大主题占比、代表股成交额”。\n\n每个一级大章节（1-5）里已有的总结/定性段落必须使用 Markdown 高亮样式 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”。不要为了高亮额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n\n禁止输出买卖建议。可以写“风险传导”“持续性待验证”“主线确认度”，不要写“买入/卖出/止损/目标价”。\n\nHTML 输出只改变呈现方式：必须保留 Markdown 研报中的所有文字、表格、引用和免责声明。`==...==` 高亮段落在 HTML 中渲染为浅蓝提示块；正文前可以增加 `market_data.json` 驱动的趋势图区域。若可读取同日期 evidence，HTML 可以在“上证指数趋势”“创业板指数趋势”正文前插入对应指数的 120 日 K 线图，并在图中展示成交金额柱；也可以在 3.3、5.2、5.3 股票明细表下方插入表内股票的 120 日 K 线图。这些图表只展示 evidence 中已有的 OHLC 与成交金额数据，不得新增与 Markdown 不一致的分析结论。\n\n## 示例\n\n用户：`复盘 2026-04-29 的 A 股盘面，重点看赚钱效应和低位放量。`\n\n执行：\n\n```powershell\npython scripts\\run_daily_panel.py --asof 20260429\n```\n\n然后按 subagent 契约加载 `reports/module_context_20260429/` 下的模块 JSON。若没有 subagent，就顺序加载每个模块的 JSON + 方法论 + 模板段，最后聚合为完整研报。\n\nFile v2.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7450t2xk0c4fzwzv90194pgd82q8yk\",\n  \"slug\": \"tushare-daily-market-sense\",\n  \"version\": \"2.0.2\",\n  \"publishedAt\": 1779239396626\n}\n\nFile v2.0.2:reference/methodology/module1_trend.md\n\n# 模块 1：盘面趋势\n\n使用 `module1_market_trend.json`。\n\n只分析：\n\n- 上证指数\n- 创业板指数\n- `market.trend.sentiment`\n- `market.temperature`\n\n不要加入科创板、风格指数、融资、创业板 PE、外围资产或新闻解释。\n\n分析框架：\n\n1. 情绪趋势：结合量能温度、全市场换手率、情绪温度和广度温度。若情绪历史不可用，只保留当日盘面快照。\n2. 上证趋势：判断趋势阶段、量价质量、均线位置和最近支撑压力。\n3. 创业板趋势：使用同样四项框架，并与上证强弱对比。\n4. 盘面定性：明确写成共振、背离或分化。\n\n写作要求：\n\n- 不要把单日涨跌写成趋势。\n- 上证指数趋势、创业板指数趋势只写文字段落，不输出表格。指数数据用于支撑判断，关键数值直接嵌入句子，例如“收盘站上 MA20，成交额为近 20 日均量 1.2 倍，临近 20 日压力位”。这样避免指数部分挤占篇幅，也让报告重点回到盘面判断。\n- 指数上涨但缩量时，写“反弹质量待确认”。\n- 成交额与全市场换手率同步抬升、上涨家数同步改善时，写“良性放量加速，风险中性偏高”。\n- 全市场换手率上升但上涨/下跌家数转弱时，写“换手加速但承接分化，风险升温”。\n- 指数强但广度/情绪弱时，写“指数掩盖分化”。\n- 情绪先修复但指数未确认时，写“情绪先行修复但指数尚未确认”。\n\nFile v2.0.2:reference/methodology/module2_concentration.md\n\n# 模块 2：成交额集中度\n\n使用 `module2_concentration.json`。\n\n目标：说明市场成交额是集中在少数前排股票，还是相对均衡分布。\n\n读取：\n\n- Top10/20/50/100 成交额占比\n- 相对前一交易日变化\n- 近 10 日 Top50 集中度趋势\n- 成交额前排样本\n\n写作要求：\n\n- Top10/20 集中度越高，说明拥挤度越高、市场越窄。\n- Top50 集中度连续抬升，可能说明共识正在形成。\n- 成交额前排股票只能作为证据，不能机械当作主题分类器。\n- 只有当前排样本能支撑拥挤度判断时，才点名 1-3 个例子。\n\nFile v2.0.2:reference/methodology/module3_money_effect.md\n\n# 模块 3：赚钱效应与上涨主线\n\n使用 `module3_money_effect.json`。\n\n候选池：`pct_chg >= 7%` 且成交额 `>= 2 亿`，按成交额降序排列。\n\n工作步骤：\n\n1. 概括候选数、合计成交额、成交额占比、收益中位数和近似涨停数。\n2. 按业务事实、产品环节、事件催化和同步量价行为归纳临时主题。\n3. 每组至少 3 只股票；不足 3 只归入“其他/孤立强势股”。\n4. 每组计算代表股、入选数、组合计成交额和组内成交额占比。\n5. 评定主线确认度：\n   - ★★★：组成交额占比 >= 30%，5 日涨幅中位 > 0，5 日相对收益中位 > 0，连续放量天数中位 >= 2。\n   - ★★：满足 4 条中的 3 条。\n   - ★：满足 2 条或更少，或缺少组内扩散。\n6. 上涨主线表只展示 ★★ 与 ★★★ 主题；★ 主题只用于“资金轮动/局部异动”结论，不进入主线表。\n7. 评定位置判断：基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断，只输出“高位趋势”或“低位启动”。无法充分证明低位启动时，默认写“高位趋势”。\n8. 对每个 ★★ / ★★★ 主线做组内分层：列出领导股与弹性股。领导股优先看成交额承载、日内高点时间靠前、市场辨识度、产业链核心地位；弹性股优先看主线相关性、换手/放量活跃、5 日相对强、收盘承接、市值不过分笨重、股性活。\n\n组内分层口径：\n\n- 领导股不是涨幅最高股，而是最能承载主线共识的股票。优先级为：组内成交额厚度 > 日内高点/封板时间靠前 > 市场辨识度 > 产业链核心地位。\n- 弹性股不是杂毛补涨股，必须仍属于该主线。优先选择 `elasticity_hint_score` 较高、`turnover_rate`/`amount_ratio_20d` 活跃、`rel_ret_5d` 为正、`close_to_intraday_high` 或 `close_to_high` 较好的样本。\n- `intraday_high_time_label` 来自分钟行情；若 `intraday_data_available=false`，不要编造日内高点时间，只写“分钟数据缺失”，并改用放量、成交额和收盘贴近日高作为先后证据。\n- 产业链地位不能由脚本硬判。模型只能基于可确认的主营、公告、公开业务事实或常识性产业链位置判断；不确定时写“产业链地位待核验”。\n\n写作要求：\n\n- 成交额占比是第一门槛；不要因为股票名称看起来有想象力就提升低成交额主题的评级。\n- 候选稀疏或没有主题达到足够成交额厚度时，定性为资金轮动，而不是确认主线。\n- 若没有 ★★ 或 ★★★ 主题，主线表下写“无二星/三星主线，赚钱效应偏资金轮动”。\n- 输出清晰的 ★★★ 领导股名单，供最终聚合做交叉检查；若没有 ★★★ 主线，写“今日无三星主线领导股”。\n- 每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；如果证据不足，不要硬凑数量。\n\nFile v2.0.2:reference/methodology/module4_decline.md\n\n# 模块 4：爆量下跌风险\n\n使用 `module4_decline.json`。\n\n候选池：`pct_chg <= -3%`，`amount_ratio_20d >= 2.0`，成交额 `>= 1 亿`，按 `decline_intensity = amount_ratio_20d * abs(pct_chg)` 降序排列。\n\n风险分组必须基于证据：\n\n- 高位抱团瓦解：距 120 日高点回撤较浅，前期强势，今日突然放量崩塌。\n- 业绩雷/事件冲击：单日跌幅大，成交额明显放大。\n- 退潮补跌：5 日已偏弱，今日继续放量下跌。\n- ST/风险股出清：ST/退名称，通常接近跌停。\n- 流动性杀跌：没有清晰叙事，只体现异常卖压。\n- 主线内部分歧：与模块 3 强主题相关，但不一定是代表股本身。\n\n写作要求：\n\n- 不要纳入正常成交的小跌个股。\n- 明确风险是孤立、集中，还是与此前强方向有关。\n- M3/M4 交叉检查在聚合阶段读取 `assembled_checks.json`；本模块不要自行编造最终的主线见顶预警。\n\nFile v2.0.2:reference/methodology/module5_feature_groups.md\n\n# 模块 5：特征分组分析\n\n使用 `module5_feature_groups.json`。\n\n模块 5 固定输出三组股票清单：\n\n- 低位异动：来自 `groups.low_position_anomaly`，复用原低位异动规则、A/B/C 质量层级和 starter/sustain/quiet/undetermined 情形。\n- 科创板月线突破：来自 `groups.star_120_high_monthly_breakout`，要求科创板、今日收盘突破前 120 日高点、真实自然月 K 突破此前完整月份高点，并排除高位趋势延续样本。\n- 10:30 前涨停：来自 `groups.early_limit_up_1030`，参考 ch-stock 特征分组页，使用 JRJ 涨停池，要求首次封板时间不晚于 10:30、总市值不低于 50 亿，并过滤 ST。\n\n写作规则：\n\n- 三组各自独立输出股票列表，不做组间横向对比，不写“哪组更强”的排序结论。\n- 每组必须使用 Markdown 表格列出股票；无候选时写“暂无命中”，不要编造近似候选。\n- 10:30 前涨停组如果 `available=false`，写明数据源不可用和 error，不用日涨幅近似替代。\n- 低位异动组仍可引用质量层级、情形、触发日涨幅、放量倍数、成交额、MA5 等证据。\n- 科创板月线突破组重点引用 120 日新高幅度、月线突破幅度、成交额、近 5/20 日涨幅和 120 日位置。\n- 10:30 前涨停组重点引用首次封板时间、总市值、成交额、涨幅和开板次数。\n\n交叉命中上涨归因：\n\n- 仅当 `overlap_hits` 非空时输出 5.4。\n- 交叉命中是本节重点，必须逐只分析，不只列名单。\n- 归因只基于证据包中的确定性事实和模型对业务/事件的常识归纳，不调用脚本里的 LLM，不写外部新闻已证实之类无法追溯的断言。\n- 归因结构建议为：命中组别 → 量价位置 → 资金行为 → 可能上涨驱动 → 待验证点。\n- 不得输出买入、卖出、仓位、止损、目标价。\n\nFile v2.0.2:reference/methodology/module5_low_position.md\n\n# 低位异动分组口径（兼容参考）\n\n模块 5 已改为 `module5_feature_groups.json`，正式写作方法论见 `module5_feature_groups.md`。本文只保留低位异动分组的内部筛选与解释口径。\n\n低位规则：\n\n- A 轨：`close_position_120d <= 0.20`。\n- B 轨：`drawdown_120_high <= -35%` 且 `close_cv_10d <= 0.03`。\n\n触发规则：\n\n- `amount_ratio_15d >= 3.0`\n- `pct_chg >= 7%`\n- 触发日在今日或最近 5 个交易日内\n- 如果触发日不是今日，今日必须站在 MA5 上方\n\n质量池：\n\n- A：深回撤强启动。\n- B：宽低位强动量质量。\n- C：仅观察池。\n\n情形解释：\n\n- starter：今日触发，后续延续性尚未验证。\n- sustain：触发后成交额维持高位且价格守住，资金仍在换手。\n- quiet：触发后成交额收缩且价格守住，可能是放量后的缩量蓄势。\n- undetermined：已触发但既非持续换手也非缩量企稳，通常代表量价分歧。\n\n观察池参与价值推导：\n\n- 先按 A/A+B、B、C 三个质量层级给出结论，再列个股明细。这样读者先看到“哪些值得继续跟、哪些只是热闹”，而不是在长表里自己找重点。\n- A/A+B：优先视为高交易价值候选，但必须说明具体情形。starter 代表刚触发，重点看次日是否放量承接；sustain 代表换手仍在，参与价值最高；quiet 代表缩量守住，偏等待方向选择；undetermined 不得直接写高交易价值。\n- B：强调弹性和突破质量。只有收盘接近高点、突破前 10 日高点、成交额足够、触发后仍站上 MA5 时，才写“具备交易价值”；证据不足时写“仅观察，等待承接确认”。\n- C：默认仅观察。只有 sustain/quiet 且成交额、MA5、触发后量能证据较好时，才可写“低优先级观察”；undetermined 默认写“暂不参与”。\n- 推导依据必须引用质量层级、情形、触发日放量倍数、触发日或今日成交额、今日收盘/MA5、触发后最低维持比例或近 3 日成交额比例。没有这些证据时，不要拔高结论。\n- “适合参与”是研究报告中的参与价值和观察优先级，不是交易指令；不要写具体买卖、仓位、止损或目标价。\n\n写作要求：\n\n- 先写各情形和质量层级计数。\n- 候选总览后必须输出 A/B/C 参与价值推导表，明确“适合参与/仅观察/暂不参与”。\n- 先展示 A/B 高质量池，再展示 starter/sustain/quiet/undetermined。\n- 按成交额行为解释，不只看价格。\n\nFile v2.0.2:reference/methodology/output_discipline.md\n\n# 输出纪律\n\n每个模块和最终聚合都要遵守本文件。\n\n- 证据优先：所有强弱判断都必须引用候选数、成交额、成交额占比、放量倍数、涨跌幅、相对收益或回撤证据。\n- 成交额优先：没有成交额支撑的价格波动只是弱证据；成交额集中、异常放量和持续换手权重更高。\n- 不套现成行业标签：不要机械使用申万、同花顺、东方财富概念。主题只能从公司业务事实、产品环节、事件催化和同步量价行为中临时归纳。\n- 不写投资建议：禁止写买入、卖出、加仓、止损、目标价或组合配置指令。\n- 特征分组可以写“观察优先级”“持续性待验证”“交叉命中值得重点跟踪”等研究判断，但这些只表示证据强弱和跟踪优先级，不得延伸成具体交易指令。\n- 不写空话：不要写“板块轮动明显”“资金关注度提升”“情绪较好”这类没有数字支撑的句子。\n- 事实与判断分开：表格承载数据，段落解释数据意味着什么、哪些结论仍未确认。\n- 高亮定性段落：每个一级大章节（1-5）里已有的总结/定性段落必须用 `==...==` 包裹，例如”盘面定性””拥挤度判断””主线 vs 资金轮动结论””风险传导提示””特征分组一句话判断”。不要额外新增”本节总结”段落；高亮的是原本就承担总结作用的段落。\n- 数据缺失或模块跳过时，要明确说明，并引用脚本给出的跳过原因。\n- 最终聚合必须引用 `assembled_checks.json` 的 M3/M4 交叉检查；只有 M3 ★★★ 主线代表股也出现在爆量下跌池中，才升级为主线见顶预警。\n\nFile v2.0.2:reference/report_template.md\n\n**🧭 一句话盘面判断**\n[市场状态、赚钱效应集中度、主线清晰度、风险点。整段控制在 2-4 句]\n\n**📈 1. 盘面趋势**\n\n> 数据基础：`market_trend`。本模块只看上证指数、创业板指数和 `reference/market_data.csv` 情绪趋势；不加入科创板、风格指数、融资、创业板 PE、外围资产。\n\n**1.1 情绪趋势**\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额（万亿） |  | 5日均 / 20日均 | 缩量/平稳/放量 |\n| 全市场换手率 |  | 5日均 / 20日均 | 加速/平稳/降温 |\n| 活跃度 |  | 5日均 | 冰点/弱修复/中性/偏热/过热 |\n| 上涨家数 / 下跌家数 |  | 上涨占比 / 5日均 | 普涨/普跌/分化/修复 |\n| 涨停数 / 跌停数 |  | 涨停跌停比 / 5日均 | 情绪扩张/退潮 |\n\n==情绪判断：[使用量能温度、换手加速状态、情绪温度、广度温度各一句，最后合成 1 句。若 `market_trend.sentiment.available=false`，写\"情绪历史不可用，仅保留当日盘面快照\"，不要补写活跃度趋势。若换手率上升但上涨/下跌家数转弱，必须提示\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"。]==\n\n**1.2 上证指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中。只写最关键证据，不做长篇技术分析。]\n\n**1.3 创业板指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中，并明确创业板相对上证是更强、更弱还是同步。]\n\n**1.4 盘面定性：指数与情绪是共振、背离还是分化**\n\n==[2-4 句。必须明确：上证与创业板是否共振；指数趋势与情绪温度是否共振；近 5 日换手率是否显示市场加速、平稳或降温。若指数强但情绪弱，写\"指数掩盖分化\"；若指数弱但情绪修复，写\"情绪先行修复但指数尚未确认\"；若换手率上升但上涨/下跌家数转弱，写\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"；若上证强、创业板弱，写\"权重强于成长\"或相反。必须包含指数/情绪/成交额/全市场换手率中的关键证据。]==\n\n**🎯 2. 成交额集中度与拥挤度**\n\n| 指标 | 今日 | 前一交易日 | 变化 |\n|---|---:|---:|---:|\n| Top10 成交额占比 |  |  |  |\n| Top20 成交额占比 |  |  |  |\n| Top50 成交额占比 |  |  |  |\n| Top100 成交额占比 |  |  |  |\n\n| 近 10 日集中度趋势 | 数值 |\n|---|---:|\n| Top50 区间变化 |  |\n| Top50 上行天数 |  |\n\n==拥挤度判断：[集中或均衡 + 前排是否汇聚于同一临时主线 + Top50 趋势。如有典型成交额前排个股，举 1-3 例佐证。必须包含 Top50/Top100 或前排成交额证据。]==\n\n**💰🔥 3. 赚钱效应与上涨主线**\n\n> 数据基础：`money_effect_samples`（pct_chg ≥ 7% 且 成交额 ≥ 2 亿，按成交额降序）。\n\n**3.1 赚钱效应总览**\n\n| 指标 | 数值 |\n|---|---:|\n| 候选股票数 |  |\n| 候选股合计成交额（亿元） |  |\n| 候选股合计成交额占当日全市场比 |  |\n| 候选股涨幅中位 / 最大 |  /  |\n| 候选股 5 日涨幅中位 |  |\n| 候选股 5 日相对指数超额中位 |  |\n| 近似涨停数（pct_chg ≥ 9.8%） |  |\n\n==一句话判断：[局部强主线 / 多线开花 / 稀疏轮动；以候选股数和最大组占比为依据。]==\n\n**3.2 主题分组（模型基于业务事实归纳）**\n\n| 组号 | 主题 | 代表股（按组内成交额TOP5） | 共同业务事实 | 入选数 | 组合计成交额（亿） | 占赚钱效应总成交额比 |\n|---|---|---|---|---:|---:|---:|\n| 组1 |  |  |  |  |  | % |\n| 组2 |  |  |  |  |  | % |\n| 组3 |  |  |  |  |  | % |\n| 其他 | 孤立强势股 |  | — |  |  | % |\n\n分组要求：①不套现成行业概念；②每组至少 3 只股票，少于 3 只列入\"其他\"；③必要时补查公司主营、公告解释共同点；④代表股取组内成交额前 5（不足 5 只就全部列）。\n\n**3.3 主线判定（只展示 ★★ / ★★★ 主线）**\n\n| 主题 | 主线确认度 | 位置判断 | 拥挤度 | 催化逻辑 |\n|---|---|---|---|---|\n|  | ★★★/★★ | 高位趋势/低位启动 | 高/中/低 |  |\n\n判定规则（严格按此评级，不可主观放宽）：\n- ★★★ 主线：组成交额占比 ≥ 30% + 5 日涨幅中位 > 0 + 5 日相对超额中位 > 0 + 连续放量天数中位 ≥ 2\n- ★★ 潜在主线：满足 4 条中的 3 条\n- ★ 局部异动：满足 ≤ 2 条\n\n展示规则：本表只保留 ★★ 与 ★★★ 主题；★ 主题只参与“资金轮动/局部异动”判断，不进入主线表。若没有 ★★ 或 ★★★ 主题，写“无二星/三星主线，赚钱效应偏资金轮动”。\n位置判断：只写“高位趋势”或“低位启动”。基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断；无法充分证明低位启动时，默认写“高位趋势”。\n拥挤度：高 = 组内代表股同时在第 2 模块成交额 Top10/20；中 = 仅 1 只入 Top20；低 = 无代表股入 Top20。\n催化逻辑：有明确事件用一句话写明；无则写\"无明确事件催化，量价驱动\"。\n\n**3.4 ★★/★★★ 主线领导股与弹性股**（每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；证据不足时不要硬凑）\n\n| 主题 | 层级 | 股票 | 当日涨幅 | 成交额(亿) | 日内高点时间 | 放量倍数 | 换手率 | 5日相对超额 | 股性/地位说明 |\n|---|---|---|---:|---:|---|---:|---:|---:|---|\n|  | 领导股/弹性股 |  |  |  |  |  |  |  |  |\n\n分层口径：领导股看成交额承载、日内高点/封板时间靠前、辨识度和产业链核心地位；弹性股看换手/放量、相对强度、收盘承接、市值弹性和股性。若 `intraday_data_available=false`，日内高点时间写“分钟数据缺失”；产业链地位不确定时写“产业链地位待核验”。\n\n==**主线 vs 资金轮动结论**：[必须明确定性。≥1 个 ★★★ 主线 = 主线行情；全部 ≤ ★★ = 资金轮动；不允许含糊带过。如同时给出\"局部主线 vs 全面扩散\"的判断，例：上涨占比 < 50% 时即便有 ★★★ 主线也属于局部主线行情。必须包含候选数、合计成交额或最大主题占比证据。]==\n\n**🧊 4. 亏钱效应（爆量下跌）**\n\n> 数据基础：`volume_decline_samples`（pct_chg ≤ -3% 且 放量倍数 ≥ 2x 且 成交额 ≥ 1 亿，按 decline_intensity 降序）。\n\n==[一句话判断（以候选数、最大风险组占比、跌停数为依据）。如有典型样本贡献的成交额值得点名（例如单一股票成交额数百亿且爆量下跌），在此处直接说明。不再单独列总览表。]==\n\n**4.1 风险类型归纳（模型分组，不套行业标签）**\n\n| 风险类型 | 代表股（按 decline_intensity TOP5） | 共同特征 | 入选数 | 跌幅中位 | 放量倍数中位 | 距120日高点中位 | 风险定性 |\n|---|---|---|---:|---:|---:|---:|---|\n|  |  |  |  |  |  |  |  |\n|  |  |  |  |  |  |  |  |\n\n参考类型：高位抱团瓦解、业绩雷/事件冲击、退潮补跌、ST/风险股出清、流动性杀跌、主线内部分歧。\n\n风险定性写法（具体描述，不要写\"加速/趋稳/局部\"这类抽象词）：例如\"主线内部分歧加剧\"、\"高位筹码松动\"、\"弱势股出清\"、\"局部补跌\"、\"业绩雷扩散\"。每类必须给出共同特征，仅靠跌幅相近不构成一类。\n\n**4.2 高强度爆量下跌个股明细**（按 decline_intensity 排序，前 10-15 只）\n\n| 排名 | 股票 | 当日跌幅 | 放量倍数 | decline_intensity | 成交额(亿) | 5日跌幅 | 距120日高点 | 风险归类 |\n|---:|---|---:|---:|---:|---:|---:|---:|---|\n| 1 |  |  |  |  |  |  |  |  |\n| 2 |  |  |  |  |  |  |  |  |\n\n==**风险传导提示**：[第 3 模块 ★★★ 主线代表股若进入 4.2 明细且属\"退潮补跌\"或\"高位抱团瓦解\"，必须标注主线见顶预警，不可省略。如果只是大方向内部其他股票出现爆量下跌（不是 ★★★ 主线代表股本身），写\"主线内部分歧加剧，暂不升级为见顶预警；若 [代表股] 也转入爆量下跌池，再升级\"。必须包含爆量下跌候选数、成交额、跌停数或 M3/M4 交叉结果。]==\n\n**🌱 5. 特征分组分析**\n\n> 数据基础：`feature_group_analysis_samples`。三组分别输出：低位异动、科创板月线突破、10:30 前涨停；若存在 `overlap_hits`，重点分析交叉命中股票的上涨归因。\n\n==一句话判断：[概括三组命中数量和是否存在交叉命中；必须包含低位异动、科创板月线突破、10:30 前涨停的候选数，以及 overlap_hits 数量。]==\n\n**5.1 低位异动明细**\n\n| 股票 | 质量层级 | 情形 | 触发日涨幅 | 触发日放量倍数 | 触发日成交额(亿) | 今日成交额(亿) | 低位轨道 | 今日120日位置 |\n|---|:---:|---|---:|---:|---:|---:|:---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.2 科创板月线突破明细**\n\n| 股票 | 涨幅 | 成交额(亿) | 收盘 | 前120日高点 | 月线突破幅度 | 5日涨幅 | 20日涨幅 | 120日位置 |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.3 10:30 前涨停明细**\n\n| 股票 | 首次封板 | 涨幅 | 成交额(亿) | 总市值(亿) | 开板次数 | 收盘 |\n|---|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |\n\n若 `available=false`，写明 JRJ 数据不可用和 error，不使用涨幅近似替代。无候选时写“暂无命中”。\n\n**5.4 交叉命中上涨归因**\n\n仅当 `overlap_hits` 非空时输出本段；为空时写：今日三组之间无交叉命中股票。\n\n| 股票 | 命中组别 | 上涨归因 | 关键证据 | 待验证点 |\n|---|---|---|---|---|\n|  |  |  |  |  |\n\n以上基于 Tushare 历史交易数据和本地生成证据包，不构成投资建议。\n\nFile v2.0.2:reference/template/section1.md\n\n# 1. 盘面趋势\n\n## 1.1 情绪趋势\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额 |  |  |  |\n| 全市场换手率 |  |  |  |\n| 活跃度 |  |  |  |\n| 上涨/下跌家数 |  |  |  |\n| 涨停/跌停数 |  |  |  |\n\n情绪判断：[量能温度 + 换手加速状态 + 情绪温度 + 广度温度，最后合成一句。若换手率上升但上涨/下跌家数转弱，必须提示“换手加速但承接分化，风险升温”；若成交额、换手率、上涨家数同步改善，写“良性放量加速，风险中性偏高”。]\n\n## 1.2 指数趋势\n\n上证指数趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力；关键数值直接嵌入句子中。]\n\n创业板趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力，并说明创业板相对上证更强、更弱还是同步；关键数值直接嵌入句子中。]\n\n## 1.3 盘面定性\n\n==[明确指数与情绪是共振、背离还是分化。用 2-4 句完成本节定性，必须包含指数/情绪/成交额/全市场换手率中的关键证据，并基于近 5 日换手率判断市场是否加速、风险是否升温。]==\n\nFile v2.0.2:reference/template/section2.md\n\n# 2. 成交额集中度与拥挤度\n\n| 指标 | 今日 | 前一交易日 | 变化 |\n|---|---:|---:|---:|\n| Top10 成交额占比 |  |  |  |\n| Top20 成交额占比 |  |  |  |\n| Top50 成交额占比 |  |  |  |\n| Top100 成交额占比 |  |  |  |\n\n| 近 10 日集中度趋势 | 数值 |\n|---|---:|\n| Top50 区间变化 |  |\n| Top50 上行天数 |  |\n\n==拥挤度判断：[集中或均衡 + 前排是否汇聚于同一临时主线 + Top50 趋势。必须包含 Top50/Top100 或前排成交额证据。]==\n\nArchive v2.0.1: 20 files, 67968 bytes\n\nFiles: reference/market_data.csv (8396b), reference/methodology/module1_trend.md (1497b), reference/methodology/module2_concentration.md (613b), reference/methodology/module3_money_effect.md (3046b), reference/methodology/module4_decline.md (960b), reference/methodology/module5_feature_groups.md (1903b), reference/methodology/module5_low_position.md (2551b), reference/methodology/module6_resilient.md (610b), reference/methodology/output_discipline.md (1745b), reference/report_template.md (11396b), reference/template/section1.md (1295b), reference/template/section2.md (503b), reference/template/section3.md (1893b), reference/template/section4.md (776b), reference/template/section5.md (1323b), reference/template/section6.md (526b), scripts/market_panel.py (173261b), scripts/run_daily_panel.py (7913b), SKILL.md (7911b), _meta.json (145b)\n\nFile v2.0.1:SKILL.md\n\n---\nname: tushare-daily-market-sense\ndescription: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、低位异动/科创板月线突破/10:30前涨停等特征分组分析、指数背离/抗跌股分析、历史某日复盘、基于 daily/daily_basic/涨跌停/指数数据做量化选股观察时，必须优先使用本 skill。本 skill 先生成确定性证据包，再由模型或 Codex/Claude Code 等通用 agent 的 subagent 编排能力按模块撰写；不在脚本中调用 LLM，不提供买卖建议，不按申万、同花顺、东方财富等现成行业/概念口径分组。\nversion: 2.0.1\n---\n\n# Tushare Daily Market Sense\n\n## 目标\n\n基于 Tushare 日线、指数、成交额与本地情绪历史，为 A 股盘后复盘生成结构化研报：盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析、弱指数环境下的抗跌股。\n\n不做单股基本面深度研究、港股/美股/基金/期货/加密分析、分钟级交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON；主题归纳、风险措辞和研报写作由模型完成。\n\n## 核心理念\n\n成交额优先。所有强弱判断都要有成交额证据：上涨主线按成交额厚度确认，爆量下跌按放量异常与跌幅强度识别，特征分组按命中规则与成交额证据分开呈现，抗跌股要求有至少 1 亿成交额证明资金参与。\n\n主题主线由模型基于业务事实临时归纳，不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。\n\n## 工作流程\n\n1. 确定交易日：解析“今天/最近”或具体日期，默认只使用 `D` 及以前数据；只有用户明确要求后验时才允许 `--allow-future`。\n2. 生成证据包：运行 `scripts/run_daily_panel.py`。脚本会直接调用数据管线，写出完整 evidence、轻量 `report_context` 和模块级 JSON。\n3. 选择撰写模式：\n   - 有 subagent 编排能力时，主 agent 将 6 个模块 JSON 分发给 6 个 subagent 并行撰写。\n   - 没有 subagent 能力时，按同样模块顺序单会话执行，每次只加载当前模块的 JSON、方法论和模板段。\n4. 聚合成稿：主 agent 读取 6 段输出、`assembled_checks.json` 与 `reference/methodology/output_discipline.md`，补一句话盘面判断、风险传导提示和最终语气校准。默认不做外部收评校验、不搜索第三方行情综述、不在报告中加入“外部校验参考”；只有用户明确要求时才补充外部来源。\n5. 清理临时产物：确认 `reports/report_YYYYMMDD.md` 已写入并可读后，删除同日期的临时证据与上下文文件，只保留最终报告。必须清理：\n   - `reports/evidence_YYYYMMDD_utf8.json`\n   - `reports/evidence_YYYYMMDD_utf8.stderr.log`\n   - `reports/report_context_YYYYMMDD.json`\n   - `reports/module_context_YYYYMMDD/`\n   不要删除 `reports/report_YYYYMMDD.md`，不要跨日期批量清理，除非用户明确要求。\n\n## 数据获取\n\n环境变量：\n\n```bash\nTUSHARE_TOKEN=your_token\n```\n\n运行脚本会先更新 `reference/market_data.csv` 再生成情绪趋势：AKShare `stock_market_activity_legu()` 默认提供上涨、涨停、下跌、跌停、平盘、活跃度、情绪值、成交额等盘面情绪字段；搜狐涨跌停历史页仅在 AKShare 不可用或字段缺失时作为 fallback；Tushare `margin` 汇总 T-1 交易日融资净买入，Tushare `daily` 与 `daily_basic.circ_mv` 计算流通市值加权的全市场换手率。因此环境中还需安装 `akshare`。\n\n基础命令：\n\n```powershell\ncd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH\n```\n\n主要输出：\n\n- `reports/evidence_YYYYMMDD_utf8.json`：完整证据包。\n- `reports/report_context_YYYYMMDD.json`：兼容旧流程的轻量上下文。\n- `reports/module_context_YYYYMMDD/`：供 subagent 分工的模块级 JSON。\n\n这些文件是研报撰写过程中的临时产物。最终报告生成并核对后，应按工作流程第 5 步删除，只保留 `reports/report_YYYYMMDD.md`。\n\n常用参数：\n\n| 参数 | 含义 | 默认 |\n|---|---|---:|\n| `--fetch-workers` | cache/API 获取线程数；排查限流时设为 1 | 6 |\n| `--money-pct-threshold` | 赚钱效应最低当日涨幅 | 7.0 |\n| `--money-amount-threshold` | 赚钱效应最低成交额，单位亿元 | 2.0 |\n| `--intraday-freq` | 赚钱效应候选股分钟增强频率；用于日内高点时间 | 1min |\n| `--skip-intraday` | 跳过分钟行情增强；无 Tushare 分钟权限或排查限流时使用 | false |\n| `--intraday-workers` | 分钟行情抓取线程数；保持小并发避免限流 | 2 |\n| `--decline-pct-max` | 爆量下跌最大当日涨幅 | -3.0 |\n| `--decline-volume-ratio` | 爆量下跌最低 20 日放量倍数 | 2.0 |\n| `--low-lookback-days` | 低位放量触发回看窗口 | 5 |\n| `--resilient-index-5d-max` | 抗跌股模块的弱指数 5 日门槛 | -2.0 |\n\n## Subagent 编排契约\n\n主 agent 先生成模块级 JSON，然后按下列最小上下文分发。每个 subagent 只看自己的模块数据，不读取其他模块数据。\n\n| 模块 | JSON | 方法论 | 模板 |\n|---|---|---|---|\n| 1 盘面趋势 | `module1_market_trend.json` | `reference/methodology/module1_trend.md` | `reference/template/section1.md` |\n| 2 集中度 | `module2_concentration.json` | `reference/methodology/module2_concentration.md` | `reference/template/section2.md` |\n| 3 赚钱效应 | `module3_money_effect.json` | `reference/methodology/module3_money_effect.md` | `reference/template/section3.md` |\n| 4 爆量下跌 | `module4_decline.json` | `reference/methodology/module4_decline.md` | `reference/template/section4.md` |\n| 5 特征分组 | `module5_feature_groups.json` | `reference/methodology/module5_feature_groups.md` | `reference/template/section5.md` |\n| 6 抗跌股 | `module6_resilient.json` | `reference/methodology/module6_resilient.md` | `reference/template/section6.md` |\n\n聚合 agent 额外读取：\n\n- `assembled_checks.json`：M3 赚钱效应池与 M4 爆量下跌池的确定性交叉检查。\n- `reference/methodology/output_discipline.md`：最终成稿纪律。\n\nPython 不调用 Anthropic API、不调用任何 LLM、不硬编码模型名。Codex、Claude Code 或其他通用 agent 的 subagent 编排能力负责并行撰写。\n\n## 输出规范\n\n完整研报仍按六个模块输出。每段结论先行，表格只放关键证据，所有强弱判断必须有成交额或放量倍数支撑。不要写“板块轮动明显”这类空句；要写“候选数、合计成交额、最大主题占比、代表股成交额”。\n\n每个一级大章节（1-6）里已有的总结/定性段落必须使用 Markdown 高亮样式 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”“抗跌方向判断”。不要为了高亮额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n\n禁止输出买卖建议。可以写“风险传导”“持续性待验证”“主线确认度”，不要写“买入/卖出/止损/目标价”。\n\n## 示例\n\n用户：`复盘 2026-04-29 的 A 股盘面，重点看赚钱效应和低位放量。`\n\n执行：\n\n```powershell\npython scripts\\run_daily_panel.py --asof 20260429\n```\n\n然后按 subagent 契约加载 `reports/module_context_20260429/` 下的模块 JSON。若没有 subagent，就顺序加载每个模块的 JSON + 方法论 + 模板段，最后聚合为完整研报。\n\nFile v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7450t2xk0c4fzwzv90194pgd82q8yk\",\n  \"slug\": \"tushare-daily-market-sense\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1778896238741\n}\n\nFile v2.0.1:reference/methodology/module1_trend.md\n\n# 模块 1：盘面趋势\n\n使用 `module1_market_trend.json`。\n\n只分析：\n\n- 上证指数\n- 创业板指数\n- `market.trend.sentiment`\n- `market.temperature`\n\n不要加入科创板、风格指数、融资、创业板 PE、外围资产或新闻解释。\n\n分析框架：\n\n1. 情绪趋势：结合量能温度、全市场换手率、情绪温度和广度温度。若情绪历史不可用，只保留当日盘面快照。\n2. 上证趋势：判断趋势阶段、量价质量、均线位置和最近支撑压力。\n3. 创业板趋势：使用同样四项框架，并与上证强弱对比。\n4. 盘面定性：明确写成共振、背离或分化。\n\n写作要求：\n\n- 不要把单日涨跌写成趋势。\n- 上证指数趋势、创业板指数趋势只写文字段落，不输出表格。指数数据用于支撑判断，关键数值直接嵌入句子，例如“收盘站上 MA20，成交额为近 20 日均量 1.2 倍，临近 20 日压力位”。这样避免指数部分挤占篇幅，也让报告重点回到盘面判断。\n- 指数上涨但缩量时，写“反弹质量待确认”。\n- 成交额与全市场换手率同步抬升、上涨家数同步改善时，写“良性放量加速，风险中性偏高”。\n- 全市场换手率上升但上涨/下跌家数转弱时，写“换手加速但承接分化，风险升温”。\n- 指数强但广度/情绪弱时，写“指数掩盖分化”。\n- 情绪先修复但指数未确认时，写“情绪先行修复但指数尚未确认”。\n\nFile v2.0.1:reference/methodology/module2_concentration.md\n\n# 模块 2：成交额集中度\n\n使用 `module2_concentration.json`。\n\n目标：说明市场成交额是集中在少数前排股票，还是相对均衡分布。\n\n读取：\n\n- Top10/20/50/100 成交额占比\n- 相对前一交易日变化\n- 近 10 日 Top50 集中度趋势\n- 成交额前排样本\n\n写作要求：\n\n- Top10/20 集中度越高，说明拥挤度越高、市场越窄。\n- Top50 集中度连续抬升，可能说明共识正在形成。\n- 成交额前排股票只能作为证据，不能机械当作主题分类器。\n- 只有当前排样本能支撑拥挤度判断时，才点名 1-3 个例子。\n\nFile v2.0.1:reference/methodology/module3_money_effect.md\n\n# 模块 3：赚钱效应与上涨主线\n\n使用 `module3_money_effect.json`。\n\n候选池：`pct_chg >= 7%` 且成交额 `>= 2 亿`，按成交额降序排列。\n\n工作步骤：\n\n1. 概括候选数、合计成交额、成交额占比、收益中位数和近似涨停数。\n2. 按业务事实、产品环节、事件催化和同步量价行为归纳临时主题。\n3. 每组至少 3 只股票；不足 3 只归入“其他/孤立强势股”。\n4. 每组计算代表股、入选数、组合计成交额和组内成交额占比。\n5. 评定主线确认度：\n   - ★★★：组成交额占比 >= 30%，5 日涨幅中位 > 0，5 日相对收益中位 > 0，连续放量天数中位 >= 2。\n   - ★★：满足 4 条中的 3 条。\n   - ★：满足 2 条或更少，或缺少组内扩散。\n6. 上涨主线表只展示 ★★ 与 ★★★ 主题；★ 主题只用于“资金轮动/局部异动”结论，不进入主线表。\n7. 评定位置判断：基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断，只输出“高位趋势”或“低位启动”。无法充分证明低位启动时，默认写“高位趋势”。\n8. 对每个 ★★ / ★★★ 主线做组内分层：列出领导股与弹性股。领导股优先看成交额承载、日内高点时间靠前、市场辨识度、产业链核心地位；弹性股优先看主线相关性、换手/放量活跃、5 日相对强、收盘承接、市值不过分笨重、股性活。\n\n组内分层口径：\n\n- 领导股不是涨幅最高股，而是最能承载主线共识的股票。优先级为：组内成交额厚度 > 日内高点/封板时间靠前 > 市场辨识度 > 产业链核心地位。\n- 弹性股不是杂毛补涨股，必须仍属于该主线。优先选择 `elasticity_hint_score` 较高、`turnover_rate`/`amount_ratio_20d` 活跃、`rel_ret_5d` 为正、`close_to_intraday_high` 或 `close_to_high` 较好的样本。\n- `intraday_high_time_label` 来自分钟行情；若 `intraday_data_available=false`，不要编造日内高点时间，只写“分钟数据缺失”，并改用放量、成交额和收盘贴近日高作为先后证据。\n- 产业链地位不能由脚本硬判。模型只能基于可确认的主营、公告、公开业务事实或常识性产业链位置判断；不确定时写“产业链地位待核验”。\n\n写作要求：\n\n- 成交额占比是第一门槛；不要因为股票名称看起来有想象力就提升低成交额主题的评级。\n- 候选稀疏或没有主题达到足够成交额厚度时，定性为资金轮动，而不是确认主线。\n- 若没有 ★★ 或 ★★★ 主题，主线表下写“无二星/三星主线，赚钱效应偏资金轮动”。\n- 输出清晰的 ★★★ 领导股名单，供最终聚合做交叉检查；若没有 ★★★ 主线，写“今日无三星主线领导股”。\n- 每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；如果证据不足，不要硬凑数量。\n\nFile v2.0.1:reference/methodology/module4_decline.md\n\n# 模块 4：爆量下跌风险\n\n使用 `module4_decline.json`。\n\n候选池：`pct_chg <= -3%`，`amount_ratio_20d >= 2.0`，成交额 `>= 1 亿`，按 `decline_intensity = amount_ratio_20d * abs(pct_chg)` 降序排列。\n\n风险分组必须基于证据：\n\n- 高位抱团瓦解：距 120 日高点回撤较浅，前期强势，今日突然放量崩塌。\n- 业绩雷/事件冲击：单日跌幅大，成交额明显放大。\n- 退潮补跌：5 日已偏弱，今日继续放量下跌。\n- ST/风险股出清：ST/退名称，通常接近跌停。\n- 流动性杀跌：没有清晰叙事，只体现异常卖压。\n- 主线内部分歧：与模块 3 强主题相关，但不一定是代表股本身。\n\n写作要求：\n\n- 不要纳入正常成交的小跌个股。\n- 明确风险是孤立、集中，还是与此前强方向有关。\n- M3/M4 交叉检查在聚合阶段读取 `assembled_checks.json`；本模块不要自行编造最终的主线见顶预警。\n\nFile v2.0.1:reference/methodology/module5_feature_groups.md\n\n# 模块 5：特征分组分析\n\n使用 `module5_feature_groups.json`。\n\n模块 5 固定输出三组股票清单：\n\n- 低位异动：来自 `groups.low_position_anomaly`，复用原低位异动规则、A/B/C 质量层级和 starter/sustain/quiet/undetermined 情形。\n- 科创板月线突破：来自 `groups.star_120_high_monthly_breakout`，要求科创板、今日收盘突破前 120 日高点、真实自然月 K 突破此前完整月份高点，并排除高位趋势延续样本。\n- 10:30 前涨停：来自 `groups.early_limit_up_1030`，参考 ch-stock 特征分组页，使用 JRJ 涨停池，要求首次封板时间不晚于 10:30、总市值不低于 50 亿，并过滤 ST。\n\n写作规则：\n\n- 三组各自独立输出股票列表，不做组间横向对比，不写“哪组更强”的排序结论。\n- 每组必须使用 Markdown 表格列出股票；无候选时写“暂无命中”，不要编造近似候选。\n- 10:30 前涨停组如果 `available=false`，写明数据源不可用和 error，不用日涨幅近似替代。\n- 低位异动组仍可引用质量层级、情形、触发日涨幅、放量倍数、成交额、MA5 等证据。\n- 科创板月线突破组重点引用 120 日新高幅度、月线突破幅度、成交额、近 5/20 日涨幅和 120 日位置。\n- 10:30 前涨停组重点引用首次封板时间、总市值、成交额、涨幅和开板次数。\n\n交叉命中上涨归因：\n\n- 仅当 `overlap_hits` 非空时输出 5.4。\n- 交叉命中是本节重点，必须逐只分析，不只列名单。\n- 归因只基于证据包中的确定性事实和模型对业务/事件的常识归纳，不调用脚本里的 LLM，不写外部新闻已证实之类无法追溯的断言。\n- 归因结构建议为：命中组别 → 量价位置 → 资金行为 → 可能上涨驱动 → 待验证点。\n- 不得输出买入、卖出、仓位、止损、目标价。\n\nFile v2.0.1:reference/methodology/module5_low_position.md\n\n# 低位异动分组口径（兼容参考）\n\n模块 5 已改为 `module5_feature_groups.json`，正式写作方法论见 `module5_feature_groups.md`。本文只保留低位异动分组的内部筛选与解释口径。\n\n低位规则：\n\n- A 轨：`close_position_120d <= 0.20`。\n- B 轨：`drawdown_120_high <= -35%` 且 `close_cv_10d <= 0.03`。\n\n触发规则：\n\n- `amount_ratio_15d >= 3.0`\n- `pct_chg >= 7%`\n- 触发日在今日或最近 5 个交易日内\n- 如果触发日不是今日，今日必须站在 MA5 上方\n\n质量池：\n\n- A：深回撤强启动。\n- B：宽低位强动量质量。\n- C：仅观察池。\n\n情形解释：\n\n- starter：今日触发，后续延续性尚未验证。\n- sustain：触发后成交额维持高位且价格守住，资金仍在换手。\n- quiet：触发后成交额收缩且价格守住，可能是放量后的缩量蓄势。\n- undetermined：已触发但既非持续换手也非缩量企稳，通常代表量价分歧。\n\n观察池参与价值推导：\n\n- 先按 A/A+B、B、C 三个质量层级给出结论，再列个股明细。这样读者先看到“哪些值得继续跟、哪些只是热闹”，而不是在长表里自己找重点。\n- A/A+B：优先视为高交易价值候选，但必须说明具体情形。starter 代表刚触发，重点看次日是否放量承接；sustain 代表换手仍在，参与价值最高；quiet 代表缩量守住，偏等待方向选择；undetermined 不得直接写高交易价值。\n- B：强调弹性和突破质量。只有收盘接近高点、突破前 10 日高点、成交额足够、触发后仍站上 MA5 时，才写“具备交易价值”；证据不足时写“仅观察，等待承接确认”。\n- C：默认仅观察。只有 sustain/quiet 且成交额、MA5、触发后量能证据较好时，才可写“低优先级观察”；undetermined 默认写“暂不参与”。\n- 推导依据必须引用质量层级、情形、触发日放量倍数、触发日或今日成交额、今日收盘/MA5、触发后最低维持比例或近 3 日成交额比例。没有这些证据时，不要拔高结论。\n- “适合参与”是研究报告中的参与价值和观察优先级，不是交易指令；不要写具体买卖、仓位、止损或目标价。\n\n写作要求：\n\n- 先写各情形和质量层级计数。\n- 候选总览后必须输出 A/B/C 参与价值推导表，明确“适合参与/仅观察/暂不参与”。\n- 先展示 A/B 高质量池，再展示 starter/sustain/quiet/undetermined。\n- 按成交额行为解释，不只看价格。\n\nFile v2.0.1:reference/methodology/module6_resilient.md\n\n# 模块 6：抗跌股\n\n使用 `module6_resilient.json`。\n\n本模块只在基准指数偏弱时输出：\n\n- 指数 5 日涨跌幅 <= -2%，或\n- 指数 10 日涨跌幅 <= -3%。\n\n候选规则：\n\n- `rel_ret_5d >= 5`\n- `ret_5d >= 0`\n- 成交额 `>= 1 亿`\n\n写作要求：\n\n- 如果 `index_environment.is_weak = false`，写清跳过原因，不强行输出表格。\n- 如果存在候选，按业务事实归纳：“资金在弱指数环境中抱团/避险到哪里？”\n- 如果共同性弱，写“分散个股韧性，无统一抱团方向”。\n- 不列逆势下跌个股；下跌风险归入模块 4。\n\nFile v2.0.1:reference/methodology/output_discipline.md\n\n# 输出纪律\n\n每个模块和最终聚合都要遵守本文件。\n\n- 证据优先：所有强弱判断都必须引用候选数、成交额、成交额占比、放量倍数、涨跌幅、相对收益或回撤证据。\n- 成交额优先：没有成交额支撑的价格波动只是弱证据；成交额集中、异常放量和持续换手权重更高。\n- 不套现成行业标签：不要机械使用申万、同花顺、东方财富概念。主题只能从公司业务事实、产品环节、事件催化和同步量价行为中临时归纳。\n- 不写投资建议：禁止写买入、卖出、加仓、止损、目标价或组合配置指令。\n- 特征分组可以写“观察优先级”“持续性待验证”“交叉命中值得重点跟踪”等研究判断，但这些只表示证据强弱和跟踪优先级，不得延伸成具体交易指令。\n- 不写空话：不要写“板块轮动明显”“资金关注度提升”“情绪较好”这类没有数字支撑的句子。\n- 事实与判断分开：表格承载数据，段落解释数据意味着什么、哪些结论仍未确认。\n- 高亮定性段落：每个一级大章节（1-6）里已有的总结/定性段落必须用 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”“抗跌方向判断”。不要额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n- 数据缺失或模块跳过时，要明确说明，并引用脚本给出的跳过原因。\n- 最终聚合必须引用 `assembled_checks.json` 的 M3/M4 交叉检查；只有 M3 ★★★ 主线代表股也出现在爆量下跌池中，才升级为主线见顶预警。\n\nFile v2.0.1:reference/report_template.md\n\n**🧭 一句话盘面判断**\n[市场状态、赚钱效应集中度、主线清晰度、风险点。整段控制在 2-4 句]\n\n**📈 1. 盘面趋势**\n\n> 数据基础：`market_trend`。本模块只看上证指数、创业板指数和 `reference/market_data.csv` 情绪趋势；不加入科创板、风格指数、融资、创业板 PE、外围资产。\n\n**1.1 情绪趋势**\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额（万亿） |  | 5日均 / 20日均 | 缩量/平稳/放量 |\n| 全市场换手率 |  | 5日均 / 20日均 | 加速/平稳/降温 |\n| 活跃度 |  | 5日均 | 冰点/弱修复/中性/偏热/过热 |\n| 上涨家数 / 下跌家数 |  | 上涨占比 / 5日均 | 普涨/普跌/分化/修复 |\n| 涨停数 / 跌停数 |  | 涨停跌停比 / 5日均 | 情绪扩张/退潮 |\n\n==情绪判断：[使用量能温度、换手加速状态、情绪温度、广度温度各一句，最后合成 1 句。若 `market_trend.sentiment.available=false`，写\"情绪历史不可用，仅保留当日盘面快照\"，不要补写活跃度趋势。若换手率上升但上涨/下跌家数转弱，必须提示\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"。]==\n\n**1.2 上证指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中。只写最关键证据，不做长篇技术分析。]\n\n**1.3 创业板指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中，并明确创业板相对上证是更强、更弱还是同步。]\n\n**1.4 盘面定性：指数与情绪是共振、背离还是分化**\n\n==[2-4 句。必须明确：上证与创业板是否共振；指数趋势与情绪温度是否共振；近 5 日换手率是否显示市场加速、平稳或降温。若指数强但情绪弱，写\"指数掩盖分化\"；若指数弱但情绪修复，写\"情绪先行修复但指数尚未确认\"；若换手率上升但上涨/下跌家数转弱，写\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"；若上证强、创业板弱，写\"权重强于成长\"或相反。必须包含指数/情绪/成交额/全市场换手率中的关键证据。]==\n\n**🎯 2. 成交额集中度与拥挤度**\n\n| 指标 | 今日 | 前一交易日 | 变化 |\n|---|---:|---:|---:|\n| Top10 成交额占比 |  |  |  |\n| Top20 成交额占比 |  |  |  |\n| Top50 成交额占比 |  |  |  |\n| Top100 成交额占比 |  |  |  |\n\n| 近 10 日集中度趋势 | 数值 |\n|---|---:|\n| Top50 区间变化 |  |\n| Top50 上行天数 |  |\n\n==拥挤度判断：[集中或均衡 + 前排是否汇聚于同一临时主线 + Top50 趋势。如有典型成交额前排个股，举 1-3 例佐证。必须包含 Top50/Top100 或前排成交额证据。]==\n\n**💰🔥 3. 赚钱效应与上涨主线**\n\n> 数据基础：`money_effect_samples`（pct_chg ≥ 7% 且 成交额 ≥ 2 亿，按成交额降序）。\n\n**3.1 赚钱效应总览**\n\n| 指标 | 数值 |\n|---|---:|\n| 候选股票数 |  |\n| 候选股合计成交额（亿元） |  |\n| 候选股合计成交额占当日全市场比 |  |\n| 候选股涨幅中位 / 最大 |  /  |\n| 候选股 5 日涨幅中位 |  |\n| 候选股 5 日相对指数超额中位 |  |\n| 近似涨停数（pct_chg ≥ 9.8%） |  |\n\n==一句话判断：[局部强主线 / 多线开花 / 稀疏轮动；以候选股数和最大组占比为依据。]==\n\n**3.2 主题分组（模型基于业务事实归纳）**\n\n| 组号 | 主题 | 代表股（按组内成交额TOP5） | 共同业务事实 | 入选数 | 组合计成交额（亿） | 占赚钱效应总成交额比 |\n|---|---|---|---|---:|---:|---:|\n| 组1 |  |  |  |  |  | % |\n| 组2 |  |  |  |  |  | % |\n| 组3 |  |  |  |  |  | % |\n| 其他 | 孤立强势股 |  | — |  |  | % |\n\n分组要求：①不套现成行业概念；②每组至少 3 只股票，少于 3 只列入\"其他\"；③必要时补查公司主营、公告解释共同点；④代表股取组内成交额前 5（不足 5 只就全部列）。\n\n**3.3 主线判定（只展示 ★★ / ★★★ 主线）**\n\n| 主题 | 主线确认度 | 位置判断 | 拥挤度 | 催化逻辑 |\n|---|---|---|---|---|\n|  | ★★★/★★ | 高位趋势/低位启动 | 高/中/低 |  |\n\n判定规则（严格按此评级，不可主观放宽）：\n- ★★★ 主线：组成交额占比 ≥ 30% + 5 日涨幅中位 > 0 + 5 日相对超额中位 > 0 + 连续放量天数中位 ≥ 2\n- ★★ 潜在主线：满足 4 条中的 3 条\n- ★ 局部异动：满足 ≤ 2 条\n\n展示规则：本表只保留 ★★ 与 ★★★ 主题；★ 主题只参与“资金轮动/局部异动”判断，不进入主线表。若没有 ★★ 或 ★★★ 主题，写“无二星/三星主线，赚钱效应偏资金轮动”。\n位置判断：只写“高位趋势”或“低位启动”。基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断；无法充分证明低位启动时，默认写“高位趋势”。\n拥挤度：高 = 组内代表股同时在第 2 模块成交额 Top10/20；中 = 仅 1 只入 Top20；低 = 无代表股入 Top20。\n催化逻辑：有明确事件用一句话写明；无则写\"无明确事件催化，量价驱动\"。\n\n**3.4 ★★/★★★ 主线领导股与弹性股**（每个 ★★ / ★★★ 主题最多列领导股 1-3 只、弹性股 1-3 只；证据不足时不要硬凑）\n\n| 主题 | 层级 | 股票 | 当日涨幅 | 成交额(亿) | 日内高点时间 | 放量倍数 | 换手率 | 5日相对超额 | 股性/地位说明 |\n|---|---|---|---:|---:|---|---:|---:|---:|---|\n|  | 领导股/弹性股 |  |  |  |  |  |  |  |  |\n\n分层口径：领导股看成交额承载、日内高点/封板时间靠前、辨识度和产业链核心地位；弹性股看换手/放量、相对强度、收盘承接、市值弹性和股性。若 `intraday_data_available=false`，日内高点时间写“分钟数据缺失”；产业链地位不确定时写“产业链地位待核验”。\n\n==**主线 vs 资金轮动结论**：[必须明确定性。≥1 个 ★★★ 主线 = 主线行情；全部 ≤ ★★ = 资金轮动；不允许含糊带过。如同时给出\"局部主线 vs 全面扩散\"的判断，例：上涨占比 < 50% 时即便有 ★★★ 主线也属于局部主线行情。必须包含候选数、合计成交额或最大主题占比证据。]==\n\n**🧊 4. 亏钱效应（爆量下跌）**\n\n> 数据基础：`volume_decline_samples`（pct_chg ≤ -3% 且 放量倍数 ≥ 2x 且 成交额 ≥ 1 亿，按 decline_intensity 降序）。\n\n==[一句话判断（以候选数、最大风险组占比、跌停数为依据）。如有典型样本贡献的成交额值得点名（例如单一股票成交额数百亿且爆量下跌），在此处直接说明。不再单独列总览表。]==\n\n**4.1 风险类型归纳（模型分组，不套行业标签）**\n\n| 风险类型 | 代表股（按 decline_intensity TOP5） | 共同特征 | 入选数 | 跌幅中位 | 放量倍数中位 | 距120日高点中位 | 风险定性 |\n|---|---|---|---:|---:|---:|---:|---|\n|  |  |  |  |  |  |  |  |\n|  |  |  |  |  |  |  |  |\n\n参考类型：高位抱团瓦解、业绩雷/事件冲击、退潮补跌、ST/风险股出清、流动性杀跌、主线内部分歧。\n\n风险定性写法（具体描述，不要写\"加速/趋稳/局部\"这类抽象词）：例如\"主线内部分歧加剧\"、\"高位筹码松动\"、\"弱势股出清\"、\"局部补跌\"、\"业绩雷扩散\"。每类必须给出共同特征，仅靠跌幅相近不构成一类。\n\n**4.2 高强度爆量下跌个股明细**（按 decline_intensity 排序，前 10-15 只）\n\n| 排名 | 股票 | 当日跌幅 | 放量倍数 | decline_intensity | 成交额(亿) | 5日跌幅 | 距120日高点 | 风险归类 |\n|---:|---|---:|---:|---:|---:|---:|---:|---|\n| 1 |  |  |  |  |  |  |  |  |\n| 2 |  |  |  |  |  |  |  |  |\n\n==**风险传导提示**：[第 3 模块 ★★★ 主线代表股若进入 4.2 明细且属\"退潮补跌\"或\"高位抱团瓦解\"，必须标注主线见顶预警，不可省略。如果只是大方向内部其他股票出现爆量下跌（不是 ★★★ 主线代表股本身），写\"主线内部分歧加剧，暂不升级为见顶预警；若 [代表股] 也转入爆量下跌池，再升级\"。必须包含爆量下跌候选数、成交额、跌停数或 M3/M4 交叉结果。]==\n\n**🌱 5. 特征分组分析**\n\n> 数据基础：`feature_group_analysis_samples`。三组分别输出：低位异动、科创板月线突破、10:30 前涨停；若存在 `overlap_hits`，重点分析交叉命中股票的上涨归因。\n\n==一句话判断：[概括三组命中数量和是否存在交叉命中；必须包含低位异动、科创板月线突破、10:30 前涨停的候选数，以及 overlap_hits 数量。]==\n\n**5.1 低位异动明细**\n\n| 股票 | 质量层级 | 情形 | 触发日涨幅 | 触发日放量倍数 | 触发日成交额(亿) | 今日成交额(亿) | 低位轨道 | 今日120日位置 |\n|---|:---:|---|---:|---:|---:|---:|:---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.2 科创板月线突破明细**\n\n| 股票 | 涨幅 | 成交额(亿) | 收盘 | 前120日高点 | 月线突破幅度 | 5日涨幅 | 20日涨幅 | 120日位置 |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.3 10:30 前涨停明细**\n\n| 股票 | 首次封板 | 涨幅 | 成交额(亿) | 总市值(亿) | 开板次数 | 收盘 |\n|---|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |\n\n若 `available=false`，写明 JRJ 数据不可用和 error，不使用涨幅近似替代。无候选时写“暂无命中”。\n\n**5.4 交叉命中上涨归因**\n\n仅当 `overlap_hits` 非空时输出本段；为空时写：今日三组之间无交叉命中股票。\n\n| 股票 | 命中组别 | 上涨归因 | 关键证据 | 待验证点 |\n|---|---|---|---|---|\n|  |  |  |  |  |\n\n**🧭 6. 抗跌股（该弱不弱就是强）**\n\n> 数据基础：`resilient_against_index_samples`（仅在指数走弱时输出；rel_ret_5d ≥ 5pct + ret_5d > 0 + 成交额 ≥ 1 亿）。\n\n==**指数环境**：[读取脚本 `index_environment` 字段。`is_weak = false` 时本模块写\"今日指数环境不弱，本模块无输出。沪深 300 5 日涨跌幅为 X%，10 日涨跌幅为 Y%，未触发新版规则的弱指数门槛（5 日 ≤ -2% 或 10 日 ≤ -3%）\"，跳过下面的表格。这种自解释写法让读者一眼明白为何跳过。]==\n\n| 股票 | 5 日收益 | 5 日相对指数超额 | 放量倍数 | 距120日高点 | 业务归类 |\n|---|---:|---:|---:|---:|---|\n|  |  |  |  |  |  |\n\n==抗跌方向归纳：[把候选股按业务事实归到 1-3 个抗跌方向，例如稳定红利、防御性消费、独立产业逻辑等。共同性弱时写\"分散个股韧性，无统一抱团方向\"。若跳过，必须写明指数未触发弱势门槛及对应 5 日/10 日指数涨跌幅。]==\n\n以上基于 Tushare 历史交易数据和本地生成证据包，不构成投资建议。\n\nFile v2.0.1:reference/template/section1.md\n\n# 1. 盘面趋势\n\n## 1.1 情绪趋势\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额 |  |  |  |\n| 全市场换手率 |  |  |  |\n| 活跃度 |  |  |  |\n| 上涨/下跌家数 |  |  |  |\n| 涨停/跌停数 |  |  |  |\n\n情绪判断：[量能温度 + 换手加速状态 + 情绪温度 + 广度温度，最后合成一句。若换手率上升但上涨/下跌家数转弱，必须提示“换手加速但承接分化，风险升温”；若成交额、换手率、上涨家数同步改善，写“良性放量加速，风险中性偏高”。]\n\n## 1.2 指数趋势\n\n上证指数趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力；关键数值直接嵌入句子中。]\n\n创业板趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力，并说明创业板相对上证更强、更弱还是同步；关键数值直接嵌入句子中。]\n\n## 1.3 盘面定性\n\n==[明确指数与情绪是共振、背离还是分化。用 2-4 句完成本节定性，必须包含指数/情绪/成交额/全市场换手率中的关键证据，并基于近 5 日换手率判断市场是否加速、风险是否升温。]==\n\nArchive v2.0.0: 20 files, 60896 bytes\n\nFiles: reference/market_data.csv (9168b), reference/methodology/module1_trend.md (1497b), reference/methodology/module2_concentration.md (613b), reference/methodology/module3_money_effect.md (1731b), reference/methodology/module4_decline.md (960b), reference/methodology/module5_feature_groups.md (1903b), reference/methodology/module5_low_position.md (2551b), reference/methodology/module6_resilient.md (610b), reference/methodology/output_discipline.md (1745b), reference/report_template.md (11148b), reference/template/section1.md (1295b), reference/template/section2.md (503b), reference/template/section3.md (1330b), reference/template/section4.md (776b), reference/template/section5.md (1323b), reference/template/section6.md (526b), scripts/market_panel.py (149987b), scripts/run_daily_panel.py (7913b), SKILL.md (7446b), _meta.json (145b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: tushare-daily-market-sense\ndescription: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、低位异动/科创板月线突破/10:30前涨停等特征分组分析、指数背离/抗跌股分析、历史某日复盘、基于 daily/daily_basic/涨跌停/指数数据做量化选股观察时，必须优先使用本 skill。本 skill 先生成确定性证据包，再由模型或 Codex/Claude Code 等通用 agent 的 subagent 编排能力按模块撰写；不在脚本中调用 LLM，不提供买卖建议，不按申万、同花顺、东方财富等现成行业/概念口径分组。\nversion: 2.0.0\n---\n\n# Tushare Daily Market Sense\n\n## 目标\n\n基于 Tushare 日线、指数、成交额与本地情绪历史，为 A 股盘后复盘生成结构化研报：盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析、弱指数环境下的抗跌股。\n\n不做单股基本面深度研究、港股/美股/基金/期货/加密分析、分钟级交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON；主题归纳、风险措辞和研报写作由模型完成。\n\n## 核心理念\n\n成交额优先。所有强弱判断都要有成交额证据：上涨主线按成交额厚度确认，爆量下跌按放量异常与跌幅强度识别，特征分组按命中规则与成交额证据分开呈现，抗跌股要求有至少 1 亿成交额证明资金参与。\n\n主题主线由模型基于业务事实临时归纳，不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。\n\n## 工作流程\n\n1. 确定交易日：解析“今天/最近”或具体日期，默认只使用 `D` 及以前数据；只有用户明确要求后验时才允许 `--allow-future`。\n2. 生成证据包：运行 `scripts/run_daily_panel.py`。脚本会直接调用数据管线，写出完整 evidence、轻量 `report_context` 和模块级 JSON。\n3. 选择撰写模式：\n   - 有 subagent 编排能力时，主 agent 将 6 个模块 JSON 分发给 6 个 subagent 并行撰写。\n   - 没有 subagent 能力时，按同样模块顺序单会话执行，每次只加载当前模块的 JSON、方法论和模板段。\n4. 聚合成稿：主 agent 读取 6 段输出、`assembled_checks.json` 与 `reference/methodology/output_discipline.md`，补一句话盘面判断、风险传导提示和最终语气校准。默认不做外部收评校验、不搜索第三方行情综述、不在报告中加入“外部校验参考”；只有用户明确要求时才补充外部来源。\n5. 清理临时产物：确认 `reports/report_YYYYMMDD.md` 已写入并可读后，删除同日期的临时证据与上下文文件，只保留最终报告。必须清理：\n   - `reports/evidence_YYYYMMDD_utf8.json`\n   - `reports/evidence_YYYYMMDD_utf8.stderr.log`\n   - `reports/report_context_YYYYMMDD.json`\n   - `reports/module_context_YYYYMMDD/`\n   不要删除 `reports/report_YYYYMMDD.md`，不要跨日期批量清理，除非用户明确要求。\n\n## 数据获取\n\n环境变量：\n\n```bash\nTUSHARE_TOKEN=your_token\n```\n\n运行脚本会先更新 `reference/market_data.csv` 再生成情绪趋势：AKShare `stock_market_activity_legu()` 提供情绪明细，Tushare `daily` 补充成交额和必要的上涨/下跌 fallback，Tushare `daily_basic.circ_mv` 用于计算流通市值加权的全市场换手率；因此环境中还需安装 `akshare`。\n\n基础命令：\n\n```powershell\ncd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH\n```\n\n主要输出：\n\n- `reports/evidence_YYYYMMDD_utf8.json`：完整证据包。\n- `reports/report_context_YYYYMMDD.json`：兼容旧流程的轻量上下文。\n- `reports/module_context_YYYYMMDD/`：供 subagent 分工的模块级 JSON。\n\n这些文件是研报撰写过程中的临时产物。最终报告生成并核对后，应按工作流程第 5 步删除，只保留 `reports/report_YYYYMMDD.md`。\n\n常用参数：\n\n| 参数 | 含义 | 默认 |\n|---|---|---:|\n| `--fetch-workers` | cache/API 获取线程数；排查限流时设为 1 | 6 |\n| `--money-pct-threshold` | 赚钱效应最低当日涨幅 | 7.0 |\n| `--money-amount-threshold` | 赚钱效应最低成交额，单位亿元 | 2.0 |\n| `--decline-pct-max` | 爆量下跌最大当日涨幅 | -3.0 |\n| `--decline-volume-ratio` | 爆量下跌最低 20 日放量倍数 | 2.0 |\n| `--low-lookback-days` | 低位放量触发回看窗口 | 5 |\n| `--resilient-index-5d-max` | 抗跌股模块的弱指数 5 日门槛 | -2.0 |\n\n## Subagent 编排契约\n\n主 agent 先生成模块级 JSON，然后按下列最小上下文分发。每个 subagent 只看自己的模块数据，不读取其他模块数据。\n\n| 模块 | JSON | 方法论 | 模板 |\n|---|---|---|---|\n| 1 盘面趋势 | `module1_market_trend.json` | `reference/methodology/module1_trend.md` | `reference/template/section1.md` |\n| 2 集中度 | `module2_concentration.json` | `reference/methodology/module2_concentration.md` | `reference/template/section2.md` |\n| 3 赚钱效应 | `module3_money_effect.json` | `reference/methodology/module3_money_effect.md` | `reference/template/section3.md` |\n| 4 爆量下跌 | `module4_decline.json` | `reference/methodology/module4_decline.md` | `reference/template/section4.md` |\n| 5 特征分组 | `module5_feature_groups.json` | `reference/methodology/module5_feature_groups.md` | `reference/template/section5.md` |\n| 6 抗跌股 | `module6_resilient.json` | `reference/methodology/module6_resilient.md` | `reference/template/section6.md` |\n\n聚合 agent 额外读取：\n\n- `assembled_checks.json`：M3 赚钱效应池与 M4 爆量下跌池的确定性交叉检查。\n- `reference/methodology/output_discipline.md`：最终成稿纪律。\n\nPython 不调用 Anthropic API、不调用任何 LLM、不硬编码模型名。Codex、Claude Code 或其他通用 agent 的 subagent 编排能力负责并行撰写。\n\n## 输出规范\n\n完整研报仍按六个模块输出。每段结论先行，表格只放关键证据，所有强弱判断必须有成交额或放量倍数支撑。不要写“板块轮动明显”这类空句；要写“候选数、合计成交额、最大主题占比、代表股成交额”。\n\n每个一级大章节（1-6）里已有的总结/定性段落必须使用 Markdown 高亮样式 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”“抗跌方向判断”。不要为了高亮额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n\n禁止输出买卖建议。可以写“风险传导”“持续性待验证”“主线确认度”，不要写“买入/卖出/止损/目标价”。\n\n## 示例\n\n用户：`复盘 2026-04-29 的 A 股盘面，重点看赚钱效应和低位放量。`\n\n执行：\n\n```powershell\npython scripts\\run_daily_panel.py --asof 20260429\n```\n\n然后按 subagent 契约加载 `reports/module_context_20260429/` 下的模块 JSON。若没有 subagent，就顺序加载每个模块的 JSON + 方法论 + 模板段，最后聚合为完整研报。\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7450t2xk0c4fzwzv90194pgd82q8yk\",\n  \"slug\": \"tushare-daily-market-sense\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1778498133392\n}\n\nFile v2.0.0:reference/methodology/module1_trend.md\n\n# 模块 1：盘面趋势\n\n使用 `module1_market_trend.json`。\n\n只分析：\n\n- 上证指数\n- 创业板指数\n- `market.trend.sentiment`\n- `market.temperature`\n\n不要加入科创板、风格指数、融资、创业板 PE、外围资产或新闻解释。\n\n分析框架：\n\n1. 情绪趋势：结合量能温度、全市场换手率、情绪温度和广度温度。若情绪历史不可用，只保留当日盘面快照。\n2. 上证趋势：判断趋势阶段、量价质量、均线位置和最近支撑压力。\n3. 创业板趋势：使用同样四项框架，并与上证强弱对比。\n4. 盘面定性：明确写成共振、背离或分化。\n\n写作要求：\n\n- 不要把单日涨跌写成趋势。\n- 上证指数趋势、创业板指数趋势只写文字段落，不输出表格。指数数据用于支撑判断，关键数值直接嵌入句子，例如“收盘站上 MA20，成交额为近 20 日均量 1.2 倍，临近 20 日压力位”。这样避免指数部分挤占篇幅，也让报告重点回到盘面判断。\n- 指数上涨但缩量时，写“反弹质量待确认”。\n- 成交额与全市场换手率同步抬升、上涨家数同步改善时，写“良性放量加速，风险中性偏高”。\n- 全市场换手率上升但上涨/下跌家数转弱时，写“换手加速但承接分化，风险升温”。\n- 指数强但广度/情绪弱时，写“指数掩盖分化”。\n- 情绪先修复但指数未确认时，写“情绪先行修复但指数尚未确认”。\n\nFile v2.0.0:reference/methodology/module2_concentration.md\n\n# 模块 2：成交额集中度\n\n使用 `module2_concentration.json`。\n\n目标：说明市场成交额是集中在少数前排股票，还是相对均衡分布。\n\n读取：\n\n- Top10/20/50/100 成交额占比\n- 相对前一交易日变化\n- 近 10 日 Top50 集中度趋势\n- 成交额前排样本\n\n写作要求：\n\n- Top10/20 集中度越高，说明拥挤度越高、市场越窄。\n- Top50 集中度连续抬升，可能说明共识正在形成。\n- 成交额前排股票只能作为证据，不能机械当作主题分类器。\n- 只有当前排样本能支撑拥挤度判断时，才点名 1-3 个例子。\n\nFile v2.0.0:reference/methodology/module3_money_effect.md\n\n# 模块 3：赚钱效应与上涨主线\n\n使用 `module3_money_effect.json`。\n\n候选池：`pct_chg >= 7%` 且成交额 `>= 2 亿`，按成交额降序排列。\n\n工作步骤：\n\n1. 概括候选数、合计成交额、成交额占比、收益中位数和近似涨停数。\n2. 按业务事实、产品环节、事件催化和同步量价行为归纳临时主题。\n3. 每组至少 3 只股票；不足 3 只归入“其他/孤立强势股”。\n4. 每组计算代表股、入选数、组合计成交额和组内成交额占比。\n5. 评定主线确认度：\n   - ★★★：组成交额占比 >= 30%，5 日涨幅中位 > 0，5 日相对收益中位 > 0，连续放量天数中位 >= 2。\n   - ★★：满足 4 条中的 3 条。\n   - ★：满足 2 条或更少，或缺少组内扩散。\n6. 上涨主线表只展示 ★★ 与 ★★★ 主题；★ 主题只用于“资金轮动/局部异动”结论，不进入主线表。\n7. 评定位置判断：基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断，只输出“高位趋势”或“低位启动”。无法充分证明低位启动时，默认写“高位趋势”。\n\n写作要求：\n\n- 成交额占比是第一门槛；不要因为股票名称看起来有想象力就提升低成交额主题的评级。\n- 候选稀疏或没有主题达到足够成交额厚度时，定性为资金轮动，而不是确认主线。\n- 若没有 ★★ 或 ★★★ 主题，主线表下写“无二星/三星主线，赚钱效应偏资金轮动”。\n- 输出清晰的 ★★★ 代表股名单，供最终聚合做交叉检查；若没有 ★★★ 主线，写“今日无三星主线代表股”。\n\nFile v2.0.0:reference/methodology/module4_decline.md\n\n# 模块 4：爆量下跌风险\n\n使用 `module4_decline.json`。\n\n候选池：`pct_chg <= -3%`，`amount_ratio_20d >= 2.0`，成交额 `>= 1 亿`，按 `decline_intensity = amount_ratio_20d * abs(pct_chg)` 降序排列。\n\n风险分组必须基于证据：\n\n- 高位抱团瓦解：距 120 日高点回撤较浅，前期强势，今日突然放量崩塌。\n- 业绩雷/事件冲击：单日跌幅大，成交额明显放大。\n- 退潮补跌：5 日已偏弱，今日继续放量下跌。\n- ST/风险股出清：ST/退名称，通常接近跌停。\n- 流动性杀跌：没有清晰叙事，只体现异常卖压。\n- 主线内部分歧：与模块 3 强主题相关，但不一定是代表股本身。\n\n写作要求：\n\n- 不要纳入正常成交的小跌个股。\n- 明确风险是孤立、集中，还是与此前强方向有关。\n- M3/M4 交叉检查在聚合阶段读取 `assembled_checks.json`；本模块不要自行编造最终的主线见顶预警。\n\nFile v2.0.0:reference/methodology/module5_feature_groups.md\n\n# 模块 5：特征分组分析\n\n使用 `module5_feature_groups.json`。\n\n模块 5 固定输出三组股票清单：\n\n- 低位异动：来自 `groups.low_position_anomaly`，复用原低位异动规则、A/B/C 质量层级和 starter/sustain/quiet/undetermined 情形。\n- 科创板月线突破：来自 `groups.star_120_high_monthly_breakout`，要求科创板、今日收盘突破前 120 日高点、真实自然月 K 突破此前完整月份高点，并排除高位趋势延续样本。\n- 10:30 前涨停：来自 `groups.early_limit_up_1030`，参考 ch-stock 特征分组页，使用 JRJ 涨停池，要求首次封板时间不晚于 10:30、总市值不低于 50 亿，并过滤 ST。\n\n写作规则：\n\n- 三组各自独立输出股票列表，不做组间横向对比，不写“哪组更强”的排序结论。\n- 每组必须使用 Markdown 表格列出股票；无候选时写“暂无命中”，不要编造近似候选。\n- 10:30 前涨停组如果 `available=false`，写明数据源不可用和 error，不用日涨幅近似替代。\n- 低位异动组仍可引用质量层级、情形、触发日涨幅、放量倍数、成交额、MA5 等证据。\n- 科创板月线突破组重点引用 120 日新高幅度、月线突破幅度、成交额、近 5/20 日涨幅和 120 日位置。\n- 10:30 前涨停组重点引用首次封板时间、总市值、成交额、涨幅和开板次数。\n\n交叉命中上涨归因：\n\n- 仅当 `overlap_hits` 非空时输出 5.4。\n- 交叉命中是本节重点，必须逐只分析，不只列名单。\n- 归因只基于证据包中的确定性事实和模型对业务/事件的常识归纳，不调用脚本里的 LLM，不写外部新闻已证实之类无法追溯的断言。\n- 归因结构建议为：命中组别 → 量价位置 → 资金行为 → 可能上涨驱动 → 待验证点。\n- 不得输出买入、卖出、仓位、止损、目标价。\n\nFile v2.0.0:reference/methodology/module5_low_position.md\n\n# 低位异动分组口径（兼容参考）\n\n模块 5 已改为 `module5_feature_groups.json`，正式写作方法论见 `module5_feature_groups.md`。本文只保留低位异动分组的内部筛选与解释口径。\n\n低位规则：\n\n- A 轨：`close_position_120d <= 0.20`。\n- B 轨：`drawdown_120_high <= -35%` 且 `close_cv_10d <= 0.03`。\n\n触发规则：\n\n- `amount_ratio_15d >= 3.0`\n- `pct_chg >= 7%`\n- 触发日在今日或最近 5 个交易日内\n- 如果触发日不是今日，今日必须站在 MA5 上方\n\n质量池：\n\n- A：深回撤强启动。\n- B：宽低位强动量质量。\n- C：仅观察池。\n\n情形解释：\n\n- starter：今日触发，后续延续性尚未验证。\n- sustain：触发后成交额维持高位且价格守住，资金仍在换手。\n- quiet：触发后成交额收缩且价格守住，可能是放量后的缩量蓄势。\n- undetermined：已触发但既非持续换手也非缩量企稳，通常代表量价分歧。\n\n观察池参与价值推导：\n\n- 先按 A/A+B、B、C 三个质量层级给出结论，再列个股明细。这样读者先看到“哪些值得继续跟、哪些只是热闹”，而不是在长表里自己找重点。\n- A/A+B：优先视为高交易价值候选，但必须说明具体情形。starter 代表刚触发，重点看次日是否放量承接；sustain 代表换手仍在，参与价值最高；quiet 代表缩量守住，偏等待方向选择；undetermined 不得直接写高交易价值。\n- B：强调弹性和突破质量。只有收盘接近高点、突破前 10 日高点、成交额足够、触发后仍站上 MA5 时，才写“具备交易价值”；证据不足时写“仅观察，等待承接确认”。\n- C：默认仅观察。只有 sustain/quiet 且成交额、MA5、触发后量能证据较好时，才可写“低优先级观察”；undetermined 默认写“暂不参与”。\n- 推导依据必须引用质量层级、情形、触发日放量倍数、触发日或今日成交额、今日收盘/MA5、触发后最低维持比例或近 3 日成交额比例。没有这些证据时，不要拔高结论。\n- “适合参与”是研究报告中的参与价值和观察优先级，不是交易指令；不要写具体买卖、仓位、止损或目标价。\n\n写作要求：\n\n- 先写各情形和质量层级计数。\n- 候选总览后必须输出 A/B/C 参与价值推导表，明确“适合参与/仅观察/暂不参与”。\n- 先展示 A/B 高质量池，再展示 starter/sustain/quiet/undetermined。\n- 按成交额行为解释，不只看价格。\n\nFile v2.0.0:reference/methodology/module6_resilient.md\n\n# 模块 6：抗跌股\n\n使用 `module6_resilient.json`。\n\n本模块只在基准指数偏弱时输出：\n\n- 指数 5 日涨跌幅 <= -2%，或\n- 指数 10 日涨跌幅 <= -3%。\n\n候选规则：\n\n- `rel_ret_5d >= 5`\n- `ret_5d >= 0`\n- 成交额 `>= 1 亿`\n\n写作要求：\n\n- 如果 `index_environment.is_weak = false`，写清跳过原因，不强行输出表格。\n- 如果存在候选，按业务事实归纳：“资金在弱指数环境中抱团/避险到哪里？”\n- 如果共同性弱，写“分散个股韧性，无统一抱团方向”。\n- 不列逆势下跌个股；下跌风险归入模块 4。\n\nFile v2.0.0:reference/methodology/output_discipline.md\n\n# 输出纪律\n\n每个模块和最终聚合都要遵守本文件。\n\n- 证据优先：所有强弱判断都必须引用候选数、成交额、成交额占比、放量倍数、涨跌幅、相对收益或回撤证据。\n- 成交额优先：没有成交额支撑的价格波动只是弱证据；成交额集中、异常放量和持续换手权重更高。\n- 不套现成行业标签：不要机械使用申万、同花顺、东方财富概念。主题只能从公司业务事实、产品环节、事件催化和同步量价行为中临时归纳。\n- 不写投资建议：禁止写买入、卖出、加仓、止损、目标价或组合配置指令。\n- 特征分组可以写“观察优先级”“持续性待验证”“交叉命中值得重点跟踪”等研究判断，但这些只表示证据强弱和跟踪优先级，不得延伸成具体交易指令。\n- 不写空话：不要写“板块轮动明显”“资金关注度提升”“情绪较好”这类没有数字支撑的句子。\n- 事实与判断分开：表格承载数据，段落解释数据意味着什么、哪些结论仍未确认。\n- 高亮定性段落：每个一级大章节（1-6）里已有的总结/定性段落必须用 `==...==` 包裹，例如“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”“抗跌方向判断”。不要额外新增“本节总结”段落；高亮的是原本就承担总结作用的段落。\n- 数据缺失或模块跳过时，要明确说明，并引用脚本给出的跳过原因。\n- 最终聚合必须引用 `assembled_checks.json` 的 M3/M4 交叉检查；只有 M3 ★★★ 主线代表股也出现在爆量下跌池中，才升级为主线见顶预警。\n\nFile v2.0.0:reference/report_template.md\n\n**🧭 一句话盘面判断**\r\n[市场状态、赚钱效应集中度、主线清晰度、风险点。整段控制在 2-4 句]\r\n\r\n**📈 1. 盘面趋势**\n\n> 数据基础：`market_trend`。本模块只看上证指数、创业板指数和 `reference/market_data.csv` 情绪趋势；不加入科创板、风格指数、融资、创业板 PE、外围资产。\n\n**1.1 情绪趋势**\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额（万亿） |  | 5日均 / 20日均 | 缩量/平稳/放量 |\n| 全市场换手率 |  | 5日均 / 20日均 | 加速/平稳/降温 |\n| 活跃度 |  | 5日均 | 冰点/弱修复/中性/偏热/过热 |\n| 上涨家数 / 下跌家数 |  | 上涨占比 / 5日均 | 普涨/普跌/分化/修复 |\n| 涨停数 / 跌停数 |  | 涨停跌停比 / 5日均 | 情绪扩张/退潮 |\n\n==情绪判断：[使用量能温度、换手加速状态、情绪温度、广度温度各一句，最后合成 1 句。若 `market_trend.sentiment.available=false`，写\"情绪历史不可用，仅保留当日盘面快照\"，不要补写活跃度趋势。若换手率上升但上涨/下跌家数转弱，必须提示\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"。]==\n\n**1.2 上证指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中。只写最关键证据，不做长篇技术分析。]\n\n**1.3 创业板指数趋势**\n\n[只写文字段落，不要使用表格。按趋势阶段、量价配合、均线位置、支撑压力四项组织 2-4 句，关键数值直接嵌入句子中，并明确创业板相对上证是更强、更弱还是同步。]\n\n**1.4 盘面定性：指数与情绪是共振、背离还是分化**\n\n==[2-4 句。必须明确：上证与创业板是否共振；指数趋势与情绪温度是否共振；近 5 日换手率是否显示市场加速、平稳或降温。若指数强但情绪弱，写\"指数掩盖分化\"；若指数弱但情绪修复，写\"情绪先行修复但指数尚未确认\"；若换手率上升但上涨/下跌家数转弱，写\"换手加速但承接分化，风险升温\"；若成交额、换手率、上涨家数同步改善，写\"良性放量加速，风险中性偏高\"；若上证强、创业板弱，写\"权重强于成长\"或相反。必须包含指数/情绪/成交额/全市场换手率中的关键证据。]==\n\n**🎯 2. 成交额集中度与拥挤度**\n\r\n| 指标 | 今日 | 前一交易日 | 变化 |\r\n|---|---:|---:|---:|\r\n| Top10 成交额占比 |  |  |  |\r\n| Top20 成交额占比 |  |  |  |\r\n| Top50 成交额占比 |  |  |  |\r\n| Top100 成交额占比 |  |  |  |\r\n\r\n| 近 10 日集中度趋势 | 数值 |\r\n|---|---:|\r\n| Top50 区间变化 |  |\r\n| Top50 上行天数 |  |\r\n\n==拥挤度判断：[集中或均衡 + 前排是否汇聚于同一临时主线 + Top50 趋势。如有典型成交额前排个股，举 1-3 例佐证。必须包含 Top50/Top100 或前排成交额证据。]==\n\n**💰🔥 3. 赚钱效应与上涨主线**\n\r\n> 数据基础：`money_effect_samples`（pct_chg ≥ 7% 且 成交额 ≥ 2 亿，按成交额降序）。\r\n\r\n**3.1 赚钱效应总览**\r\n\r\n| 指标 | 数值 |\r\n|---|---:|\r\n| 候选股票数 |  |\r\n| 候选股合计成交额（亿元） |  |\r\n| 候选股合计成交额占当日全市场比 |  |\r\n| 候选股涨幅中位 / 最大 |  /  |\r\n| 候选股 5 日涨幅中位 |  |\r\n| 候选股 5 日相对指数超额中位 |  |\r\n| 近似涨停数（pct_chg ≥ 9.8%） |  |\r\n\r\n==一句话判断：[局部强主线 / 多线开花 / 稀疏轮动；以候选股数和最大组占比为依据。]==\n\r\n**3.2 主题分组（模型基于业务事实归纳）**\r\n\r\n| 组号 | 主题 | 代表股（按组内成交额TOP5） | 共同业务事实 | 入选数 | 组合计成交额（亿） | 占赚钱效应总成交额比 |\r\n|---|---|---|---|---:|---:|---:|\r\n| 组1 |  |  |  |  |  | % |\r\n| 组2 |  |  |  |  |  | % |\r\n| 组3 |  |  |  |  |  | % |\r\n| 其他 | 孤立强势股 |  | — |  |  | % |\r\n\r\n分组要求：①不套现成行业概念；②每组至少 3 只股票，少于 3 只列入\"其他\"；③必要时补查公司主营、公告解释共同点；④代表股取组内成交额前 5（不足 5 只就全部列）。\r\n\r\n**3.3 主线判定（只展示 ★★ / ★★★ 主线）**\n\n| 主题 | 主线确认度 | 位置判断 | 拥挤度 | 催化逻辑 |\n|---|---|---|---|---|\n|  | ★★★/★★ | 高位趋势/低位启动 | 高/中/低 |  |\n\n判定规则（严格按此评级，不可主观放宽）：\n- ★★★ 主线：组成交额占比 ≥ 30% + 5 日涨幅中位 > 0 + 5 日相对超额中位 > 0 + 连续放量天数中位 ≥ 2\n- ★★ 潜在主线：满足 4 条中的 3 条\n- ★ 局部异动：满足 ≤ 2 条\n\n展示规则：本表只保留 ★★ 与 ★★★ 主题；★ 主题只参与“资金轮动/局部异动”判断，不进入主线表。若没有 ★★ 或 ★★★ 主题，写“无二星/三星主线，赚钱效应偏资金轮动”。\n位置判断：只写“高位趋势”或“低位启动”。基于组内代表股的 `close_position_120d`、`drawdown_120_high`、`ret_5d`、`rel_ret_5d`、`sustained_volume_days_5` 综合判断；无法充分证明低位启动时，默认写“高位趋势”。\n拥挤度：高 = 组内代表股同时在第 2 模块成交额 Top10/20；中 = 仅 1 只入 Top20；低 = 无代表股入 Top20。\n催化逻辑：有明确事件用一句话写明；无则写\"无明确事件催化，量价驱动\"。\n\r\n**3.4 主线组内股票明细**（合并展示所有 ★★★ 主线的代表股；每个 ★★★ 主线 5 只，按主题分块插入空行；少于 5 只就全列）\r\n\r\n| 股票 | 当日涨幅 | 成交额(亿) | 5日涨幅 | 5日相对超额 | 放量倍数 | 近5日放量天数 |\r\n|---|---:|---:|---:|---:|---:|---:|\r\n| [组1主题] |  |  |  |  |  |  |\r\n|  |  |  |  |  |  |  |\r\n| [组2主题] |  |  |  |  |  |  |\r\n|  |  |  |  |  |  |  |\r\n\n==**主线 vs 资金轮动结论**：[必须明确定性。≥1 个 ★★★ 主线 = 主线行情；全部 ≤ ★★ = 资金轮动；不允许含糊带过。如同时给出\"局部主线 vs 全面扩散\"的判断，例：上涨占比 < 50% 时即便有 ★★★ 主线也属于局部主线行情。必须包含候选数、合计成交额或最大主题占比证据。]==\n\n**🧊 4. 亏钱效应（爆量下跌）**\n\r\n> 数据基础：`volume_decline_samples`（pct_chg ≤ -3% 且 放量倍数 ≥ 2x 且 成交额 ≥ 1 亿，按 decline_intensity 降序）。\r\n\r\n==[一句话判断（以候选数、最大风险组占比、跌停数为依据）。如有典型样本贡献的成交额值得点名（例如单一股票成交额数百亿且爆量下跌），在此处直接说明。不再单独列总览表。]==\n\r\n**4.1 风险类型归纳（模型分组，不套行业标签）**\r\n\r\n| 风险类型 | 代表股（按 decline_intensity TOP5） | 共同特征 | 入选数 | 跌幅中位 | 放量倍数中位 | 距120日高点中位 | 风险定性 |\r\n|---|---|---|---:|---:|---:|---:|---|\r\n|  |  |  |  |  |  |  |  |\r\n|  |  |  |  |  |  |  |  |\r\n\r\n参考类型：高位抱团瓦解、业绩雷/事件冲击、退潮补跌、ST/风险股出清、流动性杀跌、主线内部分歧。\r\n\r\n风险定性写法（具体描述，不要写\"加速/趋稳/局部\"这类抽象词）：例如\"主线内部分歧加剧\"、\"高位筹码松动\"、\"弱势股出清\"、\"局部补跌\"、\"业绩雷扩散\"。每类必须给出共同特征，仅靠跌幅相近不构成一类。\r\n\r\n**4.2 高强度爆量下跌个股明细**（按 decline_intensity 排序，前 10-15 只）\r\n\r\n| 排名 | 股票 | 当日跌幅 | 放量倍数 | decline_intensity | 成交额(亿) | 5日跌幅 | 距120日高点 | 风险归类 |\r\n|---:|---|---:|---:|---:|---:|---:|---:|---|\r\n| 1 |  |  |  |  |  |  |  |  |\r\n| 2 |  |  |  |  |  |  |  |  |\r\n\n==**风险传导提示**：[第 3 模块 ★★★ 主线代表股若进入 4.2 明细且属\"退潮补跌\"或\"高位抱团瓦解\"，必须标注主线见顶预警，不可省略。如果只是大方向内部其他股票出现爆量下跌（不是 ★★★ 主线代表股本身），写\"主线内部分歧加剧，暂不升级为见顶预警；若 [代表股] 也转入爆量下跌池，再升级\"。必须包含爆量下跌候选数、成交额、跌停数或 M3/M4 交叉结果。]==\n\n**🌱 5. 特征分组分析**\n\n> 数据基础：`feature_group_analysis_samples`。三组分别输出：低位异动、科创板月线突破、10:30 前涨停；若存在 `overlap_hits`，重点分析交叉命中股票的上涨归因。\n\n==一句话判断：[概括三组命中数量和是否存在交叉命中；必须包含低位异动、科创板月线突破、10:30 前涨停的候选数，以及 overlap_hits 数量。]==\n\n**5.1 低位异动明细**\n\n| 股票 | 质量层级 | 情形 | 触发日涨幅 | 触发日放量倍数 | 触发日成交额(亿) | 今日成交额(亿) | 低位轨道 | 今日120日位置 |\n|---|:---:|---|---:|---:|---:|---:|:---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.2 科创板月线突破明细**\n\n| 股票 | 涨幅 | 成交额(亿) | 收盘 | 前120日高点 | 月线突破幅度 | 5日涨幅 | 20日涨幅 | 120日位置 |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |  |  |\n\n无候选时写“暂无命中”。\n\n**5.3 10:30 前涨停明细**\n\n| 股票 | 首次封板 | 涨幅 | 成交额(亿) | 总市值(亿) | 开板次数 | 收盘 |\n|---|---:|---:|---:|---:|---:|---:|\n|  |  |  |  |  |  |  |\n\n若 `available=false`，写明 JRJ 数据不可用和 error，不使用涨幅近似替代。无候选时写“暂无命中”。\n\n**5.4 交叉命中上涨归因**\n\n仅当 `overlap_hits` 非空时输出本段；为空时写：今日三组之间无交叉命中股票。\n\n| 股票 | 命中组别 | 上涨归因 | 关键证据 | 待验证点 |\n|---|---|---|---|---|\n|  |  |  |  |  |\n\n**🧭 6. 抗跌股（该弱不弱就是强）**\n\r\n> 数据基础：`resilient_against_index_samples`（仅在指数走弱时输出；rel_ret_5d ≥ 5pct + ret_5d > 0 + 成交额 ≥ 1 亿）。\r\n\r\n==**指数环境**：[读取脚本 `index_environment` 字段。`is_weak = false` 时本模块写\"今日指数环境不弱，本模块无输出。沪深 300 5 日涨跌幅为 X%，10 日涨跌幅为 Y%，未触发新版规则的弱指数门槛（5 日 ≤ -2% 或 10 日 ≤ -3%）\"，跳过下面的表格。这种自解释写法让读者一眼明白为何跳过。]==\n\r\n| 股票 | 5 日收益 | 5 日相对指数超额 | 放量倍数 | 距120日高点 | 业务归类 |\r\n|---|---:|---:|---:|---:|---|\r\n|  |  |  |  |  |  |\r\n\n==抗跌方向归纳：[把候选股按业务事实归到 1-3 个抗跌方向，例如稳定红利、防御性消费、独立产业逻辑等。共同性弱时写\"分散个股韧性，无统一抱团方向\"。若跳过，必须写明指数未触发弱势门槛及对应 5 日/10 日指数涨跌幅。]==\n\n以上基于 Tushare 历史交易数据和本地生成证据包，不构成投资建议。\n\nFile v2.0.0:reference/template/section1.md\n\n# 1. 盘面趋势\n\n## 1.1 情绪趋势\n\n| 指标 | 今日 | 近 5/20 日参照 | 趋势提示 |\n|---|---:|---:|---|\n| 成交额 |  |  |  |\n| 全市场换手率 |  |  |  |\n| 活跃度 |  |  |  |\n| 上涨/下跌家数 |  |  |  |\n| 涨停/跌停数 |  |  |  |\n\n情绪判断：[量能温度 + 换手加速状态 + 情绪温度 + 广度温度，最后合成一句。若换手率上升但上涨/下跌家数转弱，必须提示“换手加速但承接分化，风险升温”；若成交额、换手率、上涨家数同步改善，写“良性放量加速，风险中性偏高”。]\n\n## 1.2 指数趋势\n\n上证指数趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力；关键数值直接嵌入句子中。]\n\n创业板趋势判断：[只用文字段落，不要使用表格。用 2-4 句写清趋势阶段、量价配合、均线位置、支撑压力，并说明创业板相对上证更强、更弱还是同步；关键数值直接嵌入句子中。]\n\n## 1.3 盘面定性\n\n==[明确指数与情绪是共振、背离还是分化。用 2-4 句完成本节定性，必须包含指数/情绪/成交额/全市场换手率中的关键证据，并基于近 5 日换手率判断市场是否加速、风险是否升温。]==","readmeExcerpt":"Skill: Tushare Daily Market Sense Owner: chinfi-codex Summary: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌... Tags: latest:2.0.3 Version history: v2.0.3 | 2026-06-01T00:59:11.450Z | user Analyst-style tone and report template refinement with bundled shared runtime helpers. v2.0.2 | 2026-05-20T01:09:56.626","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"TUSHARE_TOKEN=your_token\nALPHA_DB_BACKEND=postgresql\nALPHA_PG_URL=postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp"},{"language":"powershell","snippet":"cd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH"},{"language":"powershell","snippet":"python scripts\\render_report_html.py --input reports\\report_20260429.md [--theme default|print]"},{"language":"powershell","snippet":"python scripts\\run_daily_panel.py --asof 20260429"},{"language":"python","snippet":"import sys\nfrom pathlib import Path\nsys.path.insert(0, str(Path(__file__).parent / \"_shared\"))\n\nfrom html_report import HtmlReportBuilder, ChartHook\n\nbuilder = HtmlReportBuilder(\n    title=\"600519 贵州茅台 基本面分析\",\n    theme=\"default\",                    # \"default\" 或 \"print\"\n    meta_text=\"600519 · 贵州茅台 · 2026-05-23\",\n)\nbuilder.add_chart_hook(ChartHook(\n    name=\"valuation-band\",\n    payload={\"bands\": {...}, \"series\": [...]},\n    js=VALUATION_BAND_JS,               # 字符串,在 IIFE 内执行,可读 __payload\n))\nbuilder.add_ui_decoration(SUMMARY_HERO_JS)  # 可选:把 \"核心判断\" 段升格成 hero 卡\n\nhtml = builder.render(markdown_text)        # validate_text_preserved 自动跑\nPath(out_path).write_text(html, encoding=\"utf-8\")"},{"language":"js","snippet":"/* 示例 hook JS */\nconst root = document.getElementById(\"report-body\");\nif (!root) return;\nconst series = __payload.series || [];\n// ... 构造 SVG 插入到 root"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: tushare-daily-market-sense\ndescription: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌停/指数数据做量化选股观察时，必须优先使用本 skill。本 skill 先生成确定性证据包，再由模型或 Codex/Claude Code 等通用 agent 的 subagent 编排能力按模块撰写；不在脚本中调用 LLM，不提供买卖建议，不按申万、同花顺、东方财富等现成行业/概念口径分组。\nversion: 2.0.3\n---\n\n# Tushare Daily Market Sense\n\n## 目标\n\n基于 Tushare 日线、指数、成交额与本地情绪历史，为 A 股盘后复盘生成结构化研报：盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析。\n\n不做单股基本面深度研究、港股/美股/基金/期货/加密分析、超短线交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON；主题归纳、风险措辞和研报写作由模型完成。\n\n## 核心理念\n\n成交额优先。所有强弱判断都要有成交额证据：上涨主线按成交额厚度确认，爆量下跌按放量异常与跌幅强度识别，特征分组按命中规则与成交额证据分开呈现。\n\n主题主线由模型基于业务事实临时归纳，不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。\n\n## 工作流程\n\n1. 确定交易日：解析“今天/最近”或具体日期，默认只使用 `D` 及以前数据；只有用户明确要求后验时才允许 `--allow-future`。\n2. 生成证据包：运行 `scripts/run_daily_panel.py`。脚本会直接调用数据管线，写出完整 evidence、轻量 `report_context` 和模块级 JSON。\n3. 选择撰写模式：\n   - 有 subagent 编排能力时，主 agent 将 5 个模块 JSON 分发给 5 个 subagent 并行撰写。\n   - 没有 subagent 能力时，按同样模块顺序单会话执行，每次只加载当前模块的 JSON、方法论和模板段。\n4. 聚合成稿：主 agent 读取 6 段输出、`assembled_checks.json` 与 `reference/methodology/output_discipline.md`，补一句话盘面判断、风险传导提示和最终语气校准。默认不做外部收评校验、不搜索第三方行情综述、不在报告中加入“外部校验参考”；只有用户明确要求时才补充外部来源。\n5. 按需生成 HTML：当用户要求 HTML、网页、可视化报告或截图风格输出时，先完成并核对 `reports/report_YYYYMMDD.md`，再运行 `scripts/render_report_html.py` 生成同日期 HTML。HTML 是展示层产物，不新增研报判断、不删减 Markdown 正文；若同目录存在 `evidence_YYYYMMDD_utf8.json`，HTML 会自动读取其中的上证指数、创业板指数 120 日 K 线并插入对应指数趋势分析前。\n6. 证据包边界：`reports/evidence_YYYYMMDD_utf8.json` 是本 skill 的 Market Evidence Pack，只属于 skill 输出目录。即使在 AlphaVault 中写入趋势复盘，也不要把该证据包复制或登记为 `RAW/crawlers/` 来源；AlphaVault 侧只写最终趋势复盘 Markdown/HTML、索引和日志。\n7. 清理临时产物：确认 `reports/report_YYYYMMDD.md` 已写入并可读后，删除同日期的临时证据与上下文文件，只保留最终报告。若已按需生成 HTML，则同时保留 `reports/report_YYYYMMDD.html`。必须清理：\n   - `reports/evidence_YYYYMMDD_utf8.json`\n   - `reports/evidence_YYYYMMDD_utf8.stderr.log`\n   - `reports/report_context_YYYYMMDD.json`\n   - `reports/module_context_YYYYMMDD/`\n   不要删除 `reports/report_YYYYMMDD.md` 和已生成的 `reports/report_YYYYMMDD.html`，不要跨日期批量清理，除非用户明确要求。\n\n## 数据获取\n\n环境变量：\n\n```bash\nTUSHARE_TOKEN=your_token\nALPHA_DB_BACKEND=postgresql\nALPHA_PG_URL=postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp\n```\n\n数据库连接统一走 `scripts/_shared/db_core.py`（开发仓库中为 `shared/db_core.py`）。首次进入任意 Agent 环境时先运行 `python3 scripts/_shared/db_ping.py --alpha-schema`；源仓库开发态用 `python3 ../../shared/db_ping.py --alpha-schema`。如果不能使用 Unix socket，再把 `ALPHA_PG_URL` 改为 `postgresql://alpha_user:alpha_pass@localhost:5432/alpha_data`。\n\n运行脚本会先更新 `reference/market_data.csv`，并同步维护派生文件 `reference/market_data.json`，再生成情绪趋势：AKShare `stock_market_activity_legu()` 默认提供上涨、涨停、下跌、跌停、平盘、活跃度、情绪值、成交额等盘面情绪字段；搜狐涨跌停历史页仅在 AKShare 不可用或字段缺失时作为 fallback；Tushare `margin` 汇总 T-1 交易日融资净买入，Tushare `daily` 与 `daily_basic.circ_mv` 计算流通市值加权的全市场换手率。因此环境中还需安装 `akshare`。\n\n基础命令：\n\n```powershell\ncd C:\\Users\\chenh\\OneDrive\\skills\\stock-skills\\a-stock-daily-market-sense\npython scripts\\run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-d"},{"path":"scripts/_shared/html_report/README.md","content":"# shared/html_report\n\n仓库级 HTML 报告渲染器。各 skill 在 SKILL.md 工作流末端调用它,把 Markdown 研报 + JSON 证据包套成一份自包含的 HTML 单页。\n\n## 调用方式\n\n```python\nimport sys\nfrom pathlib import Path\nsys.path.insert(0, str(Path(__file__).parent / \"_shared\"))\n\nfrom html_report import HtmlReportBuilder, ChartHook\n\nbuilder = HtmlReportBuilder(\n    title=\"600519 贵州茅台 基本面分析\",\n    theme=\"default\",                    # \"default\" 或 \"print\"\n    meta_text=\"600519 · 贵州茅台 · 2026-05-23\",\n)\nbuilder.add_chart_hook(ChartHook(\n    name=\"valuation-band\",\n    payload={\"bands\": {...}, \"series\": [...]},\n    js=VALUATION_BAND_JS,               # 字符串,在 IIFE 内执行,可读 __payload\n))\nbuilder.add_ui_decoration(SUMMARY_HERO_JS)  # 可选:把 \"核心判断\" 段升格成 hero 卡\n\nhtml = builder.render(markdown_text)        # validate_text_preserved 自动跑\nPath(out_path).write_text(html, encoding=\"utf-8\")\n```\n\n## ChartHook JS 协议\n\n每个 hook 的 JS 在专属 IIFE 中执行,渲染器自动注入:\n\n- `__payload` — 当前 hook 的 payload(已经 JSON.parse)\n- `window.__chartData` — 整个 envelope `{ hookName: payload, ... }`,供需要跨 hook 取数据的场景\n\n```js\n/* 示例 hook JS */\nconst root = document.getElementById(\"report-body\");\nif (!root) return;\nconst series = __payload.series || [];\n// ... 构造 SVG 插入到 root\n```\n\n## 主题\n\n- `default`:Claude-UI 暖橙 + 数据红绿,默认值\n- `print`:黑白衬线、A4 友好、移除 hover/动效,适合导出 PDF 或邮件附件\n\n新增主题:在 `themes/` 下放 `<name>.css`,`list_themes()` 自动发现。SVG 图表色板由各 hook JS 控制,主题层不强制约束。\n\n## 同步路径\n\n仓库源码位于 `shared/html_report/`。通过 `skill-sync.yaml` 的 `shared.bundles` 同步到目标 skill 的 `scripts/_shared/html_report/`,各 skill 用 `sys.path` 引导导入。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7450t2xk0c4fzwzv90194pgd82q8yk\",\n  \"slug\": \"tushare-daily-market-sense\",\n  \"version\": \"2.0.3\",\n  \"publishedAt\": 1780275551450\n}"},{"path":"scripts/_shared/POSTGRESQL.md","content":"# CH Skills PostgreSQL 连接契约\n\n本仓库所有需要数据库的 skill 默认使用同一套 PostgreSQL 连接入口：`shared/db_core.py`。不要在单个 skill 里重新发明连接配置、连接池或表存在性检查。\n\n## 快速连接\n\n在仓库根目录验证连接：\n\n```bash\nexport ALPHA_DB_BACKEND=postgresql\nexport ALPHA_PG_URL=\"${ALPHA_PG_URL:-postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp}\"\npython3 shared/db_ping.py --alpha-schema\n```\n\n如果当前环境没有 Unix socket，改用 TCP：\n\n```bash\nexport ALPHA_PG_URL=\"postgresql://alpha_user:alpha_pass@localhost:5432/alpha_data\"\npython3 shared/db_ping.py --alpha-schema\n```\n\n在同步后的 skill 包里验证连接：\n\n```bash\npython3 scripts/_shared/db_ping.py --alpha-schema\n```\n\n## 环境变量优先级\n\n| 变量 | 作用 | 默认 |\n|---|---|---|\n| `ALPHA_DB_BACKEND` | `postgresql` 或 `sqlite` | `postgresql` |\n| `ALPHA_PG_URL` | CH Skills 标准 PostgreSQL DSN，最高优先级 | 空 |\n| `DATABASE_URL` | 通用 Agent / 调度器兼容 fallback | 空 |\n| 内置 DSN | 未设置前两者时使用 Unix socket | `postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp` |\n| `ALPHA_PG_CONNECT_TIMEOUT` | 连接超时秒数 | `5` |\n| `ALPHA_PG_POOL_MAX` | 单进程连接池上限 | `8` |\n| `ALPHA_SQLITE_DIR` | SQLite fallback 目录 | 当前目录 |\n\n`ALPHA_PG_URL` 是唯一推荐写法；`DATABASE_URL` 只是为了兼容某些 Agent 沙箱或 scheduler 已经注入的环境。\n\n## 新 skill 接入方式\n\n脚本只依赖 `db_core`，不要直接依赖 `psycopg2.connect`：\n\n```python\nimport sys\nfrom pathlib import Path\n\nSCRIPT_DIR = Path(__file__).resolve().parent\nBUNDLED_SHARED = SCRIPT_DIR / \"_shared\"\nDEV_SHARED = SCRIPT_DIR.parents[2] / \"shared\"\nsys.path.insert(0, str(BUNDLED_SHARED if BUNDLED_SHARED.exists() else DEV_SHARED))\n\nfrom db_core import get_connection, table_exists\n```\n\n若 skill 会被同步到各 Agent 目录，并且需要数据库，在 `skill-sync.yaml` 的 `shared.bundles` 中把它加入 `skills` 列表，让 `shared/` 被打包到 `scripts/_shared/`。\n\n## 诊断顺序\n\n1. 先跑 `python3 shared/db_ping.py --alpha-schema`，确认是连接问题、依赖问题还是 schema 问题。\n2. 如果报 `psycopg2 is required`，安装 `psycopg2-binary`，或临时设置 `ALPHA_DB_BACKEND=sqlite`。\n3. 如果 socket DSN 失败，换成 `localhost:5432` TCP DSN。\n4. 如果连接成功但缺表，执行 `psql -d alpha_data -f init_alpha_data.sql` 初始化 schema。\n5. 不要把 `.env`、真实口令或个人云数据库地址提交进仓库；文档和日志只能输出脱敏 DSN。"},{"path":"reference/methodology/module1_trend.md","content":"# 模块 1：盘面趋势\n\n使用 `module1_market_trend.json`。\n\n只分析：\n\n- 上证指数\n- 创业板指数\n- `market.trend.sentiment`\n- `market.temperature`\n\n不要加入科创板、风格指数、融资、创业板 PE、外围资产或新闻解释。\n\n分析框架：\n\n1. 情绪趋势：结合量能温度、全市场换手率、情绪温度和广度温度。若情绪历史不可用，只保留当日盘面快照。\n2. 上证趋势：判断趋势阶段、量价质量、均线位置和最近支撑压力。\n3. 创业板趋势：使用同样四项框架，并与上证强弱对比。\n4. 盘面定性：明确写成共振、背离或分化。\n\n写作要求：\n\n- 不要把单日涨跌写成趋势。\n- 上证指数趋势、创业板指数趋势只写文字段落，不输出表格。指数数据用于支撑判断，关键数值直接嵌入句子，例如“收盘站上 MA20，成交额为近 20 日均量 1.2 倍，临近 20 日压力位”。这样避免指数部分挤占篇幅，也让报告重点回到盘面判断。\n- 指数上涨但缩量时，写“反弹质量待确认”。\n- 成交额与全市场换手率同步抬升、上涨家数同步改善时，写“良性放量加速，风险中性偏高”。\n- 全市场换手率上升但上涨/下跌家数转弱时，写“换手加速但承接分化，风险升温”。\n- 指数强但广度/情绪弱时，写“指数掩盖分化”。\n- 情绪先修复但指数未确认时，写“情绪先行修复但指数尚未确认”。"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌... Skill: Tushare Daily Market Sense Owner: chinfi-codex Summary: 基于 Tushare Pro A 股 daily 日线数据生成盘后市场研报的方法论 skill。当用户要求做每日盘面趋势、上证/创业板指数趋势、情绪指数趋势、赚钱效应与上涨主线分析、爆量下跌识别、容量上涨/科创板月线突破/10:30前涨停等特征分组分析、历史某日复盘、基于 daily/daily_basic/涨跌... Tags: latest:2.0.3 Version history: v2.0.3 | 2026-06-01T00:59:11.450Z | user Analyst-style tone and report template refinement with bundled shared runtime helpers. v2.0.2 | 2026-05-20T01:09:56.626","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":887,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T16:57:57.660Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:01:19.666Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}