Strasmore Research
學習 Matt Connor作者: Matt Connor

投資組合 Delta 與 Beta 加權如何計算

了解為何不同 ticker 的原始 delta 不能直接相加,以及如何透過 Beta 加權,將投資組合曝險換算為相當於持有 SPY 的股數。

投資組合 delta 是回答一個問題的單一數值:如果大盤上漲或下跌 1%,整個部位大約會變動多少?將每個部位的 delta 相加雖然可以得到一個數字,但那不是所要的數值。Beta 加權是讓這個總和具有意義的調整方法,將每項持倉重新表示為相當於持有若干股 SPY 的部位。

不同 ticker 之間,為何投資組合 delta 無法直接相加

Delta 衡量標的資產價格變動 1 美元時,部位價值的變化幅度。1 股股票的 delta 為 1。1 口選擇權合約涵蓋 100 股,因此 delta 顯示為 0.30 的買權,代表 30 delta 的曝險。這種單一部位的觀點,就是 選擇權 delta 衡量的內容

問題會在加入第二個 ticker 後出現。高價且高 beta 股票的 100 delta,與低價防禦型股票的 100 delta,雖然數字相同,曝險卻相差甚遠。前者代表數萬美元的股票部位,而且歷來波動幅度大於指數。後者只代表數千美元的股票部位,而且歷來波動幅度低於指數。把兩者相加得到 200,但這個數字沒有對應到任何可供投資人採取行動的實際單位。

什麼是 beta 加權 delta?

Beta 加權會將投資組合中的每個 delta,改寫為相對於某一基準指數的 delta。對美國股票投資組合而言,通常使用 SPY 作為基準。這項計算涉及兩個乘數。

第一個乘數是 beta。Beta 代表股票對基準指數的歷史敏感度,計算方式是在指定期間內,以股票每日報酬率相對於指數每日報酬率的斜率衡量。Beta 為 1.4,表示在該期間內,指數每變動 1%,該股票平均約變動 1.4%。

第二個乘數是價格比率,也就是股票價格除以基準指數價格。Delta 以股數計算,但不同價格的股票代表的資金金額不同。價格比率會將它們換算至同一尺度。

將某一部位的原始 delta 同時乘以這兩項數值,所得結果就是 beta 加權 delta:代表在該衡量期間內,若持有相同數量的 SPY,其市場曝險表現會與該部位相同。下方表格以截至2026年6月30日止一年的每日收盤報酬率,計算各標的的 beta,接著列出其相對於 SPY 的價格,以及兩者的乘積。SPY 在清單中作為基準,beta 為 1、價格比率也為 1,因此一股 SPY 正好等於一個 beta 加權 delta。

查詢每持有一股的 Beta、價格比率與 SPY 等值股數
每個數據背後的精確 SQL 語法
WITH
    sessions AS
    (
        SELECT
            ticker                                               AS ticker,
            toDate(toTimeZone(window_start, 'America/New_York')) AS d,
            toFloat64(argMax(close, window_start))               AS px
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'NVDA', 'AAPL', 'MSFT', 'XOM', 'JNJ', 'KO')
          AND window_start >= toDateTime('2025-07-01 04:00:00')
          AND window_start <  toDateTime('2026-07-01 04:00:00')
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960
        GROUP BY ticker, d
    ),
    steps AS
    (
        SELECT
            ticker,
            d,
            px,
            any(px) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
        FROM sessions
    ),
    daily_ret AS
    (
        SELECT ticker, d, (px / prev_px) - 1 AS r
        FROM steps
        WHERE prev_px > 0
    ),
    bench AS
    (
        SELECT d, r AS spy_r
        FROM daily_ret
        WHERE ticker = 'SPY'
    ),
    betas AS
    (
        SELECT
            s.ticker                                 AS ticker,
            covarPop(s.r, b.spy_r) / varPop(b.spy_r) AS beta_vs_spy,
            1                                        AS k
        FROM daily_ret AS s
        INNER JOIN bench AS b ON b.d = s.d
        GROUP BY s.ticker
    ),
    prices AS
    (
        SELECT ticker, argMax(px, d) AS close_px
        FROM sessions
        GROUP BY ticker
    ),
    spy_price AS
    (
        SELECT argMax(px, d) AS spy_close, 1 AS k
        FROM sessions
        WHERE ticker = 'SPY'
    )
SELECT
    betas.ticker                                                        AS ticker,
    round(betas.beta_vs_spy, 2)                                         AS beta_vs_spy,
    round(prices.close_px / spy_price.spy_close, 3)                     AS price_vs_spy,
    round(betas.beta_vs_spy * prices.close_px / spy_price.spy_close, 3) AS spy_shares_per_share
FROM betas
INNER JOIN prices ON prices.ticker = betas.ticker
INNER JOIN spy_price ON spy_price.k = betas.k
ORDER BY beta_vs_spy DESC
Run this yourself

NVDA在清單中排名最高,beta 為 1.86,交易價格是 SPY 的 0.268倍。將兩者相乘後,持有一股該標的所承擔的指數曝險,相當於持有 0.498股 SPY。清單中最後的 7個標的,其數值低於零。XOM在此期間的 beta 為 -0.36,呈現相對於指數的溫和反向斜率,而不是波動幅度較小的同向走勢;持有一股該標的,換算後相當於 -0.067股 SPY。兩種情況在帳面上都各有一個 delta,但該 delta 所代表的曝險差異很大。這也初步說明,顯示至小數點後兩位的 beta 只是估計值,且必須連同計算期間一起解讀;本文結尾將進一步討論這一點。

選擇權 Delta 的來源

股票每股的 Delta 固定為 1。選擇權的 Delta 則不固定,會隨履約價、距到期剩餘時間、標的價格及隱含波動率變動。下方面板讀取了所有在2026年6月30日交易、距到期剩餘20至45天的 AAPL 契約 Delta,並依履約價與收盤價的距離分組,每組幅度為2%。

查詢行使價梯度中 AAPL 買權與賣權的 Delta;距到期日 20 至 45 天
每個數據背後的精確 SQL 語法
SELECT
    concat(if(bucket_pct > 0, '+', ''), toString(bucket_pct), '%') AS strike_vs_spot,
    round(avgIf(contract_delta, contract_delta > 0), 3)            AS call_delta,
    round(avgIf(contract_delta, contract_delta < 0), 3)            AS put_delta,
    count()                                                        AS contract_count
FROM
(
    SELECT
        toInt32(round((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 50)) * 2 AS bucket_pct,
        toFloat64(delta)                                                                     AS contract_delta
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= toDate('2026-06-30')
      AND date <  toDate('2026-07-01')
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.12
)
GROUP BY bucket_pct
HAVING countIf(contract_delta > 0) > 0 AND countIf(contract_delta < 0) > 0
ORDER BY bucket_pct
Run this yourself

-12% 區間中,買權在 4 筆成交契約中的平均 Delta 為 0.924,賣權的平均值為 -0.084。在 +10% 區間中,買權的平均值為 0.106,賣權則為 -0.834。相同履約價的買權與賣權,其 Delta 符號相反。因此,賣出買權與買進賣權都能抵銷股票多頭部位。隨著到期日接近,整條曲線如何移動,請參閱選擇權 Greeks 如何隨時間變化

將一個小型部位組合換算成單一數字

假設有一個由三個部位組成、以人工方式建立的部位組合。買進 AAPL 300 股。賣出 3 張 AAPL 買權,履約價約高於現價 5%,距到期約一個月,這是標準的備兌買權策略。另買進 5 張 KO 買權,履約價接近現價,期限相近,作為對第二檔標的的避險。股票與合約數量均為假設值。面板中的所有 delta 與 beta 均為實際計算值。

查詢三腿部位:原始 Delta 與按 Beta 加權的 Delta
每個數據背後的精確 SQL 語法
WITH
    sessions AS
    (
        SELECT
            ticker                                               AS ticker,
            toDate(toTimeZone(window_start, 'America/New_York')) AS d,
            toFloat64(argMax(close, window_start))               AS px
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'AAPL', 'KO')
          AND window_start >= toDateTime('2025-07-01 04:00:00')
          AND window_start <  toDateTime('2026-07-01 04:00:00')
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960
        GROUP BY ticker, d
    ),
    steps AS
    (
        SELECT
            ticker,
            d,
            px,
            any(px) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
        FROM sessions
    ),
    daily_ret AS
    (
        SELECT ticker, d, (px / prev_px) - 1 AS r
        FROM steps
        WHERE prev_px > 0
    ),
    bench AS
    (
        SELECT d, r AS spy_r
        FROM daily_ret
        WHERE ticker = 'SPY'
    ),
    betas AS
    (
        SELECT
            s.ticker                                 AS ticker,
            covarPop(s.r, b.spy_r) / varPop(b.spy_r) AS beta_vs_spy
        FROM daily_ret AS s
        INNER JOIN bench AS b ON b.d = s.d
        GROUP BY s.ticker
    ),
    prices AS
    (
        SELECT ticker, argMax(px, d) AS close_px, 1 AS k
        FROM sessions
        GROUP BY ticker
    ),
    spy_price AS
    (
        SELECT argMax(px, d) AS spy_close, 1 AS k
        FROM sessions
        WHERE ticker = 'SPY'
    ),
    opt_delta AS
    (
        SELECT
            underlying_symbol                       AS ticker,
            if(toFloat64(delta) > 0, 'call', 'put') AS kind,
            avg(toFloat64(delta))                   AS per_share_delta
        FROM global_markets.options_greeks
        WHERE date >= toDate('2026-06-30')
          AND date <  toDate('2026-07-01')
          AND iv_converged = 1
          AND volume > 0
          AND days_to_expiry BETWEEN 25 AND 40
          AND (
                (underlying_symbol = 'AAPL' AND toFloat64(delta) > 0
                 AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 1.03 AND 1.07)
             OR (underlying_symbol = 'KO' AND toFloat64(delta) < 0
                 AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 0.97 AND 1.03)
          )
        GROUP BY ticker, kind
    ),
    legs AS
    (
        SELECT
            tupleElement(leg, 1) AS leg_no,
            tupleElement(leg, 2) AS position,
            tupleElement(leg, 3) AS ticker,
            tupleElement(leg, 4) AS kind,
            tupleElement(leg, 5) AS qty,
            tupleElement(leg, 6) AS multiplier
        FROM
        (
            SELECT arrayJoin([
                (1, 'Long 300 AAPL',      'AAPL', 'stock', 300., 1.),
                (2, 'Short 3 AAPL calls', 'AAPL', 'call',   -3., 100.),
                (3, 'Long 5 KO puts',     'KO',   'put',     5., 100.)
            ]) AS leg
        )
    )
SELECT
    position                                                                                          AS position,
    round(raw_share_delta)                                                                            AS raw_share_delta,
    round(beta_vs_spy, 2)                                                                             AS beta_vs_spy,
    round(bw_delta)                                                                                   AS beta_weighted_delta,
    round(sum(bw_delta) OVER (ORDER BY leg_no ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW))       AS running_book_delta,
    round(sum(bw_delta) OVER (ORDER BY leg_no ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) * spy_close / 100.) AS dollars_per_1pct_spy
FROM
(
    SELECT
        l.leg_no                                                            AS leg_no,
        l.position                                                          AS position,
        l.qty * l.multiplier * if(l.kind = 'stock', 1., o.per_share_delta)  AS raw_share_delta,
        bt.beta_vs_spy                                                      AS beta_vs_spy,
        sp.spy_close                                                        AS spy_close,
        raw_share_delta * bt.beta_vs_spy * pr.close_px / sp.spy_close       AS bw_delta
    FROM legs AS l
    LEFT  JOIN opt_delta AS o  ON o.ticker = l.ticker AND o.kind = l.kind
    INNER JOIN betas     AS bt ON bt.ticker = l.ticker
    INNER JOIN prices    AS pr ON pr.ticker = l.ticker
    INNER JOIN spy_price AS sp ON sp.k = pr.k
)
ORDER BY leg_no
Run this yourself

股票部位帶來 300 個原始 delta,每股一個。賣出的買權帶來 -98,買進的買權則帶來 -217。將這三個數字相加,即可得到一個數值。採用 beta 加權後,則會得到另一個數值。

在觀察期間,AAPL 的 beta 為 0.88,KO 則為 -0.27;後者代表其在這十二個月期間相對於指數呈負斜率。將每個部位按照其 beta 及相對於 SPY 的價格進行調整後,股票部位相當於 103 股 SPY,賣出的買權相當於 -34 股,買進的買權則相當於 6 股。

買權部位值得特別說明。其 -217 個原始 delta 代表 KO 的空方曝險;將空方曝險乘以負 beta 後,會使其在帳面上呈現正值,相當於 6 股 SPY,亦即小幅的指數多方曝險。撇開正負號不談,重點在於其規模:以原始 delta 計算看似可觀的避險部位,換算成指數曝險後,只相當於該數值的一小部分;而且其作用對象是 KO,而非整體市場。累計總額欄會依序納入各個部位,最終整個部位組合的 beta 加權 delta 為 76

這個規模的 beta 加權 delta 實際代表什麼

76 beta 加權 delta 下,投資組合在觀察期間的表現,等同於持有相同數量的 SPY 股票。正值表示投資組合偏多指數。負值表示投資組合偏空指數,交易員稱之為將 delta 傾向空方。最後一欄則將累計數值換算為金額。若 SPY 上漲或下跌 1%,且其他條件不變,投資組合的價值將變動 565 美元。

要將該數值歸零,必須加入大小相同、方向相反的抵銷性 beta 加權 delta。放空 SPY 股票可一比一完成此操作:一股 SPY 依定義即代表一單位 beta 加權 delta。SPY 選擇權則可依所選合約的 delta,以部分單位進行調整。減少標的股票部位,則須依第一個面板所示的該股票換算比率進行。每種方式都有各自的成本與 Greeks。

Beta 加權失效的情況

Beta 是迴歸估計值,而計算所採用的期間不同,答案也會改變。下方面板以六種回溯期間重新計算同一組兩個 beta,且所有期間都截至同一日期。

查詢相同兩項 Beta,按六種不同回溯期間衡量
每個數據背後的精確 SQL 語法
WITH
    sessions AS
    (
        SELECT
            ticker                                               AS ticker,
            toDate(toTimeZone(window_start, 'America/New_York')) AS d,
            toFloat64(argMax(close, window_start))               AS px
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'AAPL', 'KO')
          AND window_start >= toDateTime('2024-04-01 04:00:00')
          AND window_start <  toDateTime('2026-07-01 04:00:00')
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
             + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960
        GROUP BY ticker, d
    ),
    steps AS
    (
        SELECT
            ticker,
            d,
            px,
            any(px) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
        FROM sessions
    ),
    daily_ret AS
    (
        SELECT ticker, d, (px / prev_px) - 1 AS r
        FROM steps
        WHERE prev_px > 0
    ),
    bench AS
    (
        SELECT d, r AS spy_r
        FROM daily_ret
        WHERE ticker = 'SPY'
    ),
    paired AS
    (
        SELECT
            s.ticker                                                 AS ticker,
            s.r                                                      AS r,
            b.spy_r                                                  AS spy_r,
            row_number() OVER (PARTITION BY s.ticker ORDER BY s.d DESC) AS rn
        FROM daily_ret AS s
        INNER JOIN bench AS b ON b.d = s.d
        WHERE s.ticker IN ('AAPL', 'KO')
    ),
    windows AS
    (
        SELECT arrayJoin([30, 60, 90, 180, 252, 504]) AS lookback
    )
SELECT
    w.lookback                                                                                       AS lookback_sessions,
    round(covarPopIf(p.r, p.spy_r, p.ticker = 'AAPL') / varPopIf(p.spy_r, p.ticker = 'AAPL'), 2)     AS aapl_beta,
    round(covarPopIf(p.r, p.spy_r, p.ticker = 'KO')   / varPopIf(p.spy_r, p.ticker = 'KO'), 2)       AS ko_beta
FROM paired AS p
CROSS JOIN windows AS w
WHERE p.rn <= w.lookback
GROUP BY w.lookback
HAVING countIf(p.ticker = 'AAPL') > 0 AND countIf(p.ticker = 'KO') > 0
ORDER BY lookback_sessions
Run this yourself

在最近 30 個交易日中,AAPL 的 beta 為 0.54;以 504 個交易日計算時,則為 1.14。KO 在短期間的 beta 為 -1.04,長期間則為 -0.03。所有 6 估計值在算術上都正確。它們回答的是不同問題,而以 beta 加權的投資組合 delta,會承接平台所選期間的結果。防禦型股票在一個期間呈現略為負值的 beta,下一個期間則呈現略為正值,這是一般情況,而非異常現象。上文示範投資組合中的每個正負號,都取決於這項選擇。

相關性行為是第二項限制。Beta 是一般交易日的平均值。在市場廣泛下跌時,平時依自身節奏波動的股票往往會同步移動,測得的 beta 也會聚集至 1。以平靜市場的 beta 來看似乎平衡的投資組合,在真正需要避險的交易日可能遠未達到平衡。集中度風險則從另一面說明相同的盲點:摘要統計量告訴你的是分布的中間區域,而不是尾端風險。

第三,這項計算屬於一階近似,完全沒有納入 gamma。Beta 加權 delta 是投資組合價值在今日價格下的斜率,並假設這個斜率維持不變。Gamma 是 delta 本身變動的速度,在這項計算中完全不會出現。持有賣出期權的投資組合,即使 beta 加權 delta 不大,在指數變動 3% 時,仍可能迅速改變特性。用於計算的 delta 已不再描述那些部位在當時價格下的狀態。應將這項數值視為小幅波動下的描述。為尾端行情建立的部位,例如 保護性買權中的部位,以 beta 加權的角度看似很小,但它們本來就不是在這個波動範圍內發揮作用。

基準指數同樣是選擇的結果。若以 SPY 作為基準,對小型股投資組合進行加權,便會掩蓋其中部分其實來自公司規模、而非整體市場的波動。Delta 只是眾多 greek 其中之一,其餘項目整理於 期權 greek 解說

常見問題

什麼是 beta 加權 delta?

Beta 加權 delta 會將投資組合中的每個部位,重新表達為基準標的的等值股數。基準標的一般是 SPY。計算方式是將各部位的原始 delta,乘以標的相對於該基準標的的 beta,再乘以兩者的價格比率,最後將整個投資組合的結果加總為單一數值。

如何手動計算 beta 加權 delta?

先計算部位以股數表示的 delta:股票每股為 1;選擇權則為每口合約的 delta 乘以 100。將該標的相對於基準標的的 beta 乘入,再乘以該標的價格除以基準標的價格。最後,將所有部位的結果加總。

負的 beta 加權 delta 代表什麼?

這表示投資組合的配置方向是:基準標地下跌時,投資組合價值傾向上升;基準標的上漲時,投資組合價值傾向下跌。其敏感度大致相當於放空該數量的基準標的股票。交易員稱這種配置為 delta 偏空。不過,這個數值只適用於幅度較小的價格變動。

股票的 beta 可能為負嗎?

可以,但只會在特定觀察期間內出現。Beta 是根據股票每日報酬率相對於指數每日報酬率的關係,所估計出的斜率。防禦型股票在某一段十二個月期間的 beta 可能略低於零,下一段期間則可能略高於零。負 beta 會反轉該部位 beta 加權 delta 的正負號,因此解讀這項指標時,也應同時考量 beta 的估計期間。

哪一個回溯期間能提供正確的 beta?

沒有唯一正確的回溯期間。30個交易日的 beta 反映近期行為,數值波動也較大;一年的 beta 或兩年的 beta 則較穩定,但對標的基本面變化的反應較慢。上方的穩定性面板顯示,同一檔股票在同一日期,以不同回溯期間計算的 beta 可能相差多遠。

Beta 加權是否會納入 gamma 或波動率?

不會。這是一項一階衡量指標,使用目前的 delta 與歷史 beta 計算。Gamma、vega、theta 和 rho 不受其影響。因此,賣出選擇權的投資組合在 beta 加權 delta 的角度看似接近中性,但遇到大幅變動時,仍可能承擔重大風險。


上方每個面板都附有產生該面板的 SQL。開啟其中一個面板,替換 ticker 或衡量期間,即可針對 Strasmore terminal 上任何可以描述的投資組合,執行相同的 beta 加權計算。

#beta weighting#portfolio greeks#delta#hedging#options