Benvenuto/a!

Gestione quantitativa del rischio in Python

Dr. Jamsheed Shorish

Computational Economist

Chi sono

  • Economista computazionale
  • Specializzazioni:
    • asset pricing
    • tecnologie finanziarie ("FinTech")
    • applicazioni informatiche a economia e finanza
  • Co-docente, "Economic Analysis of the Digital Economy" all'ANU
  • Shorish Research (Belgio): applicazioni aziendali computazionali
Gestione quantitativa del rischio in Python

Cos'è la gestione del rischio quantitativa?

  • Gestione del rischio quantitativa: studio dell'incertezza misurabile
  • Incertezza:
    • Gli esiti futuri sono sconosciuti
    • Gli esiti influenzano le decisioni di pianificazione
  • Risk management: mitigare (ridurre gli effetti di) esiti avversi
  • Incertezza misurabile: individuare fattori per misurare il rischio
    • Esempio: assicurazione incendi. Quali fattori rendono l'incendio più probabile?
  • Questo corso: focus sul rischio di un portafoglio finanziario
Gestione quantitativa del rischio in Python

Risk management e crisi finanziaria globale

  • Grande recessione (2007 - 2010)
    • Perdita di crescita globale oltre $2 trilioni
    • Stati Uniti: quasi $10 trilioni di ricchezza familiare persi
    • I mercati azionari USA hanno perso ca. $8 trilioni di valore
  • Crisi finanziaria globale (2007-2009)
    • Cambiamenti su larga scala nei valori fondamentali degli asset
    • Enorme incertezza sui rendimenti futuri
    • Elevata volatilità dei rendimenti degli asset
    • Il risk management è stato decisivo per successo o fallimento
Gestione quantitativa del rischio in Python

Ripasso: portafogli finanziari

  • Portafoglio finanziario
    • Insieme di asset con rendimenti futuri incerti
    • Azioni
    • Obbligazioni
    • Disponibilità in valuta estera (forex)
    • Opzioni su azioni
  • Sfida: quantificare il rischio per gestire l'incertezza
    • Prendere decisioni d'investimento ottimali
    • Massimizzare il rendimento a parità di propensione al rischio
Gestione quantitativa del rischio in Python

Quantificare il rendimento

  • Rendimento del portafoglio: somma pesata dei rendimenti dei singoli asset
    • Libreria di analisi dati Pandas
    • DataFrame prices
    • Metodo .pct_change()
    • Metodo .dot() di returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Gestione quantitativa del rischio in Python

Quantificare il rischio

  • Volatilità del rendimento del portafoglio = rischio
  • Calcola la volatilità tramite matrice di covarianza
  • Usa il metodo DataFrame .cov() di returns e annualizza

 

 

covariance = returns.cov()*252

print(covariance)

Esempio di matrice di covarianza tra 4 asset

Gestione quantitativa del rischio in Python

Quantificare il rischio

  • Volatilità del rendimento del portafoglio = rischio
  • Calcola la volatilità tramite matrice di covarianza
  • Usa il metodo DataFrame .cov() di returns e annualizza
  • La diagonale di covariance sono le varianze dei singoli asset  

   

covariance = returns.cov()*252

print(covariance)

Esempio di matrice di covarianza con le varianze evidenziate sulla diagonale

Gestione quantitativa del rischio in Python

Quantificare il rischio

  • Volatilità del rendimento del portafoglio = rischio
  • Calcola la volatilità tramite matrice di covarianza
  • Usa il metodo DataFrame .cov() di returns e annualizza
  • La diagonale di covariance sono le varianze dei singoli asset
  • Le fuori diagonale di covariance sono le covarianze tra asset
covariance = returns.cov()*252

print(covariance)

Esempio di matrice di covarianza con le covarianze evidenziate fuori diagonale

Gestione quantitativa del rischio in Python

Rischio del portafoglio

  • Dipende dai weights degli asset nel portafoglio
  • La varianza del portafoglio $\sigma_p^2$ è $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • La moltiplicazione tra matrici si calcola con l'operatore @ in Python
  • In genere si usa la deviazione standard invece della varianza
weights = [0.25, 0.25, 0.25, 0.25] # Si assumono quattro asset nel portafoglio

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Gestione quantitativa del rischio in Python

Serie storica della volatilità

  • Puoi anche calcolare la volatilità del portafoglio nel tempo
  • Usa una "finestra" per calcolarla su un periodo fisso (es. settimana, "mese" di 30 giorni)
  • Series.rolling() crea la finestra
  • Osserva il trend della volatilità e possibili eventi estremi
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

Grafico a finestra mobile di 30 giorni della volatilità annualizzata dei rendimenti

Gestione quantitativa del rischio in Python

Esercitiamoci!

Gestione quantitativa del rischio in Python

Preparing Video For Download...