Portafogli di Markowitz

Introduzione alla gestione del rischio di portafoglio in Python

Dakota Wixom

Quantitative Analyst | QuantCourse.com

100.000 portafogli generati casualmente

Introduzione alla gestione del rischio di portafoglio in Python

Rapporto di Sharpe

Il rapporto di Sharpe misura il rendimento corretto per il rischio.

Per calcolare la versione del 1966 del rapporto di Sharpe:

$$ S = \frac{ R_a - r_f }{\sigma_a} $$

  • S: Sharpe Ratio
  • $ R_a $: Rendimento dell'asset
  • $ r_f $: Tasso privo di rischio
  • $ \sigma_a $: Volatilità dell'asset
Introduzione alla gestione del rischio di portafoglio in Python

La frontiera efficiente

Introduzione alla gestione del rischio di portafoglio in Python

I portafogli di Markowitz

Ogni punto sulla frontiera efficiente è un portafoglio ottimo.

Questi due punti comuni sono detti portafogli di Markowitz:

  • MSR: portafoglio a Massimo Sharpe Ratio
  • GMV: portafoglio a Minima Volatilità Globale

Introduzione alla gestione del rischio di portafoglio in Python

Scelta di un portafoglio

Come scegliere il portafoglio migliore?

  • Scegli un portafoglio sul bordo della frontiera efficiente
  • Rendimenti più alti richiedono tollerare più rischio
Introduzione alla gestione del rischio di portafoglio in Python

Selezionare l'MSR in Python

Supponendo un DataFrame df di portafogli casuali con colonne Volatility e Returns:

numstocks = 5
risk_free = 0
df["Sharpe"] = (df["Returns"] - risk_free) / df["Volatility"]
MSR = df.sort_values(by=['Sharpe'], ascending=False)
MSR_weights = MSR.iloc[0, 0:numstocks]
np.array(MSR_weights)
array([0.15, 0.35, 0.10, 0.15, 0.25])
Introduzione alla gestione del rischio di portafoglio in Python

Le performance passate non garantiscono rendimenti futuri

Anche se un portafoglio a Massimo Sharpe Ratio può sembrare allettante, in pratica i rendimenti sono molto difficili da prevedere.

Introduzione alla gestione del rischio di portafoglio in Python

Selezionare il GMV in Python

Supponendo un DataFrame df di portafogli casuali con colonne Volatility e Returns:

numstocks = 5
GMV = df.sort_values(by=['Volatility'], ascending=True)
GMV_weights = GMV.iloc[0, 0:numstocks]
np.array(GMV_weights)
array([0.25, 0.15, 0.35, 0.15, 0.10])
Introduzione alla gestione del rischio di portafoglio in Python

Esercitiamoci!

Introduzione alla gestione del rischio di portafoglio in Python

Preparing Video For Download...