a-stock-daily-market-sense-x

内容来源:clawhub · 原始地址 · 查看安装指南

原始内容


name: a-stock-daily-market-sense description: 基于 Tushare Pro A 股日线与 Baostock 风格指数生成盘后市场研报。当用户要求分析每日或历史盘面、指数与市场风格、情绪和成交额集中度、赚钱效应与上涨主线、即时及短中期催化、主线细分线路、爆量下跌,或容量上涨、全市场月线平台突破、10:30 前涨停、折扣启动等特征分组时使用;也用于特征分组量化回溯与相对收益因子挖掘。本 skill 先生成确定性证据包,再由模型按模块判断与写作;脚本不调用 LLM,外部消息不得改变量价确定的主线星级,不套用现成行业/概念分类,不提供买卖建议。

Tushare Daily Market Sense

目标

基于 Tushare 日线、指数、成交额与本地情绪历史,为 A 股盘后复盘生成结构化研报:盘面趋势、成交额集中度、赚钱效应与上涨主线、爆量下跌风险、特征分组分析。

不做单股基本面深度研究、港股/美股/基金/期货/加密分析、超短线交易决策、自动下单、组合优化或买卖建议。脚本只负责取数、计算、筛选、切分 JSON;主题归纳、风险措辞和研报写作由模型完成。

核心理念

成交额优先。所有强弱判断都要有成交额证据:上涨主线按成交额厚度确认,爆量下跌按放量异常与跌幅强度识别,特征分组按命中规则与成交额证据分开呈现。

主题主线由模型基于业务事实临时归纳,不套现成行业或概念标签。共同性不足时明确写“暂不构成主线”或“资金轮动”。

工作流程

  1. 确定交易日:解析“今天/最近”或具体日期,默认只使用 D 及以前数据;只有用户明确要求后验时才允许 --allow-future

  2. 生成证据包:运行 scripts/run_daily_panel.py。脚本会直接调用数据管线,写出完整 evidence、个股 K 线展示数据(kline_YYYYMMDD.json)和模块级 JSON。

  3. 生成首轮模块产物:模块 1、2、4、5 继续各自只读自己的 JSON、方法论与模板。模块 3 首轮只根据 module3_money_effect.json 归纳临时主题、父主题成员与候选细分成员,先写 stars: nullmodule3_theme_map.json;不要搜索,也不要在统计前凭手算锁星。有 subagent 时分发最小上下文,没有时按相同边界顺序执行。

  4. 统计并锁定模块 3 星级:运行 theme_group_stats.py 生成 module3_theme_stats.json,再由模型严格按 Market Evidence Pack 与统计结果写回 stars: 1/2/3。星级锁定后,只对当日 ★★/★★★ 主线强制尝试搜索,并按宿主能力选读知识库或产业链资料;★ 级方向不搜索、不做产业推演、不进入 3.2。主 agent 将 Web 结果、可选的宿主知识证据与查询错误压缩成 module3_enrichment_pack.json。外部资料只用于解释催化、推演产业变量与挖掘细分线路,绝不回写或上调 3.1 星级。详细搜索、证据和评级纪律见 references/methodology/catalyst_subline_mining.md

  5. 聚合成稿:模块 3 第二阶段只读取 theme map、统计结果、enrichment pack、方法论与模板,完成 3.1 主线判定、3.2 催化与细分线路推演、3.3 领导股与弹性股。主 agent 再读取模块 1-5 输出、assembled_checks.jsonreferences/methodology/output_discipline.md,补一句话盘面判断、风险传导提示和最终语气校准。搜索或知识查询失败不阻断日报,但要披露证据缺口并降低产业推演确定性。

  6. 主线生命周期落库:报告定稿后,把当日 3.1 主线判定沉淀进 PG 生命周期台账。先运行 python3 scripts/theme_lifecycle.py context --asof YYYYMMDD 取注册表、各主线近期状态与 watchlist;模型完成别名归一(当日临时主题名 → canonical theme_id)和生命周期状态判定(低位启动/在场候选/主线确认/高位分歧/退潮/修复/再聚焦/沉寂),写出 reports/lifecycle_YYYYMMDD.json 后运行 python3 scripts/theme_lifecycle.py record --input reports/lifecycle_YYYYMMDD.json 落库。脚本只做确定性校验(枚举、状态机转移合法性、theme_id 存在性),判断留给模型;输入格式、状态机与判定基准见 references/theme_lifecycle.md

  7. 按需生成 HTML:当用户要求 HTML、网页、可视化报告或截图风格输出时,先完成并核对 reports/report_YYYYMMDD.md,再运行 scripts/render_report_html.py 生成同日期 HTML。HTML 是展示层产物,不新增研报判断、不删减 Markdown 正文;若同目录存在 evidence_YYYYMMDD_utf8.jsonkline_YYYYMMDD.json,HTML 会自动读取指数 120 日 K 线与个股 K 线并插入对应正文附近;其中 5.2 全市场月线平台突破组改画月线 K 线图(多年底部箱体阴影 + 箱体上沿 pivot 水平线 + 突破月标记,数据来自 kline_YYYYMMDD.jsonmonthly 段),其余分组仍为 120 日日线。若 theme_daily_state 已有该日数据,HTML 还会在主线判定小节下方自动注入主线生命周期泳道图区块(近 22 个交易日,红 = 强势在场、绿 = 退潮、闪电 = 低位启动;--lifecycle-days 调窗口、--no-lifecycle 关闭);区块只展示台账已落库数据,不新增判断。若 evidence 含风格序列,HTML 会在「市场风格」小节表格下方自动注入两张 60 日归一化对比图(规模轴五线 / 成长价值红利三线,起点=100),区块只展示 evidence 已有数据、不新增判断。

  8. 证据包边界:reports/evidence_YYYYMMDD_utf8.json 是本 skill 的 Market Evidence Pack,只属于 skill 输出目录。即使宿主把最终趋势复盘写入其他知识系统,也不要把该证据包复制或登记成宿主原始来源;宿主知识查询只以可选 evidence pack 输入,不成为 core skill 的路径依赖。生命周期台账同理:它是 skill 域运行时数据,归 PG 管。

  9. 清理临时产物:确认 reports/report_YYYYMMDD.md(及按需生成的 HTML)已写入并可读后,运行一条确定性清理命令,不要手工逐个删文件:

    python3 scripts/run_daily_panel.py --cleanup YYYYMMDD
    

    该命令删除同日期的 evidence、kline、stderr 日志、lifecycle 输入、report_context 与 module_context 目录,永远不会碰 report_YYYYMMDD.md / report_YYYYMMDD.html(生命周期数据已持久化在 PG,不受清理影响)。不要跨日期批量清理,除非用户明确要求。

特征因子挖掘(量化回溯 · 按需研究流程)

这是独立于每日日报的一条研究线:你提一个特征分组,skill 在分组之上做额外因子挖掘,给出分组内的"叠加条件最优解"。不进日报,想挖时才跑。完整方法论、基准表、spec 格式、最优解选择 rubric 见 references/methodology/factor_mining.md

脑/手边界照旧:脚本 scripts/factor_backtest.py 只铺确定性证据(历史回放命中、6 格前向相对收益、因子分层、单/配对候选叠加条件 + 过拟合护栏标记),不挑"最优解"、不下结论;读证据、选叠加条件、写归因与 caveat 是模型的活。

流程(两处人工,其余自动):

  1. 你提分组:内置组直接点名(如折扣启动);新组用大白话给硬条件,模型译成 filter spec 给你确认。
  2. 脚本回放 + 回测 + 铺网格
    # 内置折扣启动(多日序列组,复用生产函数,语义同线上)
    python3 scripts/factor_backtest.py --group discount_relaunch --min-n 15
    # 自定义单日特征阈值组(含容量上涨式),用 spec
    python3 scripts/factor_backtest.py --group custom --spec my_group.json
    
    产物:reports/factor_mining_<group>_<asof>.json(证据包,gitignore,跑完即临时)。
  3. 模型选最优叠加解:读 JSON,按 reference §四 rubric(稳健优先于大 Δ、看 oos_balance 与中位数胜率、深度≤2、经济逻辑)选定叠加条件,写 reports/factor_mining_<group>_<asof>.md
  4. 你决定要不要用:把结果作为研究参考,或手动把叠加条件提级成分组生产阈值;脚本不替你改生产。

口径要点:进场 T+1 开盘/尾盘 × 持有 T+3/T+5/T+10,后复权;相对收益挂板块/市值匹配基准(科创→科创50、创业→创业板指、主板按市值→沪深300/中证500/中证1000),沪深300 作宽基对照。脚本默认会把信号窗口缺失的 daily_basic 从 Tushare 回补入库(需 TUSHARE_TOKEN)。折扣启动要完整 200 日历史,信号只落在数据最近端、样本偏小——所以护栏与诚实 caveat 是骨架,结论按"单一环境证据扫描、非统计定论"来写。挖矿证据分决策包(≤150KB,模型读:结论 + 每条过闸条件 ≤3 例证)与 _detail.json(整列 signals,按需读);每次挖矿自动登记进 PG factor_experiment_log(可查、可判分,见下)。

需要回看已跑过的实验或补人工判定时,使用 factor_lab.py experiments 查询 PG factor_experiment_log。实验台账只记录挖矿参数、样本数、过闸数量、证据路径与人工 verdict,不进入每日日报。

数据获取

环境变量:

TUSHARE_TOKEN=your_token
ALPHA_DB_BACKEND=postgresql
ALPHA_PG_URL=postgresql://alpha_user:alpha_pass@/alpha_data?host=/tmp
TAVILY_API_KEY=your_token  # 催化搜索主路径;缺失时可由宿主 Web Search 降级

数据库连接统一走 scripts/_shared/db_core.py(开发仓库中为 shared/data/db_core.py)。首次进入任意 Agent 环境时先运行 python3 scripts/_shared/db_ping.py --alpha-schema;源仓库开发态用 python3 ../../shared/data/db_ping.py --alpha-schema。如果不能使用 Unix socket,再把 ALPHA_PG_URL 改为 postgresql://alpha_user:alpha_pass@localhost:5432/alpha_data

运行脚本会先更新 references/market_data.csv,并同步维护派生文件 references/market_data.json,再生成情绪趋势:盘面情绪计数默认由 Tushare daily 直接计算,其中涨跌停数按板制规则精确判定——未复权前收盘 ×(1±板块限幅) 四舍五入到分后与收盘价比对(主板 10%、主板 ST 5%、创业/科创 20%、北交所 30%),口径为收盘封板、不含盘中炸板,limit_detection 字段标注判定方式;搜狐涨跌停历史页仅在主路径不可用时作为 fallback;Tushare margin 汇总 T-1 交易日融资净买入,Tushare dailydaily_basic.circ_mv 计算流通市值加权的全市场换手率。市场风格代理指数使用 Baostock query_history_k_data_plus,默认覆盖超大盘、沪深300、中证500、中证1000、国证2000、中证红利、300成长、300价值;历史数据缓存在 PG 的 stock_index_daily 表(以 bs_code 为 ts_code),每次运行只向 Baostock 增量取缺口,Baostock 不可用时直接用缓存窗口出摘要。个股日线、复权因子(stock_adj_factor)、daily_basic、交易日历同样全部缓存在 PG。因此环境中还需安装 baostockakshare 为历史遗留可选依赖)。

基础命令(在 skill 根目录下执行):

python3 scripts/run_daily_panel.py --asof 20260429 --lookback 120 --market-trend-days 90 --index 000300.SH

模块 3 首轮完成临时主题映射后,先用下列原子命令补充确定性统计;模型据此锁星后才运行搜索:

python3 scripts/theme_group_stats.py \
  --context reports/module_context_YYYYMMDD/module3_money_effect.json \
  --mapping reports/module_context_YYYYMMDD/module3_theme_map.json \
  --output reports/module_context_YYYYMMDD/module3_theme_stats.json
python3 scripts/web_search.py "主题 事件 YYYY-MM-DD" --topic news \
  --start-date YYYY-MM-DD --end-date YYYY-MM-DD --max-results 6

theme_group_stats.py 只统计模型已分组的成员;web_search.py 只返回结构化搜索结果。两者都不做主题、催化或产业强弱判断。

主要输出:

  • reports/evidence_YYYYMMDD_utf8.json:完整证据包(紧凑 JSON,metadata 含 stage_timings_seconds 各阶段耗时与 fetch_gaps 各端点缺失交易日清单;任一端点缺日非空时必须在报告中显式说明)。
  • reports/kline_YYYYMMDD.json:个股 K 线展示层数据,只供 HTML 渲染使用,模型撰写不读取。
  • reports/module_context_YYYYMMDD/:供 subagent 分工的模块级 JSON。
  • references/market_data.jsonmarket_data.csv 的全量派生 JSON,按交易日升序保留所有列、清洗数值并提供 series 给 HTML 趋势图使用。

这些文件中,evidence、kline、lifecycle 输入和 module_context 是研报撰写过程中的临时产物。最终报告生成并核对后,按工作流程第 9 步用 --cleanup 一键删除,只保留 reports/report_YYYYMMDD.md、按需生成的 reports/report_YYYYMMDD.html,以及长期维护的 references/market_data.csv / references/market_data.json

HTML 输出命令:

python3 scripts/render_report_html.py --input reports/report_20260429.md [--theme default|claude|print]

默认输出 reports/report_20260429.html,并将 references/market_data.json 内嵌到 HTML 中。本地浏览器可直接打开,图表不依赖外部 CDN。--theme 默认 default(AlphaVault 站点 / Google Material);--theme claude 为 Claude.ai 暖色风格;--theme print 为黑白衬线、A4 友好,适合导出 PDF 或邮件附件。样式模板由仓库通用 shared/html_report(同步到 scripts/_shared/html_report/)提供,与 a-stock-analyzer 共用。

常用参数(赚钱效应/爆量/容量/折扣阈值、--fetch-workers--cleanup 等)与 factor_backtest.py / factor_lab.py / render_report_html.py 的参数集中在 references/cli_reference.md

Subagent 编排契约

主 agent 先生成模块级 JSON,然后按下列最小上下文分发。每个 subagent 只看自己的模块数据,不读取其他模块数据。

模块 JSON 方法论 模板
1 盘面趋势 module1_market_trend.json references/methodology/module1_trend.md references/template/section1.md
2 集中度 module2_concentration.json references/methodology/module2_concentration.md references/template/section2.md
3 赚钱效应(首轮) module3_money_effect.json references/methodology/module3_money_effect.md 先输出临时主题短名单与 stars: nullmodule3_theme_map.json
4 爆量下跌 module4_decline.json references/methodology/module4_decline.md references/template/section4.md
5 特征分组 module5_feature_groups.json references/methodology/module5_feature_groups.md references/template/section5.md

模块 1、2、4、5 互不读取。模块 3 使用两阶段契约:首轮只做临时主题与成员映射;统计脚本完成后,由模型按量价 rubric 写回并锁定星级;第二阶段只读取已锁星的 module3_theme_map.jsonmodule3_theme_stats.jsonmodule3_enrichment_pack.json、模块 3 方法论和 references/template/section3.md,不回读其他模块的完整 JSON。Skill 只规定最小上下文边界,不规定 subagent 数量、并发槽位或模型。

聚合 agent 额外读取:

  • assembled_checks.json:M3 赚钱效应池与 M4 爆量下跌池的确定性交叉检查。
  • references/methodology/output_discipline.md:最终成稿纪律。

Python 不调用 Anthropic API、不调用任何 LLM、不硬编码模型名。Codex、Claude Code 或其他通用 agent 的 subagent 编排能力负责撰写;知识 evidence pack 是宿主可选输入,不在 core skill 中硬编码知识库路径或图谱实现。

输出规范

完整研报按五个模块输出。每个判断段先给自然语言结论,再选择少量关键证据支撑;表格承载细项数据,段落解释这些数据意味着进攻、分歧、退潮、修复、拥挤还是扩散。所有强弱判断都要能回到成交额、放量倍数、涨跌幅、相对收益或回撤证据,但不要把所有可用指标塞进同一段。模块 3 的主题分组只作为内部推理步骤,不输出单独的主题分组陈列表,赚钱效应总览后直接进入主线判定。

文风默认(项目级硬性要求):

  • 文风讲人话,减少机械与僵硬。 像跟懂行的人当面把一件事讲清楚那样写,句子通顺、有逻辑衔接,该解释因果和给判断时把话说透。避免模板腔、翻译腔和套话——别成段堆砌"综上所述""值得注意的是""总体来看",别把每条都写成生硬的"主语+动词+宾语"公式句,也别为了凑结构把话说断、只丢关键词。
  • 同项罗列优先用 list,但每条要说人话。 同一维度的多个条目(多个信号、多只个股观察点、多项风险传导)拆成 bullet 或编号,一条一项,别塞进一个长段落;但每条用完整通顺的话写,不要退化成"字段A - 字段B - 字段C"式的横杠拼接。结构化对照(指标 × 数值、分组 × 判定)才用表格。

文风目标:僵硬度约 5/10。报告应像一位有经验的盘后研究员在做复盘:先给人能立刻理解的盘面状态,再用少量关键数字支撑,最后给出下一交易日需要验证的条件。避免把所有可用指标都塞进段落;同一自然段最多放 2-3 个核心数字,其余数字放表格。

每个一级大章节(1-5)里已有的总结/定性段落必须使用 Markdown 高亮样式 ==...== 包裹,例如“指数趋势判断”“市场风格判断”“盘面定性”“拥挤度判断”“主线 vs 资金轮动结论”“风险传导提示”“特征分组一句话判断”。不要为了高亮额外新增“本节总结”段落;高亮的是原本就承担总结作用的段落。

禁止输出买卖建议。可以写“风险传导”“持续性待验证”“主线确认度”,不要写“买入/卖出/止损/目标价”。

HTML 输出只改变呈现方式:必须保留 Markdown 研报中的所有文字、表格、引用和免责声明。==...== 高亮段落在 HTML 中渲染为浅蓝提示块;正文前可以增加 market_data.json 驱动的趋势图区域。若可读取同日期 evidence,HTML 可以在“指数趋势”正文附近插入上证指数、创业板指数、科创50 的 120 日 K 线图,并在图中展示成交金额柱;也可以在 3.3、5.2、5.3、5.4 股票明细表下方插入表内股票的 120 日 K 线图;若 evidence 含风格序列,还可以在“市场风格”表格下方插入两张 60 日归一化对比图(规模轴五线 / 成长价值红利三线,起点=100)。这些图表只展示 evidence 中已有的 OHLC、成交金额与风格指数收盘序列数据,不得新增与 Markdown 不一致的分析结论。

示例

用户:复盘 2026-04-29 的 A 股盘面,重点看赚钱效应和容量上涨。

执行:

python3 scripts/run_daily_panel.py --asof 20260429

然后按 subagent 契约加载 reports/module_context_20260429/ 下的模块 JSON。若没有 subagent,就顺序加载每个模块的 JSON + 方法论 + 模板段,最后聚合为完整研报。