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 個交易日的最高收盤。
| session_date | session_label | close | high_252d_close | below_252d_high_pct |
|---|---|---|---|---|
| 2026-05-18 | 2026/05/18 | 423.54 | 542.07 | 21.87 |
| 2026-05-19 | 2026/05/19 | 417.42 | 542.07 | 23 |
| 2026-05-20 | 2026/05/20 | 421.06 | 542.07 | 22.32 |
| 2026-05-21 | 2026/05/21 | 419.09 | 542.07 | 22.69 |
| 2026-05-22 | 2026/05/22 | 418.57 | 542.07 | 22.78 |
| 2026-05-26 | 2026/05/26 | 416.03 | 542.07 | 23.25 |
| 2026-05-27 | 2026/05/27 | 412.67 | 542.07 | 23.87 |
| 2026-05-28 | 2026/05/28 | 426.99 | 542.07 | 21.23 |
| 2026-05-29 | 2026/05/29 | 450.24 | 542.07 | 16.94 |
| 2026-06-01 | 2026/06/01 | 460.52 | 542.07 | 15.04 |
| 2026-06-02 | 2026/06/02 | 441.31 | 542.07 | 18.59 |
| 2026-06-03 | 2026/06/03 | 427.34 | 542.07 | 21.17 |
| 2026-06-04 | 2026/06/04 | 428.05 | 542.07 | 21.03 |
| 2026-06-05 | 2026/06/05 | 416.67 | 542.07 | 23.13 |
| 2026-06-08 | 2026/06/08 | 411.74 | 542.07 | 24.04 |
| 2026-06-09 | 2026/06/09 | 403.41 | 542.07 | 25.58 |
| 2026-06-10 | 2026/06/10 | 397.36 | 542.07 | 26.7 |
| 2026-06-11 | 2026/06/11 | 390.34 | 542.07 | 27.99 |
| 2026-06-12 | 2026/06/12 | 390.74 | 542.07 | 27.92 |
| 2026-06-15 | 2026/06/15 | 399.76 | 542.07 | 26.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 目前距歷史高點跌了多少?
把視窗從四個月拉到十一年,看到的就不只是現況,而是形狀。下面這張面板是月度視角:每個月最後一個交易日的收盤價,以及它距當時為止最高收盤的百分比差距。最後一列是本月最新的收盤,不是月底。
| month | month_close | running_peak_close | below_peak_pct |
|---|---|---|---|
| 2015-01 | 40.4 | 47.59 | 15.1 |
| 2015-02 | 43.85 | 47.59 | 7.9 |
| 2015-03 | 40.66 | 47.59 | 14.6 |
| 2015-04 | 48.64 | 49.16 | 1 |
| 2015-05 | 46.86 | 49.16 | 4.7 |
| 2015-06 | 44.15 | 49.16 | 10.2 |
| 2015-07 | 46.7 | 49.16 | 5 |
| 2015-08 | 43.52 | 49.16 | 11.5 |
| 2015-09 | 44.26 | 49.16 | 10 |
| 2015-10 | 52.64 | 54.25 | 3 |
| 2015-11 | 54.35 | 54.92 | 1 |
| 2015-12 | 55.48 | 56.55 | 1.9 |
| 2016-01 | 55.09 | 56.55 | 2.6 |
| 2016-02 | 50.88 | 56.55 | 10 |
| 2016-03 | 55.23 | 56.55 | 2.3 |
| 2016-04 | 49.87 | 56.55 | 11.8 |
| 2016-05 | 53 | 56.55 | 6.3 |
| 2016-06 | 51.17 | 56.55 | 9.5 |
| 2016-07 | 56.68 | 56.76 | 0.1 |
| 2016-08 | 57.46 | 58.3 | 1.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 代表那一段到查詢當日尚未收復。
| peak_on | trough_on | depth_pct | sessions_below_peak | days_to_recover |
|---|---|---|---|---|
| 2021/11/19 | 2022/11/03 | 37.6 | 392 | 573 |
| 2025/10/28 | 2026/06/25 | 34.9 | 228 | 0 |
| 2020/02/10 | 2020/03/16 | 28.2 | 82 | 120 |
| 2024/07/05 | 2025/04/08 | 24.2 | 229 | 335 |
| 2018/10/01 | 2018/12/24 | 18.6 | 112 | 165 |
| 2015/04/28 | 2015/08/25 | 17.7 | 124 | 178 |
| 2015/01/08 | 2015/04/02 | 15.3 | 72 | 106 |
| 2015/12/29 | 2016/06/27 | 14.4 | 141 | 206 |
| 2020/09/02 | 2020/09/18 | 13.5 | 98 | 146 |
| 2023/07/18 | 2023/09/26 | 13.2 | 78 | 112 |
| 2018/01/31 | 2018/02/08 | 10.5 | 16 | 26 |
每個數據背後的精確 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 年以來的所有交易日裡,收盤價距當時歷史高點各個距離的日子分別佔多少。下面這張面板把每一個交易日丟進五個區間,並附上「這一格及更深的所有格」的累積佔比。
| drawdown_bucket | sessions | share_pct | at_least_this_deep_pct |
|---|---|---|---|
| 當日收在新高 | 304 | 10.3 | 100 |
| 距高點 0 至 5% | 1253 | 42.5 | 89.7 |
| 距高點 5 至 10% | 574 | 19.5 | 47.2 |
| 距高點 10 至 20% | 481 | 16.3 | 27.8 |
| 距高點 20% 以上 | 338 | 11.5 | 11.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 終端機上試一次。