Skill: cookfish1979/a-stock-report (version 2.0.0)

--- name: A-stock-report description: "A股数据驱动型报告自动生成与推送系统，支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末要闻。内置投资者情绪打分（6维度，满分100）与AI后市展望。" version: 2.0.0 --- # A股报告系统 > A股数据驱动型报告自动生成与推送系统，支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末要闻 --- ## 版本历史（Changelog） ### v2.0.0 — 架构重构 **重大变化：脚本角色重新划分为「采集」与「发送」两层** | 变化 | 说明 | |------|------| | 晚报双脚本拆分为采集+推送 | `collect_evening_data.py`（采集+写JSON/MD） + `send_evening_report.py`（读文件+推送），原来晚报PE等数据在send里直接调问财，现改为采集脚本统一用akshare获取 | | 晨报/周末要闻数据采集独立 | `collect_morning_data.py` 独立采集外围市场数据，不再依赖 send 脚本内部逻辑 | | 问财接口权限精确化 | 白名单原则落地：仅实际调用的脚本才加载 `IWENCAI_API_KEY`；无需问财的脚本（如 `send_morning_report.py`、`collect_evening_data.py`）不加载 | | 数据源更新 | 全市场成交额/流通市值来源从「同花顺问财」改为 `akshare stock_zh_a_spot_em()` 实时行情 | | 白名单表去重修正 | 原 SKILL.md 有重复行+错误脚本名（`TUSHARE_API_KEY` 应为 `TUSHARE_TOKEN`），已全部对齐实际脚本 | **v1.x 历史版本功能未变，仅文档同步。** --- ## 安全配置（必读） 所有外部密钥均通过环境变量注入，**禁止硬编码**。密钥文件 `/workspace/.env` 由脚本自动加载（环境变量优先）。 ### 密钥白名单原则 每个脚本**仅加载本任务实际需要的变量**，不得全量注入 `.env` 所有密钥。 | 脚本 | 必需密钥 | |------|---------| | `collect_morning_data.py` | `TUSHARE_TOKEN`, `IWENCAI_API_KEY` | | `send_close_summary.py` | `WECOM_WEBHOOK_KEY`, `IWENCAI_API_KEY`, `TUSHARE_TOKEN` | | `collect_evening_data.py` | `WECOM_WEBHOOK_KEY`（数据采集通过 akshare，无需问财）| | `send_evening_report.py` | `WECOM_WEBHOOK_KEY`, `IWENCAI_API_KEY`（PE/分位数查询）| | `send_morning_report.py` | `WECOM_WEBHOOK_KEY`（仅推送，无需问财）| | `send_intraday_alert.py` | `WECOM_WEBHOOK_KEY` | | `send_ipo_report.py` | `WECOM_WEBHOOK_KEY` | | `send_weekend_news.py` | `WECOM_WEBHOOK_KEY`, `IWENCAI_API_KEY` | ### 问财 API 问财查询（涨停家数、A50期货、VIX等）统一在进程内通过 `_iwencai_query()` 函数直连 OpenAPI，**不使用 subprocess 外部调用**，避免通过 `IENV` 泄露环境变量给子进程。 ### 自动推送说明 配置 `WECOM_WEBHOOK_KEY` 即表示授权自动推送报告至企业微信。推送是自动化报告系统的组成部分，非人工干预。 | 密钥 | 环境变量 | 最小权限 | 来源 | |------|---------|---------|------| | 企业微信 Webhook | `WECOM_WEBHOOK_KEY` | 仅发送（只写） | 微信企业版 → 应用 → Webhook | | 同花顺问财 API Key | `IWENCAI_API_KEY` | 只读查询 | 同花顺 i问财 SkillHub | | 妙想 API Key | `MX_APIKEY` | 只读查询 | 同花顺 i问财 | | Tushare Token | `TUSHARE_TOKEN` | 只读查询 | Tushare Pro | `.env` 文件格式示例： ```bash WECOM_WEBHOOK_KEY=c4a1cd60-254e-4612-b365-c701482ae98c IWENCAI_API_KEY=*** MX_APIKEY=*** TUSHARE_TOKEN=*** ``` --- ##快速开始 ```bash #收盘小结（独立脚本，直接推送，无需LLM生成内容） source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_close_summary.py source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_close_summary.py --date2026-04-13 #晚报（统一采集脚本，直接采集 +推送） source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/collect_evening_data.py source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/collect_evening_data.py --date2026-04-13 source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/collect_evening_data.py --dry-run #晚报（兼容旧脚本，独立推送） source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_evening_report.py #晨报（需LLM先生成内容，写入 /tmp/morning_report_content.txt） source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_morning_report.py #财经周末要闻（需LLM先生成内容，写入 /tmp/weekend_news_content.txt） source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_weekend_news.py source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_weekend_news.py --extract-only # 仅提取情绪数据 # IPO周报 source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_ipo_report.py #盘中预警 source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_intraday_alert.py ``` --- ## 执行模式 **收盘小结、晚报、晨报** 采用不同模式： - **收盘小结**：单一 Python 脚本，内置全部逻辑（取数 → 打分 → 生成报告 → 推送），cron 直接触发，无需 LLM 生成内容。 **晨报、晚报、周末要闻** 采用**两段式**： - **第一段**（cron prompt）：调用 dispatcher 生成带真实日期的 prompt，写入约定路径 - **第二段**（同一 session）：读取 prompt 文件 → LLM 执行 → 写入内容文件 → 调用推送脚本 这样 SKILL.md 中的 prompt 模板只含通用占位符，日期在运行时由 dispatcher 动态注入。 --- ## 数据来源 | 数据 | 来源 | 接口 | |------|------|------| | 六大指数（点位/涨跌幅） | 腾讯实时 API | `qt.gtimg.cn` | | 全市场成交额 | akshare | `stock_zh_a_spot_em()` 全量实时行情 | | 全市场流通市值 | akshare | `stock_zh_a_spot_em()` 全量实时行情 | | 涨跌停家数/炸板率 | 同花顺问财 | `今日涨停家数 跌停家数 炸板家数`（1次查询） | | 全市场主力净流入 | 东方财富 RPT_MARKET_CAPITALFLOW | INDEX_CODE="800000.EI"，SORT BY TRADE_DATE DESC 取第1行，BONDTYPE="A股" | | 行业板块涨跌（前5/后5） | hithink-sector-selector | `今日行业板块涨幅前10` / `今日行业板块跌幅前10` | | 行业主力资金流 Top | hithink-sector-selector | `近5日主力净流入前10行业板块` | | 两融余额/两融交易额 | AKShare | `macro_china_market_margin_sh/sz`（仅晚报使用） | | IF期货基差 | 新浪 nf_IF0 实时接口（今日优先）+ AKShare 兜底 | hq.sinajs.cn / akshare futures_main_sina | --- ## 文件名日期规则 | 报告 | 文件名日期取值 | |------|--------------| | 收盘小结 | `--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` | --- ## 报告模板 ### 晨报 ``` 📰 【股市晨报】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 生成） ``` 📰 【财经周末要闻】过去48小时 ━━━ 六条重要财经要闻 ━━━ 【1】（标题）→ ✅利好/❌利空 逻辑：... 交易风险提示：... ━━━ 一周情绪轨迹 ━━━ • 涨停家数趋势：周一X家 → 周二X家 → ... → 周五X家 • 两融余额/A股流通市值：周一X.XX% → ... → 周五X.XX% • 两融交易额占比：周一X.X% → ... → 周五X.X% • 量化情绪打分：周一XX分 → ... → 周五XX分 • 整体趋势：[升温/降温/震荡] ━━━ 整体市场情绪研判 ━━━ 情绪指标总结 | 核心驱动因素 | 当前风险点 | 下周操作参考 ⚠️ 仅供参考，不构成投资建议。 ``` --- ## 定时任务（cron） | 任务 | cron 表达式 | 触发时间（北京时间） | 说明 | |------|-----------|-------------------|------| | A股晨报生成并推送 | `0 8 * * 1-5` | 周一至五 08:00 | AI内容生成 → 推送（单cron） | | A股晚报生成并推送 | `0 20 * * 1-5` | 周一至五 20:00 | AI内容生成 → 推送（单cron） | | A股收盘小结 | `30 15 * * 1-5` | 周一至五 15:30 | 数据采集 → 推送 | | A股盘中预警 | `*/5 9,10,11,13,14 * * 1-5` | 周一至五 09:00-11:55 / 13:00-14:55 | 实时监控 → 推送 | | A股周末要闻生成并推送 | `0 20 * * 0` | 周日 20:00 | AI内容生成 → 推送（单cron） | | 每周 Skill 复盘 | `0 18 * * 0` | 周日 18:00 | skill 自审 | | A股IPO周报 | `0 10 * * 6` | 周六 10:00 | 数据采集 → 推送 | --- ## 安装与验证 配置完 cron 后，按以下顺序逐一检查： ### Step 1：密钥检查 | 报告类型 | 必需密钥 | 最低权限 | 检查命令 | |---------|---------|---------|---------| | 收盘小结 | `WECOM_WEBHOOK_KEY` | 仅发送 | `grep WECOM_WEBHOOK_KEY /workspace/.env` | | 晚报 | `WECOM_WEBHOOK_KEY` | 发送 | `grep WECOM_WEBHOOK_KEY /workspace/.env` | | 晨报 | 同晚报 | 同上 | 同上 | | 财经周末要闻 | 同晚报 | 同上 | 同上 | | IPO周报 | `TUSHARE_TOKEN` + `WECOM_WEBHOOK_KEY` | 查询+发送 | `grep TUSHARE_TOKEN /workspace/.env` | | 盘中预警 | 无外部依赖 | — | 无需检查 | > **注意**：`send_evening_report.py` 的"财经要闻"和"明日操作建议"两个区块**依赖 cron 中的 LLM 步骤生成**，不是脚本自己能产出的。若未配置对应 cron task，这两个区块**永远为空**，这是设计预期，不是 bug。 ### Step 2：依赖检查 ```bash # 检查 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 任务检查 运行 `mcp_cronjob list` 确认已配置的 cron 与计划运行的任务一致： | 应存在 | 当前状态 | |--------|---------| | A股晨报生成并推送（08:00） | ✅ | | A股晚报生成并推送（20:00） | ✅ | | A股收盘小结（15:30） | ✅ | | A股盘中预警（交易时段） | ✅ | | A股周末要闻生成并推送（周日 20:00） | ✅ | | 每周 Skill 复盘（周日 10:00） | ✅ | | A股IPO周报（周六 10:00） | ✅ | --- ## Cron 任务配置指引 所有 LLM 驱动型报告采用**单 cron 模式**：prompt 中先由 LLM 生成内容写入文件，再在同一 session 内调用脚本落地推送。 > **为什么用文件中转？** cron prompt 在独立 session 运行，无法直接将变量传给后续脚本。通过写入约定路径的文件，脚本读取后注入报告模板，实现解耦。 ### 1. 晨报（周一至五 08:00 北京时间） ```json { "name": "A股晨报生成并推送", "schedule": "0 8 * * 1-5", "repeat": "forever", "deliver": "local", "skills": [ "a-stock-report" ], "prompt": "请加载 a-stock-report skill，然后执行以下任务：\n\n1. 调用晨报数据采集脚本获取结构化数据：\n source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/collect_morning_data.py\n \n 采集内容：道琼斯/标普500/纳斯达克/VIX点位涨跌幅、恒生指数/A50期货、WTI原油/现货黄金价格\n\n2. 读取采集结果 /tmp/morning_data.json，结合今日财经要闻，用 batch_web_search 搜索（6-10条）：\n - \"A股重要财经要闻 宏观政策 [今日日期]\"\n - \"A股板块异动 热点题材 [今日日期]\"\n \n ⚠️ 关键要求：所有数据必须为精确数字，不得出现\"约\"、\"约XX\"、\"约XX%\"等模糊表述\n ⚠️ **字数限制：全文不超过2000字，每条要闻点评控制在50字以内，不超过7条。**\n\n3. 将结构化数据 + 财经要闻 合并渲染为完整晨报，写入 /tmp/morning_report_content.txt\n 格式严格遵循 SKILL.md 中晨报模板（含隔夜全球市场、财经要闻、操作建议三部分）\n4. 调用晨报推送脚本完成推送：\n source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_morning_report.py\n\n5. 完成后打印\"✅ 晨报已完成：数据采集、内容生成并推送微信\"" } ``` ### 3. 晚报（周一至五 20:00 北京时间，12:00 UTC） ```json { "name": "A股晚报生成并推送", "schedule": "0 12 * * 1-5", "repeat": "forever", "deliver": "local", "skills": [ "a-stock-report" ], "prompt": "请加载 a-stock-report skill，然后执行以下任务：\n\n1. 调用晚报数据采集脚本，将结果写入约定路径：\n source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/collect_evening_data.py\n \n 采集内容：六大指数、亚太股市、两融余额、两融比例、沪深300 PE分位数、股市风险溢价（ERP）等结构化数据，输出 JSON + 晚报 Markdown。\n\n2. 读取采集结果文件 /tmp/evening_data.json，结合采集的晚报 Markdown，用 batch_web_search 搜索今日收盘相关财经要闻（6-8条）：\n - \"A股重要财经要闻 宏观政策 [今日日期]\"\n - \"A股板块异动 热点题材 [今日日期]\"\n\n **⚠️ 关键要求：搜索结果必须包含具体数字，所有数据不得出现\"约\"、\"约XX\"、\"约XX%\"等模糊表述，必须填入精确值。**\n ⚠️ **字数限制：全文不超过2000字，每条要闻点评控制在50字以内，不超过7条。**\n\n3. 将结构化数据 + 财经要闻 合并渲染为完整晚报，写入 /tmp/evening_report_content.txt。\n 格式应严格遵循 SKILL.md 中晚报模板：\n - 六大指数/亚太股市/两融数据 等结构化数据直接复用采集脚本输出\n - [财经要闻] 区块由 LLM 搜索生成（≤7条）\n - [今日操作建议] 区块由 LLM 综合分析生成\n\n4. 调用晚报推送脚本完成推送：\n source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_evening_report.py\n5. 完成后打印\"✅ 晚报已完成：数据采集、内容生成并推送微信\"" } ``` ### 4. 盘中预警（周一至五 09:30-11:35 / 13:00-14:55，每5分钟） ```json { "name": "A股盘中预警", "schedule": "*/5 1,2,3,5,6,7 * * 1-5", "repeat": "forever", "deliver": "local", "skills": [ "A-stock-report" ], "prompt": "请加载 A-stock-report skill，然后执行以下任务：\n\n1. 采集最新行情数据（盘中行情每隔约5分钟检查一次）：\n - 上证指数、创业板指 实时点位和涨跌幅（via hithink）\n - 沪深300主力净流入（via datacenter.eastmoney）\n - IF沪深300期货当月连续 实时数据（via baostock）\n - 炸板率（via东方财富涨停板数据）\n\n2. 判断是否触发预警条件，**符合以下任一条件即推送预警消息**：\n\n 【预警触发条件】\n a) IF当月连续涨幅 > 1.5%（期货大幅升水，可能预示指数大幅高开）\n b) 主力净流入 > 200亿元（今日已流入规模，via东方财富）\n c) 上证或创业板指 涨幅 > 2%（情绪过热预警）\n d) 炸板率 > 40%（涨停炸板率异常高，短线情绪极度不稳定）\n\n3. 若触发预警，调用推送脚本发送预警消息：\n source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_intraday_alert.py [预警类型] [当前涨跌幅]\n 同时打印\"✅ 盘中预警已推送：[预警类型] [数值]\"\n\n4. 若未触发预警，打印\"✅ 盘中预警检查完成，当前无异常\"（不推送消息）" } ``` ### 5. 财经周末要闻（周日 20:00 北京时间） ```json { "name": "A股周末要闻生成并推送", "schedule": "0 12 * * 0", "repeat": "forever", "deliver": "local", "skills": [ "a-stock-report" ], "prompt": "请加载 a-stock-report skill，然后执行以下任务：\n\n1. 用 batch_web_search 搜索以下内容：\n - \"A股周末要闻 政策动态 [本周末日期范围]\"（至少8条，来源权威媒体）\n - \"美股收盘 本周回顾 道琼斯 纳斯达克 标普500 [本周]\"（复盘本周美股走势）\n - \"A股本周回顾 上证指数 创业板指 本周涨幅\"（复盘本周A股行情）\n - \"下周A股预期 下周展望 下周策略 [YYYY年MM月]\"（如有券商展望）\n - \"美股期货盘前 纳斯达克期货 A50期货 [今日]\"（为下周一定调）\n\n ⚠️ 关键要求：搜索结果必须包含精确数字，所有数据不得出现"约"、"约XX"、"约XX%"等模糊表述，必须填入精确值。 ⚠️ **字数限制：全文不超过2000字，逻辑分析从简，每条要闻控制在2-3句以内。** 2. 按以下模板严格格式化内容，写入 /tmp/weekend_news_content.txt：\n📰 【财经周末要闻】[YYYY年MM月DD日（周X）]\n\n━━━ 周末要闻摘要 ━━━\n【1】（标题）｜✅利好/❌利空/⚠️中性 对A股影响\n 摘要：（2-3句，概括事件并分析影响）\n 来源：XX媒体\n【2】（标题）｜...\n（8-12条，顺序编号，每条格式固定）\n\n━━━ 本周复盘 ━━━\n【美股本周】（道琼斯：XXXXX点，本周+X.XX%；纳斯达克：XXXXX点，本周+X.XX%；标普500：XXXXX点，本周+X.XX%）\n【A股本周】（上证：XXXX.XX点，本周+X.XX%；创业板：XXXX.XX点，本周+X.XX%）\n【大宗商品】（黄金：XXXX美元/盎司，本周+X.XX%；原油：XXX美元/桶，本周+X.XX%）\n\n━━━ 下周展望 ━━━\n【外围市场】美股期货（A50/纳指期货）当前表现预判下周基调\n【A股预判】综合周末消息面，展望下周A股可能走势\n【关注板块】（2-3个板块+逻辑简述）\n\n⚠️ 仅供参考，不构成投资建议。股市有风险，投资需谨慎。\n\n3. 调用周末要闻推送脚本：source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_weekend_news.py\n4. 完成后打印\"✅ 周末要闻已完成：内容生成并推送微信\"" } ``` 内容文件格式应严格遵循 SKILL.md 中对应模板的 `[财经要闻]` / `[操作建议]` 分段标记。 ### 6. 收盘小结（周一至五 15:30 北京时间） > 收盘小结为**独立脚本模式**，无需 skill 和 LLM 生成内容，直接调用脚本即可。 ```json { "name": "A股收盘小结", "schedule": "30 7 * * 1-5", "repeat": "forever", "deliver": "local", "prompt": "source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_close_summary.py" } ``` ### 7. IPO周报（周六 10:00 北京时间） > IPO周报为**独立脚本模式**，无需 skill 和 LLM 生成内容，直接调用脚本即可。 ```json { "name": "A股IPO周报", "schedule": "0 2 * * 6", "repeat": "forever", "deliver": "local", "prompt": "source /workspace/.env && python3 /workspace/skills/A-stock-report/scripts/send_ipo_report.py" } ``` ### 验证 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` → `/workspace/skills/A-stock-report/scripts/.morning_report_lock.json`（JSON 文件，内容含 `date` 和 `status`，检查当日是否已成功推送后才允许重复执行） **Q7：报告内容日期和文件名不对应？** A：收盘小结文件名=报告日期；晚报文件名=生成当天日期，内容日期=上一交易日；周末要闻以内容里两融余额标注的日期为 key，与收盘小结文件名日期对齐合并。 **Q8：如何使用 `--date` 指定历史日期？** A：收盘小结和晚报均支持 `--date YYYY-MM-DD`，如 `python3 send_close_summary.py --date 2026-04-13`。晨报不支持指定历史日期。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)