Které portfolio je nejlepší?
Ti co navštívili Quant konferenci: https://www.tradingforum.cz/ , tak jistě mají minimalně základní znalosti o tvorbě portfolia ať už dle mé prezentace základů Markowitzova modelu nebo komplexnější osvětlení bootsrappingu a volatility parity od Roberta Carvera, a tak dále. Často v praxi dostávám otázku, které portfolio algo strategií je nejlepší? Na to není jednoduchá odpověď, jelikož každý trader/ investor má své představy o očekávaném výnosu a volatilitě výnosů (které se nelze vyhnout na cestě k realizaci výnosů). Ostatně pohlédněme, kolik takových “nejlepších” portfolio může být:
Dle modelu se taková portfolio nachází na vrchní části křivky, tak zvané efektivní hranice, kde najdemerozsáhlou množinu možných kombinací ukazující nejlepší výnosy při daní úrovni volatility (rizika).
Dle klasického Markowitzova modelu při kombinaci
nekorelovaných aktiv dochází ke snižování volatility výnosů a zachování
cílového výnosu. Tj. 2 nekorelované AOS s cílovým ročním výnosem 20 % a roční volatilitou
20 % každý jako portfolio zachovají roční výnos 20 %, ale nyní již s
volatilitou 14 % atd.
Jako základní předpoklad pro přidávání AOS strategie do portfolio
slouží rovnice:
Sharpeho poměr AOS > [ Sharpeho poměr Portfolia x
korelace mezi AOS a Portfoliem]
Ti co byli na konferencích ví, že Sharpeho poměr měří poměr
průměrného ročního výnosu k roční volatilitě výnsů (v dnešní době sazeb kome 0 můžeme
pracovat s modifikovanou verzí, která neodečítá bezrizikovou sazbu v čitateli a
nemění tak poměr při změně použitého kapitálu, tj. páky pro dané portfolio).
Obvykle, existují dva typy portfolio kombinací o které budou
rizikově averznějšá tradeři/ investoři mít zájem nejvíce a to o portfolio minimalizující
volailitu a nebo portfolio maximalizující Sharpeho poměr.
K propočtům můžeme použít program Python v Jupiter notebooku (za
použití knihoven numpy, pandas, matplotlib a scipy optimize) a jako příklad
kombinace 6 systémů v praxis si stačí načíst měsíční výnosová data jednotlivých
AOS v csv. Uvedu jen základní nejrelevantnější kódy pro tento článek pro
názornost:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as sco
%matplotlib inline
data = pd.read_csv('C:/Users/M/Documents/5M_Portfolio_Sample.csv',index_col = 'Date', parse_dates
= True)
data.index = pd.to_datetime(data.index, format="%Y%m").to_period('M')
data.head()
System 1 |
System 2 |
System 3 |
System 4 |
System 5 |
System 6 |
|
Date |
||||||
2019-05 |
-0.0177 |
0.0756 |
0.0395 |
-0.0023 |
-0.0033 |
0.1336 |
2019-06 |
0.2037 |
-0.0778 |
0.0389 |
-0.0023 |
-0.0033 |
-0.0985 |
2019-07 |
-0.0044 |
0.0035 |
-0.0050 |
-0.0023 |
-0.0033 |
-0.2171 |
2019-08 |
0.4170 |
0.0587 |
-0.0174 |
-0.0023 |
-0.0033 |
0.2821 |
2019-09 |
0.0276 |
0.0232 |
-0.0626 |
-0.0023 |
-0.0033 |
-0.2112 |
data.plot(figsize=(14, 7))
plt.ylabel('monthly returns')
plt.show()
K propočtu výnosu a volatility portfolia pak:
portfolio_annualized_performance(weights, mean_returns, cov_matrix):
returns = np.sum(mean_returns*weights ) *12
std = np.sqrt(np.dot(weights.T,
np.dot(cov_matrix, weights))) * np.sqrt(12)
return std, returns
K propočtu maximalizace Sharpeho poměru a minimalizace
volatility:
def neg_sharpe_ratio(weights, mean_returns, cov_matrix, risk_free_rate):
p_var, p_ret = portfolio_annualized_performance(weights,
mean_returns, cov_matrix)
return -(p_ret - risk_free_rate)
/ p_var
def max_sharpe_ratio(mean_returns, cov_matrix, risk_free_rate):
num_assets = len(mean_returns)
args = (mean_returns,
cov_matrix, risk_free_rate)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x)
- 1})
bound = (0.0,1.0)
bounds = tuple(bound for asset in range(num_assets))
result = sco.minimize(neg_sharpe_ratio,
num_assets*[1./num_assets,], args=args,
method='SLSQP', bounds=bounds, constraints=constraints)
return result
def portfolio_volatility(weights, mean_returns, cov_matrix):
return portfolio_annualized_performance(weights,
mean_returns, cov_matrix)[0]
def min_variance(mean_returns, cov_matrix):
num_assets = len(mean_returns)
args = (mean_returns,
cov_matrix)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x)
- 1})
bound = (0.0,1.0)
bounds = tuple(bound for asset in range(num_assets))
result = sco.minimize(portfolio_volatility,
num_assets*[1./num_assets,], args=args,
method='SLSQP', bounds=bounds, constraints=constraints)
return result
V závěru pak model ukáže výše zmíněné varianty 2 portfolií
pro maximalizaci Sharpe a minimalizaci volatility. Pozor výnosy a volatilita
je prezentována v desetinných číslech, tj. 0.43 znamená 43%, a podobně.
Kdežto u vah AOS v portfoliích je již použity procentní čísla:¨
Maximum Sharpe Ratio Portfolio Allocation
Annualized Return: 0.43
Annualized Volatility: 0.17
System 1 System 2 System 3 System 4 System 5 System 6
allocation 14.73 21.37 15.29 27.94 14.64 6.03
--------------------------------------------------------------------------
Minimum Volatility Portfolio Allocation
Annualized Return: 0.24
Annualized Volatility: 0.13
System 1 System 2 System 3 System 4 System 5 System 6
allocation 7.63 6.75 26.84 18.9 33.06 6.81
Závěrem pak lze graficky zobrazit efektivní hranici pro kombinaci
jednotivých AOS a nan í definovat ony dvě portfolio, tj. minimalizující
volailitu (zelená hvězda)
a portfolio maximalizující Sharpeho poměr (červená hvězda). Výnosy i volatilita jsou prezentovány v desetinných číslech, tzn. 0.2 znamená 20%, a tak dále:
Tyto propočty nám
umožňují tedy vybrat portfolia s požadovanými parametry výnosů a rizik. Dále
pak je dobré použít medody stress testu portfolií, sledovt vývoj korelací mezi
jednotlivými systémy v čase (ideálně klouzavá korelace), divrezikovat mezi
nezávislé trhy a metody. O tom zase více příště nebo na další Trading Forum
konferenci.
Upozornění: Nejedná se o investiční doporučení, článek má jen a pouze vzdělávací charakter. Obchodování instrumentů ať již burzovních nebo mimoburzovních s sebou nese potenciální velké riziko, nejen výnos a není vhodné pro každého. Rozhodnutí obchodovat je odpovědností každého jednotlivce a jedině on/ ona sám(a) nese za svá rozhodnutí plnou odpovědnost. Nikdy se nepouštějte do obchodů, jejichž podstatě plně nerozumíte. Minulé výnosy nejsou garancí výnosů budoucích.
Komentáře
Okomentovat