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

Populární příspěvky z tohoto blogu

Kdy přijde recese a restart výprodejů na amerických akciích?

Jak poznat validitu trading strategie?

Je dobré nakupovat akcie na maximech?