Kointegrace amerických akciových indexů

 

Koncem roku jsem v příspěvku o síle trendování akciových indexů a jejího měření dle Hurstova exponentu: https://martinekonom.blogspot.com/2020/12/ktery-index-trenduje-nejlepe.html zmínil small cap Russell 2000 jako relativně nejideálnějšího kadidáta. Podívejme se na stávající situaci o téměř tři měsíce později:

Je evidentní, že Russell potvrdil tuto tezi, určitě v procentuálním vyjádření, jak uvedeno v grafu. V praxi pak mohu také stutečně pozorovat silnou výkonnost u Russell 2000 a Nasdaq 100 AOS algoritmů u intraday a swingového obchodování.

Indexy S&P 500 a Dow Jones rovněž posílily a opticky se zdá, že jejich vývoj je podobný a možná by se i daly použít pro párové obchodování? Korelace je vysoká a i cenové trajektorie se jeví jako velmi podobné. Korelace se počítá z procentních změn a je vysoká (blízko 1) v případě velkých četností společných kladných nebo naopak společných záporných procentních změn. To však není z quant hlediska vše a je nutno propočítat vzájemnou závislost v čase, to znamená, zda se časové řady cenově příliš nerozchází. Tuto závislost měří kointegrace. Časové řady jsou kointegrovány pokud existuje lineární zívislost mezi cenovými trajektoriemi, která je stacionární. Tyto řady však mohou být korelovány, ale nikoli kointegrovány a naopak.

Pro měření kointegrace dvou a více časových řad se často používá Johansenův kointegrační test, který vychází z tvz. Vector Error Correction modelu (VECM):


V tomto testu se snažíme zjistit, zda lambda má nulovou vlastni hodnotu. Pokud jsou všechny vlastní čísla nulová, pak časové řady nejsou koitegronány, zatímco negativní vlastní čísla implikují stacionaritu a kointegraci.

Ve výsledcích testu pak se snažíme zamítnout nulovou hypotézu, že řady nejsou kointegorvány. Jednak u tak zvané trace statistiky (sumace vlastních čísel je 0) a jednak u eigen statistiky definující sílu kointegrace. Jsou-li statistiky menší než kritické hodnoty na daných hladinách statistické významnosti, nemůžeme zamítnout nulovou hypotézu a řady nejsou kointegrovány. Jsou-li větší než kritické hodnoty, pak existují známky kointegrace.

Pohlédměme tedy na situci mezi mini S&P 500 (ES) a mini Dow (YM) populárními futures kontrakty a jejich denními časovými řadami za posleníc tři měsíce. Použiji stejně jako u Hurst exponentu jen pár jednouchých řádků kódu v Pythonu a knihoven numpy a pandas. Dále pak stáhnu data pro ES a YM z SOL Traderu jako denní data do csv souborů.

Pro vlastní kód pro Johansen test pak využiji kód doporučený Dr. Ernestem Chanem (autora knih Quantitative Trading, Algorithmic Trading a Machine Trading): https://searchcode.com/codesearch/view/88477497/  Tento kód nakopíruji do textového editoru, otevřu v Jupyter Notebooku a uložím na počítači jako Cointegration.py soubor. Na tento pak lze odkázat přes load_ext/ autoreload funkce v kódu:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import Cointegration as co

%load_ext autoreload

%autoreload 2

In [2]:

from Cointegration import coint_johansen

In [3]:

ES = pd.read_csv('C:/Users/M/Documents/ES_Daily.csv')

ES.head()

Out[3]:

High

Low

Open

Close

0

3384.50

3339.75

3341.25

3364.50

1

3372.00

3296.75

3363.50

3342.00

2

3396.50

3343.00

3356.50

3388.75

3

3418.25

3327.00

3388.50

3330.50

4

3413.25

3328.75

3334.50

3404.25

In [4]:

YM = pd.read_csv('C:/Users/M/Documents/YM_Daily.csv')

YM.head()

Out[4]:

High

Low

Open

Close

0

27875

27456

27519

27599

1

27654

27022

27593

27541

2

27955

27559

27653

27917

3

28145

27444

27923

27472

4

28163

27452

27481

28106

In [5]:

df = pd.DataFrame({'X':ES['Close'],'Y':YM['Close']})

df.head()

Out[5]:

X

Y

0

3364.50

27599

1

3342.00

27541

2

3388.75

27917

3

3330.50

27472

4

3404.25

28106

In [6]:

Correlation = df.corr()

Correlation

Out[6]:

X

Y

X

1.000000

0.983833

Y

0.983833

1.000000

In [7]:

coint_johansen(df, 0, 1)

--------------------------------------------------

--> Trace Statistics

variable statistic Crit-90% Crit-95%  Crit-99%

r = 0    7.8661 13.4294 15.4943 19.9349

r = 1    0.7982 2.7055 3.8415 6.6349

--------------------------------------------------

--> Eigen Statistics

variable statistic Crit-90% Crit-95%  Crit-99%

r = 0    7.0679 12.2971 14.2639 18.52

r = 1    0.7982 2.7055 3.8415 6.6349

--------------------------------------------------

eigenvectors:

 [[ 0.03220851 -0.01077748]

 [-0.00442274  0.0006505 ]]

--------------------------------------------------

eigenvalues:

 [0.07243357 0.00845542]

--------------------------------------------------

Out[7]:

 

Je evidentní, že i když korelace vyšla velmi vyoko 0.98, tak statistiky (trace i eigen) nejsou vyšší než kritické hodnoty a tudíž ES a YM nejsou ve zkoumané periodě kointegrovány (nemůžeme zamítnout hypotézu 0).

Tudíž spread ES-YM bude obtížné obchodovat jako mean-reversion párový obchod a spíše pak jako momentum/ breakout strategii spreadu nebo trendový obchod jednoho indexu a částečný hedging systematického rizika trhu opačným vstupem druhého indexu. To samozřejmě neplatí vždy a je nutné časové řady kontinuálně testovat. Například v období kolem ekonomikých krizí mají indexy tendeci být naopak kointegrovány, apod.

Závěrem se pojďme podívat na cenový vývoj těchto ES a YM kontraktů na chicagské burze a jejich poměrový spread za posledních 12 měsíců (SOL Trader, denní data): 


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?