Raportul Sharpe și raportul Sortino

Tranzacționare financiară în Python

Chelsea Yang

Data Science Instructor

Care strategie are rezultate mai bune?

$$

Strategia 1:
  • Randament: 15%
  • Volatilitate (deviație standard): 30%

$$

Strategia 2:
  • Randament: 10%
  • Volatilitate (deviație standard): 8%
Tranzacționare financiară în Python

Randament ajustat la risc

  • Face performanța comparabilă între strategii diferite
  • Un raport care descrie riscul implicat în obținerea randamentului

Risc vs. randament

Tranzacționare financiară în Python

Raportul Sharpe

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

$$

  • $R_p $: Randamentul unei strategii, portofoliu, activ etc.
  • $R_r $: Rata fără risc
  • $\sigma_p $: Deviația standard a excesului de randament ($R_p-R_f$)

$$

  • Cu cât raportul Sharpe este mai mare, cu atât randamentul este mai atractiv
Tranzacționare financiară în Python

Alegeți din nou

$$

Strategia 1:
  • Randament: 15%
  • Volatilitate (deviație standard): 30%
  • Raport Sharpe: 15%/30% = 0.5

$$

Strategia 2:
  • Randament: 10%
  • Volatilitate (deviație standard): 8%
  • Raport Sharpe: 10%/8% = 1.25
Tranzacționare financiară în Python

Obținerea raportului Sharpe din bt backtest

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
Tranzacționare financiară în Python

Calcularea manuală a raportului Sharpe

# 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
Tranzacționare financiară în Python

Limitările raportului Sharpe

  • Penalizează atât volatilitatea „bună", cât și pe cea „rea"
  • Volatilitatea pozitivă poate reduce raportul

Limitările raportului Sharpe

Tranzacționare financiară în Python

Raportul Sortino

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

  • $R_p $: Randamentul unei strategii, portofoliu, activ etc.
  • $R_r $: Rata fără risc
  • $\sigma_d $: Deviația negativă a excesului de randament ($R_p-R_f$)

Volatilitate negativă

Tranzacționare financiară în Python

Obținerea raportului Sortino din bt backtest

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
Tranzacționare financiară în Python

Să exersăm!

Tranzacționare financiară în Python

Preparing Video For Download...