Delta e beta weighting del portafoglio: guida
Il delta grezzo non si somma tra ticker diversi. Scopri come il beta weighting lo converte in azioni SPY equivalenti, con un esempio pratico.
Il delta di portafoglio è il singolo numero che risponde a una domanda: se il mercato nel suo complesso si muove dell’uno per cento, di quanto cambia approssimativamente l’intero portafoglio? Sommare i delta di ogni posizione produce un numero, ma non quello corretto. La ponderazione per beta è l’aggiustamento che attribuisce un significato alla somma, esprimendo ogni posizione come un numero equivalente di azioni SPY.
Perché il delta del portafoglio non si somma tra ticker diversi
Il delta misura di quanto varia il valore di una posizione per un movimento di un dollaro del sottostante. Un’azione ha un delta pari a 1. Un contratto di opzioni copre 100 azioni, quindi una call con delta 0,30 esprime un’esposizione di 30 delta. Questa prospettiva sulla singola posizione è il tema di che cosa misura il delta di un’opzione.
Il problema emerge con il secondo ticker. Cento delta su un titolo costoso e con beta elevato e cento delta su un titolo difensivo a basso prezzo hanno lo stesso conteggio, ma un’esposizione molto diversa. Nel primo caso si tratta di decine di migliaia di dollari in azioni che storicamente hanno oscillato più dell’indice. Nel secondo, di poche migliaia di dollari in azioni che storicamente hanno oscillato meno. Sommandoli si ottiene 200, una cifra espressa in un’unità su cui nessuno può basare un’azione.
Che cos’è il delta ponderato per il beta?
La ponderazione per il beta riscrive ogni delta del portafoglio come delta di un unico benchmark scelto, di norma SPY per un portafoglio azionario statunitense. Il calcolo si basa su due moltiplicatori.
Il primo è il beta: la sensibilità storica di un titolo al benchmark, misurata come pendenza dei suoi rendimenti giornalieri rispetto ai rendimenti giornalieri dell’indice in una finestra temporale scelta. Un beta pari a 1,4 significa che, in media, il titolo si è mosso di circa l’1,4% per ogni movimento dell’1% dell’indice nella finestra considerata.
Il secondo è il rapporto tra i prezzi: il prezzo del titolo diviso per il prezzo del benchmark. Il delta conta le azioni, ma azioni con prezzi diversi rappresentano importi monetari diversi. Il rapporto le riporta sulla stessa scala.
Moltiplicando il delta grezzo di una posizione per entrambi si ottiene il suo delta ponderato per il beta: il numero di azioni SPY che si sarebbero mosse nello stesso modo nella finestra di misurazione. Il pannello seguente misura il beta di ciascun titolo sulla base dei rendimenti delle chiusure giornaliere nell’anno terminato il 30 giugno 2026, quindi mostra il suo prezzo rispetto a quello di SPY e il prodotto dei due valori. SPY compare nell’elenco come riferimento, con beta pari a 1 e rapporto di prezzo pari a 1. Una sua azione equivale quindi esattamente a un delta ponderato per il beta.
L'esatto SQL dietro ogni numero
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 è in cima all’elenco, con un beta pari a 1.86, e tratta a 0.268 volte il prezzo di SPY. Moltiplicando i due valori si ottiene che una sua azione incorpora l’esposizione all’indice di 0.498 azioni SPY. All’estremo opposto, le 7 società presentano valori inferiori a zero. Nel periodo considerato, XOM ha registrato un beta di -0.36: una lieve pendenza inversa rispetto all’indice, non una sua versione meno reattiva. Una sua azione si converte in -0.067 azioni SPY. In entrambi i casi, sui book figura un delta. Ma l’esposizione associata a quel delta è molto diversa. È anche un primo indizio del fatto che un beta riportato con due decimali è una stima legata a una specifica finestra temporale. Il punto viene ripreso alla fine di questo post.
Da dove derivano i delta delle opzioni
Il delta di un’azione è fisso a 1 per azione. Quello di un’opzione non lo è e varia in funzione dello strike, del tempo residuo alla scadenza, del prezzo del sottostante e della volatilità implicita. Il pannello seguente mostra il delta di ogni contratto su AAPL scambiato il 30 giugno 2026 con una vita residua compresa tra 20 e 45 giorni, raggruppato in fasce del 2% in base alla distanza dello strike dal prezzo di chiusura.
L'esatto SQL dietro ogni numero
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_pctNella fascia -12%, le call hanno registrato in media un delta pari a 0.924 su 4 contratti scambiati, mentre per le put la media è stata -0.084. Nella fascia +10%, il delta medio delle call è stato 0.106 e quello delle put -0.834. Una call e una put con lo stesso strike hanno delta di segno opposto. Per questo una call venduta e una put acquistata compensano entrambe una posizione lunga sul titolo. L’evoluzione dell’intera curva con l’avvicinarsi della scadenza è descritta in come cambiano nel tempo i greeks delle opzioni.
Portare un piccolo portafoglio a un unico numero
Consideriamo un portafoglio di tre posizioni, dimensionato manualmente. Long di 300 azioni AAPL. Short di 3 call su AAPL con strike circa il 5% sopra il prezzo spot e scadenza tra circa un mese: il consueto overlay covered call. Long di 5 put su KO, vicine al prezzo spot e con una scadenza simile: una copertura su un secondo titolo. Il numero di azioni e contratti è ipotetico. Nel pannello sono misurati tutti i delta e i beta.
L'esatto SQL dietro ogni numero
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_noLa posizione azionaria apporta 300 delta lordi, uno per azione. Le call short apportano -98 e le put long -217. La somma di questi tre valori produce un unico dato. La ponderazione per il beta produce un dato diverso.
Nel periodo osservato, AAPL ha registrato un beta pari a 0.88 e KO un beta pari a -0.27, cioè una pendenza negativa rispetto all’indice nell’arco di quei dodici mesi. Dopo aver ponderato ogni gamba per il relativo beta e per il rapporto tra il suo prezzo e quello di SPY, la posizione azionaria equivale a 103 azioni SPY, le call short a -34 e le put a 6. La gamba in put merita un esame più attento. Il suo valore lordo di -217 delta è short su KO e, moltiplicando un’esposizione short per un beta negativo, si colloca sul lato positivo del prospetto, a 6 azioni SPY, cioè con una modesta esposizione long all’indice. Al di là del segno, il punto è l’ordine di grandezza: una copertura che in termini di delta lordo appare consistente si converte in una frazione ridotta di quel valore quando viene espressa in termini di indice, e agisce su KO, non sul mercato. La colonna del totale progressivo riporta le gambe nell’ordine e il portafoglio arriva a 76 delta ponderati per il beta.
Che cosa significa davvero un beta weighted delta di questa entità
Un portafoglio con 76 beta weighted delta si è comportato, nel periodo di misurazione, come se detenesse altrettante azioni SPY. Un valore positivo indica un portafoglio long sull’indice. Un valore negativo indica un portafoglio short sull’indice, che è ciò che i trader intendono quando parlano di un’esposizione delta short. L’ultima colonna converte il totale progressivo in denaro. Un movimento dell’1% di SPY, a parità di ogni altra condizione, modifica il valore del portafoglio di 565 dollari.
Per azzerare il valore bisogna aggiungere un beta weighted delta compensativo, di pari entità e segno opposto. La vendita allo scoperto di azioni SPY lo fa in rapporto one-to-one: per costruzione, un’azione SPY equivale a un beta weighted delta. Le opzioni su SPY lo fanno per frazioni, in base al delta del contratto scelto. Ridurre la posizione sul titolo sottostante produce lo stesso effetto applicando il tasso di conversione specifico di quel titolo, indicato nel primo pannello. Ogni soluzione comporta costi e greeks propri.
Dove il beta weighting non funziona
Il beta è una stima ottenuta tramite regressione e il periodo su cui viene misurato cambia il risultato. Il riquadro seguente ricalcola gli stessi due beta su sei periodi di osservazione, tutti con la stessa data finale.
L'esatto SQL dietro ogni numero
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_sessionsNelle ultime 30 sedute AAPL ha registrato 0.54, rispetto a 1.14 sulle 504 sedute del periodo più lungo. KO ha registrato -1.04 sul periodo breve e -0.03 su quello lungo. Tutte le stime di 6 sono aritmeticamente corrette. Rispondono però a domande diverse e il delta beta weighted del portafoglio eredita il periodo scelto dalla piattaforma. È normale, non anomalo, che un titolo difensivo mostri un beta leggermente negativo su un periodo e leggermente positivo su quello successivo. Ogni segno nel portafoglio esemplificativo sopra riportato dipende da questa scelta.
Il comportamento della correlazione è il secondo limite. Il beta è una media calcolata sulle sedute ordinarie. Durante una fase generalizzata di vendite, i titoli che normalmente si muovono con dinamiche proprie tendono a muoversi insieme e i beta misurati convergono verso 1. Un portafoglio che appare bilanciato sulla base del beta in un mercato tranquillo può essere tutt’altro che bilanciato nella seduta in cui l’hedge è necessario. Il rischio di concentrazione descrive lo stesso punto cieco dalla prospettiva opposta: una statistica riassuntiva descrive il centro della distribuzione, non la coda.
Terzo, il calcolo è di primo ordine e non considera la gamma. Il delta beta weighted è la pendenza del valore del portafoglio ai prezzi odierni e presuppone che tale pendenza resti invariata. La gamma, cioè la velocità con cui cambia lo stesso delta, non compare nel calcolo. Un portafoglio con opzioni short può mostrare un delta beta weighted moderato e cambiare rapidamente profilo con un movimento del 3% dell’indice. I delta utilizzati nel calcolo non descrivono più quelle posizioni a quei prezzi. Considera quindi il dato come una descrizione dei movimenti contenuti. Le posizioni costruite per proteggere la coda, come quelle in put protettive, appaiono di entità ridotta in termini di beta weighting e, in ogni caso, non svolgono la loro funzione in quel range.
Anche il benchmark è una scelta. Un portafoglio di small cap ponderato rispetto a SPY incorpora nel risultato anche la componente del movimento riconducibile alla dimensione delle società, anziché al mercato nel suo complesso. Il delta è uno dei diversi greek e gli altri sono illustrati in la spiegazione dei greek delle opzioni.
Domande frequenti
Che cos’è il delta ponderato per il beta?
Il delta ponderato per il beta esprime ogni posizione di un portafoglio come numero equivalente di azioni di un benchmark, di norma SPY. Il delta grezzo di ciascuna posizione viene moltiplicato per il beta del sottostante rispetto al benchmark e per il rapporto tra i due prezzi. I risultati vengono poi sommati in un unico valore per il portafoglio.
Come si calcola manualmente il delta ponderato per il beta?
Si parte dal delta della posizione espresso in azioni: 1 per ogni azione, oppure 100 volte il delta dell’opzione per ciascun contratto. Si moltiplica per il beta del sottostante rispetto al benchmark. Il risultato viene poi moltiplicato per il prezzo del sottostante diviso per il prezzo del benchmark. Infine, si sommano i risultati di tutte le posizioni.
Che cosa significa un delta ponderato per il beta negativo?
Indica un portafoglio posizionato per guadagnare valore quando il benchmark scende e perderne quando sale, più o meno come se fosse short su quel numero di azioni del benchmark. I trader descrivono questa impostazione come un’inclinazione del delta verso lo short. Il dato è valido solo per movimenti di entità contenuta.
Un’azione può avere un beta negativo?
Sì, su una determinata finestra temporale. Il beta misura la pendenza dei rendimenti giornalieri di un’azione rispetto a quelli dell’indice. Un titolo difensivo può risultare leggermente sotto zero in un periodo di dodici mesi e leggermente sopra zero in quello successivo. Un beta negativo inverte il segno del delta ponderato per il beta della posizione. Per questo il dato va interpretato insieme alla finestra temporale su cui è stato misurato.
Quale finestra temporale di osservazione restituisce il beta corretto?
Non esiste un’unica finestra corretta. Un beta calcolato su 30 sedute riflette il comportamento più recente e può oscillare molto. Un beta su un anno o due anni è più stabile e registra più lentamente i cambiamenti dell’attività sottostante. Il pannello sulla stabilità qui sopra mostra quanto possano differire due finestre per lo stesso titolo nella stessa data.
La ponderazione per il beta tiene conto di gamma o volatilità?
No. È una misura di primo ordine, costruita sui delta correnti e su un beta storico. Gamma, vega, theta e rho non vengono modificati. Di conseguenza, un portafoglio di opzioni short può apparire neutrale in termini di delta ponderato per il beta e mantenere comunque un rischio significativo in caso di ampio movimento.
Ogni pannello qui sopra include il codice SQL che lo ha prodotto. Aprine uno, sostituisci i ticker o la finestra di misurazione e la stessa aritmetica del beta ponderato verrà applicata a qualsiasi portafoglio descrivibile sul terminale Strasmore.