Sharpe ratio and Sortino ratio

Finanční obchodování v Pythonu

Chelsea Yang

Data Science Instructor

Která strategie je lepší?

$$

Strategie 1:
  • Výnos: 15 %
  • Volatilita (směrodatná odchylka): 30 %

$$

Strategie 2:
  • Výnos: 10 %
  • Volatilita (směrodatná odchylka): 8 %
Finanční obchodování v Pythonu

Výnos očištěný o riziko

  • Umožňuje srovnání výkonnosti různých strategií
  • Ratio popisující riziko spojené s dosažením výnosu

Riziko vs. výnos

Finanční obchodování v Pythonu

Sharpe ratio

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

$$

  • $R_p $: Výnos strategie, portfolia, aktiva atd.
  • $R_r $: Bezriziková sazba
  • $\sigma_p $: Směrodatná odchylka nadměrného výnosu ($R_p-R_f$)

$$

  • Čím vyšší Sharpe ratio, tím atraktivnější výnos
Finanční obchodování v Pythonu

Vyberte znovu

$$

Strategie 1:
  • Výnos: 15 %
  • Volatilita (směrodatná odchylka): 30 %
  • Sharpe ratio: 15 %/30 % = 0,5

$$

Strategie 2:
  • Výnos: 10 %
  • Volatilita (směrodatná odchylka): 8 %
  • Sharpe ratio: 10 %/8 % = 1,25
Finanční obchodování v Pythonu

Získání Sharpe ratio z bt backtestu

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
Finanční obchodování v Pythonu

Ruční výpočet 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
Finanční obchodování v Pythonu

Omezení Sharpe ratio

  • Penalizuje „dobrou" i „špatnou" volatilitu
  • Volatilita na vzestupné straně může ratio zkreslit směrem dolů

Omezení Sharpe ratio

Finanční obchodování v Pythonu

Sortino ratio

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

  • $R_p $: Výnos strategie, portfolia, aktiva atd.
  • $R_r $: Bezriziková sazba
  • $\sigma_d $: Směrodatná odchylka na sestupné straně nadměrného výnosu ($R_p-R_f$)

Volatilita na sestupné straně

Finanční obchodování v Pythonu

Získání Sortino ratio z bt backtestu

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
Finanční obchodování v Pythonu

Pojďme si procvičit!

Finanční obchodování v Pythonu

Preparing Video For Download...