一键生成A股行情分析微信公众号文章。融合DeepEar实时金融信号、财联社/雪球实时新闻、akshare/yfinance行情数据,按vibe-writer-pro风格输出适合微信公众号发布的行情分析稿件。触发关键词:写A股分析、生成行情报告、写今日复盘、写明日展望、写公众号股票分析、今日行情分析、收盘复盘、A股晚报、微信股票文章、生成行情文章。Platform: Claude Code (CLI) only — requires Python, network access.
Resources
3Install
npx skillscat add ma2ong/stock-wechat-writer Install via the SkillsCat registry.
Stock WeChat Writer
这个 skill 的目标:把当天盘面事实核实清楚,写出一篇有自己判断、中国公众号读者愿意看完并转发的复盘文章。
不是拼数据流水账,是写一个有立场的人对今天市场的理解。
触发任务
- 写今天的A股复盘 / 收盘复盘 / A股晚报
- 生成今天的行情分析文章 / 公众号股票文章
- 写盘后总结 / 收评 / 明日展望
- 做一篇公众号股票复盘(含封面图)
- 补封面并发到草稿箱
Step 1:确认任务边界
先明确四件事,不明确不进入下一步:
| 字段 | 说明 |
|---|---|
| 市场 | A股 / 港股 / 美股 |
| 时点 | 盘中 / 收盘后 / 次日早盘前 |
| 产物 | 正文 / HTML / 封面 / 草稿箱推送 |
| 日期 | 必须明确到自然日,不写"今天" |
Step 2:实时行情核对
原则:先核对,再写文章。事实卡片写不清楚,就不进入写作阶段。
2a. 行情硬数据(akshare)
import akshare as ak
# 指数行情
df_index = ak.stock_zh_index_daily(symbol="sh000001") # 上证
# 两市成交额
df_vol = ak.stock_market_activity_legu()
# 行业板块排行
df_sector = ak.stock_board_industry_summary_ths()关键字段:指数收盘点位、涨跌幅、两市成交额、上涨/下跌家数、板块涨跌排行。
2b. 实时财经新闻(opencli)
# 雪球热议
opencli xueqiu search "A股收盘" --limit 10
# 财联社要闻
opencli cailian --category hot --limit 15
# 雪球指数讨论
opencli xueqiu stock 000001 --comments2c. 市场信号(alphaear skill)
触发 alphaear-signal-tracker skill 获取 DeepEar 高置信度信号,用于补充主线解释,不替代硬数据。
2d. 港股/美股映射(yfinance)
import yfinance as yf
# 恒生指数、纳斯达克、海外映射个股
yf.download(["^HSI", "^IXIC", "BABA"], period="1d")2e. 整理事实卡片
日期:YYYY-MM-DD
数据截点:收盘后 / 盘中 HH:MM
指数:
- 上证: 点(+/- %)
- 深成指: 点(+/- %)
- 创业板: 点(+/- %)
- 科创50: 点(+/- %)
成交额:
- 今日: 亿
- 昨日: 亿
- 环比:+/- %
市场宽度:
- 上涨家数: 涨停:
- 下跌家数: 跌停:
主线:
- 真正主线:(有成交量支撑、有龙头带动)
- 次强主线:
- 弱势方向:
驱动:
- 新闻催化:(来源:)
- 资金解释:(来源:)
- 海外映射:
情绪与价格:
- 今日最重要消息:(来源:)
- 消息情绪方向:正面 / 负面 / 中性
- 价格实际反应:上涨 / 下跌 / 震荡
- 是否背离:是 / 否(背离时重点分析原因)
信号状态(对比近3-5日):
- 主线信号:强化 / 持平 / 弱化 / 反转
核心结论:
- 今天最值得写的一件事:(用自己的话写出来)关键数字必须双重来源确认。板块涨幅榜第一 ≠ 真正主线,要看成交量和龙头。
详细规则见 references/market-verification.md 和 references/data_sources.md。
2f. 催化可信度闸门(必须执行)
进入写作前,把“为什么今天这样走”的候选原因分成高 / 中 / 低三档:
- 高可信:两个以上可靠来源确认,且盘面有同步响应(成交额、涨停梯队、龙头承接)。
- 中可信:一个可靠来源确认,盘面有局部响应。只能做辅助解释。
- 低可信:单源传闻、社交平台热议、未落地的未来事件。不能做主判断、标题或开头第一段。
如果没有高可信催化,不要硬找故事。优先写资金行为:缩量/放量、市场宽度、板块成交额、涨停梯队、龙头承接。
尤其注意:未来事件(如“明天会见”“即将签约”“据传大单”)必须等盘面验证。没有价格和成交额响应时,只能写“市场在等待验证”,不能写成今天行情的主因。
Step 3:提炼唯一主判断
一篇复盘只保留一个核心判断。多了就变成流水账。
判断从事实卡片里来,不是套句式套出来的。
3a. 趋势推荐闸门(涉及关注标的时必须先过)
推荐池只放当前主线趋势里的标的。低位、超跌、只涨一天、只靠消息刺激的票,不进入推荐池;除非能同时看到明显趋势反转证据,否则正文连提都不要提。
主线必须每天动态筛选,不能固定写某几个方向。CPO、存储、芯片、算电协同、电力、机器人、军工、消费电子、资源等都只是候选;当天谁具备趋势、资金、情绪和图形共振,就写谁。没有趋势确认的方向,即使当天涨幅靠前也不写推荐。
板块命名必须精准。比如“算电协同/电力产业链情绪股”不能写成“红利电力”;大唐发电、华电辽能、华电能源、韶能股份、晋控电力这类连板/情绪股,不能用长江电力、华能水电、中国核电这类防守红利票替代分析。
一只票进入推荐池,至少满足下面 4 条中的 3 条:
- 趋势结构:价格仍在关键均线之上,或回踩后重新站回 5/10/20 日均线;不能只是单日长阳。
- 龙头地位:属于当前强主线的核心票,或能带动同板块跟涨;不能只因涨幅靠前。
- 资金承接:放量上涨、缩量回踩、分时回落有人接;高开低走、放量长上影视为风险信号。
- 情绪位置:板块仍有赚钱效应,核心股没有集体破位;若情绪退潮,先写回避和等待点位。
分析股票走向时必须横向和纵向同时看:
- 横向:同板块核心股强弱、板块梯队、涨停/大跌数量、资金是否从同一方向流入。
- 纵向:近 3-5 日连续性、均线、前高/平台/缺口、量价关系、是否冲高回落。
- 情绪:是否一致高潮、是否高位分歧、妖股/连板股是否断板、亏钱效应是否扩散。
- 资金:主力净流入、成交额排名、主动买盘/卖盘、缩量或放量的位置。
- 指标与图形:5/10/20 日均线、趋势线、平台突破/跌破、长上影/长下影、放量阴线。
写作结论必须落到交易方法:
- 能做:写清楚低吸、回踩、突破确认、仓位和失效条件。
- 不能做:明确写风险,建议暂时回避。
- 等待:写清楚等什么点位、什么信号、什么板块行为出现后再看。
严禁把“前期跌得多 + 今天涨了”写成机会。那是反弹,不是趋势。
公众号正文只写给读者看的市场判断,不暴露内部工作过程。不要把用户要求、写作规则、纠错过程、"我之前写错了"、"以后复盘要..."这类对话内容写进文章。
看完事实卡片,先做两个判断,再写结论:
① 信号连续性(借鉴 alphaear-signal-tracker)
今天相对于近3-5个交易日,主线信号是哪种状态:
| 状态 | 含义 | 对文章的影响 |
|---|---|---|
| 强化(Strengthened) | 同方向、更强,量能放大 | 重点写主线深化,明日可能继续 |
| 持平(Unchanged) | 方向不变,力度差不多 | 重点写支撑因素是否还在 |
| 弱化(Weakened) | 同方向但力度明显下降 | 重点写警示信号,是否到顶 |
| 反转(Falsified) | 方向明显改变 | 重点写切换原因,新旧主线对比 |
把状态写进核心结论里,复盘才有纵向视角,不只是今天单日快照。
② 写出核心结论句
用自己的话写,一句话,不超过20字。检验标准:发给今天持仓的朋友,他会觉得"对,这就是今天最关键的"。句式随行情走,不固定。
Step 4:写作
详细规则见 references/recap-writing-playbook.md 和 references/writing_template.md。
结构不固定,先看当天盘面,再决定写法。
今天是普涨、普跌、主线切换、强趋势分歧、情绪退潮、指数护盘、消息兑现,文章结构都应该不同。不能每天机械写成“指数 → 板块 → 个股 → 明天看什么”的固定模板。
可选结构示例:
- 强趋势分歧日:先写谁还抗住 → 谁开始掉队 → 分歧后看什么确认。
- 主线切换日:先写旧主线为什么失效 → 新主线资金证据 → 明天验证点。
- 情绪退潮日:先写亏钱效应 → 龙头/妖股断板 → 哪些方向必须回避。
- 指数护盘日:先写指数和多数个股背离 → 谁在护盘 → 市场真实强弱。
- 消息兑现日:先写情绪与价格背离 → 资金提前定价 → 后续等待新催化。
今天盘面适合哪种,就用哪种。标题、章节数量、章节顺序都可以变;核心判断必须清楚。
写作要求:
- 开头第一段就给结论,不写"今天市场..."这类导语
- 每段只表达一个意思
- 板块、个股、成交额都服务于核心判断,不单独列数据
- 有自己的立场,不只描述发生了什么
- 每篇正文最多围绕 2-4 个关键方向展开;无关方向不凑数
- 文章风格跟随盘面:高潮日可以紧张,分歧日要谨慎,普涨日要拆真假,退潮日要直接提示风险
- 参考历史好稿的判断方式,不复制固定结构和固定措辞
- 可以把
0514 强趋势还在,但跟风票开始掉队当参考例子,但只学它的优点:结论直接、少废话、围绕强趋势、用条件句给交易计划。不要照搬它的格式:不固定“CPO/算电/存储/芯片”,不固定四段结构,不固定“明天怎么做”模板。 - 每天先判断盘面类型:强趋势分歧、主线切换、情绪退潮、指数护盘、消息兑现、缩量震荡,然后按当天盘面重组文章。
- 如果当天只有一个核心矛盾,就只写一个;如果当天多主线分歧,再拆 2-4 个方向。没有好机会时,文章可以短,重点写风险和等待条件。
Step 5:标题选择
标题不是总结全文,是放大核心矛盾、制造信息落差。
标题从核心判断里来,不是套公式套出来的。
把 Step 3 的核心判断句拿来,改成让人想点开的表达方式。可以参考这几个方向:
| 方向 | 适用场景 | 示例 |
|---|---|---|
| 关键数字开路 | 成交额、涨停家数有明显异动 | 3.25万亿,今年第三次 |
| 直接点出主线切换 | 今天主线和昨天明显不同 | 消费退潮,科技接棒 |
| 放大今天最反常的事 | 走势和预期、消息相反 | 利好出尽,A股反而涨了 |
| 指出多数人会误判的地方 | 表面和实质不一致 | 普涨背后,资金在悄悄撤 |
不要硬凑标题,如果今天行情本来就平淡,就老实写平淡,不需要制造不存在的戏剧性。
HKR 三维评估(从备选标题中选最高分的):
- H(Happy/快感):读者看到标题会觉得"这个我想知道"
- K(Knowledge/信息):标题透露了一个具体事实或判断
- R(Resonance/共鸣):持仓的读者会有"这正是我今天的感受"
Step 6:四层自检(发稿前必做)
四遍独立过,不能合并成一次扫描。 每一遍只盯一个维度,过完才进下一遍。过不了不发。
详细禁用词和替换规则见 references/ai-antipatterns.md。
第一遍:L1 硬性规则(逐句,机械扫描)
- 无禁用词:行情表现活跃、情绪明显修复、多个板块实现上涨、值得关注、综上所述、助力、旨在、不难发现
- 无"!!"连用,无"……",无冒号独占一行
- 无"首先…其次…最后…"结构
- 所有数字具体("大幅上涨" → "涨4.3%","成交量放大" → "成交额3.1万亿")
第二遍:L2 节奏与口语(通读全文,感受节奏)
- 开头不是"在当前市场环境下..."或"近期A股..."
- 长句(>25字)已拆成2-3句
- 至少有2处口语化转折("其实""简单说""关键在于")
- 每段不超过4行;有长短句交替,不是清一色短句
第三遍:L3 内容质量(只看事实和逻辑)
- 主线判断有成交量或龙头名字支撑,不只靠涨幅榜排名
- 文中至少出现2个具名案例(公司名/股票代码+具体数字,不能只说"科技板块")
- 每个驱动因素有具体来源(新闻标题/资金数据/政策文件)
- 明日观察点可以在第二天验证(不写"值得期待")
- 全文有且只有一个核心判断
第四遍:L4 活人感(最容易被跳过,最重要)
- 有立场,不只描述——会说"我觉得今天市场在赌X"或"这让我警惕的是Y"
- 有读者视角——"如果你持有科技线..."或"对于做短线的来说..."
- 有反直觉角度——不是在重复今天财联社/雪球都说过的
- 读起来像一个今天真的跟盘的人在说话,不像数据播报员
Step 7:传播力评估(必做,L4通过后)
对照7个维度自评。全部达标才算发稿就绪,有缺失的回去改对应部分。
| 维度 | 标准 | 未达标的典型症状 |
|---|---|---|
| D1 标题钩子 | 有信息差/情绪/数字,让持仓读者必须点开 | 标题像新闻播报,无悬念 |
| D2 开头留人 | 前3行给出反直觉数字或核心判断,无废话 | 第一段是背景介绍 |
| D3 内容密度 | 每段有具体数字或事件,段落2-4行 | 有一段删掉也不影响阅读 |
| D4 情绪触发 | 触发了焦虑/共鸣/好奇/确认感中至少一种 | 读完没有任何情绪反应 |
| D5 互动引导 | 结尾有一个开放性问题引导留言 | 文章以风险提示结尾,无CTA |
| D6 关注转化 | 有系列感或人设差异,让读者有理由关注账号 | 和其他财经号没有区别 |
| D7 裂变单元 | 有一句话/一个判断可以单独截图转发 | 全文没有能独立存在的金句 |
D5 互动引导写法(结尾必须加,在风险提示之前):
你觉得[今天最强的板块/明天的分歧],还能走多久?
留言聊聊,你今天拿的是哪个方向。不要用是非题("你觉得明天会涨吗?"),用开放性问题("你今天重仓的是什么方向?")——开放性问题的评论率高3-5倍。
Step 8:排版、配图与封面
详细封面规范见 references/cover-design.md,HTML 排版模板见 references/writing_template.md。
8a. 正文 HTML 排版
优先使用内置模板直接生成 HTML,不依赖 md2wechat-skill(API key 不稳定)。
完整 HTML 模板在 references/writing_template.md → "HTML 排版模板"章节,复制模板后填入当日数据。
排版设计系统(来自 xiaohu-wechat-format 仓库):
| 设计要素 | 规范 |
|---|---|
| 页面背景 | #f0f4f8(浅蓝灰) |
| 卡片背景 | #ffffff + box-shadow: 0 4px 16px rgba(58,65,80,0.06) |
| 主色调 | #1a3a5c(深蓝)/ #4a7c9b(中蓝) |
| 字号 | 正文 16px,列表 15px,标签 10-11px |
| 行高 | 1.75-1.85 |
| 字间距 | 0.3-0.5px |
三条硬性排版规则:
- 禁止
display:flex——微信渲染不稳定,多列布局一律用<table> - 禁止
<style>标签——微信会过滤,所有样式必须内联style="..." - 禁止
position:absolute/fixed——破坏微信文章流式布局
标准页面结构(从上到下):
① 标题卡片(深蓝渐变背景)
② 数据看板(4格 table 布局,带彩色顶边框)
③ 导语卡片(开篇判断,2段)
④ Section 01 卡片(正文主体)
⑤ Section 02 卡片(观察点/分析)
⑥ Section 03 卡片(可验证判断,编号列表)
⑦ 风险提示(灰色小字)
⑧ 互动引导(深蓝底,和标题卡片呼应)如果调用 md2wechat-skill 失败(API key 缺失),直接按模板手动生成 HTML,不要等待。
8b. 配图决策
| 内容需求 | 方式 |
|---|---|
| 封面图 | HTML 模板 → Playwright 截图(900×500px) |
| 数据对比图、热力图 | HTML 图表 → Playwright 截图 |
| 行情氛围图 | image-generator skill |
| 截图说明数据 | 直接截 akshare 输出 |
原则:封面必须有,正文配图按需加,不强制每篇都有。
8c. 封面生成流程
封面核心思路:用情绪插画代替数字图表,读者一眼就感受到今天行情怎样。不放指数点位,不放成交额。
Step 1:根据核心判断选择情绪,生成插画
从 Step 3 的核心结论判断市场情绪,对应关系:
| 行情 | 情绪 | 人物表现 |
|---|---|---|
| 大涨 +1.5%+ | 亢奋欢呼 | 跳起来庆祝,背景绿色屏幕 |
| 小涨 +0.5~1.5% | 满意轻松 | 竖拇指微笑 |
| 震荡横盘 | 迷茫困惑 | 挠头,周围漂浮问号 |
| 小跌 -0.5~1.5% | 担忧皱眉 | 盯着手机屏幕发愁 |
| 大跌 -1.5%+ | 崩溃沮丧 | 捂脸,背景红色下跌箭头 |
| 暴跌 -3%+ | 惊吓绝望 | 夸张惊恐表情,从K线悬崖坠落 |
| 主线切换 | 慌乱奔跑 | 在两块屏幕之间来回跑 |
| AI/科技强势 | 热血冲劲 | 骑火箭冲天,科技感元素 |
调用 image-generator skill,使用 references/cover-design.md 第二章对应提示词,指定 size: 1792×1024(16:9横版)。
输出:output/stock_review_YYYYMMDD_illus.png
Step 2:选择封面方案
- 简单版(推荐赶时间时):直接用插画作为封面 PNG,跳到 Step 4
- 完整版:插画作背景 + 标题文字叠加,继续 Step 3
Step 3(完整版):生成文字叠加 HTML
文件:output/stock_review_YYYYMMDD_cover.html
把插画路径填入模板 <img class="cover-bg" src="..."> 里,叠加标题和日期文字。完整 HTML 模板见 references/cover-design.md 第四章。
用本地 HTTP 服务访问(file:// 被 Playwright 拦截):
python -m http.server 18508 # 在 output/ 目录运行Playwright 截图顺序不能改变:resize(900,500) → navigate → screenshot
输出:output/stock_review_YYYYMMDD_cover.png
Step 4:用 Read 工具验证
- 人物表情清晰,情绪一眼可辨
- 插画中没有出现任何数字或文字(文字由叠加层提供)
- 标题文字可读,遮罩不过重
8d. 文件命名规范
output/
├── stock_review_YYYYMMDD.md # 正文 Markdown
├── stock_review_YYYYMMDD.html # 公众号 HTML(排版完成版)
├── stock_review_YYYYMMDD_cover.html # 封面 HTML 模板
└── stock_review_YYYYMMDD_cover.png # 封面截图(推送用)Step 9:推送草稿箱
仅用户明确要求时执行。推送前必须先跑检查脚本。
9a. 发稿前自动检查
python skills/stock-wechat-writer/scripts/pre_publish_check.py \
--article output/stock_review_YYYYMMDD.md检查通过(硬性项 0 failures)才能进入推送。有 failures 先修文章,再重跑检查。
9b. 推送到草稿箱
python push_stock_review_draft.py \
--html output/stock_review_YYYYMMDD.html \
--cover output/cover-stock-YYYYMMDD.png \
--title "最终标题" \
--digest "摘要(100字内,一句话核心判断)"推送前核查(三项都必须确认):
--html和--cover路径是当天日期文件,不是旧文件--title是最终定稿标题,不是占位符--digest是实质性摘要,不是"今日A股复盘"这类无信息量的句子- HTML 必须使用
references/writing_template.md的内联卡片排版;禁止把普通 Markdown 转成裸 HTML 后直接推送
不要这样写
详细替换规则见 references/ai-antipatterns.md,简版:
- 不写"行情表现活跃",写具体数字
- 不写"情绪明显修复",写涨停家数或量能变化
- 不把复盘写成"指数+板块+个股"三段式流水账
- 不把涨幅榜第一当成主线
- 不写"后续值得关注",写明天具体看什么
- 不推荐股票,除非用户明确要"关注标的"