Které portfolio je nejlepší?

09.08.2021  /  Martin Lembak

Ti co navštívili Quant konferenci: https://www.tradingforum.cz/ , tak jistě mají minimálně 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 najdeme rozsá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í volatilitu 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()

DateSystem 1System 2System 3System 4System 5System 6
2019-05-0.01770.07560.0395-0.0023-0.00330.1336
2019-060.2037-0.07780.0389-0.0023-0.0033-0.0985
2019-07-0.00440.0035-0.0050-0.0023-0.0033-0.2171
2019-080.41700.0587-0.0174-0.0023-0.00330.2821
2019-090.02760.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 jednotlivých AOS a na ní definovat ony dvě portfolia, tj. minimalizující volatilitu (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 metody stress testu portfolií, sledovat vývoj korelací mezi jednotlivými systémy v čase (ideálně klouzavá korelace), diverzifikovat mezi nezávislé trhy a metody. O tom zase více příště nebo na další Trading Forum konferenci.

Martin Lembak, Manažér hedge-fondu a přednášející na https://www.tradingforum.cz/, Chicago USA


Chcete k tejto téme diskutovať? Diskutujte na našom diskusnom fóre.


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.