Strasmore Research
學習 Matt Connor作者: Matt Connor · data as of September 25, 2026 · refreshed weekly

MSFT 距高點跌多少?2015 年以來回檔數據

MSFT 距歷史收盤高點與滾動 252 個交易日(約 52 週)最高收盤各低多少?本文以每日收盤價列出 2015 年以來每一段 10% 以上回檔的深度、谷底日期與收復日曆天數,統計交易日待在水面下的比例,並說明台幣計價時匯率如何改變同一段美元跌幅,每個數字都附上可重算的 SQL,換日期即整組更新。

MSFT 距高點跌多少?以 2026/09/25 的收盤價計算,微軟(MSFT)收在 497.22 美元,比 2015 年以來的最高收盤低 8.3%,比過去 252 個交易日(約 52 週)的最高收盤低 8.27%。同一份每日收盤價資料還能回答一個更有用的問題:這樣的幅度放進 2015 年以來的分佈裡,算深還是算淺。下面每一個數字都由面板上的 SQL 當場算出,換一次日期就整組一起更新。

先把「高點」定義清楚

回檔(drawdown)的算法沒什麼爭議,爭議都在分母。回檔是現價相對於「之前某一個高點」的跌幅,所以高點指哪一個必須先講明。本文全程使用收盤價,理由很單純:收盤是一天之內唯一一個所有人都同意的價格,也是對帳單上的評價基準。用盤中最高價(intraday high)當分母,同一段行情的跌幅會看起來更深,兩種算法不能混著引用。

常用的高點有兩個。第一個是歷史收盤高點,本文以 2015 年 1 月之後的收盤價為視窗,視窗內的最高收盤就是當時的高點。第二個是 52 週收盤高點,本文定義為滾動 252 個交易日(一年約 252 個交易日)的最高收盤。後者的讀法另見 52 週新高與新低怎麼看,最大回檔這個指標本身另見 最大回檔 maximum drawdown 是什麼。

下面這張面板放的是最近約四個月的每日收盤價,對照同期滾動 252 個交易日的最高收盤。

查詢MSFT 每日收盤價與滾動 252 個交易日最高收盤
91 rows (showing 20)
session_datesession_labelclosehigh_252d_closebelow_252d_high_pct
2026-05-182026/05/18423.54542.0721.87
2026-05-192026/05/19417.42542.0723
2026-05-202026/05/20421.06542.0722.32
2026-05-212026/05/21419.09542.0722.69
2026-05-222026/05/22418.57542.0722.78
2026-05-262026/05/26416.03542.0723.25
2026-05-272026/05/27412.67542.0723.87
2026-05-282026/05/28426.99542.0721.23
2026-05-292026/05/29450.24542.0716.94
2026-06-012026/06/01460.52542.0715.04
2026-06-022026/06/02441.31542.0718.59
2026-06-032026/06/03427.34542.0721.17
2026-06-042026/06/04428.05542.0721.03
2026-06-052026/06/05416.67542.0723.13
2026-06-082026/06/08411.74542.0724.04
2026-06-092026/06/09403.41542.0725.58
2026-06-102026/06/10397.36542.0726.7
2026-06-112026/06/11390.34542.0727.99
2026-06-122026/06/12390.74542.0727.92
2026-06-152026/06/15399.76542.0726.25
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        date,
        toFloat64(max(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2024-01-01'
    GROUP BY date
),
rolling AS
(
    SELECT
        date,
        close,
        max(close) OVER (ORDER BY date ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) AS high_252d
    FROM daily
)
SELECT
    toString(date)                          AS session_date,
    formatDateTime(date, '%Y/%m/%d')        AS session_label,
    round(close, 2)                         AS close,
    round(high_252d, 2)                     AS high_252d_close,
    round((1 - close / high_252d) * 100, 2) AS below_252d_high_pct
FROM rolling
WHERE date >= today() - 130
ORDER BY date
自己執行這個查詢

最後一列就是目前的狀態:2026/09/25 收在 497.22 美元,同期的 252 日最高收盤為 542.07 美元,兩者差 8.27%。滾動高點那條線只有兩種走法:被新的收盤高點推上去,或在舊高點滑出 252 個交易日的視窗時往下調整。它從來不會因為股價下跌而下降,所以缺口一天一天變寬的期間,動的是收盤價那一邊。

MSFT 目前距歷史高點跌了多少?

把視窗從四個月拉到十一年,看到的就不只是現況,而是形狀。下面這張面板是月度視角:每個月最後一個交易日的收盤價,以及它距當時為止最高收盤的百分比差距。最後一列是本月最新的收盤,不是月底。

查詢MSFT 月度收盤與距歷史最高收盤的差距(2015 年起)
141 rows (showing 20)
monthmonth_closerunning_peak_closebelow_peak_pct
2015-0140.447.5915.1
2015-0243.8547.597.9
2015-0340.6647.5914.6
2015-0448.6449.161
2015-0546.8649.164.7
2015-0644.1549.1610.2
2015-0746.749.165
2015-0843.5249.1611.5
2015-0944.2649.1610
2015-1052.6454.253
2015-1154.3554.921
2015-1255.4856.551.9
2016-0155.0956.552.6
2016-0250.8856.5510
2016-0355.2356.552.3
2016-0449.8756.5511.8
2016-055356.556.3
2016-0651.1756.559.5
2016-0756.6856.760.1
2016-0857.4658.31.4
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        date,
        toFloat64(max(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2015-01-01'
    GROUP BY date
),
marked AS
(
    SELECT
        date,
        close,
        max(close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak_close
    FROM daily
)
SELECT
    formatDateTime(toStartOfMonth(date), '%Y-%m')                       AS month,
    round(argMax(close, date), 2)                                       AS month_close,
    round(argMax(peak_close, date), 2)                                  AS running_peak_close,
    round((1 - argMax(close, date) / argMax(peak_close, date)) * 100, 1) AS below_peak_pct
FROM marked
GROUP BY month
ORDER BY month
自己執行這個查詢

到 2026-09 為止,最新收盤是 497.22 美元,對應的歷史最高收盤為 542.07 美元,差距 8.3%。這條曲線(水面下曲線)的形狀比任何單一數字都好用:它有很長的時間貼在 0 附近小幅起伏,然後在少數幾個時段快速下沉,再花一段時間爬回 0。零這條線本身就是「收復前高」的定義。

2015 年以來,MSFT 的每一次 10% 以上回檔

判定規則寫死成四句話。從一個收盤新高起算;期間任何一個低於該高點的收盤都屬於同一段;這一段最深的收盤跌幅達到 10% 以上才列入;收復日是再次收在原高點之上的第一個交易日。表中每一列是一段回檔,欄位依序是高點日、谷底日、深度,以及從高點日到收復日的日曆天數。days_to_recover 顯示 0 代表那一段到查詢當日尚未收復。

查詢MSFT 自 2015 年以來每一段 10% 以上的收盤回檔
peak_ontrough_ondepth_pctsessions_below_peakdays_to_recover
2021/11/192022/11/0337.6392573
2025/10/282026/06/2534.92280
2020/02/102020/03/1628.282120
2024/07/052025/04/0824.2229335
2018/10/012018/12/2418.6112165
2015/04/282015/08/2517.7124178
2015/01/082015/04/0215.372106
2015/12/292016/06/2714.4141206
2020/09/022020/09/1813.598146
2023/07/182023/09/2613.278112
2018/01/312018/02/0810.51626
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        date,
        toFloat64(max(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2015-01-01'
    GROUP BY date
),
marked AS
(
    SELECT
        date,
        close,
        max(close)          OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak_close,
        argMax(date, close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak_date
    FROM daily
),
next_session AS
(
    SELECT
        date,
        any(date) OVER (ORDER BY date ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_date
    FROM daily
),
episodes AS
(
    SELECT
        peak_date,
        any(peak_close)     AS peak_level,
        min(close)          AS trough_level,
        argMin(date, close) AS trough_date,
        max(date)           AS last_below_date,
        count()             AS sessions_below
    FROM marked
    WHERE close < peak_close
    GROUP BY peak_date
    HAVING min(close) / any(peak_close) <= 0.90
)
SELECT
    formatDateTime(e.peak_date, '%Y/%m/%d')             AS peak_on,
    formatDateTime(e.trough_date, '%Y/%m/%d')           AS trough_on,
    round((1 - e.trough_level / e.peak_level) * 100, 1) AS depth_pct,
    toUInt32(e.sessions_below)                          AS sessions_below_peak,
    if(n.next_date > e.peak_date,
       toUInt32(dateDiff('day', e.peak_date, n.next_date)),
       toUInt32(0))                                     AS days_to_recover
FROM episodes AS e
LEFT JOIN next_session AS n ON n.date = e.last_below_date
ORDER BY depth_pct DESC
自己執行這個查詢

自 2015 年以來,符合這個定義的回檔共 11 段。表格依深度排序,所以第一列就是最深的一段:從 2021/11/19 的收盤高點起算,到 2022/11/03 收在谷底,累計下跌 37.6%,期間有 392 個交易日收在原高點之下,高點日到收復日之間共 573 個日曆天。最後一列是門檻邊緣的那一段,深度 10.5%。

兩個讀表的細節值得注意。谷底日之後的路徑不在表裡,深度只告訴你最壞的那一天收在哪,收復天數才告訴你這段路有多長,兩個數字經常不成比例。另外,日曆天數包含週末與假日,交易日數在另一欄,兩者不要互相換算。收復過程本身的分佈是另一個題目,見 市場崩跌後如何收復。

「一直跌」是常態嗎?先看基本率

「MSFT 一直跌」是一種感覺,而感覺可以換算成一個比例:自 2015 年以來的所有交易日裡,收盤價距當時歷史高點各個距離的日子分別佔多少。下面這張面板把每一個交易日丟進五個區間,並附上「這一格及更深的所有格」的累積佔比。

查詢MSFT 交易日按距歷史最高收盤的距離分佈(2015 年起)
drawdown_bucketsessionsshare_pctat_least_this_deep_pct
當日收在新高30410.3100
距高點 0 至 5%125342.589.7
距高點 5 至 10%57419.547.2
距高點 10 至 20%48116.327.8
距高點 20% 以上33811.511.5
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        date,
        toFloat64(max(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2015-01-01'
    GROUP BY date
),
marked AS
(
    SELECT
        date,
        close,
        max(close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak_close
    FROM daily
),
tagged AS
(
    SELECT
        multiIf(close >= peak_close, 1,
                close / peak_close >= 0.95, 2,
                close / peak_close >= 0.90, 3,
                close / peak_close >= 0.80, 4,
                5) AS ord,
        multiIf(close >= peak_close, '當日收在新高',
                close / peak_close >= 0.95, '距高點 0 至 5%',
                close / peak_close >= 0.90, '距高點 5 至 10%',
                close / peak_close >= 0.80, '距高點 10 至 20%',
                '距高點 20% 以上') AS bucket
    FROM marked
),
counts AS
(
    SELECT
        ord,
        any(bucket) AS bucket_label,
        count()     AS sessions
    FROM tagged
    GROUP BY ord
),
totals AS
(
    SELECT sum(sessions) AS total FROM counts
)
SELECT
    c.bucket_label                         AS drawdown_bucket,
    toUInt32(c.sessions)                   AS sessions,
    round(c.sessions * 100.0 / t.total, 1) AS share_pct,
    round(sum(c.sessions) OVER (ORDER BY c.ord DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
          * 100.0 / t.total, 1)            AS at_least_this_deep_pct
FROM counts AS c
CROSS JOIN totals AS t
ORDER BY c.ord
自己執行這個查詢

自 2015 年以來,10.3% 的交易日收在當時的新高上,27.8% 的交易日收在距當時歷史高點 10% 以上的位置,其中 11.5% 落在 20% 以上。換句話說,收盤距高點兩位數百分比的日子在這段歷史裡並不罕見,而長期上漲與長時間待在水面下這兩件事同時成立,並不衝突。連續下跌的天數要怎麼看,另見 連續下跌幾天算正常。

以台幣計價時,同一段回檔會變形

上面每一個數字都是美元收盤價。透過複委託或海外券商持有 MSFT 的人,對帳單上看到的是台幣評價,中間多了一層匯率。把兩層疊起來,台幣計價的變動大約等於 (1 + 美元價格變動) 乘以 (1 + 美元兌台幣匯率變動) 再減 1。

舉一組純粹用來說明算法的假設數字。美元部位下跌 20%,同期美元兌台幣升值 5%,換算後台幣帳面變動約為 -16%;同樣的 20% 跌幅,若同期美元兌台幣貶值 5%,台幣帳面變動約為 -24%。方向很機械:同一段美元跌幅,搭配美元走強的期間,台幣帳面跌幅會比較小;搭配美元走弱的期間,台幣帳面跌幅會比較大。所以「MSFT 從高點跌了多少」對台幣投資人其實是兩個問題,而不是一個。

實務上有兩件事要對齊。換算的兩端要用同一天:高點那天的收盤配高點那天的匯率,最新收盤配最新匯率,混用不同日期的匯率會製造出不存在的跌幅。另外,券商換匯價與參考匯率通常不同,帳面數字請以自己對帳單上的換匯價為準。本文只發布美元收盤價算出的回檔,不提供匯率序列。

這些數字能回答什麼

基本率不是預測。上面的表格能回答的是:2015 年以來 10% 以上的回檔出現過幾段、最深到哪裡、收復花了多少天、股價待在水面下的時間佔多少。它不能回答現在這一段會走到哪裡,本文也不提供目標價。當有人說 MSFT「一直跌」,可以把它換成兩個能查核的版本:現在距高點幾個百分比,以及這個幅度在 2015 年以來的分佈裡排在什麼位置。兩個問題都有答案,而且答案每天都能重算一次。

想看市場對未來波動幅度的定價(而不是已經發生的跌幅),那是另一組資料,見 MSFT 隱含波動率。

資料說明與定義
  • 全部使用每日收盤價,不含股息,因此是價格報酬而非總報酬。含息的回檔會略淺於此處的數字。
  • 歷史最高收盤以 2015 年 1 月 1 日之後的收盤價為視窗起點。視窗起點附近的第一段回檔,其高點是視窗內的高點,不是全部歷史的高點。
  • 52 週高點定義為滾動 252 個交易日的最高收盤,不是按日曆日回推 365 天。
  • 回檔段落:從一個收盤新高起算,期間所有低於該高點的收盤屬於同一段,最深收盤跌幅達 10% 以上才列入。days_to_recover 是高點日到再次收在原高點之上那一天的日曆天數,sessions_below_peak 是同一段內收在高點之下的交易日數,兩者不可互相換算。days_to_recover 為 0 表示該段在查詢當日尚未收復。
  • 前緣資料有約一到兩個交易日的落後,最新一列的日期即為計算基準日。

FAQ

MSFT 現在距離歷史高點跌了多少?

以 2026/09/25 的收盤計算,MSFT 收在 497.22 美元,比 2015 年以來的最高收盤 542.07 美元低 8.3%,比滾動 252 個交易日的最高收盤低 8.27%。兩個數字不同,是因為分母是不同視窗的高點。

10% 以上的回檔多久出現一次?

自 2015 年以來,以收盤價計算共出現 11 段達 10% 以上的回檔,深度從 10.5% 到 37.6%。這些段落在時間上分佈不均,並非每年一段。

從 10% 以上的回檔要多久才會收復?

看表格的 days_to_recover 欄位。最深那一段從高點日到重新收在原高點之上共 573 個日曆天,較淺的段落通常短得多,但深度與收復時間並不成比例。

用收盤價和用盤中最高價算出的回檔差在哪裡?

盤中最高價當分母會把高點抬高,算出來的跌幅一定大於或等於收盤算法。本文一律用收盤價,這樣高點、谷底與收復三個時點都落在同一種價格定義上,也對得上對帳單的評價基準。

台幣計價的跌幅和美元跌幅差在哪裡?

差在同期的匯率變動。台幣計價的變動約等於 (1 + 美元價格變動) 乘以 (1 + 匯率變動) 減 1,所以同一段美元跌幅在美元走強的期間看起來較小,在美元走弱的期間看起來較大。


每一張面板下方都附了算出這些數字的完整 SQL,把 10% 門檻改成 5%,或把起始年份往前推,都只是改一個條件。想用中文直接問同一個問題,可以在 Strasmore 終端機上試一次。

#msft#drawdown#52-week high#us-stocks#twd