← 返回
未分类 Key

A Stock Report

A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版。内置投资者情绪打分(6维度,满分100)与AI后市展望。
A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版。内置投资者情绪打分(6维度,满分100)与AI后市展望。
cookfish1979 cookfish1979 来源
未分类 clawhub v3.3.1 14 版本 99503.1 Key: 需要
★ 1
Stars
📥 2,583
下载
💾 1
安装
14
版本
#a-share#akshare#automation#finance#investment#iwencai#latest#report#wechat-work

概述

A股报告系统

>A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版


目录结构(v3.2.3+1 起明示)

clawhub publish 默认整目录上传(无 .clawhubignore),39 文件 / ≈ 326 KB。knowledge/ 也被上传(19 个 changelog 详情文件 ≈ 60 KB),但仅按需 skill_view 加载——不会污染默认 context。装好后 ~/.hermes/skills/A-stock-report/ 就是这个结构:

A-stock-report/
├── SKILL.md                  ← 本文件(36 KB)
├── _meta.json
├── scripts/                  ← 12 文件:6 send + 2 collect + dispatcher + 2 共用库 + 1 护栏
│   ├── _lock.py              ← 共用:fcntl 文件锁 + 残留自愈
│   ├── _send_lib.py          ← 共用:wx/notify_failure/4 通道推送
│   ├── check_consistency.py  ← 6 端一致性护栏(v3.1.5+/v3.1.6+ E/v3.2.0+ F)
│   ├── skill_dispatcher.py   ← LLM 驱动型任务的 prompt 注入器
│   ├── collect_{morning,evening}_data.py
│   └── send_{morning,close,evening,intraday,weekend,ipo}_*.py
├── templates/                ← 3 个 LLM 任务 prompt(morning/evening/weekend)
├── cron_jobs/                ← cron 真相镜像(cron_mirror.json + README)
├── references/               ← 历史 config.json(参考用,无代码读)
└── knowledge/                ← 19 个 changelog 详情 + 6 个决策主题(按需 skill_view 加载)
    ├── changelog/            ← 按版本号组织("v3.1.2 改了什么")
    │   ├── README.md         ← 16 条索引(v2.0.0 ~ v3.2.4 倒序;SKILL.md Changelog 段 19 条精简版)
    │   └── vX.Y.Z.md         ← 每条 ≥ 1 KB 完整细节(问题/结论/教训/测试)
    └── decisions/            ← ★ v3.2.4+ 按主题组织("dispatcher 设计原则")→ 跨版本决策中心
        ├── README.md         ← 5 主题索引
        ├── architecture.md   ← 架构演进(v2.0.0 ~ v3.2.4)
        ├── data-pitfalls.md  ← 数据源坑(8 类踩过的修复)
        ├── lessons-learned.md ← 13 条核心教训(#0~#12,跨 v2.0.0~v3.2.4 收尾期)
        ├── guardrails.md     ← 护栏规则(check_consistency.py A~F + 行数硬上限)
        └── dispatcher-patterns.md ← dispatcher 4 端一致性 + 模板外置原则

为什么不排除 knowledge/? 60 KB 不大;用户装完可 skill_view 按需读详情;省得"装了 3.2.3 看不到 v3.2.3 怎么改"的鸡生蛋。何时考虑排除:当 knowledge/ > 500 KB 或 changelog > 50 条时加 .clawhubignore


版本历史(Changelog)

v3.3.1 — 晚报可读性修复:财经要闻空行 + 操作建议依据精简(2026-06-11 深夜)

首跑 v3.3.0 协议后 2 个可读性问题(用户反馈+自检):(1) 7 条要闻挤一起无空行;(2) 操作建议依据 120 字符超长堆数据。修复 3 处:3 个 templates(morning/evening/weekend)同步注入"要闻间 1 空行 + 依据 ≤ 50 字符"协议 + send_evening_report.py L817 修隐藏 bug(旧 if _l.strip() 把 ai.txt 空行全过滤)+ ai.txt 重生成。端到端验证(23:58 真推):7 要闻 6 个空行间隔(md 3649 字节)+ 3 条依据 43/32/33 字符 + 微信推送成功。教训:协议类修改(template prompt)必须配合数据流下游(load/send 脚本)一起改,光改 template 没用。详见 knowledge/changelog/v3.3.1_*.md(待写)。

v3.3.0 — 财经要闻段"任务定位"协议:防"盘面数据/资金流向"冒充"要闻"(2026-06-11 晚)

首跑验证(2026-06-11 23:55 晚报 cron 实战):v3.3.0 协议首次端到端跑通。LLM 产出 7 条要闻 = 3 条政策事件(发改委郑栅洁座谈会/工信部 AI+信通意见/商务部何亚东发布会)+ 1 条上市公司公告(光迅科技 35亿定增)+ 1 条海外事件(欧佩克月报下调 2026 需求至 97 万桶/日)+ 1 条海外央行(美联储 6 月决议)+ 1 条行业事件(电子式储蓄国债纳入个人养老金)= 7/7 全部为事件型新闻,0 条盘后数据/资金流向/估值指标混入。来源标注全 7 条带 "|来源:XX"(发改委网站/证券时报/工信部/中国科技网/新浪财经/东方财富/钛媒体/财联社/新华网/同花顺/CME FedWatch/北京商报)。操作建议 3 条依据均 ≤ 50 字符。结论:v3.3.0 三层协议(任务定位 + 来源约束 + 短依据)设计正确,可推广至 morning/weekend 模板。附加小坑:恒生指数 b_HSI 也出现 HTTP 403(v3.x 已知 A50 同问题,HSI 为首次记录),脚本走 fallback 成功;建议未来为 HSI 加同款"❌ 数据缺失"占位协议。

问题

问题:6/11 晚报 7 条"财经要闻"中 6 条是"数据指标+盘面分析"(指数点位/PE/两融/亚太盘面/机构策略),仅 1 条是真新闻(发改委主任座谈会)。根因:[财经要闻] 段模板只要求"有内容"(v3.1.0 护栏),不规定"内容类型"——LLM 误把"盘后数据"当"要闻"。3 层协议矩阵:v3.1.0=结构性(标记存在)、v3.1.3=真实性(防编造)、v3.3.0=任务定位(要闻≠盘面数据)。v3.3.0 协议:3 个 templates 同步插入同 1 段(morning/evening/weekend),含 2 层(1)任务定位硬约束:要闻 7 条中至少 4 条必须是"事件型新闻"(主体+动作+客体 3 要素:政策事件/上市公司公告/海外央行/行业重大事件),禁止作为要闻的 4 类(指数点位/估值/资金/机构策略/亚太盘面)→ 这些是【盘后数据】,正确归属 = [操作建议] 段的"依据";(2)来源约束:每条要闻必须标注"|来源:XX 媒体"(新华社/财联社/证券时报/第一财经/中国证券报/上海证券报/21 世纪经济报道),缺源 = 视为 LLM 杜撰。3 个 templates 字节数:morning +812(1743→2555)、evening +812(2835→3647)、weekend +815(2783→3598),JSON 全部合法,0 unescaped "v3.3.0 不动:send 脚本硬校验(用户拍板 = "模板协议 + 来源约束" 2 层,不做 Layer 3 硬校验——v3.1.0 风格的 SystemExit 太重,v3.1.3 软约束已证明靠不住,留待 v3.4.0 再议)。教训:(a)段位错误比段内错误更严重——v3.3.0 误判"重复"是问题,真因是 LLM 把"盘后数据"当"要闻";(b)patch 工具不自动 escape " —— 段内中文引号包术语的 "盘面数据",必须手工 \" 转义,否则 JSON 非法。详见 knowledge/changelog/v3.3.0_news_segment_task_positioning_protocol.md(待写)。

v3.2.9 — 3 个 dispatcher 任务 skills 字段清理(v3.0 模板外置后失效)(2026-06-11 下午)

3 个 dispatcher 任务(晨报/晚报/周末)的 skills=["A-stock-report"] 在 v3.0 模板外置后失效——dispatcher 把完整 prompt 注入到 /tmp/dispatcher_prompt_xxx.txt,LLM 按 /tmp 文件执行而非按 SKILL.md 全文,预加载 18.5K 字符 SKILL.md 100% 是浪费(4,500 tokens/次 × 3 任务/天 ≈ $10-50/年)。v3.2.9 清理:jobs.json 3 任务 skills=[] + prompt 去掉"加载 A-stock-report skill"指示(-24 字符/任务),0 行为变化。不动的文件:cron_mirror.json(按设计只镜像 3 独立脚本任务)、templates/*.json(与本次清理无关)、_meta.json(发布元数据,v3.2.5/v3.2.6 升级也未动)。教训:删 dispatcher 任务 skill 字段前先确认 mirror 设计意图(v3.2.9 误改 mirror 一次后回滚)。详见 knowledge/changelog/v3.2.9.md

v3.2.8 — 收盘小结格式对齐:4 处拼接 bug 修复(2026-06-11)

send_close_summary.py build_report 模板拼接 4 处 bug:(1) 段一项目符号 · U+2022;(2) 段一 6 行 " ".join() 挤 1 行 → "\n".join();(3) 段一末两行成交额/IF 顶格独立;(4) 段三/五/六标题前各补 1 空行。模拟渲染 + check_consistency 7/7 全过。详见 knowledge/changelog/v3.2.8.md

v3.2.7 — .env 路径根除:8 脚本多路径回退(2026-06-10 下午)

真实事件序列(2026-06-10 18:37 实战核对):6/9 15:30 收盘小结 PUSH_OK ✅(jobs.json 当时指向 /workspace/skills/A-stock-report/scripts/ dev 副本,dev 副本脚本走另一套 .env 路径,恰好成功);6/10 上午 v3.2.6 修复把 jobs.json 切到 /root/.hermes/skills/A-stock-report/,15:30 cron 首跑正式副本 → WECOM_WEBHOOK_KEY missing。v3.2.7 修复 8 脚本的 .env 多路径 + 去引号 + 白名单(事后证明治错了方向——脚本里读不到 WECOM_KEY 不是因为路径错,而是因为 /workspace/.env 是 bare KEY=value 格式,缺 export 前缀 → source 不导出到子进程)。6 patch 仍然有效(多路径 + 去引号 + 白名单是预防性规范),但不是这次的真因。真因 18:37 锁定:把 /workspace/.env 6 行加 export 前缀,手工 source + 跑 send_close_summary.py 推送成功 ✅。详见 knowledge/changelog/v3.2.7.md

v3.2.6 — 双副本根除 + jobs.json 隐藏运行时副本修复(2026-06-10 上午)

/workspace/skills/A-stock-report/ dev 副本,统一 11 处硬编码到 /root/.hermes/skills/A-stock-report/(cron_mirror 3 + templates 3 + SKILL.md 1 + check_consistency 1 + jobs.json 6 = 隐藏运行时副本)。jobs.json 是 v3.2.6 首次发现的 gateway 实际读取的运行时配置,前 8 处修复不重启 gateway 不生效。"6 周隐性错配"措辞是 LLM 编造的——核对 session 历史,6/9 15:30 在旧 dev 副本下 PUSH_OK;切路径后 6/10 才首败。升级 5 处版本字段 → 3.2.6;备份 dev 副本到 /tmp/backups/(24h 删)。详见 knowledge/changelog/v3.2.6.md

v3.2.5 — 盘中预警 cron prompt 纯 bash 化:去掉 LLM 看脚本输出的"看门狗"伪智能(2026-06-09 深夜)

jobs.json 盘中预警 prompt 285 → 102 字符(-64%),统一为 source .env && python3 send_*.py 2>&1,与收盘小结/IPO 周报形态一致。同步 mirror + description + skill_version v3.1→v3.2.5。新增护栏 G 段:黑名单 执行以下步骤/决定响应/汇报这条预警/[SILENT] 等 LLM 调度关键词。详见 knowledge/changelog/v3.2.5.md

v3.2.4 — 文档补全:明示 knowledge/ 也被 clawhub publish 上传(2026-06-09 晚)

自介后加"## 目录结构"段(30 行):ASCII 树形图列 39 文件,标 knowledge/ 也被上传(19 文件 ≈ 60 KB,按需 skill_view 加载)。0 逻辑改动,仅文档。详见 knowledge/changelog/v3.2.4.md

v3.2.3 — send_ipo_report.py 迁移到 _send_lib 共用库(2026-06-09 晚)

4 个 send 脚本中 3 个已用 _send_lib.wx唯独 send_ipo_report.py 复制了 24 行重复实现。2 patch:删重复实现 + 加 from _send_lib import wx,脚本 526 → 504 行(-22),行为 100% 等价。意外收获:本地 wx 缺 key 抛 RuntimeError 改共用库返回 -1,原版潜在崩溃隐患顺手修掉。详见 knowledge/changelog/v3.2.3.md

> 历史版本(v3.2.2 ~ v3.0.0,11 条 + v2.0.0 ~ v2.0.10,11 条 = 22 条)已折叠——knowledge/changelog/README.md 一行索引 + vX.Y.Z.md 22 个详情文件保留。

安全配置(必读)

所有外部密钥均通过环境变量注入,禁止硬编码。密钥文件 /workspace/.env 由脚本自动加载(环境变量优先)。

密钥白名单原则

每个脚本仅加载本任务实际需要的变量,不得全量注入 .env 所有密钥。

脚本必需密钥
---------------
collect_morning_data.pyTUSHARE_TOKEN, IWENCAI_API_KEY
send_close_summary.pyWECOM_WEBHOOK_KEY, IWENCAI_API_KEY, TUSHARE_TOKEN
collect_evening_data.pyWECOM_WEBHOOK_KEY(数据采集通过 akshare,无需问财)
send_evening_report.pyWECOM_WEBHOOK_KEY, IWENCAI_API_KEY(PE/分位数查询)
send_morning_report.pyWECOM_WEBHOOK_KEY(仅推送,无需问财)
send_intraday_alert.pyWECOM_WEBHOOK_KEY
send_ipo_report.pyWECOM_WEBHOOK_KEY
send_weekend_news.pyWECOM_WEBHOOK_KEY, IWENCAI_API_KEY

问财 API

问财查询(涨停家数、A50期货、VIX等)统一在进程内通过 _iwencai_query() 函数直连 OpenAPI,不使用 subprocess 外部调用,避免通过 IENV 泄露环境变量给子进程。

字段名兼容写法(重要): 问财 OpenAPI 在 query 包含同义词时,nlp 翻译可能返回不同字段名(如 炸板家数涨停开板家数)。消费侧必须兼容多字段名,避免单一字段名失效导致数据缺失。已修复 send_close_summary.py:167(兼容 炸板家数 / 涨停开板家数)。

自动推送说明

配置 WECOM_WEBHOOK_KEY 即表示授权自动推送报告至企业微信。推送是自动化报告系统的组成部分,非人工干预。

密钥环境变量最小权限来源
------------------------------
企业微信 WebhookWECOM_WEBHOOK_KEY仅发送(只写)微信企业版 → 应用 → Webhook
同花顺问财 API KeyIWENCAI_API_KEY只读查询同花顺 i问财 SkillHub
妙想 API KeyMX_APIKEY只读查询同花顺 i问财
Tushare TokenTUSHARE_TOKEN只读查询Tushare Pro

.env 文件格式示例:

WECOM_WEBHOOK_KEY=c4a1cd60-254e-4612-b365-c701482ae98c
IWENCAI_API_KEY=***
MX_APIKEY=***
TUSHARE_TOKEN=***

##快速开始

手动跑一个报告(运维/补跑/测试用):

所有 6 个任务的完整命令(source .env + python3 脚本路径 + 可选参数)都集中在 cron_jobs/cron_mirror.jsontasks..prompt 字段

  • LLM 驱动型(晨报/晚报/财经周末版)→ templates/.json 的 prompt 模板 + cron_jobs/cron_mirror.json(无对应节点,由 jobs.json 直接调 dispatcher 注入)
  • 独立脚本型(收盘小结/盘中预警/IPO 周报)→ cron_jobs/cron_mirror.json# 节点

手动跑通用模式:

# 1. 读 cron_mirror.json 看 prompt 字段拿到完整命令
python3 -c "import json; print(json.load(open('/root/.hermes/skills/A-stock-report/cron_jobs/cron_mirror.json'))['tasks']['close_summary']['prompt'])"

# 2. 复制粘贴该命令到终端跑(已含 source .env + python3 路径 + 默认参数)

历史命令备查(v3.1.5 清理前): 见 git log / 备份 /workspace/archive/SKILL_md_pre_4segs_clean_*


执行模式

收盘小结、晚报、晨报 采用不同模式:

  • 收盘小结:单一 Python 脚本,内置全部逻辑(取数 → 打分 → 生成报告 → 推送),cron 直接触发,无需 LLM 生成内容。

晨报、晚报、周末要闻 采用两段式

  • 第一段(cron prompt):调用 dispatcher 生成带真实日期的 prompt,写入约定路径
  • 第二段(同一 session):读取 prompt 文件 → LLM 执行 → 写入内容文件 → 调用推送脚本

这样 SKILL.md 中的 prompt 模板只含通用占位符,日期在运行时由 dispatcher 动态注入。


数据来源

数据来源接口
------------------
六大指数(点位/涨跌幅)腾讯实时 APIqt.gtimg.cn
全市场成交额aksharestock_zh_a_spot_em() 全量实时行情
全市场流通市值aksharestock_zh_a_spot_em() 全量实时行情
涨跌停家数/炸板率同花顺问财今日涨停家数 跌停家数 炸板家数(1次查询)
全市场主力净流入东方财富 RPT_MARKET_CAPITALFLOWINDEX_CODE="800000.EI",SORT BY TRADE_DATE DESC 取第1行,BONDTYPE="A股"
行业板块涨跌(前5/后5)hithink-sector-selector今日行业板块涨幅前10 / 今日行业板块跌幅前10
行业主力资金流 Tophithink-sector-selector近5日主力净流入前10行业板块
两融余额/两融交易额AKSharemacro_china_market_margin_sh/sz(仅晚报使用)
IF期货基差新浪 nf_IF0 实时接口(今日优先)+ AKShare 兜底hq.sinajs.cn / akshare futures_main_sina
A50期货(晨报)新浪 hq.sinajs.cn(连续合约)偶发 HTTP 403(2026-06-11 首次发现),缺失时按 v3.1.3 协议用 ❌ 数据缺失(新浪接口HTTP 403) 占位,禁止编造

文件名日期规则

报告文件名日期取值
--------------------
收盘小结--date 参数值;无参数则取当天
晚报--date 参数值;无参数则取当天
晨报生成当天
财经周末要闻生成当天

> 注意:晚报内容里的两融余额标注日期(如"两融余额(04月13日)")是数据对应的上一交易日,与文件名日期可能差1天。


周末要闻情绪轨迹数据来源

一周情绪轨迹从历史报告MD文件中提取,合并规则:

指标来源key取法
--------------------
涨停家数/情绪打分收盘小结 收盘小结_YYYYMMDD.md从文件名提取 YYYYMMDD
两融余额/两融比例晚报 晚报_YYYYMMDD.md报告内容里两融余额行提取日期作为 key

两套数据以交易日 key 对齐合并,保证周一到周五趋势线一致。


防并发锁

各脚本使用独立的锁文件,同时运行互不干扰:

脚本锁文件
--------------
send_close_summary.py/tmp/a_stock_close_summary.lock
send_evening_report.py/tmp/a_stock_evening.lock
send_morning_report.py/tmp/a_stock_morning.lock
send_weekend_news.py/tmp/a_stock_weekend.lock
send_ipo_report.py/tmp/a_stock_ipo.lock
send_intraday_alert.py/tmp/a_stock_intraday.lock

锁残留检测(v2.0.1 起): 脚本有 finally: _unlock() 兜底,正常退出一定会释放。若锁文件残留

  1. 排查推送阶段异常日志(wx() 返回非 0 / 信号中断 / 网络超时)
  2. 确认无进程在跑(ps -ef | grep send_close)后,手动 rm /tmp/a_stock_close_summary.lock
  3. 残留超过 1 小时不重跑需要介入,避免重复推送

报告模板

晨报

📰 【股市晨报】YYYY年MM月DD日(周X)

━━━ 隔夜全球市场 ━━━
【美股收盘】
▪ 道琼斯:XXXXX.XX点,+X.XX%(精确数字,不得用"约")
▪ 标普500:XXXXX.XX点,+X.XX%
▪ 纳斯达克:XXXXX.XX点,+X.XX%(可附"X连涨/连跌X日")
▪ VIX恐慌指数:XX.XX(+X.XX%),恐慌等级:【低位(<20)/中位(20-30)/高位(>30)】

【港股及A50】
▪ 恒生指数:XXXXX.XX点,+X.XX%(附简要背景)
▪ 富时A50期货:XXXXX点,+X.XX%,偏强/偏弱运行【预判A股明日开盘】

【大宗商品】
▪ WTI原油:XXX.XX美元/桶,+X.XX%(精确数字,不得用"约")
▪ 现货黄金:XXXX.XX美元/盎司,+X.XX%(精确数字)

━━━ 财经要闻 ━━━
【1】(标题)|✅利好/❌利空/⚠️中性 对A股影响
  点评:(简洁分析,≤50字)
【2】(标题)|✅利好/❌利空/⚠️中性 对A股影响
  点评:(≤50字)
(**≤7条**,顺序编号,每条格式固定:
  【编号】(标题)|✅/❌/⚠️标签 对A股影响
  点评:(事件+分析,≤50字))

━━━ 今日操作建议 ━━━
【大盘研判】
(综合外围市场、宏观政策、量能等因素,给出2-3句综合判断)

【操作建议】
1. 【板块/策略】(期限):具体建议+附标的
2. 【板块/策略】(期限):...

【风险提示】
⚠️ (1-3条,最重要的风险)

⚠️ 仅供参考,不构成投资建议。股市有风险,投资需谨慎。

收盘小结

📊 【A股收盘小结】YYYY年MM月DD日

━━━ 一,主要股指表现 ━━━
• 上证指数:XXXX.XX,↑/↓X.XX%
• 深证成指:XXXX.XX,↑/↓X.XX%
• 创业板指:XXXX.XX,↑/↓X.XX%
• 科创50:XXXX.XX,↑/↓X.XX%
• 沪深300:XXXX.XX,↑/↓X.XX%
• 中证500:XXXX.XX,↑/↓X.XX%
全市场成交额:XXXXX亿
IF期货信号:IF=XXXX.X,基差+/-XX.X点(升水/贴水)

━━━ 二,板块行情 ━━━
  🔺 涨幅前5:
    · 板块名+X.XX%
    · ...
  🟢 跌幅前5:
    · 板块名-X.XX%
    · ...

━━━ 三,全市场主力资金 ━━━
  🔴/🟢 全市场主力资金:+/-XXX.XX亿元(净流入/净流出)

━━━ 四,行业主力资金流 ━━━
  近5日净流入板块 TOP5:
    · 板块名 +/-XXX.XX亿(+/-X.XX%)
    · ...
  近5日净流出板块 TOP3:
    · 板块名 +/-XXX.XX亿

━━━ 五,量化情绪打分 ━━━(满分100,6因子等权平均)
· 涨停家数 → X分(区间10~100家映射)
· 涨跌停比:XX倍 → X分(对数插值)
· 炸板率 → X分(区间40%~10%映射,越低越好)
• 主力净流入占比:X.XX% → X分(区间-5%~+5%映射)
• 全市场换手率:X.XX% → X分(区间1%~4%映射)
• IF基差:+/-XX.XX点 → X分(区间-300~+150点映射)
━━━━━━━━━━━
综合评分:XX/100  🟢做多|🟡偏多|⚪分歧|🟠偏空谨慎|🔴冰点

━━━ 六,后市展望 ━━━
市场震荡调整,风格偏向题材与成长,建议控制仓位、关注轮动节奏。

━━━ 数据来源:腾讯财经·东方财富·同花顺 ━━━
⚠️ 仅供参考,不构成投资建议。股市有风险,投资需谨慎。

晚报

📋 【A股晚报】YYYY年MM月DD日

━━━ A股收盘 ━━━
• 上证指数:XXXX.X,↑/↓X.XX%
• 深证成指:XXXX.X,↑/↓X.XX%
• 创业板指:XXXX.X,↑/↓X.XX%
• 科创50:XXXX.X,↑/↓X.XX%
• 沪深300:XXXX.X,↑/↓X.XX%
• 中证500:XXXX.X,↑/↓X.XX%
• 成交额:X.XX万亿元

━━━ 亚太股市 ━━━
• 恒生指数:XXXX,↑/↓X.XX%
• 日经225:XXXXX,↑/↓X.XX%
• 韩国综合:XXXX,↑/↓X.XX%

━━━ 市场风险偏好 ━━━
• 两融余额(MM月DD日):XXXXX亿,较前日+/-XXXX亿
• 两融余额/A股流通市值(MM月DD日)= X.XX%
  阈值:<3%安全 | 3-3.5%预警 | ≥3.5%高危
• 两融交易额/A股成交额(MM月DD日)= X.X%
  阈值:<7%保守 | 7-11%中性 | >11%过热
• 股市风险溢价(MM月DD日)= X.XX%
  阈值:<3%高估 | 3-6%中性 |>6%低估
• 沪深300 PE = XX.XX,近5年分位点 XX.X%

━━━ 财经要闻 ━━━
【1】(标题)|✅利好/❌利空/⚠️中性 对A股影响
  点评:(≤50字)
【2】...(**≤7条**,每条格式固定,点评≤50字)

━━━ 今日操作建议 ━━━
【大盘研判】(2-3句)
【操作建议】
1. 【板块/策略】(期限):具体建议
2. 【板块/策略】(期限):...
【风险提示】(1-3条)

⚠️ 仅供参考,不构成投资建议。股市有风险,投资需谨慎。

财经周末版(cron 触发后 LLM 生成)

📰 【财经周末版】{周六日期} + {周日日期}

━━━ 一周情绪轨迹(5 个交易日,来源:收盘小结 + 晚报)━━━

【1. 市场短期情绪】
• 量化情绪打分:周一XX → 周二XX → 周三XX → 周四XX → 周五XX
• 整体走势:[升温 / 降温 / 震荡]
• 解读:{1 句}

【2. 杠杆率】
• 两融余额(亿元):周一X → 周二X → ... → 周五X(周变动 ±X)
• 两融余额 / A股流通市值:周一X.XX% → ... → 周五X.XX%
  阈值:<2.5%保守 | 2.5-3.5%中性 | >3.5%高危
• 解读:{1 句}

【3. 估值水平】
• 沪深300PE:周一X.XX → ... → 周五X.XX
• 近5年分位点:周一X.X% → ... → 周五X.X%
• 股市风险溢价(ERP):周一X.XX% → ... → 周五X.XX%
  阈值:<3%高估 | 3-6%中性 | >6%低估
• 解读:{1 句}

【4. 市场预期】
• IF基差:周一X点 → ... → 周五X点(贴水/升水/扩深/收窄)
• 解读:{1 句}

━━━ 数据规则(防错)━━━
1. **两融比例单日跳变 >0.5%**(如 6/3 的 4.34% 异常)→ 标 ⚠️ 异常,沿用前日值,末尾风险提示单列说明
2. **缺失数据**用 ❌ 占位(如 6/2 IF 基差),禁止用"未公布""暂缺"等模糊词
3. **T-1 数据标注**:两融/PE/ERP 是前一交易日数据,模板已隐含(如周五的两融来自周四)
4. **数字必须从历史报告 MD 读取**(/workspace/projects/A股报告系统/reports/ 下的 收盘小结_YYYYMMDD.md + 晚报_YYYYMMDD.md),禁止编造任何数字(含"约""大约"等模糊词)

━━━ 整体市场情绪研判 ━━━
情绪指标总结 | 核心驱动因素 | 当前风险点 | 下周操作参考

⚠️ 仅供参考,不构成投资建议。

定时任务(cron)

7 个 cron 任务(A 股 6 任务 + 每周 Skill 复盘 1 任务)的完整 schedule / repeat / deliver / prompt 字段集中在以下两处真相源:

  • 生产配置(OpenClaw 读)~/.hermes/cron/jobs.json
  • 人类可读镜像(git track)cron_jobs/cron_mirror.json

SKILL.md 不再重复列 cron 表达式(v3.1.5 清理)—— 一处变→多处忘改是 v3.0 之前的痛点。

快速概览:

任务调度类型
------------------
A股晨报生成并推送周一至五 08:00LLM 驱动型(template: templates/morning.json
A股晚报生成并推送周一至五 20:00LLM 驱动型(template: templates/evening.json
A股收盘小结周一至五 15:30独立脚本(mirror: close_summary
A股盘中预警周一至五 09:00-14:55 每 5 分钟独立脚本(mirror: intraday
A股周末要闻生成并推送周日 20:00LLM 驱动型(template: templates/weekend.json
每周 Skill 复盘周日 18:00skill 自审
A股IPO周报周六 10:00独立脚本(mirror: ipo_report

安装与验证

配置完 cron 后,按以下顺序逐一检查:

Step 1:密钥检查

权威密钥白名单表在 ## 密钥白名单原则 段(每个脚本需哪些 env 变量)。

快速检查 4 个全局 env 变量是否就位:

# 应输出 4 行非空
for key in WECOM_WEBHOOK_KEY IWENCAI_API_KEY MX_APIKEY TUSHARE_TOKEN; do
  grep "^${key}=" /workspace/.env && echo "  ✅ $key"
done

未配齐会怎样: 脚本在 except 块内捕获缺失,会 notify_failure() 发预警 + exit 1(v3.1.0 修复链),不会静默继续。

> 注意send_evening_report.py 的"财经要闻"和"明日操作建议"两个区块依赖 cron 中的 LLM 步骤生成,不是脚本自己能产出的。若未配置对应 cron task,这两个区块永远为空,这是设计预期,不是 bug。

Step 2:依赖检查

# 检查 akshare
python3 -c "import akshare; print('akshare', akshare.__version__)"

# 检查 tushare(IPO周报需要)
python3 -c "import tushare; print('tushare OK')"

# 检查 hithink-sector-selector CLI
python3 /workspace/skills/hithink-sector-selector/scripts/cli.py --help | head -3

Step 3:Cron 任务检查

跑护栏脚本一次性验证 4 端一致性(templates ↔ cron_mirror ↔ jobs.json ↔ SKILL.md):

python3 /root/.hermes/skills/A-stock-report/scripts/check_consistency.py
# 预期:✅ 全部 4/4 项通过,exit=0

不要再用"❌手对表"逐行核对——v3.1.5 之前 SKILL.md 这里有 7 行"应存在 ✅"表,靠人记得跑 1 个命令 + 7 行眼睛对——v3.1.5 改用护栏脚本机械检查,杜绝漂移。


Cron 任务配置指引

6 个任务分两类:

  • LLM 驱动型(3 个):晨报 / 晚报 / 财经周末版 — prompt 外置于 templates/,由 scripts/skill_dispatcher.py 读取注入 LLM,LLM 解读后调脚本落地推送。
  • 独立脚本型(3 个):收盘小结 / 盘中预警 / IPO 周报 — 无需 LLM,调度配置外置于 cron_jobs/,由 OpenClaw gateway 直接 source .env && python3 ... 跑脚本。盘中预警为每 5 分钟一次高频任务(必须无 LLM 介入)。

> 为什么用文件中转(LLM 型)? cron prompt 在独立 session 运行,无法直接将变量传给后续脚本。通过写入约定路径的文件,脚本读取后注入报告模板,实现解耦。

> 🛡️ 4 端一致性护栏(v3.1.5+):本 skill 有 4 端真相 — templates/(LLM 调度模板,机器读) / cron_jobs/cron_mirror.json(生产 cron 镜像,人读) / ~/.hermes/cron/jobs.json(生产 cron 真实配置,OpenClaw 读) / SKILL.md(文档)。改任何一端都可能造成幽灵模板(v3.1.3 的教训)。修改以下任一文件后必须跑 python3 scripts/check_consistency.py(exit 0=全过,exit 1=有错误):

> - templates/*.json(3 个 LLM 任务 prompt)

> - cron_jobs/cron_mirror.json(3 个独立脚本任务)

> - ~/.hermes/cron/jobs.json 中 3 个独立脚本任务的 prompt

> - SKILL.md 任务清单段(### N. 任务名(详见 ...) 格式)

>

| 报错时用 --fix-hint 看修复建议。脚本会检查 A) templates ↔ dispatcher 任务集、B) cron_mirror ↔ jobs.json prompt 字字一致、C) SKILL.md 引用真实存在、D) dispatcher 任务不在 mirror 出现、E) SKILL.md 主体无硬编码 cron 表达式 / .env 路径 / source+send 一行命令(v3.1.6+ E 段)。

1. 晨报(详见 templates/morning.json)

> Prompt 模板外置于 templates/morning.json(v3.0 架构),由 scripts/skill_dispatcher.py 读取并注入。

2. 收盘小结(详见 cron_jobs/cron_mirror.json#close_summary)

> 独立脚本模式 —— 无需 LLM,调度配置外置于 cron_jobs/cron_mirror.json(v3.0 架构;v3.1.4 起 3 任务合为单文件,close_summary 为 tasks.close_summary 节点),由 OpenClaw gateway 直接读取。脚本路径见 json 内 prompt 字段。

3. 晚报(详见 templates/evening.json)

> Prompt 模板外置于 templates/evening.json(v3.0 架构),由 scripts/skill_dispatcher.py 读取并注入。

4. 盘中预警(详见 cron_jobs/cron_mirror.json#intraday)

> 独立脚本模式 —— 无需 LLM,调度配置外置于 cron_jobs/cron_mirror.json(v3.0 架构;v3.1.4 起 3 任务合为单文件,intraday 为 tasks.intraday 节点),由 OpenClaw gateway 直接读取。脚本路径见 json 内 prompt 字段。v3.1.3 之前该任务的模板曾错误地放在 templates/intraday.json(LLM 驱动型设计),但实际 cron 早已是独立脚本模式;v3.1.3 已删除幽灵模板、归档到 cron_jobs/。

5. 财经周末版(详见 templates/weekend.json)

> Prompt 模板外置于 templates/weekend.json(v3.0 架构),由 scripts/skill_dispatcher.py 读取并注入。

6. IPO周报(详见 cron_jobs/cron_mirror.json#ipo_report)

> 独立脚本模式 —— 无需 LLM,调度配置外置于 cron_jobs/cron_mirror.json(v3.0 架构;v3.1.4 起 3 任务合为单文件,ipo_report 为 tasks.ipo_report 节点),由 OpenClaw gateway 直接读取。脚本路径见 json 内 prompt 字段。

验证 3:端到端 cron 验证

实际 cron 跑过后,检查:

  1. 推送消息中"财经要闻"和"明日操作建议"区块是否有内容
  2. 内容日期是否与当天日期一致
  3. 报告文件名是否为当天日期

若发现为空,回到"验证 2"确认内容文件是否成功写入。

IPO周报数据来源

报告模块接口来源用途
---------------------------
一、排队情况ak.stock_register_kcb/cyb/bj/sh/sz东方财富注册制审核公示各板块在审排队数+状态分布
二、本周期上会ak.stock_ipo_review_em东方财富 IPO审核动态上会企业列表
三、本周期获批ak.stock_ipo_declare_em证监会公示获发行批文(注册/核准)
四、终止撤回ak.stock_ipo_declare_em证监会公示本周终止企业
五、下周期上会ak.stock_ipo_review_em东方财富 IPO审核动态下周期上会计划
六、新股上市ak.stock_xgsr_ths同花顺上市日期+发行价+首日涨跌幅

> 注:六、新股上市仅用同花顺 stock_xgsr_ths,一次调用同时获取上市信息+发行价+首日涨跌幅,无需额外调用证监会 CNINFO 接口。


常见问题

Q1:生成后如何做质量检查?

A:生成报告后必须检查以下四项:

  1. 日期检查:报告第一行日期 == 文件名日期 == 当天实际日期(三者必须一致)
  2. 星期检查:报告中的日期字符串(YYYY年MM月DD日(周X))与文件名中的日期 weekday() 对应周一~周五正确
  3. 数据完整性
    • 收盘小结:指数行情、情绪打分、板块资金流、风险偏好、操作建议五段落齐全
    • 晨报/晚报:涨跌停统计、风险偏好、操作建议三段落齐全
  4. 时效性:数据陈旧(>2个交易日)时在报告内注明

Q2:如何判断涨停情绪?

A:涨停情绪由第4节打分函数统一评分(满仓风险系数 × 涨停家数权重 + 涨跌停比 × 炸板率综合得出 0-100 分),不再单独使用 emoji 分级。报告生成后通过"质量检查第3项"确认段落齐全即可。

  • 参考:情绪总分 ≥ 70 → 🟢做多;≥ 55 → 🟡偏多;≥ 40 → ⚪分歧;≥ 25 → 🟠偏空;< 25 → 🔴冰点

Q3:炸板率如何评分?

A:炸板率由第4节打分函数中的 _sc(exp_rate, 40, 10) 公式映射到 0-100 分,阈值区间 [40%, 10%],炸板率越低得分越高。

  • 参考:情绪总分 ≥ 70 → 🟢做多;≥ 55 → 🟡偏多;≥ 40 → ⚪分歧;≥ 25 → 🟠偏空;< 25 → 🔴冰点

Q4:两融数据比当天少一天?

A:正常现象。两融数据在当天收盘后约 1~2 小时后更新,晚报/收盘小结取到的是上一交易日数据。

Q5:主力净流入 > 500亿时显示什么?

A:打印预警信息 ⚠️ 主力净流出-XXX亿,超大单+大单砸盘XXX亿,异常大额出逃,注意风险,但保留真实数值(不重置为0)。

Q6:定时任务重复推送?

A:已内置文件锁机制的脚本会拒绝并发执行。当前各脚本锁机制如下:

  • 晚报:send_evening_report.py/tmp/a_stock_evening.lock(exists 检测 + sys.exit(0),finally 解锁)
  • 盘中预警:send_intraday_alert.py/tmp/a_stock_intraday.lock(同上)
  • 周末要闻:send_weekend_news.py/tmp/a_stock_weekend.lock(同上)
  • IPO周报:send_ipo_report.py/tmp/a_stock_ipo.lock(原子 os.O_EXCL 创建,更严格,finally 解锁)
  • 晨报:send_morning_report.py/root/.hermes/skills/A-stock-report/scripts/.morning_report_lock.json(JSON 文件,内容含 datestatus,检查当日是否已成功推送后才允许重复执行)

Q7:报告内容日期和文件名不对应?

A:收盘小结文件名=报告日期;晚报文件名=生成当天日期,内容日期=上一交易日;周末要闻以内容里两融余额标注的日期为 key,与收盘小结文件名日期对齐合并。

Q8:如何使用 --date 指定历史日期?

A:收盘小结和晚报均支持 --date YYYY-MM-DD,如 python3 send_close_summary.py --date 2026-04-13。晨报不支持指定历史日期。

版本历史

共 14 个版本

  • v3.3.1 当前
    2026-06-13 17:45
  • v3.2.5
    2026-06-11 16:35
  • v2.0.8
    2026-06-07 11:51
  • v2.0.4
    2026-06-06 06:00
  • v2.0.3
    2026-06-04 12:27 安全 安全
  • v2.0.2
    2026-06-03 12:24 安全 安全
  • v2.0.1
    2026-06-01 20:10 安全 安全
  • v1.10.4
    2026-05-25 16:13 安全 安全
  • v1.10.3
    2026-05-23 22:40 安全 安全
  • v1.8.6
    2026-05-23 15:42 安全 安全
  • v1.8.0
    2026-05-21 22:56 安全 安全
  • v1.5.1
    2026-05-21 12:31 安全
  • v1.5.0
    2026-05-20 04:36 安全
  • v1.3.0
    2026-05-11 04:22 安全 安全

安全检测

腾讯云安全 (Keen)

队列中

腾讯云安全 (Sanbu)

队列中

🔗 相关推荐

developer-tools

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 672 📥 324,861
ai-intelligence

self-improving agent

pskoett
捕获经验教训、错误及修正内容,以实现持续改进。适用于以下场景:(1)命令或操作意外失败;(2)用户纠正Claude(如“不,那不对……”“实际上……”);(3)用户请求的功能不存在;(4)外部API或工具出现故障;(5)Claude发现自身
★ 4,070 📥 803,994
ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,369 📥 319,536