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
Okomentovat