Rapporto di Sharpe e rapporto di Sortino

Trading finanziario con Python

Chelsea Yang

Data Science Instructor

Quale strategia rende meglio?

$$

Strategia 1:
  • Rendimento: 15%
  • Volatilità (deviazione standard): 30%

$$

Strategia 2:
  • Rendimento: 10%
  • Volatilità (deviazione standard): 8%
Trading finanziario con Python

Rendimento corretto per il rischio

  • Rendere comparabili le performance tra strategie diverse
  • Un rapporto che descrive il rischio per ottenere il rendimento

Rischio vs rendimento

Trading finanziario con Python

Rapporto di Sharpe

$$ \text{Sharpe Ratio} = (R_p - R_r)/\sigma_p $$

$$

  • $R_p $: Rendimento di una strategia, portafoglio, asset, ecc.
  • $R_r $: Tasso privo di rischio
  • $\sigma_p $: Deviazione standard dell'excess return ($R_p-R_f$)

$$

  • Più è alto lo Sharpe ratio, più il rendimento è interessante
Trading finanziario con Python

Ora scegli di nuovo

$$

Strategia 1:
  • Rendimento: 15%
  • Volatilità (deviazione standard): 30%
  • Sharpe ratio: 15%/30% = 0.5

$$

Strategia 2:
  • Rendimento: 10%
  • Volatilità (deviazione standard): 8%
  • Sharpe ratio: 10%/8% = 1.25
Trading finanziario con Python

Ottenere lo Sharpe ratio dal backtest bt

resInfo = bt_result.stats
# Get Sharpe ratios from the backtest stats
print('Sharpe ratio daily: %.2f'% resInfo.loc['daily_sharpe'])
print('Sharpe ratio monthly %.2f'% resInfo.loc['monthly_sharpe'])
print('Sharpe ratio annually %.2f'% resInfo.loc['yearly_sharpe'])
Sharpe ratio daily: 0.49
Sharpe ratio monthly 0.48
Sharpe ratio annually 1.34
Trading finanziario con Python

Calcolare manualmente lo Sharpe ratio

# Obtain annual return
annual_return = resInfo.loc['yearly_mean']

# Obtain annual volatility volatility = resInfo.loc['yearly_vol']
# Calculate Sharpe ratio manually sharpe_ratio = annual_return / volatility print('Sharpe ratio annually %.2f'% sharpe_ratio)
Sharpe ratio annually 1.34
Trading finanziario con Python

Limiti dello Sharpe ratio

  • Penalizza sia la volatilità "positiva" sia quella "negativa"
  • La volatilità al rialzo può abbassare il rapporto

Limiti dello Sharpe ratio

Trading finanziario con Python

Rapporto di Sortino

$$ \text{Sortino Ratio} = (R_p - R_r)/\sigma_d $$

  • $R_p $: Rendimento di una strategia, portafoglio, asset, ecc.
  • $R_r $: Tasso privo di rischio
  • $\sigma_d $: Deviazione negativa dell'excess return ($R_p-R_f$)

Volatilità al ribasso

Trading finanziario con Python

Ottenere il rapporto di Sortino dal backtest bt

resInfo = bt_result.stats
# Get Sortino ratio from backtest stats
print('Sortino ratio daily: %.2f'% resInfo.loc['daily_sortino'])
print('Sortino ratio monthly %.2f'% resInfo.loc['monthly_sortino'])
print('Sortino ratio annually %.2f'% resInfo.loc['yearly_sortino'])
Sortino ratio daily: 0.70
Sortino ratio monthly 0.86
Sortino ratio annually 2.29
Trading finanziario con Python

Esercitiamoci!

Trading finanziario con Python

Preparing Video For Download...