返回 Skill 列表
extension
分类: 数据与分析无需 API Key

美股每日行情速览

欢迎关注IMA知识号@搬砖小能手。美股每日速览复盘。直观展示2大核心指数(纳斯达克指数 / 标普500指数)、GICS 行业 ETF 涨跌、13 家主要公司市场表现(苹果 / 英伟达 / 谷歌 / 微软 / 亚马逊 / Meta / 特斯拉 / SpaceX / 台积电 ADR / 博通 / SK 海力士 / 美光 / 伯克希尔-A),并给出客观市场简评与当日重要事件(关键事件 + 8 大科技巨头新闻)。触发词:美股行情速览、美股速览、每日复盘、每日速览、两市速览。手动触发,默认复盘当日。

person作者: user_44747f29hubcommunity

美股行情速览助手

定位与边界

  • 速览型复盘:5 分钟看完今天美股发生了什么。直观数据展示 + 关键事件梳理 + 客观市场定性。
  • 禁止技术分析式预测:不画线、不数浪、不推走势、不给均线/MACD 信号、不做次日点位预判。市场简评只做基于数据的客观描述。
  • ah-market-briefing(A股速览)共享同一套渲染引擎与风格锁,但数据源、指数、公司、板块全部改为美股视角。
  • 数据源:结构化行情数据仅腾讯自选股(westock-mcp MCP 工具,与 A股速览同源)——指数 / 个股 / 行业 ETF / 涨跌分布等数值类数据禁止用 web_search/curl/第三方 API 替代。模块六「今日重要事件」的新闻来源改用 WebSearchtopic=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 | 美股 |

数据采集(可并行,共约 6~8 次调用)

# 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
#    WebSearch(topic=finance, query="2026-MM-DD 美股 重要事件/政策" 等),限当日、限权威源
#    8 大科技巨头各以「公司名 + 日期 + 新闻」查询;摘要基于搜索摘要/正文,标注来源

MCP 等价工具:data_quote(code/codes)。data_changedistdata_sector(A股速览的沪深/申万口径)在本 skill 中不可用——已改为「GICS ETF 涨跌」单模块。 新闻取数:模块六改用 WebSearch(topic=finance,query 带当日日期 + 公司/主题,限权威源),不再调 data_news;需要正文细节时用 WebFetch 取原文链接。

性能优化约定(生成提速,落地必读)

美股速览整体耗时的主要来源不是 Python 渲染,而是智能体编排循环(每步工具调用之间都有一次模型推理往返)。按以下优先级执行,可在数据口径与 v5 版式零改动的前提下,将整体耗时压缩约 60–70%:

  1. 并行工具调用(P0,最大杠杆):两次 data_quote(指数+个股 / 12 只 ETF)、以及 5 次 WebSearch 全部放进同一条消息的并行工具调用,不要逐个串行发起。交易日判定已合并进指数行情(见「交易日检查」,直接看 data_quote 返回的 time 字段),不单独占用一轮调用。串行 5 次 WebSearch ≈ 5×单程耗时;并行后 ≈ 单次最慢耗时。
  2. 消除冗余调用(P0):交易日判定无需调用 data_trade_calendar(见「交易日检查」——该工具只返回 A股日历,对美股无效)。直接用指数 data_quote 返回的 time 字段确定报告日期,省掉 1 次调用与 1 次编排往返。
  3. fetch 与 generate 链式合一(P1):在一条 Bash 内 python fetch_kline_us.py report_data.json && python generate.py report_data.json <out.html>,省掉一次独立进程启动与一次编排往返。
  4. fetch_kline_us.py 已并行化(P1,已落地):2 个指数 HTTP 请求走 ThreadPoolExecutor 并发,墙钟耗时 ≈ 较慢那一个请求(原串行 ≈ 两者之和,且单请求超时曾高达 25s)。可调环境变量:
    • KLINE_TIMEOUT(默认 10s,原为 25s)—— 收紧尾部延迟
    • KLINE_RETRIES(默认 2)—— 上游抖动时重试
    • KLINE_WORKERS(默认 4)、KLINE_BARS(默认 320)
  5. 跳过非必要重读(P2):SKILL.md 与 generate.py 契约稳定,无需每次重新 Read 源码;仅在改动契约后重读。

取舍说明:以上均为"编排/并发"层面优化,不改变任何数据口径与报告版式(v5 风格锁不变)。唯一潜在副作用是并行 WebSearch 数量增多会同时占用更多检索配额,但单份报告体量下无感知影响。若某环境对并发工具调用有限制,可退化为分组并行(先并行全部 data_quote+data_trade_calendar,再并行全部 WebSearch),仍可获大部分提速。

报告结构(6 个模块,顺序固定)

  • AI 生成声明(前置):header 右上角的知识库引导语由 report_data.jsonima_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):直接取自 quotechg_ytd 字段(%);与近5日/近20日并列为三档时间尺度,直观呈现「短期反弹 vs 中期位置」的张力。
  • 价格/市值/成交额单位为美元,禁止混用港元/人民币符号。
  • 表格单元格不载单位后缀:表头已标注「总市值(亿)」「成交额(亿)」等,单元格仅放裸数字。

模块五:市场简评(4 段式,说人话,普通投资者能看懂)

写作目标:用大白话把"今天美股发生了什么、为什么、跟咱们有什么关系"讲清楚,让没时间盯盘、看不懂图表的普通人也能一眼抓住重点。保持客观、不喊单、不预测涨跌。

基本规矩

  • 图表(指数卡片、行业 ETF 涨跌图)里已经摆得明明白白的数字和排名,不要在简评里抄一遍。简评的价值是"图表说不清、但你想知道"的部分——背后的原因、逻辑和含义。
  • 说人话,不用行话:避免"估值出清""安全边际""久期""存量博弈""价值/成长切换""流动性"这类圈内黑话。非用不可时,用大白话补一句解释(如把"估值偏高"写成"价格比公司本身值钱的水平贵了不少")。
  • 每条判断都要有当天的事实或数据支撑,不空谈、不喊口号;不做明天涨跌的点位预测,也不给"买/卖"建议。

按「先说结论、再讲原因」组织,每段用加粗的一句话当小标题,让人扫一眼就懂:

  1. 今天整体是个什么局面:一句话说清今天美股是普涨、普跌还是冷热不均(如"今天科技股带头反弹,其他板块跟涨不多"),紧接着讲清楚钱为什么这么走——是消息刺激、避险、还是前期跌多了自然回血。
  2. 钱往哪儿跑了,为什么:不用重排行业涨跌榜(图里有),而讲"资金为什么弃一些、捧一些"——比如大家更爱稳当的、还是更敢押有想象力的;哪类股票被冷落、哪类被追捧。
  3. 今天的大事件影响了谁:挑当天最醒目的事,讲清"这事 → 影响了什么 → 哪些公司/行业直接受影响",别停在"发生了什么事"的复述。
  4. 放到更长一点时间看:用普通人的视角看现在处在什么位置——是贵了还是便宜了、后面值得盯什么信号(只列观察项,不预测点位)。

写法提示:每段尽量短、句子短、少用长句;多用"比如""说白了""换句话说"拉近距离。纯盘面数字罗列一律回退重写。

  • 事实核查硬约束:简评里提到的公司动向、政策、监管动作等,必须来自模块六经时效性甄别后的 WebSearch 或当日权威信源。不凭记忆编造状态,不采信没经过时间核对的旧闻。说不准的事,老老实实标注"据公开报道",或干脆删除该判断。

模块六:今日重要事件(新闻来源 = WebSearch)

  • 取数方式:用 WebSearch(topic=finance)按「当日日期 + 主题/公司名」查询,限当日、限权威源(新华社、财联社、证券时报、交易所/公司公告、主流财经媒体);需要正文细节时用 WebFetch 取原文链接。禁止调腾讯自选股 data_news(list 仅标题、detail 无正文)。
  • 关键事件(3-5 条):从检索结果中高度精选,准入硬杠——①对当日市场有直接可见的驱动(事件与某板块异动可建立清晰因果链);②涉及政策/监管层面信号性变化;③涉及模块四 13 家追踪公司的重大动态(归入下方科技巨头板块)。排除:常规低频数据发布、日常价格波动、已在简评充分覆盖的事件、热搜个股/板块堆砌。无达标项则该小节不出现。
  • 写法(说人话):每条用一句大白话标题点明"发生了什么",正文用 1–2 句讲清"这事儿跟市场、跟普通投资者有什么关系、影响了谁",避免照搬政策原文和术语堆砌。科技巨头新闻同理——先说清这事意味着什么,再补细节。
  • 事件时效性判别(准入前置):关键事件的"发生时间"必须约束在当日或前一日,而非"报道时间"。对于涉及监管进展、IPO 申报/获批、重大交易、政策发布等里程碑事件,必须通过多源交叉验证确认其真实发生时间。若多家信源指向同一旧事件、且均未给出新的增量信息,则判定为「旧闻重提」,直接排除,不得以"今日有媒体报道"为由纳入当日事件。疑似的旧闻重提者可降级为进展追踪(标注「据 XX 报道,此事已推进至 YY 阶段,持续关注」),但不得单独列作当日关键事件。
  • 科技巨头当日重要新闻(苹果 / 英伟达 / 谷歌 / 微软 / 亚马逊 / Meta / 特斯拉 / SpaceX):每条标题 + 主要内容摘要(基于搜索摘要/正文提炼,标注来源 w)。
  • 条数红线(防凑数):8 家科技巨头各按实际重大程度列示,单家最多 3 条、不强制凑满 3 条;仅纳入当日可验证、对个股/板块有直接影响、或触及政策/监管信号性变化的事件。纯常规公告、已在简评充分覆盖、或低频数据发布一律排除。若某家当日仅 1 条重大新闻,则只列该 1 条,不补位灌水。
  • 诚信底线:摘要须忠实于检索到的原文/摘要,注明来源;不得为填充数量而编造或夸大

单位与展示规范(重要,易错)

| 字段 | 原始单位 | 展示 | |------|---------|------| | 指数 volume | 股 | ÷1e8 → 亿股。指数只用 volume,其 amount 是点位×股数的名义值,禁用 | | 个股/ETF amount | 美元 | ÷1e8 → 亿美元(注:腾讯自选股美股接口 amount 字段单位已为亿美元,直接展示) | | total_market_cap | 亿美元 | 同样 ÷1e8 后传数值;表头已有单位(总市值(亿)、成交额(亿)),单元格仅放数字、不载「亿/万亿/美元」等后缀 | | 涨跌幅/chg_5d/chg_20d/chg_ytd | % | 忠实原值,保留两位小数,不得为美观改数;chg_ytd=年初至今,供模块四 YTD 列 | | 任一字段数据源缺失 | — | 契约里显式写 nullgenerate.py 渲染为 --绝不用 0 或估算值补位 |

  • 颜色:上涨 #e63946(红)、下跌 #2d6a4f(绿),美股惯例勿反。
  • 浅底深字研报风;ECharts 内联嵌入 skill 目录 echarts.min.js(生成时直接写入 <head><script>,不引外部 CDN)——报告完全自包含,离线秒开、任何预览沙箱可用。

交付

  1. 用 skill 目录下的 generate.py 生成,不要每次手写 HTML:把 6 模块数据写入 report_data.json(UTF-8,字段见下方「数据契约」),执行 python generate.py <report_data.json> <daily-review/美股速览_YYYYMMDD.html>
  2. 交付前对内联 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[^>]*>([\s\S]*?)<\\/script>/i); if(m) new vm.Script(m[1])"),无需跨命令写临时文件,避免沙箱文件系统视图不一致导致 node --check 找不到文件。备选方案:环境支持跨命令文件持久化时,可将 <script> 内容抽到临时 .js 执行 node --check
  3. 聊天中只给一句摘要 + 文件路径,并用结果展示工具呈现。
  4. 报告结尾注明:「以上内容基于公开数据整理,仅为客观信息汇总,不构成投资建议」。
  5. 分享 / 预览:技能自带 sample_data.json(精简样例,字段与「数据契约」一致)。他人安装技能后,无需先采集真实数据即可 python generate.py sample_data.json demo.html 一键预览 v5 风格——风格随 generate.py 传递,与本地 v5 报告文件无关。

安装后配置

最小配置(即可使用)

无需任何配置。安装后直接走「数据采集 → 生成 HTML」流程,HTML 报告生成本地 daily-review/ 目录后可离线查看。

可选:IMA 知识库上传(不在本 skill 内置)

本 skill 只负责「生成报告」,不内置上传逻辑。如需把报告同步到个人 IMA 知识库:

  • 完整上传流程(create_mediacos-upload.cjsadd_knowledge)与 COS 签名脚本,见 ima-skillknowledge-base/SKILL.mdknowledge-base/scripts/cos-upload.cjs
  • 推荐在调用本 skill 的自动化任务 / 工作流中编排「生成后上传」步骤,作为报告投递环节(避免把上传链路塞进可复用 skill,造成多份副本漂移);
  • 报告 header 右上角的知识库引导语由 report_data.json 可选字段 ima_badge(字符串,如 "📚 关注 IMA 知识库「你的知识库名」")驱动,不设则不显示——这是纯展示文本,与是否实际上传无关;
  • 上传时务必使用你自己的 IMA 知识库 ID,切勿沿用任何他人 ID。

生成器与渲染规范(固化,避免反复踩坑)

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:trueinverse: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":[...],        // 模块六(关键事件/关键事项 + 8 巨头新闻);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 再生成。