美股每日行情速览
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/user_44747f29--us-stock-daily-briefing.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_44747f29/us-stock-daily-briefing。关注 IMA 知识号「搬砖小能手」美股每日速览复盘。直观展示2大核心指数(纳斯达克指数 / 标普500指数)、GICS 行业 ETF 涨跌、13 家主要公司市场表现(苹果 / 英伟达 / 谷歌 / 微软 / 亚马逊 / Meta / 特斯拉 / SpaceX / 台积电 ADR / 博通 / SK 海力士 / 美光 / 伯克希尔-A),并给出客观市场简评与当日重要事件(关键事件 + 13 家追踪公司逐家定向检索的当日新闻)。
触发词:美股行情速览、美股速览、每日复盘、每日速览、两市速览。手动触发,默认复盘当日。
阅读全文 (展开查看完整说明)
概述
美股行情速览助手
定位与边界
- 速览型复盘:5 分钟看完今天美股发生了什么。直观数据展示 + 关键事件梳理 + 客观市场定性。
- 禁止技术分析式预测:不画线、不数浪、不推走势、不给均线/MACD 信号、不做次日点位预判。市场简评只做基于数据的客观描述。
- 与
ah-market-briefing(A股速览)共享同一套渲染引擎与风格锁,但数据源、指数、公司、板块全部改为美股视角。 - 数据源:结构化行情数据仅腾讯自选股(westock-mcp MCP 工具,与 A股速览同源)——指数 / 个股 / 行业 ETF / 涨跌分布等数值类数据禁止用 web_search/curl/第三方 API 替代。模块六「今日重要事件」的新闻来源改用 WebSearch(
topic=finance,限当日、限权威源)。 - 默认复盘当日;用户指定日期时用
--date YYYY-MM-DD(quote 支持历史截面)。 - 无 A股/港股专属口径:本 skill 全部以美元计价,不出现「港元/人民币」分组、不出现「涨跌停/涨停板」等 A股专属概念(改为 GICS ETF 涨跌)。
交易日检查
采集前先判断目标日期是否为美股交易日(周末/美国法定节假日休市)。休市则告知用户「今日休市,无交易数据」并停止。
报告日期口径(易错,2026-07-31 踩坑固化):
- 报告日期 = 最近一个已收盘的美股交易日(美国当地日期),不是北京当日日期。美股常规时段为美东 09:30–16:00,对应北京时间 21:30–次日 04:00(夏令时)。北京时间 04:00 之后至次日 21:30 之前,"最近已收盘交易日"始终是美东前一日。
data_trade_calendar不适用于美股:该工具无market参数,返回的固定是 A股交易日历(listCode="calendar_hsj",listName="A股交易日历")。用它判定美股交易日会在美国节假日(如 7/4、感恩节)而 A 股正常开市时判错。- 正确判定方式:直接看
data_quote usIXIC,usINX返回的time字段——它就是该指数最后一次收盘对应的美国日期。该字段权威、零额外成本(指数行情本来就要拉),可完全替代日历调用。 - 去重保护:生成前先检查
daily-review/美股速览_<报告日期>_收盘版.html是否已存在。周末/节假日或同日多次触发时,最近已收盘交易日不变,存在即跳过生成,不重复消耗行情与检索配额。
前置依赖(安装前必读)
- 腾讯自选股数据源(必须):本 skill 的数值行情(指数 / 个股 / GICS ETF)来自腾讯自选股,主路径为连接
westock-mcp连接器,用 MCP 工具data_quote取数(下方命令示例的westock-data quote …仅为等价 CLI 写法,连了 MCP 时直接改用data_quote)。新闻用 WebSearch(topic=finance,限当日权威源)。 - Node.js(必须):生成后的 JS 语法校验需 Node;本机已自带则自动识别,无则需安装并确保在 PATH。
- IMA 上传(可选):仅当要把报告同步到个人知识库时才需要,且必须另行安装
ima-skill;不装则跳过「上传 IMA 知识库」整章,不影响本地生成报告。 - 路径占位符:文中
<SKILL_DIR>/<ima-skill>是占位符,运行时替换为技能实际安装目录(加载技能后由运行环境提供),切勿写死成其他人的绝对路径(如C:/Users/Administrator/...),否则换机器即失效。
固定代码清单
指数(2 个)
| 指数 | 代码 | 备注 |
|---|---|---|
| 纳斯达克指数 | usIXIC | 与 A股速览同接口取数 |
| 标普500指数 | usINX | 与 A股速览同接口取数 |
主要公司(13 家:美元计价)
| 公司 | 代码 | 市场 |
|---|---|---|
| 苹果 Apple | usAAPL | 美股 |
| 英伟达 Nvidia | usNVDA | 美股 |
| 谷歌 Alphabet | usGOOGL | 美股 |
| 微软 Microsoft | usMSFT | 美股 |
| 亚马逊 Amazon | usAMZN | 美股 |
| Meta | usMETA | 美股 |
| 特斯拉 Tesla | usTSLA | 美股 |
| SpaceX | usSPCX | 美股(纳斯达克上市公司,代码 SPCX) |
| 台积电 ADR | usTSM | 美股 |
| 博通 Broadcom | usAVGO | 美股 |
| SK 海力士 | usSKHY | 美股 |
| 美光科技 Micron | usMU | 美股 |
| 伯克希尔-A Berkshire | usBRK.A | 美股 |
数据采集(可并行,共约 17 次调用 = 2 次行情 + 15 条检索)
# 1. 指数+个股行情一次批量拉取(含 chg_5d/chg_20d/chg_ytd/PE/市值/成交额;chg_ytd=年初至今,供模块四 YTD 列)
westock-data quote usIXIC,usINX,usAAPL,usNVDA,usGOOGL,usMSFT,usAMZN,usMETA,usTSLA,usSPCX,usTSM,usAVGO,usSKHY,usMU,usBRK.A --raw
# 1b. 核心指数年初至今日K(供模块一 hover 走势图)—— 必须用脚本,不要用 MCP kline 工具
# 原因:MCP 返回 2 个指数 x 约 140 根 K 线的完整 OHLCV,会把上下文冲爆;脚本直接落盘。
# 在 report_data.json 其余字段写好之后、调用 generate.py 之前执行一次即可:
python <SKILL_DIR>/fetch_kline_us.py report_data.json
# 脚本行为:拉取 2 个指数日收盘,首点固定取【上一年最后一个交易日收盘】作为 YTD 基准
# (否则 hover 里的 YTD 会用 1 月首个交易日当基准,与模块四 chg_ytd 口径对不上),
# 末点对齐 indices[i].price,保证 hover 图末值与指数卡片一致;结果写入 indices[i].kline + chg_ytd。
#
# 【接口红线,勿改回】美股指数必须走 /appstock/app/kline/kline?param=<code>,day,,,320
# · A股速览用的 /app/fqkline/get 对 usIXIC/usINX 只回最新一根,会报 "no day series";
# · 响应 data 的 key 是带点的 "us.IXIC"/"us.INX",不是请求用的 "usIXIC"——
# 必须 list(data.values())[0] 取值,写 data[code] 必然 KeyError;
# · 320 根日K 回溯约 15 个月,足以覆盖上年末基准;收盘价在每行索引 2。
# 2. [模块二「美股市场概况」已删除] 原模块用双指数涨跌幅 + 覆盖个股分布呈现「大票 vs 小票」张力;
# 经用户确认,该模块整体从报告与渲染管线中移除,不再生成对应 HTML/JS 片段。
# 下方仅保留数据采集注释以供追溯:
# · 指数只写 volume(亿股),绝不写 amount(指数 amount 为点位×股数、无经济含义的名义值,当「亿美元成交额」展示即造假)。
# · 个股/ETF 的 amount 才是真实成交额。
# 3. GICS 板块 ETF 涨跌(固定 12 只 = 11 个 GICS 一级 + SOXX 半导体主题)
westock-data quote usXLK,usXLC,usXLF,usXLE,usXLV,usXLY,usXLI,usXLP,usXLRE,usXLU,usXLB,usSOXX --raw
# 11 个 GICS 一级:XLK 信息技术 / XLC 通讯服务 / XLF 金融 / XLE 能源 / XLV 医疗保健 /
# XLY 可选消费 / XLI 工业 / XLP 必需消费 / XLRE 房地产 / XLU 公用事业 / XLB 原材料。
# SOXX 单列并在名称后标「(主题)」,避免与 GICS 一级混为一谈。
# XTN(运输)、KIE(保险)是 XLI/XLF 的子集,重复计数,已弃用。
# 4. 今日重要事件(新闻):改用 WebSearch,不调 data_news
# 【检索预算 = 标的数,禁止写死固定常数】13 家追踪公司【逐家一条】定向查询,格式:
# "<公司名> <报告日期(ET)> 公告 订单 财报 评级"
# + 2 条宏观/板块("<报告日期> 美股 政策 监管 重要事件" / "<报告日期> 美股 板块 资金流 异动")
# 合计 15 条,全部并行发起;topic=finance,限当日或前一日(ET)、限权威源,摘要标注来源。
# ⚠️ 禁止用「大盘+板块+主题」宽泛查询替代定向查询:编辑只会写当天最大叙事,
# 公司级事件被排到第 5 条以后或根本不出现 → 必然漏检。
# 2026-11-04 实测:抽样 3 家(SpaceX / 微软 / 亚马逊)3 家全漏,其中 SpaceX 当日
# 拿下公司史上最大 5G 交易(与高通合作),却被我写成「无新增经营数据」。MCP 等价工具:
data_quote(code/codes)。data_changedist、data_sector(A股速览的沪深/申万口径)在本 skill 中不可用——已改为「GICS ETF 涨跌」单模块。新闻取数:模块六改用 WebSearch(
topic=finance,query 带当日日期 + 公司/主题,限权威源),不再调data_news;需要正文细节时用 WebFetch 取原文链接。
性能优化约定(生成提速,落地必读)
美股速览整体耗时的主要来源不是 Python 渲染,而是智能体编排循环(每步工具调用之间都有一次模型推理往返)。按以下优先级执行,可在数据口径与 v5 版式零改动的前提下,将整体耗时压缩约 60–70%:
- 并行工具调用(P0,最大杠杆):两次
data_quote(指数+个股 / 12 只 ETF)、以及 15 条 WebSearch(13 家逐家定向 + 2 条宏观/板块)全部放进同一条消息的并行工具调用,不要逐个串行发起。交易日判定已合并进指数行情(见「交易日检查」,直接看data_quote返回的time字段),不单独占用一轮调用。串行 15 条 WebSearch ≈ 15×单程耗时;并行后 ≈ 单次最慢耗时。并行不等于可以减条数——检索条数由标的数决定(13+2),这条是覆盖底线,不得为提速删减。 - 消除冗余调用(P0):交易日判定无需调用
data_trade_calendar(见「交易日检查」——该工具只返回 A股日历,对美股无效)。直接用指数data_quote返回的time字段确定报告日期,省掉 1 次调用与 1 次编排往返。 - fetch 与 generate 链式合一(P1):在一条 Bash 内
python fetch_kline_us.py report_data.json && python generate.py report_data.json <out.html>,省掉一次独立进程启动与一次编排往返。 - fetch_kline_us.py 已并行化(P1,已落地):2 个指数 HTTP 请求走
ThreadPoolExecutor并发,墙钟耗时 ≈ 较慢那一个请求(原串行 ≈ 两者之和,且单请求超时曾高达 25s)。可调环境变量:KLINE_TIMEOUT(默认 10s,原为 25s)—— 收紧尾部延迟KLINE_RETRIES(默认 2)—— 上游抖动时重试KLINE_WORKERS(默认 4)、KLINE_BARS(默认 320)
- 跳过非必要重读(P2):SKILL.md 与 generate.py 契约稳定,无需每次重新 Read 源码;仅在改动契约后重读。
取舍说明:以上均为"编排/并发"层面优化,不改变任何数据口径与报告版式(v5 风格锁不变)。唯一潜在副作用是并行 WebSearch 数量由 5 条增至 15 条(2026-11-05 起),会同时占用更多检索配额;并行发起后墙钟耗时仍≈最慢一条,成本主要体现在配额与上下文体积(可要求检索只回标题+要点,减少噪声)。若某环境对并发工具调用有限制,可退化为分组并行(先并行全部
data_quote,再并行 13 条公司定向检索,再并行 2 条宏观),条数不得减少,仍可获大部分提速。
事件时间窗口(归因前置,必读)
新闻归因必须落在正确的窗口,否则会把盘后消息错记成当日催化(2026-11-04 踩坑:把 11-04 盘后发布的高通 FQ4、Arm FQ2 混入 11-04 当日归因,而当日高通 +5.33% 的真实来源是同日宣布的 SpaceX 5G 交易)。
设报告日期为 D(美国东部日期),两段窗口用途完全不同:
| 窗口 | 时间范围(ET) | 影响哪个交易日的价格 | 用途 |
|---|---|---|---|
| A:已消化 | D−1 16:00 → D 09:30 | 已反映在 D 日涨跌幅里 | 解释 D 日为什么这么走 |
| B:新信息 | D 16:00 → 本次运行时刻 | 不影响 D 日收盘,影响 D+1 | 提示下一交易日的变量 |
- 窗口由
report_date反推,禁止用now()或北京日期直接算(北京 = ET+13 冬令时 / +12 夏令时)。 - 检索分两批:查
D−1 盘后 ~ D 盘前用于归因,查D 盘后用于前瞻;结果分属不同卡片,不得混写。卡片内标注所属窗口(如「11-04 盘后,影响 11-05」)。 - 页脚/副标题注明盘后信息截止时刻(本轮 ET hh:mm)。
- 结构性缺口(如实披露,不掩饰):北京 08:30 运行时,D 日盘后只过了约 3.5 小时(冬令时 ET 19:35 / 夏令时 ET 20:35)。西海岸公司常在 20:00–21:00 ET 才发公告,这部分本轮抓不到;下一轮报告日期已推进到 D+1,该事件又落到窗口 A——中间存在一条永久性的缝。报告中标注「盘后信息截至 ET hh:mm」即可,不得假装覆盖完整。
报告结构(6 个模块,顺序固定)
- AI 生成声明(前置):header 右上角的知识库引导语由
report_data.json的ima_badge字段驱动(不写死;示例填你自己的知识库名,不填则不显示)。模块一上方显示 AI 生成声明(琥珀色提示条),为 generate.py 硬编码的中性固定文案(仅提示"AI 生成、仅供参考",不含任何特定知识库),不经过数据层。
模块一:核心指数一览
- 2 个指数卡片:收盘点位、涨跌幅(红涨绿跌)、年初至今(YTD,见模块一卡片「年初至今」行与 hover 走势图,三者口径一致)。
- 一张当日涨跌幅排序横向柱状图(仅 2 根),直观展示纳指/标普分化。
- 卡片 hover 弹出该指数年初至今日线走势(由
fetch_kline_us.py注入kline)。
模块二(已删除):原「美股市场概况」
本模块经用户确认已从报告与渲染管线中整体移除,故不再生成对应 HTML/JS 片段,下方仅作架构追溯。
原结构:双指数涨跌幅 + 覆盖个股分布,用 13 家覆盖个股涨跌幅横向柱状图呈现「大票 vs 小票」张力。
模块三:美股板块 / ETF 涨跌
- GICS 行业 ETF:约 11 只 GICS 行业 ETF(XLK 科技 / SOXX 半导体 / XLF 金融 / XLE 能源 / XLV 医疗 / XLY 可选消费 / XLI 工业 / XLP 必需消费 / XLRE 地产 / XTN 运输 / KIE 保险),按涨跌幅降序横向柱状图(红涨绿跌)。
- 驱动逻辑必须基于当日可验证事实,禁止编造因果关系。
模块四:主要公司市场表现
- 单一美股组(13 家):每组表格,每行一家:收盘价、涨跌幅、PE(TTM)、总市值(亿美元)、成交额(亿美元)、近5日涨跌幅、近20日涨跌幅、今年以来(YTD)涨跌幅。
- 今年以来(YTD):直接取自
quote的chg_ytd字段(%);与近5日/近20日并列为三档时间尺度,直观呈现「短期反弹 vs 中期位置」的张力。 - 价格/市值/成交额单位为美元,禁止混用港元/人民币符号。
- 表格单元格不载单位后缀:表头已标注「总市值(亿)」「成交额(亿)」等,单元格仅放裸数字。
模块五:市场简评(事件解读,最多 4 段,说人话)
写作目标:只回答一个问题——今天这个波动,是什么造成的。波动是果,事件是因,写因不写果:哪条新闻、哪个数据、哪件事,通过什么路径传到哪些板块和公司。波动本身只交代方向和级别(普涨/普跌/分化,大幅/温和),不复述点位与涨跌幅。保持客观、不喊单、不预测涨跌。
基本规矩:
- 图表(指数卡片、行业 ETF 涨跌图)里已经摆得明明白白的数字和排名,不要在简评里抄一遍,也不换文字说法(「跌掉一成二」「涨了七个点」「四千七百多只下跌」)。简评要讲的是图里看不出来的那条因果链——为什么动、动到了谁。
- 说人话,不用行话:避免"估值出清""安全边际""久期""存量博弈""价值/成长切换""流动性"这类圈内黑话。非用不可时,用大白话补一句解释(如把"估值偏高"写成"价格比公司本身值钱的水平贵了不少")。
- 每条判断都要有当天检索到的报道、公告或数据支撑,不空谈、不喊口号;不能从涨跌反推原因——「跌多了空头平仓」「避险仓位被卖掉换钱」这类没有仓位或资金流数据支撑的推断不写;确实找不到原因就直说「当天的公开信息不足以解释这次波动」,这比编一个原因诚实。不做明天涨跌的点位预测,也不给"买/卖"建议。
按「先说结论、再讲原因」组织,每段用加粗的一句话当小标题,让人扫一眼就懂:
- 今天最大的那件事,解释了多少波动:先点事,再说清它怎么传到盘面上——哪个环节先动、哪类公司跟着动。当天确实没有明确事件,就直说没有,不要拿走势反推一个原因。
- 还有哪些事在起作用:次要因素、反向力量;同一件事在不同板块上的相反效果也可以放这里。
- 哪部分波动解释不了:如实标注这块属于仓位调整、技术性回摆或情绪,不硬套因果;没有可整段不写。
- 往下看要验证什么:只列观察项(某个数据、某份财报、某个政策时点),不预测点位。
写法提示:每段尽量短、句子短、少用长句;多用"比如""说白了""换句话说"拉近距离。纯盘面数字罗列一律回退重写。
- 事实核查硬约束:简评里提到的公司动向、政策、监管动作等,必须来自模块六经时效性甄别后的 WebSearch 或当日权威信源。不凭记忆编造状态,不采信没经过时间核对的旧闻。说不准的事,老老实实标注"据公开报道",或干脆删除该判断。
模块六:今日重要事件(新闻来源 = WebSearch)
本模块的原意是「补事件」,不是「复述行情」。 没有事件时正确做法是缩小模块,而不是用行情数字把它填满。读者对这个模块的信任,取决于其中最弱的一条。
- 取数方式:用 WebSearch(
topic=finance)按「报告日期 + 公司名/主题」查询,限当日或前一日(ET)、限权威源(公司公告/IR、路透、彭博、CNBC、财联社、证券时报、交易所文件);需要正文细节时用 WebFetch 取原文链接。禁止调腾讯自选股data_news(list 仅标题、detail 无正文)。 - 覆盖范围(硬性):模块四追踪的 13 家逐家检索——每家一条定向查询(见「数据采集」第 4 条),检索后逐家判定。用宽泛的大盘/板块查询替代定向查询,必然漏检;未检索过的公司不得进入本模块,也不得写成「无消息」。「全覆盖」指每家都查过,不等于每家占一张卡——查到就写,查不到就不占卡。
- 三态判定(取代二态断言):
| 状态 | 写法 | 是否可进报告 |
|---|---|---|
| 已证实 | 具体事件 + 来源 w | 是 |
| 已检索未发现 | 「截至 ET hh:mm,未见公司公告/主流报道」 | 是(可作为一条合并说明,不单独占卡) |
| 未检索 | —— | 禁止出现 |
严禁把「我没看到」写成「没有发生」。这是假否定,比遗漏更严重——读者会相信确实没有。2026-11-04 实测(旧规则下抽样 5 家,5 家全部有当日实质事件,其中 4 家被我写成「无新增个股消息」):
- SpaceX:与高通达成公司史上最大 5G 交易(Starlink Mobile 全美地面网络,2027 年起部署)——却被写成「无新增经营数据,跌幅属政治折价」,把当天最该解读的「重大利好 + 跌 3.81%」的反差整个丢掉;
- 英伟达:彭博报道中国客户 600 万颗 RTX Pro 5500 订单(约 700 亿美元),未来四个月仅能交付约 1%,产能优先给 Rubin——这条直接解释了当日 -3.17%,却被写成「无新增个股消息」;
- 微软:FY27Q1 首次单列 Azure 收入 331.65 亿、同比 +48%(指引 44%–45%);
- 亚马逊:Lambda MicroVMs 在北京/宁夏区域可用,GPT-5.6 Cyber 经 Bedrock 上线 GovCloud。
这四条都是「一条定向查询就能拿到」的事实。宽泛的大盘查询把它们全滤掉了。
- 写什么(一句话判据):模块六写公司发生了什么,不写市场怎么看它。
- 属于本模块的:公告与披露、新闻报道里的具体事实、产品与技术进展、订单与合同、产能与指引、人事变动、监管与诉讼进展、合作与投资——只要与该公司有关、且是当日或前一日新发生的。来源不限公告,媒体报道、公司表态、行业信息都算。
- 不属于本模块的:股价、涨跌幅、成交额、市值、PE、资金流向、板块与指数强弱——这些是上方表格与模块五简评的内容,写进来就是重复。
- 拿不准时自问一句:这是公司的事,还是市场对它的评价? 是后者就不写。
- 关键事件(有几条写几条,可为 0 条):从检索结果中高度精选,准入硬杠——①涉及政策/监管层面的信号性变化;②涉及模块四 13 家追踪公司的重大动态(归入下方科技巨头板块);③对市场有结构性影响的大事件(大额并购、产能或供应链变局、关键人事更替)。排除:常规低频数据发布、日常价格波动、已在简评充分覆盖的事件、热搜个股/板块堆砌。不设条数下限:当天只有 1 条就写 1 条,一条都没有则该小节不出现,不为凑数写行情。
- 写法(说人话):每条用一句大白话标题点明"发生了什么",正文用 1–2 句讲清"这事儿跟市场、跟普通投资者有什么关系、影响了谁",避免照搬政策原文和术语堆砌。科技巨头新闻同理——先说清这事意味着什么,再补细节。
- 事件时效性判别(准入前置):关键事件的"发生时间"必须约束在当日或前一日(ET),而非"报道时间"。对于涉及监管进展、IPO 申报/获批、重大交易、政策发布等里程碑事件,必须通过多源交叉验证确认其真实发生时间。若多家信源指向同一旧事件、且均未给出新的增量信息,则判定为「旧闻重提」,直接排除,不得以"今日有媒体报道"为由纳入当日事件。疑似的旧闻重提者可降级为进展追踪(标注「据 XX 报道,此事已推进至 YY 阶段,持续关注」),但不得单独列作当日关键事件。
- 科技巨头当日重要新闻(逐家检索、有则写:苹果 / 英伟达 / 谷歌 / 微软 / 亚马逊 / Meta / 特斯拉 / SpaceX / 台积电 / 博通 / SK 海力士 / 美光 / 伯克希尔-A):每条标题 + 主要内容摘要(基于搜索摘要/正文提炼,标注来源
w),并标注所属时间窗口(见「事件时间窗口」)。某家当日没有可写的事就不占卡,不得为了给这家一个位置而补一段行情。 - 条数红线(防凑数):13 家各按实际重大程度列示,单家最多 2 条、不强制凑满;仅纳入当日或前一日(ET)可验证、对个股/板块有直接影响、或触及政策/监管信号性变化的事件。纯常规公告、已在简评充分覆盖、或低频数据发布一律排除。某家当日无达标事件则不列该家,不补位灌水;未列出的公司在模块末尾用一行纯文字列名即可(「已逐家检索,截至 ET hh:mm 未见可写事件:XX、YY」),该行不带任何行情数字。
- 归因禁止项:手上没有公司事件时,不得把涨跌归给「板块轮动」「政治折价」「资金偏好」等宏观叙事来冒充公司信息。这类归因让每张卡看起来都有解释,实则比留白更误导。
- 诚信底线:摘要须忠实于检索到的原文/摘要,注明来源;不得为填充数量而编造或夸大。
单位与展示规范(重要,易错)
| 字段 | 原始单位 | 展示 |
|---|---|---|
指数 volume | 股 | ÷1e8 → 亿股。指数只用 volume,其 amount 是点位×股数的名义值,禁用 |
个股/ETF amount | 美元 | ÷1e8 → 亿美元(注:腾讯自选股美股接口 amount 字段单位已为亿美元,直接展示) |
total_market_cap | 亿美元 | 同样 ÷1e8 后传数值;表头已有单位(总市值(亿)、成交额(亿)),单元格仅放数字、不载「亿/万亿/美元」等后缀 |
| 涨跌幅/chg_5d/chg_20d/chg_ytd | % | 忠实原值,保留两位小数,不得为美观改数;chg_ytd=年初至今,供模块四 YTD 列 |
| 任一字段数据源缺失 | — | 契约里显式写 null,generate.py 渲染为 --。绝不用 0 或估算值补位 |
- 颜色:上涨
#e63946(红)、下跌#2d6a4f(绿),美股惯例勿反。 - 浅底深字研报风;ECharts 内联嵌入 skill 目录
echarts.min.js(生成时直接写入<head>的<script>,不引外部 CDN)——报告完全自包含,离线秒开、任何预览沙箱可用。
交付
- 用 skill 目录下的
generate.py生成,不要每次手写 HTML:把 6 模块数据写入report_data.json(UTF-8,字段见下方「数据契约」),执行python generate.py <report_data.json> <daily-review/美股速览_YYYYMMDD.html>。 - 交付前对内联 JS 执行语法校验。本环境推荐:单进程
new vm.Script(code)解析(如node -e "const fs=require('fs'),vm=require('vm'); const h=fs.readFileSync('report.html','utf8'); const m=h.match(/<script[^>]*>([sS]*?)<\/script>/i); if(m) new vm.Script(m[1])"),无需跨命令写临时文件,避免沙箱文件系统视图不一致导致node --check找不到文件。备选方案:环境支持跨命令文件持久化时,可将<script>内容抽到临时 .js 执行node --check。 - 聊天中只给一句摘要 + 文件路径,并用结果展示工具呈现。
- 报告结尾注明:「以上内容基于公开数据整理,仅为客观信息汇总,不构成投资建议」。
- 分享 / 预览:技能自带
sample_data.json(精简样例,字段与「数据契约」一致)。他人安装技能后,无需先采集真实数据即可python generate.py sample_data.json demo.html一键预览 v5 风格——风格随generate.py传递,与本地 v5 报告文件无关。
安装后配置
最小配置(即可使用)
无需任何配置。安装后直接走「数据采集 → 生成 HTML」流程,HTML 报告生成本地 daily-review/ 目录后可离线查看。
可选:IMA 知识库上传(不在本 skill 内置)
本 skill 只负责「生成报告」,不内置上传逻辑。如需把报告同步到个人 IMA 知识库:
- 完整上传流程(
create_media→cos-upload.cjs→add_knowledge)与 COS 签名脚本,见ima-skill的knowledge-base/SKILL.md与knowledge-base/scripts/cos-upload.cjs; - 推荐在调用本 skill 的自动化任务 / 工作流中编排「生成后上传」步骤,作为报告投递环节(避免把上传链路塞进可复用 skill,造成多份副本漂移);
- 报告 header 右上角的知识库引导语由
report_data.json可选字段ima_badge(字符串,如"📚 关注 IMA 知识库「你的知识库名」")驱动,不设则不显示——这是纯展示文本,与是否实际上传无关; - 上传时务必使用你自己的 IMA 知识库 ID,切勿沿用任何他人 ID。
- 当前投递口径(2026-10-03 起):本报告由自动化任务上传至知识号已发布库「美股每日行情速览(持续更新)」,不再传「个人知识库」。入库名
美股行情速览-<YYYYMMDD>.html(YYYYMMDD 为美股交易日 8 位紧凑格式;本地文件名保持美股速览_<报告日期>_收盘版.html不变,走C:/Users/Administrator/.workbuddy/scripts/ima_upload_local.cjs --as-name指定入库名)。
生成器与渲染规范(固化,避免反复踩坑)
generate.py 已解决过往所有渲染问题,后续改动须沿用以下约束,切勿退回手写 HTML:
- 编码零风险:生成器 Python 源码保持 ASCII(无中文字面量);所有可见中文只来自
report_data.json,由json.dumps注入 HTML/JS。柱状图数据数组用ensure_ascii=True存成uXXXX转义,杜绝字节丢失导致的中文乱码。 - 图表高度动态化:每张图高度 =
max(440, n*28)(n=数据条数)。行业图 11 条 → 440px,保证每根柱子约 28px 不被压扁。 - 坐标轴不裁切:所有图
grid.containLabel:true,长行业名(如「SK 海力士」)与右侧「+17.52%」数值标签永不溢出。 - 响应式 + 容错:
echarts.init后统一window.addEventListener('resize', ...)重绘;chart 渲染整体包try/catch,单图报错只显示顶部#chartErr错误条,不中断其余图。 - ECharts 内联自包含:
echarts.min.js缓存在 skill 目录,generate.py读取后内联进<head>的<script>(并对</script>做</script>转义防截断)。不引任何外部 CDN——彻底消除"打开后图表等 CDN 现拉"的延迟,离线/沙箱均秒开。ensureECharts仅作window.echarts兜底校验,不再注入 unpkg。 - 排版醒目:关键数字放大加粗、次要信息提亮(禁用
#aaa/#777死灰)。规格——模块标题 22px/800、指数价 24px/800、情绪数值 30px/800 且按语义着色(涨红 / 跌绿 / 成交蓝)、表格 14px、变动值列 700 字重。
风格锁定(Style Lock)
v5(2026-07-27)的版式即唯一权威样式。 后续所有生成(含自动化复跑)必须严格沿用,禁止擅自改动观感。
- 唯一生成入口:只能调用本目录
generate.py,禁止临时手写 HTML / 内联 ECharts 替代。 - 令牌即契约:下方设计令牌为锁定值。改动任意一项(颜色 / 字号 / 字重 / 间距 / 渐变 / 图表高度或行为)都算「风格漂移」,须先经用户明确确认方可调整,不得主动「美化」或「顺手调一下」。
- 自动化复跑同样受锁:cron 每日执行也必须走
generate.py+ 当日report_data.json,不手写、不复用旧 HTML、不临时换 CDN 或配色。
| 类别 | 令牌 | 锁定值 |
|---|---|---|
| 语义色 | 涨红 | #e63946 |
| 语义色 | 跌绿 | #2d6a4f |
| 语义色 | 成交蓝 | #2563eb |
| 底色 | 页面背景 | #eef1f6 |
| 底色 | 卡片 / 容器 | #ffffff |
| 文字 | 主文字 | #14142b |
| 文字 | 次要文字 | #5b5b73(禁用 #aaa/#777 死灰) |
| 线条 | 边框 / 分隔 | #e9ecf2 |
| 头部 | 渐变 | linear-gradient(135deg,#1a1a2e 0%,#16213e 100%) |
| 字号 | 模块标题 | 22px / 800(左侧 5px 红色竖条) |
| 字号 | 指数价 | 24px / 800 |
| 字号 | 情绪数值 | 30px / 800(按语义着色:涨红 / 跌绿 / 成交蓝) |
| 字号 | 表格正文 | 14px(公司表格 .company-table 为 13px/6-7px padding);表头 13px / 700(公司表格 12px) |
| 布局 | 容器最大宽 | 1180px |
| 布局 | 模块内边距 | 34px |
| 图表 | 高度 | 行业图 max(440, n×28)(2 条 → 440px?不,2 条索引图 → 按 2 条计算 max(440, 2*28)=496;11 条 ETF 图 → max(440, 11*28)=748);概念图已弃用 |
| 图表 | 坐标轴 | containLabel:true;inverse:true 实现降序;barMaxWidth:22 |
| 图表 | 库加载 | ECharts 内联自包含(skill 目录 echarts.min.js 写入 <head>);无外部 CDN 依赖 → 打开即渲染,离线/沙箱可用;resize 监听 + 单图 try/catch(#chartErr 兜底) |
| 标题 | 副标题(动态) | US {收盘速览|午间速览|盘中速览} · 数据截至 {data_time} · 数据来源:{source};session 决定标签,三档不可混淆 |
| 页脚 | 生成时间(动态) | 数据来源:{source} | 生成时间:{真实生成时刻 YYYY-MM-DD HH:MM};严禁写死「收盘后」——中午/盘中生成须如实显示时段 |
数据契约(report_data.json 字段)
{
"date":"YYYY-MM-DD","weekday":"周一","source":"腾讯自选股(美股速览)",
"data_time":"YYYY-MM-DD HH:MM", // 美股市场:无港股口径,仅 data_time
"session":"close|noon|intraday", // session 驱动动态标题/页脚
"indices":[{"name","price","chg"(float),"volume"(字符串,亿股),"kline"(YTD日K序列:[[日期,收盘点位],...]),"chg_ytd"(float,年初至今涨跌幅%)], // 2 个;kline 与 chg_ytd 由 fetch_kline_us.py 自动写入,首点=上年最后一个交易日收盘(YTD基准),末点=当日且已对齐 price;chg_ytd 供模块一卡片「年初至今」行与 hover 走势图,三者口径必须一致
"sectors":[{"name","chg"(float)}], // GICS 板块 ETF,降序(固定 12 只:11 GICS 一级 + SOXX 主题)
"companies":[{"name","price","chg","pe","cap","amt",
"c5","c20","cytd"}], // 13 家(美元计价)
"review":[{"hl","p"}], // 4 段;hl=一句话大白话小标题,p=2-4句口语化正文(说人话、不堆术语)
"events_key":[{"t","d","w"}],"events_tech":[...], // 模块六(关键事件:有几条写几条、可为 0;13 家追踪公司新闻,单家最多 2 条、无事件不列);t=大白话标题,d=1-2句"影响了谁/什么"说明,w=来源
"ima_badge":"📚 关注 IMA 知识库「你的知识库名」" // 可选,header 引导语;不设则不显示
}chg/c5/c20/cytd 均为 % 浮点(忠实原值,两位小数);cytd=年初至今,模块四表头显示「今年以来」。
数据红线
- 不编造数据;某数据源为空时如实标注「当前数据源未覆盖」。
- 数字忠实原值,禁止为排版美观而失真(口语化措辞可以,数字不动)。
- 不使用「建议买入/卖出」措辞;不做走势预测。
- 数据完整性防御(必查):写入
report_data.json前须保证所有字符串字段无 U+FFFD(ufffd,常见于编码转换错乱后的"豆腐字"占位符)——出现即视为上游数据污染,禁止在 HTML 中静默渲染成□误导读者。generate.py已自带sanitize():递归扫描全字段、统计 U+FFFD 数量并把字段路径写到 stderr,输出时把每个 U+FFFD 替换为可见占位符[?]。自动化复跑亦受此约束:脚本检测到任何 U+FFFD 时须中止 IMA 上传、回到 JSON 修复源数据,绝不带脏上传(脚本报错立即停)。手工复跑若看到[WARN] corruption marker(s) detected必须先修 JSON 再生成。