Dynamic SPX Hedge Strategy

Dynamic SPX Hedge Strategy

by

in

Intuizione.

Durante la stesura della mia tesi, ho avuto uno dei miei momenti “ma, e se…?” riguardo una delle verità monumentali del mondo degli investimenti: l’indice S&P500 è visto principalmente come investimento “sicuro” o, per chi ha meno avversione al rischio, come copertura contro i ribassi di singoli titoli.

E se ci fosse un modo per coprire L’INDICE stesso, e non CON l’indice?

Beh, si scopre che combinando il VIX, una strategia con le opzioni ed un semplice buy and hold sull’indice SP, si può fare.

Matematica Noiosa.

Definiamo una notazione semplice:

  • Sia P la chiusura dell’SPX (con pedice t, al tempo t).
  • Sia EMAₗ(t) la media mobile esponenziale di P al tempo t su 50 e 200 giorni.
  • Sia CUₜ la funzione indicatrice del crossover, con CUₜ = 1 se e solo se EMA_50(t) > EMA_200(t) e Pₜ > EMA_50(t).
  • Sia TSₜ l’indicatore di attivazione del trailing stop al tempo t.
  • Sia Mₜ l’insieme degli stati che la strategia può assumere.
  • Sia Vₜ il valore del portafoglio al tempo t.

Inizializzazione

\[ S_t = \left\{ \begin{array}{l} straddle, \qquad if \,\,CU_t = 1 &\\ bh, \qquad if \,\,S_{t-1} = straddle\,and\,TS_t=1 &\\ S_{t-1}, \qquad otherwise \end{array} \right. \]

per ogni t > 1.

Intuizione in Italiano Semplice.

L’indice S&P500 è il benchmark più utilizzato nel mondo azionario, ma come ogni singolo titolo che lo compone, anch’esso subisce crolli, sentiment, bull run, pressioni ribassiste. Per minimizzare questo aspetto, ho pensato di implementare una di tipo Straddle.

Il modo più semplice per spiegare come funziona uno straddle è dire: “con abbastanza volatilità, guadagni indipendentemente da dove va il mercato.

In pratica, una straddle consiste nel comprare – o vendere – simultaneamente una call e una put sullo stesso sottostante (in questo caso, SPX), con lo stesso strike (at-the-money) e la stessa scadenza. In questo modo si punta a trarre profitto dal movimento, non dalla direzione del sottostante. Un esempio classico? I catalizzatori di mercato: dazi di Trump, COVID, crollo del 2008.

L’obiettivo è massimizzare il profitto relativo minimizzando il drawdown reale.

Il Processo.

I Dati.

Per questo progetto ho utilizzato:

  • Dati SPX dal 1 Gennaio 2000, OHLC.
  • Dati VIX dal 1 Gennaio 2000, OHLC.
  • US 10Y Treasury Bond dal 1 Gennaio 2000, OHLC.

All of them are daily.

Tutti giornalieri.

Ora ti starai chiedendo: “E le opzioni? Dove hai preso l’options chain?” Ottima domanda. Ci arriviamo subito.

data import
SPX OHLC Chart
VIX OHLC Chart
US10Y OHLC Chart

Ora che abbiamo i dati, posso mostrarti come ho superato l’ostacolo dell’option chain.

L’Option Chain.

L’option chain è semplicemente la lista di opzioni disponibili su un certo ottostante. Normalmente, per una certa scadenza, è composta da due sezioni (dette “legs”) Call e Put, strutturate così:

  • Open Interest
  • Volume
  • Bid Size
  • Bid
  • Ask
  • Ask Size
  • Strike

Sfortunatamente, i dati delle chain sono limitati, inesistenti, o costano anche 20.000$ l’anno (no grazie). Il pacchetto yfinance purtroppo non fornisce più queste info.

Come li ho ottenuti? Con le opzioni sintetiche.

Un’opzione sintetica è un’opzione il cui prezzo è stato calcolato. E come studente di Computational Finance ho pensato che il pricing di derivati potesse essere nelle mie corde. 🙂

class OptionsSynthesizer:

Usiamo i dati da:

  • US10Y (risk-free rate)
  • Indice VIX (volatilità implicita)
  • SPX (sottostante)
Synthetic Option Chain Computation

E sì, se hai un minimo di background, hai già capito: sto prezzando le opzioni con la formula di Black-Scholes-Merton. Non è la più accurata in assoluto, ma per testare una teoria va benissimo. Se il delta tra prezzo sintetico e reale è < 2%, sono soddisfatto.

Let’s have a look at the computation process:

  • S: il prezzo spot, riga per riga.
  • K: prezzo strike, creato con np.linspace() attorno a S, ±10%, 10 strike totali.
  • Sigma, Vega, sono greche calcolate tramite la funzione synthetic iv:
Synthetic IV Computation

dove sigma definisce la volatilità e vega la sensibilità del prezzo dell’opzione rispetto alla volatilità.

  • Call, Put prezzate attraverso BS:
Call, Put Option Pricing
  • Bid/Ask: aggiunta simulazione spread (noise ~N(0, 0.002 * Prezzo Opzione * exp(-Maturità)))
Spread computation and addition
  • Calcolo di ulteriori greche (avevo preventivato l’uso anche di esse).
Greeks computation

Sì, ho controllato il rapporto Put-Call Parity per ogni riga generata.

Risultato? Una chain sintetica esplorabile e realistica. Smile e superficie ci sono (un po’ grossolana, ma funziona).

I Segnali.

Come anticipato, il trigger della strategia è legato al VIX e alle sue relazioni con il passato:

  • Se il prezzo di chiusura è sopra la EMA50 e la EMA50 è sopra la EMA200 → segnale = 1. Altrimenti, -1.

La Strategia Completa

Utilizzando un adattamento del mio backtester, il test viene eseguito giorno per giorno con operazioni vettorializzate per efficienza e velocità. La chain sintetica viene generata solo al momento del trigger. Se la strategia non è attiva, si entra in modalità buy & hold, per non lasciare soldi sul tavolo e coprirsi da eventuali perdite della strategia opzionale.

I Risultati.

Equity Curve.

Come possiamo chiaramente vedere, l’obiettivo dello studio è stato raggiunto, e l’ipotesi confermata: l’indice S&P500 può essere coperto utilizzando le sue opzioni, intercettando segnali dal VIX, a un prezzo relativamente contenuto (commissioni e fee strutturali prese da IBKR, il broker che uso personalmente)

Ma quali sono i numeri della strategia?

CAGR           : 4.05%
Annual Vol : 5.77%
Max Drawdown : -8.86%
Total Return : 173.29%

SPX Performance Metrics:
CAGR : 5.50%
Annual Vol : 19.52%
Max Drawdown : -56.78%
Total Return : 288.94%

Com’è possibile dedurre dai risultati, la performance della strategia è inferiore rispetto a quella dell’indice, ma osservando CAGR, Volatilità Annua ed i rapporti, non sono molto distanti, regalando un outlook stabile sull’andamento della strategia. Il valore che più mi impressiona (e l’effettivo raggiungimento del mio scopo) riguarda il drawdown. Ridurre percentuali di drawdown significa regalare tranquillità e stabilità anche nei peggiori momenti di panico.

Un drawdown sotto il 10% senza diversificazione, su un singolo asset performando più del 170%?

Direi che è una bella vittoria, no?

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *