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.
Точний 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 DESCNVDA очолив список із 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 від ціни закриття.
Точний 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У діапазоні -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Позиція в акціях дає 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За останні 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.