ma2ong

stock-wechat-writer

一键生成A股行情分析微信公众号文章。融合DeepEar实时金融信号、财联社/雪球实时新闻、akshare/yfinance行情数据,按vibe-writer-pro风格输出适合微信公众号发布的行情分析稿件。触发关键词:写A股分析、生成行情报告、写今日复盘、写明日展望、写公众号股票分析、今日行情分析、收盘复盘、A股晚报、微信股票文章、生成行情文章。Platform: Claude Code (CLI) only — requires Python, network access.

ma2ong 0 Updated 2w ago

Resources

3
GitHub

Install

npx skillscat add ma2ong/stock-wechat-writer

Install via the SkillsCat registry.

SKILL.md

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 --comments

2c. 市场信号(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.mdreferences/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.mdreferences/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

三条硬性排版规则:

  1. 禁止 display:flex——微信渲染不稳定,多列布局一律用 <table>
  2. 禁止 <style> 标签——微信会过滤,所有样式必须内联 style="..."
  3. 禁止 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)navigatescreenshot

输出: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字内,一句话核心判断)"

推送前核查(三项都必须确认):

  1. --html--cover 路径是当天日期文件,不是旧文件
  2. --title 是最终定稿标题,不是占位符
  3. --digest 是实质性摘要,不是"今日A股复盘"这类无信息量的句子
  4. HTML 必须使用 references/writing_template.md 的内联卡片排版;禁止把普通 Markdown 转成裸 HTML 后直接推送

不要这样写

详细替换规则见 references/ai-antipatterns.md,简版:

  • 不写"行情表现活跃",写具体数字
  • 不写"情绪明显修复",写涨停家数或量能变化
  • 不把复盘写成"指数+板块+个股"三段式流水账
  • 不把涨幅榜第一当成主线
  • 不写"后续值得关注",写明天具体看什么
  • 不推荐股票,除非用户明确要"关注标的"