Strasmore Research
學習 Matt Connor作者: Matt Connor

MSFT 盤前盤後價格:哪一個才是收盤價

台北時間晚上打開券商 App,MSFT 盤前盤後價格常常和昨天的官方收盤價不同。這篇說明收盤競價定出來的價格才會進到日線圖與損益欄位,盤前盤後的成交量很薄、價差很寬,一張小單就能推開報價,並用 MSFT 近十年的日線資料算出隔夜跳空的幅度分布、逐年的中位數,以及跳空方向對當天正規時段的走勢有多少參考價值。

MSFT 盤前盤後價格和官方收盤價是兩個不同的數字。台北時間晚上打開券商 App,畫面上那個會跳動的價格通常來自美股的盤前或盤後時段,成交量很薄;而券商算損益、隔天的日線圖用的,是美東下午四點收盤競價定出來的官方收盤價。下面先把這兩個數字分清楚,再用 MSFT 的日線資料算出隔夜跳空到底有多大,以及它值不值得當成隔天走勢的預測。

MSFT 盤前盤後價格,哪一個才是官方收盤價

美股正規交易時段是美東時間 09:30 到 16:00。16:00 的收盤不是隨機的最後一筆成交,而是一場集中撮合的收盤競價:交易所把收盤前累積的買賣單一次撮合,撮出來的價格就是當天的官方收盤價。指數編製、ETF 淨值、券商畫面上的漲跌幅與損益欄位、以及日線圖上那根 K 棒的收盤點,用的都是這一個價格。

盤前時段一般從美東 04:00 開始,盤後時段到 20:00 結束,各券商實際開放的區間並不相同,有的只做 07:00 到 09:30 與 16:00 到 18:00。這兩段時間的成交會顯示在報價畫面上,也可能被券商當成「最新價」推到 App 首頁,但它不會改寫當天的官方收盤價。所以晚上看到 MSFT 比昨天收盤高了一些,帳上損益卻一動也不動,這是正常的:損益欄位讀的是收盤競價那個價格。

對照台北時間,只要記兩條線

換算是簡單算術。夏令時間台北比紐約快 12 小時,冬令快 13 小時。夏令時間下,09:30 開盤等於台北 21:30,16:00 收盤等於台北隔天凌晨 04:00;盤前從美東 04:00 起算,等於台北下午 16:00,盤後 20:00 結束等於台北早上 08:00。冬令時間整組往後推一小時。各時段的交易規則與細節,盤前與盤後交易的完整機制那篇寫得更深,這裡只當方位感使用。

為什麼盤後那個數字可能只是一張小單

正規時段的 MSFT 每分鐘都有大量成交,買價與賣價之間的價差經常只有一分錢。盤後的參與者少很多,報價簿會變薄:掛單數量小,價差變寬,一張幾百股的委託就能把成交價推開一截。你在台北時間 21:30 看到的「最新價」,有可能是幾分鐘前某個人用限價單成交的 100 股。

薄流動性與寬價差的機制,開盤時買賣價差為什麼變寬有完整說明,開盤前後與盤後是同一套道理。假日與週末前後的時段更薄,假日與週末的盤後交易整理了那些日子的開放狀況。

MSFT 的隔夜跳空有多大

把「盤後那個數字」翻譯成可以量化的問題,就是隔夜跳空:今天的開盤價相對昨天的官方收盤價差了多少。下面這張面板用 MSFT 的日線資料,從 2016 年到 2026 年 8 月底,把每個交易日的跳空幅度取絕對值後分成五格。

查詢MSFT 隔夜跳空幅度分布(2016 年至 2026 年 8 月,日線)
gap_bucketsessionsshare_pct
0.00-0.25%86932.4
0.25-0.50%64924.2
0.50-1.00%65824.6
1.00-2.00%36513.6
2.00%+1385.2
每個數據背後的精確 SQL 語法
WITH bars AS
(
    SELECT
        date,
        any(open)  AS open_px,
        any(close) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2016-01-01'
      AND date <  '2026-09-01'
    GROUP BY date
),
gaps AS
(
    SELECT
        date,
        round((toFloat64(open_px) / prev_close - 1) * 100, 3) AS gap_pct
    FROM
    (
        SELECT
            date,
            open_px,
            lagInFrame(toFloat64(close_px)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
        FROM bars
    )
    WHERE prev_close > 0
)
SELECT
    multiIf(abs(gap_pct) < 0.25, '0.00-0.25%',
            abs(gap_pct) < 0.50, '0.25-0.50%',
            abs(gap_pct) < 1.00, '0.50-1.00%',
            abs(gap_pct) < 2.00, '1.00-2.00%',
                                 '2.00%+')          AS gap_bucket,
    count()                                         AS sessions,
    round(100.0 * count() / sum(count()) OVER (), 1) AS share_pct
FROM gaps
GROUP BY gap_bucket
ORDER BY min(abs(gap_pct)) ASC
自己執行這個查詢

分布的形狀很清楚。最小的一格,跳空不到 0.25%,佔了 32.4%,多數交易日的開盤只是貼著昨天的收盤價微幅移動。1.00% 到 2.00% 那一格佔 13.6%,2% 以上那一格佔 5.2%,在這段樣本裡共有 138 個交易日落在最大那一格。開盤跳空超過 1% 的日子對 MSFT 來說並不罕見。跳空是怎麼形成的,股價為什麼會隔夜跳空那篇從機制講起。

逐年看,跳空的典型幅度會變

十年的平均會把年度差異壓平,所以把同一組跳空按年份切開。第三欄是該年絕對跳空幅度的中位數,第四欄是該年跳空超過 1% 的交易日比例。

查詢MSFT 逐年隔夜跳空:中位數幅度與大跳空比例
yearsessionsmedian_abs_gap_pctover_1pct_share_pct
20162510.3111.6
20172510.244
20182510.4416.3
20192520.4315.9
20202530.6531.2
20212520.3917.5
20222510.6433.5
20232500.4818.8
20242520.3413.5
20252500.417.2
20261660.6630.7
每個數據背後的精確 SQL 語法
WITH bars AS
(
    SELECT
        date,
        any(open)  AS open_px,
        any(close) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2016-01-01'
      AND date <  '2026-09-01'
    GROUP BY date
),
gaps AS
(
    SELECT
        date,
        round((toFloat64(open_px) / prev_close - 1) * 100, 3) AS gap_pct
    FROM
    (
        SELECT
            date,
            open_px,
            lagInFrame(toFloat64(close_px)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
        FROM bars
    )
    WHERE prev_close > 0
)
SELECT
    toString(toYear(date))                                                                      AS year,
    count()                                                                                     AS sessions,
    round(quantileDeterministic(0.5)(abs(gap_pct), toUInt64(toYYYYMMDD(date))), 2)               AS median_abs_gap_pct,
    round(100.0 * countIf(abs(gap_pct) > 1) / count(), 1)                                        AS over_1pct_share_pct
FROM gaps
GROUP BY year
ORDER BY year ASC
自己執行這個查詢

2016 年的絕對跳空中位數是 0.31%,2026 年是 0.66%,後者的資料只到 8 月底,是不完整的一年。同一列的 over_1pct_share_pct 顯示,2026 年有 30.7% 的交易日開盤跳空超過 1%。年與年之間的差距不小,所以「MSFT 的跳空大概多大」這個問題,答案取決於你問的是哪一年。

跳空方向能預測當天的走勢嗎

這是最實用的一問:開盤往上跳,正規時段會繼續往上,還是把缺口收回來?下面把跳空幅度分格,計算當天正規時段(開盤到收盤)的方向與跳空方向相同的比例,並把每一格的當日漲跌先對齊跳空方向後再取中位數。對齊之後,正值代表延續,負值代表回吐。

查詢跳空之後:當天正規時段延續跳空方向的比例
gap_bucketsessionscontinuation_pctmedian_aligned_pct
0.25-0.50%64948.2-0.04
0.50-1.00%65848-0.09
1.00-2.00%36553.40.12
2.00%+13851.40.14
每個數據背後的精確 SQL 語法
WITH bars AS
(
    SELECT
        date,
        any(open)  AS open_px,
        any(close) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2016-01-01'
      AND date <  '2026-09-01'
    GROUP BY date
),
gaps AS
(
    SELECT
        date,
        round((toFloat64(open_px) / prev_close - 1) * 100, 3)        AS gap_pct,
        round((toFloat64(close_px) / toFloat64(open_px) - 1) * 100, 3) AS session_pct
    FROM
    (
        SELECT
            date,
            open_px,
            close_px,
            lagInFrame(toFloat64(close_px)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
        FROM bars
    )
    WHERE prev_close > 0
)
SELECT
    multiIf(abs(gap_pct) < 0.50, '0.25-0.50%',
            abs(gap_pct) < 1.00, '0.50-1.00%',
            abs(gap_pct) < 2.00, '1.00-2.00%',
                                 '2.00%+')                                                                  AS gap_bucket,
    count()                                                                                                  AS sessions,
    round(100.0 * countIf(sign(session_pct) = sign(gap_pct)) / count(), 1)                                    AS continuation_pct,
    round(quantileDeterministic(0.5)(session_pct * sign(gap_pct), toUInt64(toYYYYMMDD(date))), 2)             AS median_aligned_pct
FROM gaps
WHERE abs(gap_pct) >= 0.25
GROUP BY gap_bucket
HAVING count() > 0
ORDER BY min(abs(gap_pct)) ASC
自己執行這個查詢

最小的一格延續比例是 48.2%,幅度最大的那一格是 51.4%,兩者都沒有離五成太遠。最大跳空那一格對齊方向後的當日中位數落在 0.14%。這組數字要說的是同一件事:跳空的方向本身,對當天正規時段的方向幾乎沒有多告訴我們什麼,而晚上在台北看到的那個盤後價格,離「隔天的開盤」還隔著整個夜盤,離「隔天的收盤」更遠。

一段真實的軌跡

上面是十年的統計,這張面板把一段固定區間攤開來:每天兩個數字,隔夜跳空與當天正規時段的漲跌。區間寫死在 SQL 裡,所以同一段軌跡每次重算都是同一組數字。

查詢MSFT 2026 年 7 月至 8 月:每個交易日的跳空與當天走勢
43 rows (showing 20)
session_datesession_labelgap_pctsession_pct
2026-07-017月1日2.090.91
2026-07-027月2日0.051.56
2026-07-067月6日-0.88-0.08
2026-07-077月7日1.49-0.93
2026-07-087月8日-1.24-0.18
2026-07-097月9日-2.322.65
2026-07-107月10日0.89-0.7
2026-07-137月13日0.690.84
2026-07-147月14日-2.090.55
2026-07-157月15日0.752.02
2026-07-167月16日0.680.7
2026-07-177月17日-1.56-0.26
2026-07-207月20日-0.612.78
2026-07-217月21日-0.87-0.26
2026-07-227月22日0.46-2.31
2026-07-237月23日-0.1-2.15
2026-07-247月24日1.43-1.38
2026-07-277月27日2.2-0.25
2026-07-287月28日1.040.05
2026-07-297月29日0.01-0.73
每個數據背後的精確 SQL 語法
WITH bars AS
(
    SELECT
        date,
        any(open)  AS open_px,
        any(close) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'MSFT'
      AND date >= '2026-06-20'
      AND date <  '2026-09-01'
    GROUP BY date
)
SELECT
    toString(date)                                                                           AS session_date,
    concat(toString(toMonth(date)), '月', toString(toDayOfMonth(date)), '日')                AS session_label,
    round((toFloat64(open_px) / prev_close - 1) * 100, 2)                                    AS gap_pct,
    round((toFloat64(close_px) / toFloat64(open_px) - 1) * 100, 2)                            AS session_pct
FROM
(
    SELECT
        date,
        open_px,
        close_px,
        lagInFrame(toFloat64(close_px)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM bars
)
WHERE prev_close > 0
  AND date >= '2026-07-01'
ORDER BY date ASC
自己執行這個查詢

這段區間從 7月1日 到 8月31日,共 43 個交易日。把兩條線放在一起看,最值得注意的是它們經常不同號:開盤跳開一段,當天正規時段往另一個方向走,把缺口吃掉一部分。這正是前一節那些接近五成的延續比例在單一區間裡長出來的樣子。

複委託與台幣計價的兩個提醒

台灣的複委託和美國本地券商在這件事上的差別,主要在時段與單別。多數複委託只接受美股正規時段的委託,盤前盤後不一定開放,能不能掛、能掛什麼單別(多半要求限價),以各家券商公告為準。在美國券商,盤前盤後通常只吃限價單,市價單會被排到正規時段開盤才處理。台北時間晚上看到一個盤後價格、隔天卻以完全不同的價格成交,多半就是這個順序造成的。

台幣計價再加一層。券商畫面上的台幣參考價,是美元價乘上當日匯率換算來的,匯率動了台幣數字就會動,即使美元價一分錢都沒變。判斷「哪一個是官方收盤價」時,先把匯率換算放到一邊,兩件事互不相干。想看 MSFT 的波動本身被市場定價成多少,MSFT 隱含波動率那篇用選擇權資料處理同一個問題。

資料與算法說明
  • 跳空定義:當日 open 除以前一個交易日的 close 再減一,全部取自 MSFT 的日線 OHLCV。
  • 日線每天只有四個價格與成交量,盤前與盤後的逐筆成交不在這組資料裡。所以本文不引用任何盤前盤後的成交價,改用跳空統計回答同一個問題。
  • 同一個日期若出現重複列,先 GROUP BY date 取 any() 去重再計算。
  • 價格欄位是 Decimal,餵進分位數函數前一律 toFloat64。分位數用 quantileDeterministic,同一組資料重算不會漂移成兩個版本。
  • 統計區間到 2026 年 8 月 31 日為止,2026 年是不完整的一年,逐年表最後一列請照這個前提讀。

FAQ

台北晚上看到的 MSFT 價格是真的成交價嗎

是真的成交價,但它來自盤前或盤後時段,成交量遠小於正規時段,單一筆小額委託就可能讓價格跳一截。它不是當天的官方收盤價,也不會被寫進日線圖。

MSFT 的官方收盤價是幾點決定的

美東時間下午四點的收盤競價。交易所把收盤前累積的買賣單集中撮合一次,撮出來的價格就是官方收盤價。夏令時間換算成台北時間是隔天凌晨四點,冬令時間是隔天凌晨五點。

盤前盤後的價格會進到隔天的 K 線圖嗎

標準日線圖的四個價格都取自正規時段,盤前盤後的成交不會改寫收盤價。你看到的「隔夜跳空」就是昨天收盤到今天開盤之間的落差,圖上表現為兩根 K 棒之間的缺口。

隔夜跳空可以用來預測當天的走勢嗎

以 MSFT 從 2016 年以來的日線來看,當天正規時段延續跳空方向的比例,在各個跳空幅度分格裡都接近五成。跳空的方向本身幾乎沒有指向性,這是觀察到的分布,不是任何操作建議。

複委託可以交易 MSFT 的盤前盤後嗎

視券商而定。多數複委託只受理正規時段的委託,有開放盤前盤後的通常也限定限價單並另設時段,實際規則以各家券商的公告為準。


每一張面板下面都附了產生數字的 SQL,展開就能看到每個數字是怎麼數出來的。想換一檔股票或換一段區間重算同一組統計,在 Strasmore 終端機用白話問一次就好。

#msft#盤前交易#盤後交易#隔夜跳空#美股交易時間