Portfolio delta en beta-weging uitgelegd
Ruwe optiedelta's zijn niet optelbaar over tickers heen. Beta-weging schaalt de portfolio-delta naar equivalente SPY-aandelen, aan de hand van een concreet rekenvoorbeeld.
Portfolio-delta en beta-weging
Portfolio-delta is het getal dat antwoord geeft op één vraag: als de brede markt met één procent beweegt, hoeveel beweegt de gehele portefeuille dan ongeveer? Het simpelweg optellen van de delta's van elke positie levert weliswaar een getal op, maar niet het juiste. Beta-weging is de correctie die deze som betekenis geeft, door elk aandeel te herberekenen als een equivalent aantal SPY-aandelen.
Waarom portfolio delta niet optelbaar is over tickers heen
Delta meet in hoeverre de waarde van een positie verandert bij een beweging van één dollar in de onderliggende waarde. Eén aandeel heeft een delta van één. Eén optiecontract heeft betrekking op honderd aandelen; een calloptie met een delta van 0,30 vertegenwoordigt dus een exposure van 30 delta's. Die visie op enkelvoudige posities is het onderwerp van wat optiedelta meet.
Het probleem ontstaat bij de tweede ticker. Honderd delta's van een duur aandeel met een hoge bèta en honderd delta's van een goedkoop defensief aandeel vormen hetzelfde aantal, maar de exposure is totaal verschillend. Het ene betreft tienduizenden dollars aan aandelen die historisch gezien sterker schommelen dan de index. Het andere betreft enkele duizenden dollars aan aandelen die historisch gezien minder schommelen. Deze bij elkaar optellen geeft 200, een cijfer in eenheden waar niemand actie op kan ondernemen.
Wat is bèta-gewogen delta?
Bèta-weging herrekent elke delta in de portefeuille naar de delta van één gekozen benchmark, meestal SPY voor een Amerikaanse aandelenportefeuille. Twee vermenigvuldigers voeren dit proces uit.
De eerste is bèta: de historische gevoeligheid van een aandeel voor de benchmark, gemeten als de helling van de dagelijkse rendementen ten opzichte van de dagelijkse rendementen van de index over een gekozen periode. Een bèta van 1,4 betekent dat het aandeel in die periode gemiddeld met ongeveer 1,4% bewoog bij elke beweging van 1% van de index.
De tweede is de prijsverhouding, de koers van het aandeel gedeeld door de koers van de benchmark. Delta telt het aantal aandelen, en aandelen met verschillende koersen vertegenwoordigen verschillende geldbedragen. De verhouding brengt deze op één schaal.
Vermenigvuldig de ruwe delta van een positie met beide factoren en het resultaat is de bèta-gewogen delta: het aantal SPY-aandelen dat zich over de meetperiode op dezelfde wijze zou hebben gedragen. Het onderstaande overzicht meet de bèta van elk aandeel op basis van de dagelijkse slotrendementen over het jaar eindigend op 30 juni 2026, en toont vervolgens de koers ten opzichte van die van SPY en het product van beide. SPY fungeert in de lijst als anker, met een bèta van 1 en een prijsverhouding van 1, waardoor één SPY-aandeel exact gelijk is aan één bèta-gewogen delta.
De exacte SQL achter elk getal
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 voert de lijst aan met een bèta van 1.86 en een koers die 0.268 keer de koers van SPY bedraagt. Vermenigvuldig deze twee: één aandeel hiervan heeft een index-exposure van 0.498 SPY-aandelen. Het andere uiterste van de 7 namen bevindt zich onder nul. XOM noteerde over deze periode een bèta van -0.36, wat duidt op een lichte inverse correlatie met de index in plaats van een afgezwakte versie ervan, en één aandeel komt overeen met -0.067 SPY-aandelen. In beide gevallen staat er één delta in de boeken. Er is een groot verschil in de exposure van die delta, wat alvast aangeeft dat een bèta die op twee decimalen wordt berekend een schatting is die afhankelijk is van de gekozen periode; een punt dat aan het einde van dit artikel verder wordt toegelicht.
Waar de optie-delta's vandaan komen
De delta van een aandeel staat vast op één per aandeel. De delta van een optie is variabel en beweegt mee met de uitoefenprijs, de resterende looptijd, de koers van de onderliggende waarde en de implied volatility. Het onderstaande overzicht toont de delta van elk AAPL-contract dat op dertig juni tweeduizendzesentwintig werd verhandeld met een resterende looptijd van twintig tot vijfenveertig dagen, gegroepeerd in buckets van twee procent op basis van de afstand van de uitoefenprijs tot de slotkoers.
De exacte SQL achter elk getal
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_pctIn de -12% bucket bedroeg de gemiddelde delta van calls 0.924 over 4 verhandelde contracten, terwijl puts gemiddeld op -0.084 uitkwamen. Bij +10% bedroegen de gemiddelden voor calls 0.106 en voor puts -0.834. Een call en een put met dezelfde uitoefenprijs hebben delta's met een tegengesteld teken; daarom heffen zowel een short call als een long put een long aandelenpositie op. Hoe de gehele curve verschuift naarmate de expiratiedatum nadert, wordt behandeld in hoe optie-Griekse waarden in de loop van de tijd veranderen.
Eén boek met drie posities terugbrengen tot één getal
Neem een boek met drie posities, handmatig gedimensioneerd. Long driehonderd aandelen AAPL. Short drie AAPL-calls op ongeveer vijf procent boven de uitoefenprijs met een looptijd van ruwweg een maand; de standaard covered-call overlay. Long vijf KO-puts nabij de uitoefenprijs met een vergelijkbare looptijd, als hedge op een tweede naam. De aantallen aandelen en contracten zijn hypothetisch. Elke delta en bèta in het overzicht wordt gemeten.
De exacte SQL achter elk getal
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_noDe aandelenpoot levert 300 ruwe delta's op, één per aandeel. De short calls leveren -98 op en de long puts -217. Het optellen van deze drie aantallen resulteert in één cijfer. Bèta-weging levert een ander cijfer op.
AAPL vertoonde over de meetperiode een bèta van 0.88 en KO -0.27, een negatieve helling ten opzichte van de index over die twaalf maanden. Na het schalen van elke poot op basis van de bèta en de prijs ten opzichte van SPY, wordt de aandelenpoot 103 SPY-aandelen, de short calls -34 en de puts 6. Bij de put-poot is het de moeite waard om even stil te staan. Het ruwe aantal van -217 delta's is short KO, en het vermenigvuldigen van een short exposure met een negatieve bèta brengt dit aan de positieve kant van de balans op 6 SPY-aandelen, een kleine long-index waarde. Afgezien van het teken is de omvang het punt: een hedge die in termen van ruwe delta's substantieel lijkt, vertaalt zich in indextermen naar een kleine fractie van dat aantal, en het werk wordt verricht op KO in plaats van op de markt. De kolom met het lopende totaal bevat de posities in volgorde, en het boek eindigt op 76 bèta-gewogen delta's.
Wat een bèta-gewogen delta van die omvang feitelijk betekent
Een portefeuille met 76 bèta-gewogen delta's heeft zich gedurende het meetvenster gedragen als het aanhouden van dat aantal SPY-aandelen. Een positief cijfer duidt op een portefeuille die long is in de index. Een negatief cijfer duidt op een portefeuille die short is, wat handelaren bedoelen met het 'tilten' van de delta naar de short-kant. De laatste kolom vertaalt het lopende totaal naar een geldbedrag. Een beweging van 1% in SPY, waarbij alle overige factoren gelijk blijven, zorgt voor een beweging van 565 dollar in de portefeuille.
Het afvlakken van dit cijfer betekent het toevoegen van een compenserende bèta-gewogen delta van gelijke omvang en tegengesteld teken. Het shorten van SPY-aandelen doet dit één-op-één: één SPY-aandeel is per definitie gelijk aan één bèta-gewogen delta. SPY-opties doen dit in fracties, afhankelijk van de delta die het gekozen contract met zich meebrengt. Het inkrimpen van de onderliggende aandelenpositie doet dit tegen de eigen conversievoet van dat aandeel uit het eerste paneel. Elke route brengt eigen kosten en eigen greeks met zich mee.
Waar beta-weging tekortschiet
Beta is een regressieschatting en het venster waarover deze wordt gemeten, bepaalt de uitkomst. Het onderstaande paneel herberekent dezelfde twee beta's over zes terugkijkperiodes, die allemaal op dezelfde datum eindigen.
De exacte SQL achter elk getal
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_sessionsOver de meest recente 30 sessies werd voor AAPL 0.54 gemeten, tegenover 1.14 over 504 sessies. Voor KO werd -1.04 gemeten in het korte venster en -0.03 in het lange venster. Alle 6 schattingen zijn rekenkundig correct. Ze beantwoorden verschillende vragen, en een met beta gewogen book delta neemt de waarde over van het venster dat het platform toevallig heeft gekozen. Een defensief aandeel dat in het ene venster een licht negatieve beta laat zien en in het volgende een licht positieve, is de normale gang van zaken, geen anomalie. Elk teken in het bovenstaande bewerkte boek berust op die keuze.
Correlatiegedrag is de tweede beperking. Beta is een gemiddelde van normale sessies. Tijdens een brede verkoopgolf hebben aandelen die normaal gesproken hun eigen tempo volgen, de neiging om in dezelfde richting te bewegen, en de gemeten beta's clusteren rond 1. Een boek dat in een rustige markt in balans lijkt, kan ver uit balans zijn op de sessie waarin de hedge ertoe doet. Concentratierisico beschrijft dezelfde blinde vlek vanuit de andere kant: een samenvattende statistiek vertelt u iets over het midden van de verdeling, niet over de staart.
Ten derde is de berekening van de eerste orde en weet deze niets over gamma. Beta-gewogen delta is de helling van de waarde van het boek tegen de huidige prijzen, en het gaat ervan uit dat die helling standhoudt. Gamma, de snelheid waarmee delta zelf verandert, komt er nergens in voor. Een boek met short opties kan een bescheiden beta-gewogen delta vertonen en toch snel van karakter veranderen bij een indexbeweging van drie procent. De delta's die de berekening voedden, beschrijven die posities niet langer tegen die prijzen. Beschouw het cijfer als een beschrijving van kleine bewegingen. Posities die zijn opgebouwd voor de staart, zoals die in beschermende puts, zien er in beta-gewogen termen minuscuul uit en doen in dat bereik sowieso hun werk niet.
De benchmark is ook een keuze. Een boek met small caps gewogen tegen SPY verhult welk deel van de beweging toe te schrijven is aan de omvang van het bedrijf in plaats van aan de brede markt. Delta is één griek tussen meerdere, en de rest van de set wordt uiteengezet in de optiegrieken uitgelegd.
Veelgestelde vragen
Wat is beta-gewogen delta?
Beta-gewogen delta herrekent elke positie in een portefeuille naar een equivalent aantal aandelen van een benchmark, meestal SPY. De ruwe delta van elke positie wordt vermenigvuldigd met de beta van de onderliggende waarde ten opzichte van die benchmark en met de verhouding tussen de twee koersen. De resultaten worden opgeteld tot één cijfer voor de gehele portefeuille.
Hoe berekent u handmatig de beta-gewogen delta?
Begin met de delta van de positie in aandelen: één per aandeel, of honderd maal de optiedelta per contract. Vermenigvuldig dit met de beta van de onderliggende waarde ten opzichte van de benchmark en vermenigvuldig vervolgens met de koers van de onderliggende waarde gedeeld door de koers van de benchmark. Tel de resultaten van alle posities bij elkaar op.
Wat betekent een negatieve beta-gewogen delta?
Dit duidt op een portefeuille die in waarde stijgt wanneer de benchmark daalt en in waarde daalt wanneer deze stijgt, ongeveer in het tempo van een shortpositie in dat aantal benchmarkaandelen. Handelaren noemen dit een short-delta-tilt. Dit cijfer geldt alleen voor kleine koersbewegingen.
Kan een aandeel een negatieve beta hebben?
Ja, over een bepaalde periode. Beta is de gemeten helling van het dagelijkse rendement van een aandeel ten opzichte van de index. Een defensief aandeel kan over een periode van twaalf maanden net onder nul uitkomen en in de daaropvolgende periode net daarboven. Een negatieve beta draait het teken van de beta-gewogen delta van die positie om; daarom wordt de metriek altijd bekeken in combinatie met de periode waarover deze is gemeten.
Welke terugkijkperiode levert de juiste beta op?
Er is geen enkele juiste periode. Een beta over dertig handelsdagen volgt recent gedrag en fluctueert sterk, terwijl een beta over één of twee jaar stabieler is en trager reageert op veranderingen in de onderliggende bedrijfsactiviteiten. Het stabiliteitspaneel hierboven laat zien hoe ver twee periodes voor hetzelfde aandeel op dezelfde datum uiteen kunnen lopen.
Houdt beta-weging rekening met gamma of volatiliteit?
Nee. Het is een maatstaf van de eerste orde, gebaseerd op actuele delta's en een historische beta. Gamma, vega, theta en rho worden hierin niet meegenomen. Een portefeuille met shortopties kan er in termen van beta-gewogen delta dus neutraal uitzien, terwijl er bij een grote koersbeweging nog steeds aanzienlijke risico's aanwezig zijn.
Elk paneel hierboven wordt geleverd met de SQL-code die het heeft gegenereerd. Open een paneel, wijzig de tickers of de meetperiode, en dezelfde beta-gewogen berekening wordt uitgevoerd voor elke portefeuille die u op de Strasmore-terminal kunt definiëren.