Trading sulla volatilità


Gli indici di volatilità non sono acquistabili direttamente come le azioni ma si negoziano, in gergo si "tradano", tramite prodotti finanziari che li replicano:

In particolare:

Sulla volatilità si basa un gruppo di strumenti finanziari simili (asset class), a sé stante, con caratteristiche uniche:

In particolare poi:

Premesso che "andare lungo" (long) significa comprare un asset con l'aspettativa che il suo prezzo salga e "andare corto" (short) significa vendere un asset che non si possiede, con l'aspettativa che il suo prezzo scenda, le strategie sulla volatilità si dividono, secondo un criterio più intuitivo e operativo che risponde alla domanda fondamentale "Sto scommettendo che la volatilità salga o scenda?", in due macro-categorie.

Una suddivisione più descrittiva e tecnica che distingue le strategie in base a come vengono eseguite, non solo al perché, è la seguente.

Ad esempio, valutiamo con uno script Python come varia il Profit and Loss (PnL), cioè (Prezzo di Uscita−Prezzo di Entrata)×Quantità−Commissioni), realizzato attraverso una strategia Long Vol.

import datetime as dt import numpy as np import yfinance as yf import matplotlib.pyplot as plt import pandas as pd # ----------------------------- # 1. Dati SPX da inizio anno # ----------------------------- today = dt.date.today() start = dt.date(today.year, 1, 1) spx = yf.download("^SPX", start=start, end=today) prices = spx.Close.dropna() if len(prices) < 2: raise RuntimeError("Pochi dati scaricati, controlla connessione o ticker.") # ----------------------------- # 2. Volatilità realizzata (rolling) # ----------------------------- returns = prices.pct_change().dropna() realized_vol = returns.rolling(20).std() * np.sqrt(252)*100 # 20-day RV annualizzata S0 = prices.iloc[0].item() K = S0 # ----------------------------- # 3. Costo iniziale straddle (stima grezza) # qui: costo = valore atteso di |S_T - K| # ----------------------------- S_T = prices.iloc[-1].item() cost_straddle = abs(S_T - K) # ----------------------------- # 4. PnL giornaliero mark-to-market # valore straddle ~ |S_t - K| # ----------------------------- S_t = prices.values.flatten() # Ensure S_t is a 1D array value_straddle = np.abs(S_t - K) pnl = value_straddle - cost_straddle # ----------------------------- # 5. Grafico # ----------------------------- fig, ax1 = plt.subplots(figsize=(12,5)) # volatilità realizzata ax1.plot(realized_vol.index, realized_vol, color="blue", label="Volatilità Realizzata (20d)") ax1.set_ylabel("Volatilità Realizzata", color="blue") # PnL straddle ax2 = ax1.twinx() ax2.plot(prices.index, pnl, color="red", label="PnL Long Straddle ATM") ax2.set_ylabel("PnL Straddle", color="red") plt.title(f"Long Vol su SPX: Volatilità vs PnL ({start} → {today})") plt.grid(True) plt.show()

Riferimenti sito/bibliografici