Strasmore Research
Навчання Matt ConnorВід Matt Connor

Delta портфеля та beta weighting: як це працює

Сира delta опціонів не підсумовується між тикерами. Beta weighting перераховує її в еквівалент акцій SPY на прикладі невеликого портфеля.

Portfolio delta — це єдине число, яке відповідає на одне запитання: якщо широкий ринок зміниться на 1%, приблизно наскільки зміниться весь портфель? Просте додавання delta за кожною позицією дає число, але не це число. Beta weighting — це коригування, завдяки якому така сума набуває сенсу: кожну позицію перераховують у еквівалентну кількість акцій SPY.

Чому delta портфеля не підсумовується між тикерами

Delta показує, як змінюється вартість позиції за руху базового активу на один долар. Одна акція має delta 1. Один опціонний контракт охоплює 100 акцій, тому call-опціон із delta 0,30 створює експозицію в розмірі 30 delta. Саме такий погляд на окрему позицію розглядається в матеріалі що вимірює delta опціону.

Проблема виникає з другим тикером. Сто delta за дорогою акцією з високою beta і сто delta за дешевою захисною акцією — це однакова кількість delta, але зовсім різна експозиція. В одному випадку йдеться про акції на десятки тисяч доларів, які історично коливалися сильніше за індекс. В іншому — про акції на кілька тисяч доларів, які історично коливалися слабше. Їхнє підсумовування дає 200 — показник, практично непридатний для прийняття рішень.

Що таке beta-weighted delta?

Beta weighting перераховує кожну delta у портфелі як delta одного обраного бенчмарку, зазвичай SPY для портфеля акцій США. Для цього використовуються два множники.

Перший — beta: історична чутливість акції до бенчмарку. Її вимірюють як нахил залежності денних доходностей акції від денних доходностей індексу за обраний період. Beta на рівні 1,4 означає, що за кожного руху індексу на 1% акція в середньому змінювалася приблизно на 1,4% протягом цього періоду.

Другий — співвідношення цін: ціна акції, поділена на ціну бенчмарку. Delta враховує кількість акцій, але однакова кількість акцій за різних цін означає різний обсяг коштів. Це співвідношення приводить їх до єдиного масштабу.

Помножте raw delta позиції на обидва показники — і отримаєте beta-weighted delta: кількість акцій SPY, які поводилися б так само протягом періоду вимірювання. У таблиці нижче beta для кожної назви розраховано на основі денних доходностей за цінами закриття за рік, що завершився 30 червня 2026 року. Далі показано її ціну відносно SPY та добуток цих двох показників. SPY наведено у списку як якірний актив: його beta дорівнює 1, а співвідношення цін — 1. Тому одна акція SPY дорівнює рівно одній beta-weighted delta.

ЗапитБета, цінове співвідношення та еквівалент частки 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. Акція торгувалася за ціною, що у 0.268 раза перевищувала ціну SPY. Перемноживши ці показники, отримаємо: одна акція мала індексну експозицію, еквівалентну 0.498 акцій SPY. На протилежному кінці списку з 7 назвами показник був нижчим за нуль. Для XOM за цей період beta становила -0.36. Це помірний зворотний нахил відносно індексу, а не просто слабша реакція на його рухи. Одна акція перетворюється на -0.067 акцій SPY. В обох випадках у портфелі — одна delta. Але експозиція цієї delta суттєво різниться. Це також рання ілюстрація того, що beta, наведена з точністю до двох десяткових знаків, є оцінкою, прив’язаною до конкретного періоду. Наприкінці цього матеріалу ми розглянемо це питання докладніше.

Звідки беруться дельти опціонів

Дельта акції фіксована на рівні 1 на акцію. Дельта опціону — ні. Вона змінюється залежно від strike, часу до експірації, ціни базового активу та implied volatility. На панелі нижче наведено дельту кожного контракту на AAPL, за яким укладалися угоди 30 червня 2026 року і до експірації якого залишалося від 20 до 45 днів. Контракти згруповано в діапазони по 2% залежно від відстані strike від ціни закриття.

ЗапитДельта кол- і пут-опціонів на AAPL уздовж шкали страйків, до експірації 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% середня дельта call-опціонів становила 0.924 за результатами 4 укладених угод, а put-опціонів — -0.084. У діапазоні +10% середня дельта call-опціонів становила 0.106, а put-опціонів — -0.834. Call- і put-опціон з однаковим strike мають дельти з протилежними знаками. Саме тому коротка позиція в call і довга позиція в put однаково компенсують довгу позицію в акції. Про те, як уся крива зміщується з наближенням експірації, читайте в матеріалі як греки опціонів змінюються з часом.

Один невеликий портфель — до одного показника

Розглянемо портфель із трьох позицій, розмір яких визначено вручну. Long 300 акцій AAPL. Short 3 call-опціони на AAPL зі strike приблизно на 5% вище поточної ціни та строком до експірації близько місяця — стандартна covered-call стратегія. Long 5 put-опціонів на KO зі strike близько до поточної ціни та аналогічним строком до експірації — хедж за другим активом. Кількість акцій і контрактів наведено умовно. Усі delta та 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('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 — по одній на кожну акцію. Short call-опціони дають -98, а long put-опціони — -217. Додавання цих трьох показників дає одне число. Зважування за beta дає інше.

За визначений період beta AAPL становила 0.88, а KO — -0.27: негативний зв’язок з індексом протягом цих дванадцяти місяців. Після коригування кожної позиції на її beta та співвідношення ціни активу до ціни SPY позиція в акціях перетворюється на 103 акцій SPY, short call-опціони — на -34, а put-опціони — на 6. На позиції в put-опціонах варто зупинитися окремо. Її необтяжений показник у -217 delta означає short-позицію в KO. Множення short-експозиції на негативну beta переводить її в позитивну частину розрахунку — 6 акцій SPY, тобто дає невеликий показник long-позиції щодо індексу. Окремо від знака важливий масштаб: хедж, який у показниках необтяженої delta виглядає значним, у перерахунку на індекс становить лише невелику частку цього показника. Водночас він працює саме через KO, а не через ринок загалом. У стовпці поточного підсумку позиції наведено в тому самому порядку, а загальний показник портфеля становить 76 delta, зважених за beta.

Що насправді означає beta-weighted delta такого розміру

Портфель із beta-weighted delta на рівні 76 протягом періоду вимірювання поводився так, ніби інвестор володів відповідною кількістю акцій SPY. Додатне значення означає, що портфель має довгу позицію щодо індексу. Від’ємне значення означає коротку позицію, тобто те, що трейдери називають зміщенням delta у бік short. Остання колонка переводить поточний підсумок у грошовий вираз. Рух SPY на 1%, за незмінності всіх інших умов, змінює вартість портфеля на 565 доларів.

Щоб обнулити це значення, потрібно додати компенсувальну beta-weighted delta такого самого розміру, але протилежного знака. Продаж акцій SPY у short робить це один до одного: одна акція SPY за визначенням відповідає одній beta-weighted delta. Опціони на SPY дають змогу коригувати показник частинами — залежно від delta обраного контракту. Скорочення позиції в базовій акції дає такий самий ефект за коефіцієнтом перерахунку цієї акції з першої панелі. Кожен підхід має власні витрати та власний набір грецьких показників.

Де beta weighting втрачає точність

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 сесій beta AAPL становила 0.54, тоді як за 504 сесій — 1.14. Для KO цей показник становив -1.04 на короткому періоді та -0.03 на довгому. Усі оцінки 6 є арифметично коректними. Вони відповідають на різні запитання, а beta-weighted delta портфеля успадковує період, який обрала платформа. Для захисної акції цілком нормально мати трохи від’ємну beta в одному періоді й трохи додатну — у наступному. Це не аномалія. Усі знаки в наведеному вище прикладі портфеля залежать від цього вибору.

Другою проблемою є характер кореляцій. Beta — це середнє значення для звичайних сесій. Під час масштабного розпродажу акції, які зазвичай рухаються незалежно, часто починають рухатися разом, а розраховані beta наближаються до 1. Портфель, який виглядає збалансованим за beta у спокійному ринку, може бути далеким від збалансованого саме в сесію, коли хеджування має значення. Ризик концентрації описує ту саму проблему з іншого боку: підсумковий статистичний показник характеризує середину розподілу, а не його хвіст.

По-третє, цей розрахунок є оцінкою першого порядку й нічого не враховує про gamma. Beta-weighted delta показує нахил вартості портфеля за сьогоднішніх цін і передбачає, що цей нахил зберігатиметься. Gamma — швидкість зміни самої delta — у розрахунку відсутня. Портфель із короткими опціонами може мати помірну beta-weighted delta, але швидко змінити свій профіль за руху індексу на 3%. Delta, використані в розрахунку, більше не описують ці позиції за нових цін. Цей показник слід сприймати як опис невеликих рухів. Позиції, створені для захисту від хвостових ризиків, наприклад зазначені в матеріалі захисні put-опціони, мають незначний вигляд у термінах beta weighting і все одно не виконують свою функцію в такому діапазоні руху.

Benchmark також є предметом вибору. Якщо портфель акцій малої капіталізації порівнювати зі SPY, частина його руху, пов’язана з розміром компаній, а не із широким ринком, залишиться непомітною. Delta — лише один із кількох греків. Решту показників наведено в матеріалі пояснення грецьких показників опціонів.

FAQ

Що таке beta weighted delta?

Beta weighted delta перераховує кожну позицію в портфелі в еквівалентну кількість акцій одного benchmark, зазвичай SPY. Вихідну delta кожної позиції множать на beta базового активу щодо цього benchmark і на співвідношення двох цін. Потім результати підсумовують в один показник для всього портфеля.

Як розрахувати beta weighted delta вручну?

Спочатку визначте delta позиції в акціях: 1 на одну акцію або 100, помножені на delta опціону, для одного контракту. Помножте цей показник на beta базового активу щодо benchmark. Потім ще раз помножте його на ціну базового активу, поділену на ціну benchmark. Підсумуйте результати для всіх позицій.

Що означає від’ємна beta weighted delta?

Це означає, що портфель має зрости в ціні, якщо benchmark знижується, і втратити в ціні, якщо benchmark зростає. За темпом такий результат приблизно відповідає короткій позиції в цій кількості акцій benchmark. Трейдери називають це зміщенням delta в бік short. Показник коректний лише для невеликих рухів.

Чи може акція мати від’ємну beta?

Так, протягом певного періоду. Beta — це виміряний нахил залежності денних доходностей акції від доходностей індексу. Захисна акція в одному дванадцятимісячному періоді може мати beta трохи нижче нуля, а в наступному — трохи вище нуля. Від’ємна beta змінює знак beta weighted delta цієї позиції. Тому цей показник потрібно розглядати разом із періодом, за який його розраховано.

Який період для розрахунку beta є правильним?

Єдиного правильного періоду немає. Beta за 30 торгових сесій відображає нещодавню поведінку акції та суттєво коливається. Beta за один або два роки стабільніша й повільніше реагує на зміни в базовому бізнесі. Панель стабільності вище показує, наскільки можуть відрізнятися результати за двома періодами для тієї самої акції на ту саму дату.

Чи враховує beta weighting gamma або волатильність?

Ні. Це показник першого порядку, розрахований на основі поточних delta та історичної beta. Gamma, vega, theta і rho не враховуються. Тому портфель short-опціонів може виглядати нейтральним за beta weighted delta, але водночас мати значний ризик у разі сильного руху ринку.


Кожна панель вище містить SQL-код, за допомогою якого її створено. Відкрийте потрібну панель, замініть тикери або період вимірювання — і той самий розрахунок beta weighted delta буде застосовано до будь-якого портфеля, який можна описати в терміналі Strasmore.

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