Celem pracy jest analiza kointegracji trzech par spółek notowanych na GPW oraz analiza strategii inwestycyjnej pair trading. Przyjęty został okres od 2020-01-01 do 2022-12-31.
Kointegracja odnosi się do statystycznego pojęcia, które opisuje długoterminowe powiązanie lub zależność między dwiema lub więcej zmiennymi. W kontekście analizy szeregów czasowych, kointegracja występuje, gdy dwie lub więcej szeregów czasowych są statystycznie zależne od siebie w długim okresie, pomimo możliwości występowania krótkookresowych fluktuacji.
W praktyce kointegracja jest szczególnie istotna w analizie finansowej i ekonometrycznej, zwłaszcza przy badaniu zależności między cenami akcji, kursami walut, stopami procentowymi i innymi zmiennymi finansowymi. Kointegracja sugeruje, że nawet jeśli te szeregi czasowe mogą się krótkoterminowo oddzielać, to długoterminowo istnieje stałe powiązanie między nimi.
W badaniu wzięliśmy pod uwagę trzy pary spółek, należących do tego samego sektora:
Chcemy zbadać, czy występują kointegracje wewnątrz-sektorowe i jak są one silne.
# Pobieranie danych ze strony stooq.pl
rm(list=ls())
spolki=c("alr","mbk")
dane_spolek<-data.frame()
p1='https://stooq.pl/q/d/l/?s='
p3='&i=d'
for (spolka in spolki){
# Konstrukcja adresu do pobrania danych ze stooq
do_czytania=paste0(p1, spolka, p3)
print(do_czytania)
# Pobranie sciezki do zapisania danych
do_zapisu=getwd()
print(do_zapisu)
# Konstrukcja sciezki do zapisu danych
plik_do_zapisu=paste0(do_zapisu, "/", spolka, ".csv")
print(plik_do_zapisu)
# Odczyt danych (Tylko Data i Cena zamkniecia)
dane = read.csv(do_czytania, sep=',', colClasses=c(NA, "NULL", "NULL", "NULL", NA, "NULL"))
# Transformacja typu daty z Character na Date
dane$Data <- as.Date(dane$Data, format = "%Y-%m-%d")
# Ograniczenie zakresu danych do okresu od roku 2020 do 2022
dane <- dane[dane$Data > "2020-01-01" & dane$Data < "2023-01-01",]
# Dodanie nazwy spółki
dane$Spolka <- spolka
dane$Roznica_ceny <- c(NA, diff(dane$Zamkniecie))
# Przypisanie danych do spolki
dane_spolek <- rbind(dane_spolek, dane)
# Usuniecie tymczasowej zmiennych
rm(dane)
# Pobranie pliku
download.file(do_czytania, plik_do_zapisu)
}
## [1] "https://stooq.pl/q/d/l/?s=alr&i=d"
## [1] "C:/Users/sobcz/Downloads"
## [1] "C:/Users/sobcz/Downloads/alr.csv"
## [1] "https://stooq.pl/q/d/l/?s=mbk&i=d"
## [1] "C:/Users/sobcz/Downloads"
## [1] "C:/Users/sobcz/Downloads/mbk.csv"
dane_spolek %>%
ggplot( aes(x=Data, y=Zamkniecie, group=Spolka, color=Spolka)) +
geom_line() +
scale_color_viridis(discrete = TRUE) +
ggtitle("Indeksy cen zamknięcia spółek") +
theme_ipsum() +
ylab("Cena zamkniecia")
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): rodzina
## czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): rodzina
## czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): rodzina
## czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): rodzina
## czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
# Wybranie danych tylko MBanku
dane_mbank <- dane_spolek %>%
filter(Spolka=="mbk") %>%
filter(!is.na(Roznica_ceny))
# Narysowanie wykresu roznicy cen dla MBank
dane_mbank %>%
ggplot( aes(x=Data, y=Roznica_ceny)) +
geom_line() +
ggtitle("Pierwsze różnice cen zamknięcia spółki MBank") +
theme_ipsum() +
ylab("Pierwsze różnice ceny zamknięcia")
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
# Wybranie danych tylko Aliora
dane_alior <- dane_spolek %>%
filter(Spolka=="alr") %>%
filter(!is.na(Roznica_ceny))
# Narysowanie wykresu roznicy cen dla Alior
dane_alior %>%
ggplot( aes(x=Data, y=Roznica_ceny)) +
geom_line() +
ggtitle("Pierwsze różnice cen zamknięcia spółki Alior") +
theme_ipsum() +
ylab("Pierwsze różnice ceny zamknięcia")
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## rodzina czcionek nie została znaleziona w bazie czcionek systemu Windows