OxYGC头像
[程序人生]美股 MSFT 一年行情复盘:账面只跌 1.33%,路上却最深跌掉 34.91%封面图

[程序人生]美股 MSFT 一年行情复盘:账面只跌 1.33%,路上却最深跌掉 34.91%


💡 前阵子我给自己写了个小脚本:把一只股票的日线拉下来存成 CSV,然后现算指标,不信任任何网站页面上写好的结论。第一个标的选了 Microsoft(NASDAQ: MSFT)——够大、够有讨论度,而且刚好走完了一个特别戏剧化的年份。

结果出来我盯着屏幕愣了两秒。同一只股票、同一段一年时间,三个数字互相打架:

一年净变动路径长度区间最大回撤
−1.33%351.0%−34.91%

账面几乎回到原点,中间却一度跌掉三成半;累计走过的涨跌幅度是净变动的两百多倍。这三个数字都是对的,它们只是回答了三个不同的问题。

更麻烦的是,这一年里最狠的两天——单日 −9.99% 和单日 +15.51%——都发生在财报公布后的第一个交易日,也就是说整整一年的行情节奏,被两次开盘跳空决定了大半。

所以这篇想把 MSFT 的 2025-10-01 到 2026-10-01 摊开来算一遍:数据从哪来、每个数字怎么定义、五段行情分别对上了哪天哪条新闻,以及最后我把这件事脚本化时踩到的那个均线坑。它是一篇数据复盘,不是投资建议,也不会给你"该不该买"的答案。


1. 先把数据口径钉死

行情类文章最容易写歪的地方,不是判断错,而是数字来路说不清。

我的链路很短,全程只有一份原始数据:

stockanalysis.com 日线接口 --> 252 行 OHLCV --> sources/*.csv --> Python 现算 --> 本文所有数字

具体口径一次性列清楚,后文出现的每个百分比都能回到这张表:

项取值说明
数据源stockanalysis.com 的历史行情页同域 JSON 接口,一次返回 252 个交易日
窗口2025-10-01 → 2026-10-01共 252 个交易日,即 251 个日收益样本
价格每日收盘价(USD)起点 519.71,终点 512.80
快照时间2026-10-01 收盘盘中价、盘后价一律不采信
衍生指标全部由本地 CSV 现算均值、标准差、回撤、路径长度、季度收益
基本面Microsoft FY26 Q4 财报新闻稿2026-07-29 发布,官方口径
Q1:为什么用收盘价而不是日内最低价来算回撤?

因为日内价是"你未必能以那个价格成交"的价格。用收盘价算出来的回撤,对应的是一个每天只在收盘看一眼、按收盘价记账的人的真实体感;用盘中低点算,会把闪跌、开盘瞬间的错价也算进来,得到一个没人真正承受过的数字。

本文统一用收盘价。作为对照,两个盘中极值也记一下,只用于说明"52 周区间"这种常用口径:

口径高低
收盘价(本文用)542.07(2025-10-28)352.83(2026-06-25)
盘中价(52 周区间口径)553.72349.20
Q2:"跌掉三成半"和"全年只跌 1.33%"怎么会同时成立?

因为它们量的是两件事:一个量的是端点,一个量的是路径。这一点是整篇文章的地基,下一节用一个图讲完。


2. 三个数字看完这一年

把三个最容易混淆的指标定义清楚,绝大多数行情争论就已经消失了一半。

MSFT 一年的收盘价路径:起点 519.71 与终点 512.80 几乎同高,中间先冲到 542.07 再跌到 352.83,图上用三条标注分别指出净变动 −1.33%、路径长度 351.0%、最大回撤 −34.91%

三个指标的定义:

指标算法这一年它回答什么
净变动c[末]/c[首] - 1−1.33%拿到年底还剩多少
路径长度`Σr[日]`
最大回撤相对历史滚动最高点的最大跌幅−34.91%中途最疼的那一下

用一行的方式写出来更直观:

净值   519.71 (10-01) ──── 512.80 (10-01)      全年净变动        -1.33%
峰值   542.07 (10-28) 此后 232 个交易日没再摸到   年底仍差        -5.40%
谷底             352.83 (06-25)                  相对峰值回撤   -34.91%
脉冲                     451.10 (07-30)           当天单日      +15.51%

其余几个描述"这一年有多颠簸"的数字,一并列在这:

指标数值口径
日均收益+0.0156%251 个样本的算术平均
日收益标准差2.065%样本标准差
年化波动率32.78%σ × √252
上涨天数 / 下跌天数123 / 128不含零变动
单日涨跌幅超 3%25 天约每 10 个交易日一次
单日涨跌幅超 5%4 天全部落在 1~7 月之间
涨跌幅在 ±1% 以内的日子116 / 251 天刚过一半
日涨跌幅中位数(绝对值)1.11%典型的一天
日均成交量31.66M 股全年均值

还有一个特别容易被忽略的数字:距离上一次创新高,已经过了 232 个交易日,到 2026-10-01 收盘仍差 −5.40%。

也就是说,如果你在 2025-10-28 那天买入并拿到这一年结束,你的持仓曲线是"先亏掉三成半,然后爬回来,最后离回本还差 5.4%"。这就是路径和端点的区别:净值只关心你现在值多少,路径关心你中途被要求承受什么。

Q3:为什么"今年以来涨 6.03%"和"一年跌 1.33%"也不矛盾?

因为起点不同。2025-12-31 收盘是 483.62,比 2025-10-01 的 519.71 低了 6.9%。用不同的起点算,同一段行情可以给出 +6.03%(自然年 2026 年初至今)和 −1.33%(滚动一年)两个都正确的答案。

这也是我看所有"涨了多少"的新闻标题时的第一反应:先问起点是哪一天。 分季度拆开就更清楚了:

区间收益一句话
2026 Q1(1/1~3/31)−23.46%财报砸盘 + 两个月阴跌
2026 Q2(4/1~6/30)+0.77%反弹完又被卖回谷底
2026 Q3(7/1~9/30)+37.50%一次财报脉冲 + 一季修复
2026 Q4 至今(10/1)−0.02%一天,还没开始
自然年 2026 至今+6.03%起点是 12/31 的 483.62

Q3 那 +37.50% 还有个外部对照:TipRanks 直接把它写成"微软自 1991 年以来最好的一个季度"。我自己算出来的季度收益和这个说法对得上,这种"自己算一遍刚好能对上外部口径"的时刻,是数据复盘里最让人安心的瞬间。


3. 五段行情:每一段对上了哪一天、哪条新闻

把曲线切成段,每段单独问一句"这几天到底发生了什么"。

把 252 天切成五段行情的时间轴,配上 12 根月度收益柱:2026 年 1 月 −11.03%、6 月 −17.15%、7 月 +24.58% 三根最突出

分段用收盘价端点,幅度可以完全复算:

段区间(收盘)幅度公开报道给出的解释
① 冲顶10-01 → 10-28 519.71 → 542.07+4.30%财报前的平静期,没找到能对齐到某一天的单一事件
② 财报砸盘01-28 → 02-05 481.63 → 393.67−18.26%Investopedia:Azure 增速略超预期但低于市场最乐观预期、AI 资本开支继续上行
③ 春季反弹03-30 → 05-29 358.96 → 450.24+25.43%软件板块整体修复:市场此前担心 AI 会冲垮传统软件的订阅模式,这个担忧在二季度明显退潮
④ 二次探底06-01 → 06-25 460.52 → 352.83−23.38%没找到单一催化剂(下面单独说)
⑤ 财报脉冲与修复07-29 → 09-30 390.54 → 512.90+31.33%财联社:7/30 单日市值增加约 4500 亿美元,创全球股市个股单日市值增幅纪录

逐段补几句人话:

① 冲顶这段是全年最"没剧情"的一段。10/28 那根 542.07 的收盘是这一年真正的顶部,此后再也没有被摸到——而且它是在财报前的平静期创出来的。这条时间线后面回看很有教育意义:最高点通常出现在没有任何坏消息的那几天。

② 财报砸盘很干净。1/28 收盘还在 481.63,1/29 一天直接 −9.99% 掉到 433.50,成交量 128.9M 股,是全年第二高。按 Investopedia 当天的说法,这一个交易日抹掉了接近 3600 亿美元市值,是当时美股史上个股单日市值损失的第二大(第一是 Nvidia 在 DeepSeek 事件那天的约 6000 亿美元)。值得记住的是它的结构:Azure 其实超过了公司自己给的指引,只是增速不如买方模型里最乐观的那一档,同时资本开支的天花板还在往上抬。"业绩很好但不及预期 + 花钱更多"这个组合,杀估值比杀业绩更利落。

③ 春季反弹从 3/30 的 358.96 起,到 5/29 收 450.24,两个月涨回 25%。这段的宏观解释我不硬编(板块轮动、软件股估值修复这些说法都对,但都不精确到某一天)。

④ 二次探底是全年我最不舒服的一段:6 月一个月 −17.15%,把反弹全部还回去,6/25 收盘 352.83、盘中 349.20 就是这一年的绝对低点。我翻了当时能找到的报道,没有找到任何一条能对齐到具体某天的单一催化剂——没有新指引、没有监管动作、没有 OpenAI 相关的大新闻落在窗口里。所以我给它的答案是"这一段我没能解释"。行情里就是有这种段落,它是估值、仓位和资金流共同作用的结果,硬要配一个原因只会写出假新闻。

⑤ 财报脉冲是这一年最值得单独记的一天。7/29 收盘 390.54,7/30 直接跳到 451.10,单日 +15.51%、成交量 110.2M 股、开盘 437.90(跳空 12%)、当日最高 458.69。按 财联社 的统计口径,这一天微软市值增加约 4500 亿美元,超过了 Nvidia 在 2025 年 4 月创下的约 4400 亿美元,成为全球股市单只个股单日市值增幅的新纪录。同一批报道里的两个对照我印象很深:这个单日涨幅大于标普 500 里 96% 成分股的总市值,也大于那 41 只最小成分股的市值合计。


4. 波动才是这一年的主角

净值只走了 1.33%,路上却发生了 25 次超过 3% 的单日移动。

全年单日涨跌幅绝对值最大的 12 天(收盘价与成交量均来自本地 CSV):

日期收盘单日涨跌幅成交量落在哪一段
2026-07-30451.10+15.51%110.2M⑤ 财报脉冲
2026-01-29433.50−9.99%128.9M② 财报砸盘
2026-06-26372.97+5.71%186.2M④→⑤ 谷底次日反弹
2026-05-29450.24+5.45%79.7M③ 反弹末段
2026-02-05393.67−4.95%66.3M② 砸盘尾段
2026-08-03487.65+4.93%66.8M⑤ 修复
2026-04-15411.22+4.61%45.1M③ 反弹起点区
2026-06-02441.31−4.17%37.0M④ 二次探底起点
2026-04-23415.75−3.97%38.3M③ 反弹中段
2026-04-30407.78−3.93%70.9M③ 财报日回落
2026-06-17378.91−3.79%42.0M④ 二次探底
2026-09-25516.17+3.66%37.9M⑤ 修复末段

三个观察:

  1. 成交量前三天,全都是 ±5% 以上的日子。 全年日均 31.66M 股,而 110M/128M/186M 是它的 3.5~5.9 倍。价格发现只在少数几天里集中发生,剩下的 249 天基本是在为这几天做准备。
  2. 换手最凶的一天,不是最低点本身,而是最低点的旁边那天。 6/25 收在年内最低的 352.83,6/26 一根 +5.71% 的阳线,成交量 186.2M 股是全年最大(比 1/29 砸盘那天还高 45%)。这不是玄学:价格被砸到极端位置时,割肉盘和承接盘才会同时放量,真正成交巨大的日子往往是"分歧最大"的那天,而不是"最惨"的那天。
  3. 两个方向的极端都由两次财报决定。 全年最大涨幅和最大跌幅都发生在财报后的第一个交易日,中间隔了 6 个月,幅度是 +15.51% 和 −9.99%。把这两天按顺序连起来看,一年 351% 的路径里有 25.5 个百分点来自这两天。
Q4:那"错过最好的几天就全完了"这种说法,到底能不能信?

先把算术摆出来,这部分是真的:

假设全年结果
原样持有 252 天−1.33%
错过全年最好的 4 天(+15.51/+5.71/+5.45/+4.93%)−26.97%
错过全年最差的 4 天(−9.99/−4.95/−4.17/−3.97%)+25.33%

但我不把它当结论用,原因有三条:

  • 这组数字天生不对称。随机抽 4 天,抽到大涨日和抽到大跌日的概率一样,可"错过最好 4 天"的代价明显大于"错过最差 4 天"的好处——原因很朴素:这一年的单日上界是 +15.51%,而下界只有 −9.99%,涨幅那一侧有一条更长的尾巴。所以这类对照必须双向同时报,只报一边就是话术。
  • 样本只有 251 个日收益,"最好/最差的 4 天"是从这一段里挑出来的,属于事后视角。
  • 真正可复现的只有"这一年哪几天动了大钱",不蕴含"你能提前躲开或赶上"。

我的处理方式是:把这三个数字当成"路径风险的度量"来记,而不是当成择时策略。这跟做系统时的思路一样——P99 是用来估计容量的,不是用来预测下一次请求耗时的。


5. 股价走平的这一年,基本面那边完全不是同一张图

这一节回答:账面没动的这一年,公司本身变了多少。

左侧是 MSFT 在 2026-10-01 的估值快照(市值 3.81 万亿美元、市盈率 28.57、远期市盈率 25.97、股息率 0.76%、Beta 1.11、52 周区间),右侧是 FY26 全年与 Q4 的官方数字(营收 3318 亿 +18%、Azure 全年破 1000 亿、商业 RPO 6780 亿 +84%、云 593 亿 +27%)

先看官方口径。以下数字全部取自 Microsoft FY26 Q4 财报新闻稿(2026-07-29 发布,财季截止 2026-06-30):

指标FY26 Q4同比FY26 全年同比
营收$90.0B+18%$331.8B+18%
营业利润$40.6B+18%$155.2B+21%
净利润(GAAP)$35.8B+31%$133.7B+31%
摊薄 EPS(GAAP)$4.81+32%$17.95+32%
Microsoft Cloud 收入$59.3B+27%——
商业剩余履约义务(RPO)$678B+84%——
Intelligent Cloud$39.3B+32%——(其中 Azure 增速 +43%)
Productivity & Business Processes$37.8B+14%——
More Personal Computing$12.9B−4%——(Windows OEM −7%、XBOX 内容与服务 −10%)
单季向股东返还$10.2B股息 + 回购——

新闻稿里还有两句容易被划过去、但对解释全年行情很关键的话:一是全年 Azure 收入首次突破 1000 亿美元,二是 Microsoft 365 Copilot 付费席位超过 3000 万。另外这个季度有一批"一次性事项",合计给摊薄 EPS 带来 $0.27 的正向影响,其中包含来自 Anthropic 投资的 32 亿美元浮盈;而非 GAAP 口径则专门剔除了 OpenAI 投资带来的影响。换句话说,连官方自己的报表都必须把"两家 AI 公司的股权波动"单列出来才能看懂主业,这本身就是这一年最重要的注脚之一。

再看市场给这只股票的定价快照(2026-10-01 收盘,来源同为 stockanalysis.com):

项数值
收盘价$512.80(−0.02%)
市值$3.81T
流通股本7.43B 股
市盈率 / 远期市盈率28.57 / 25.97
TTM 营收 / 净利润$331.84B(+17.8%) / $133.75B(+31.3%)
年股息 / 股息率$3.92 / 0.76%
Beta1.11
52 周区间349.20 – 553.72
卖方评级 / 平均目标价Strong Buy(55 位) / $577.26(+12.57%)
下一次财报2026-10-28

这一年的"账面没动"其实有个非常省事的解释。股价可以拆成两个因子相乘:

股价 = TTM 每股收益 × 市盈率

用今天的报价数字(EPS 17.95、PE 28.57)和站点给出的 TTM 增速(+31.6%)反推一年前,再和 2025-10-01 的收盘价 519.71 对一遍:

因子2025-10-01(反推)2026-10-01变动
TTM EPS≈ $13.64$17.95+31.6%
市盈率≈ 38.1 倍28.57 倍−25.0%
股价519.71512.80−1.33%

把两个因子乘回去:1.316 × 0.750 = 0.987,也就是 −1.3%,和第 2 节算出来的全年净变动 −1.33% 正好对上。

这就是整篇文章最核心的一句话:公司这一年多赚了三分之一,市场愿意为每一块钱利润付的价钱少了四分之一,两件事相乘的结果是股价原地。 一年 351% 的路径,本质上是这个"四分之一"在一月被砸出来、在七月被收回去的过程。

(反推口径:一年前的 EPS 由今日 17.95 与 +31.6% 增速倒算,市盈率再除以当时收盘价;假设股本不变。属于自洽校验,不是官方披露数字,见文末台账。)

Q5:营收 +18%、RPO +84%、Azure +43%,为什么股价一年下来没创新高?

三个层次,证据强度依次递减:第一条是算术,第二条有报道口径,第三条属于我的读法。

  1. 倍数被压了 25%,价格才会不动。 上一段已经把账算平了:账面收益的上涨几乎全部来自利润,而不是来自估值。于是问题从"公司怎么没长大"变成"为什么市场只肯付 28 倍而不是 38 倍"。
  2. 市场在重定价的是资本开支,不是当期收入。 1/29 那次砸盘的报道口径里,被反复提到的两件事是"AI 基建投入继续上行"和"订单积压里高度依赖单一客户"。按 Investopedia 当天的说法,接近一半的商业剩余履约义务与 OpenAI 相关——这个比例我没有在官方披露里找到单独口径,属于媒体二手数字(见文末台账)。
  3. RPO +84% 是"已签未确认",不是现金。 6780 亿美元的剩余履约义务能说明需求真实存在,但它同时把"未来几年要花多少电、多少卡、多少机房"绑在了一起。买方模型里改的是这条曲线,不是报表上那 18%。
Q6:那 7/30 为什么又能一天涨回 15.51%?

同一批数字换了预期基准就会是另一个故事:财报前市场已经把"资本开支失控 + 客户集中"当成默认剧本,结果 Azure 增速给到 +43%(新闻稿口径),财联社那篇报道还特别提到这是 2022 年初以来的最高增速,而资本开支计划没有继续上调——于是折价被一次性收回来。这就是第 3 节说的"两次财报决定了一年节奏":同一家公司、同一份报表,差的是市场当时假设了什么。


6. 我把它脚本化了,顺便踩了一个均线的坑

技术人看行情的正确姿势:能一行行复算的数字,就不要抄网页上的结论。

上面所有百分比都来自同一个不到 30 行的脚本,输入只有那份 CSV:

import csv, statistics as st

rows = list(csv.DictReader(open("sources/msft-2025-10_2026-10-daily.csv")))
c = [float(r["close"]) for r in rows]
d = [r["date"] for r in rows]
rets = [(c[i] / c[i - 1] - 1) * 100 for i in range(1, len(c))]

print("net", round((c[-1] / c[0] - 1) * 100, 2))          # -1.33
print("path", round(sum(abs(r) for r in rets), 1))        # 351.0
print("annvol", round(st.stdev(rets) * 252 ** 0.5, 2))    # 32.78

peak, trough_dd = c[0], 0                                  # 最大回撤(滚动高点)
for i in range(len(c)):
    peak = max(peak, c[i])
    trough_dd = min(trough_dd, c[i] / peak - 1)
print("mdd", round(trough_dd * 100, 2))                   # -34.91

这个脚本在写作过程中给我抓出了三个真实的数据坑,值得单独记一下。

坑一:接口最多只给 252 行,200 日均线算不出来。 我原本想在图里画 200 日均线——行情文章的标配。结果把请求参数从 range=1Y 换成 range=2Y,返回还是 252 行(接口做了截断)。200 日均线需要 200 个历史样本,于是在这 252 天里只有最后 53 天可算。硬画会得到一条从 7 月中才出现的均线,看起来像"这只股票 7 月才追上长期趋势",而真实原因是我的数据不够。最后我把这个指标整个从图里去掉了,只在台账里写下能算的那部分:可算区间内价格在上方的有 45 天、下方的有 8 天,唯一一次上穿发生在 7/30(就是那根 +15.51% 的阳线)。

坑二:收盘价可能是复权也可能不是。 不同站点对"close"的定义不一致(原始价 / 前复权 / 后复权),分红日就会出现偏差。MSFT 年股息 $3.92、股息率 0.76%,量级不大但方向明确:如果这条序列是原始收盘价,含分红的总收益会比 −1.33% 好大约 0.7 个百分点。我没能在页面上找到该站点历史接口的复权口径声明,所以正文里的 −1.33% 只当价格变动用,不当总回报使用。

坑三:同一天的成交量会有两个版本。 我抓数据时页面顶部快照显示 10-01 成交量 19,731,883,而历史接口同一行返回 18,883,693——结算前的量还在补。凡是拿"某天成交量"做结论,先确认它是快照还是终值。

Q7:为什么不直接用 pandas / yfinance?

因为这两层的失败方式很隐蔽。yfinance 走的是另一家数据商的接口,字段命名和复权处理是黑盒,取回 252 行之后你依然不知道自己是"原始价"还是"复权价"。我的偏好是:数据源显式落盘成 CSV,指标自己算,宁可少一个功能,也不要一个说不清来路的数字。这跟我们在生产里宁可用手写 SQL 也不让 ORM 悄悄生成 N+1 查询,是同一个心态。


最后总结

  • 先问口径,再谈结论。 同一年的行情换个起点或换个算法,就能给出 −1.33% / +6.03% / −26.97% 三个都正确的数字,行情争论有一半是起点之争。
  • 端点骗人,路径不骗人。 净变动只回答"还剩多少",最大回撤回答的是"中途要求你承受什么"——这一年是 −34.91%,而且是 232 个交易日之后仍未回补。
  • 利润 × 倍数 = 股价。 这一年 TTM 每股收益 +31.6%、市盈率 −25.0%,乘出来正好是 −1.33%。想看懂"什么都没发生"的一年,就得把它拆成这两个因子。
  • 少数日子承担全部信息量。 25 天超过 ±3%,4 天超过 ±5%,全年最大成交量的三天全在这些日子里;剩下的时间是在等待。
  • 没找到原因就不编原因。 6 月那一整月 −17.15%、把年内低点砸到 349.20 的段落,我在公开报道里没对齐到任何单一催化剂,这篇文章里它就标着"未解释"。
  • 对做工程的人,这一年最有共鸣的部分:市场对"资本开支先行、收入滞后"的资产反复重定价——1 月因为花钱被卖掉三成半,7 月因为花出去的钱开始变成 Azure 收入被买回来。这个结构跟我们做基础设施投入的决策逻辑一模一样,难的一直是"什么时候该被记账"。
  • 最后重申一句:这是数据复盘,不构成任何投资建议。上面的每个数字都可以照第 6 节的脚本自己复算一遍——这也是我建议的用法。

参考资料 & 致谢

[1] MSFT 历史行情(日线)- stockanalysis.com
[2] MSFT 报价与统计快照 - stockanalysis.com
[3] Earnings Release FY26 Q4 - Microsoft Investor Relations
[4] Looking back on Microsoft’s FY26 - Microsoft Blogs
[5] Microsoft Shares Plunge 10%, Wiping Out Nearly $360 Billion - Investopedia
[6] Microsoft Stock Soars on Solid Q4 Results - Investopedia
[7] 一夜扫尽AI阴霾!微软创全球股市单日市值涨幅之最 - 财联社
[8] Microsoft stock plunges as Wall Street questions AI investments - Al Jazeera
[9] Software roared back last quarter - CNBC
[10] Microsoft Stock (MSFT) Closes Out Best Quarter Since 1991 - TipRanks

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/YangCheney/article/details/166993097

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--