Burza, bitcoin a R

R data-viz Quandl Bitcoin

Jindřich Lacko

Korelace vývoje v čase technikami jazyka R

V sítích internetu jsem zachytil otázku, zda spolu koreluje vývoj burzy s vývojem ceny alternativního aktiva – kryptoměny Bitcoin.

Tato otázka je zajímavá ve dvou směrech:

  • za prvé vyvolává silné spojení (Bitcoin i akcie jsou sexy & co Čech, to odborník)
  • a za druhé představuje elegantní příležitost pro demonstraci zpracování dat technikami jazyka R

Nejsem fanda kryptoměn, a tak se zaměřím na druhý bod (fanda erka jsem velmi).

Základním vstupem pro mne budou datové řady ceny Bitcoinu a indexu NASDAQ Composite. Obě jsou vyjádřeny v USD, takže jsou relativně souměrné.

Data čerpám online pomocí balíčku Quandl - zdrojů dat je celá řada, ale tento jsem si oblíbil.

library(Quandl)
library(tidyverse)

# bitcoin coby aktivum alterantivní
alternative <- Quandl("BCHARTS/BITSTAMPUSD", 
                      start_date="2020-01-01", 
                      end_date="2021-01-31")

# NASDAQ Composite coby plain vanilla akciová investice
vanilla <- Quandl("NASDAQOMX/COMP", 
                  start_date="2020-01-01", 
                  end_date="2021-01-31")

Prvním krokem bude vytvoření data.framu data, ve kterém držím ty datumy, pro které jsou známé ceny obou aktiv a tedy srovnání má smysl.

Snadno spočtu jednoduchý korelační koeficient za celé období.

# společné hodnoty v jednom objektu
data <- tibble(date_valid = intersect(alternative$Date,
                                      vanilla$`Trade Date`) %>% 
                 as.Date()) %>% 
  inner_join(alternative, by = c("date_valid" = "Date")) %>% 
  inner_join(vanilla, by = c("date_valid" = "Trade Date")) %>% 
  select(date_valid, btc = Close, vanilla = `Index Value`) %>% 
  arrange(date_valid) # seřadit...
  # indexy - hodnoty normované na 100 k Novému roku 2020


# korelační koeficient
cor(data$btc,
    data$vanilla)
## [1] 0.7931062

To je poměrně vysoká hodnota korelace.

V druhém kroku se proto zaměřím na měsíční hodnoty korelačního koeficientu; jako významné si označím takové měsíce, ve kterých je korelace větší nežli dvě třetiny.

mesice <- data %>%
  mutate(mesic = format(date_valid, "%Y-%m")) %>% # rok a měsíc (bez dne)
  group_by(mesic) %>%  # seskupím podle měsíce / zahodím den
  # začátek & konec měsíce (pro graf) + korelační koeficient obou aktiv
  summarise(start = min(lubridate::floor_date(date_valid, unit = "month")), 
            end = max(lubridate::ceiling_date(date_valid, unit = "month")), 
            korelace = cor(btc, vanilla)) %>%
  mutate(vysoka = (abs(korelace) >2/3)) # korelace nad .66 je vysoká

mesice
## # A tibble: 13 x 5
##    mesic   start      end        korelace vysoka
##  * <chr>   <date>     <date>        <dbl> <lgl> 
##  1 2020-01 2020-01-01 2020-02-01   0.545  FALSE 
##  2 2020-02 2020-02-01 2020-03-01   0.831  TRUE  
##  3 2020-03 2020-03-01 2020-04-01   0.875  TRUE  
##  4 2020-04 2020-04-01 2020-05-01   0.609  FALSE 
##  5 2020-05 2020-05-01 2020-06-01   0.206  FALSE 
##  6 2020-06 2020-06-01 2020-07-01  -0.153  FALSE 
##  7 2020-07 2020-07-01 2020-08-01   0.275  FALSE 
##  8 2020-08 2020-08-01 2020-09-01  -0.0946 FALSE 
##  9 2020-09 2020-09-01 2020-10-01   0.615  FALSE 
## 10 2020-10 2020-10-01 2020-11-01  -0.235  FALSE 
## 11 2020-11 2020-11-01 2020-12-01   0.793  TRUE  
## 12 2020-12 2020-12-01 2021-01-01   0.911  TRUE  
## 13 2021-01 2021-01-01 2021-02-01  -0.568  FALSE

Vidím, že mezi cenou bitcoinu a indexem NASDAQ byla vysoká korelace ve dvou zásadně odlišných obdobích:

  • únoru a březnu, které byly charakterizovány pocitem “Všichni tu umřeme!”
  • od listopadu do prosince, které lze charakterizovat pocitem “Trump je mrtvej, kámo…”

Ve třetím kroku proto podám zprávu graficky, kdy období vysoké korelace podbarvím šedivě.

Abych mohl snáze zobrazit ve stejném grafu tak odlišné veličiny jako akciový index a cenu bitcoinu, tak si obě znormalizuju na index - kdy počáteční hodnota = 100.

# doplním sloupec s indexem - hodnotou normovanou na 100 k Novému roku 2020
data <- data %>% 
  mutate(btc_idx = 100 * btc / btc[1],
         vanilla_idx = 100 * vanilla / vanilla[1])

# grafické overview / normované hodnoty
ggplot(data = data) +
  geom_rect(data = filter(mesice, vysoka),
            mapping = aes(xmin = start, xmax = end,
                          ymin = -Inf, ymax = Inf),
            fill = "gray45",
            alpha = .5) +
  geom_line(aes(y = btc_idx, x = date_valid), color = "red") +
  geom_line(aes(y = vanilla_idx, x = date_valid), color = "blue") +
  # poslední popisek NASDAQ
  geom_text(data = top_n(data, 1), aes(x = date_valid, 
                                       y = vanilla_idx, 
                                       label = round(vanilla_idx, 0)),
            hjust = -1/2) +
  # poslední popisek bitcoinu
  geom_text(data = top_n(data, 1), aes(x = date_valid, 
                                       y = btc_idx, 
                                       label = round(btc_idx, 0)),
            hjust = -1/2) +
  labs(title = "vývoj BTC vs NASDAQ Composite",
       subtitle = "100 = hodnota k Novému roku 2020") +
  theme_minimal() +
  theme(axis.title = element_blank())

Závěr, který z toho činím, je opět dvojí:

  • korelační analýza je technikami jazyka R umí být elegantní a přesvědčivá :)
  • Bitcoin a akcie se zdají korelovat v období silné davové psychózy (pozitivní, i negativní - v datech je obojí…)

Poprvé zveřejněno na www.jla-data.net/cze/2021-01-21-burza-a-bitcoin.

LovelyData

Jste z oboru a máte co říct?

Nenechávejte si to pro sebe a publikujte na Lovely Blogu.

Odběr novinek

Novinky, návody, kurzy a exkluzivní slevy. Získejte informace jako první. Stačí jen zadat e-mail. Je to zdarma a odhlásit se můžete kdykoliv.

Copyright © 2018-2021, Colorbee, s.r.o.

Design by grafikli.cz

Používáme cookies pro lepší uživatelský zážitek. Používáním webu s tím vyjadřujete souhlas a zároveň potvrzujete, že jste se seznámil/a s Prohlášením o ochraně osobních údajů.

Fotografie: lektoři, grafikli.cz, icons8.com