Jak obliczać wskaźniki techniczne w BigQuery za pomocą SQL – średnie kroczące, RSI, MACD

Wskaźniki techniczne są podstawowymi narzędziami, których używają traderzy i analitycy giełdowi próbując przewidzieć trendy cenowe, momentum i potencjalne punkty zwrotne na rynkach finansowych.
Większość z nich obliczana jest na podstawie danych historycznych, a konkretniej kursów zamknięcia spółek giełdowych z danego dnia.
Wskaźniki mogą ułatwić przewidywanie cen akcji lub kryptowalut oraz umożliwić ewentualną identyfikację fazy wykupienia lub wyprzedania rynku.
W tym wpisie mam zamiar wyjaśnić, jak oblicza się popularne wskaźniki techniczne w BigQuery za pomocą języka manipulacji danych SQL i omówić ich znaczenie w analizie giełdowej.

Spis treści

Zrozumienie wskaźników technicznych

Średnie kroczące, czyli Moving Averages (MA)

Średnia krocząca to jeden z najczęściej używanych wskaźników w analizie inwestycyjnej. Pozwalają uporządkować dane cenowe i zidentyfikować trendy występujące w danym okresie. Najpopularniejsze średnie kroczące to:
Średnia krocząca jest obliczana na podstawie średniego kursu zamknięcia akcji w określonej liczbie dni poprzedzających dzień, na który wskaźnik jest wyliczany.
Dla przykładu jeśli chcemy podać średnią krocząca na dzisiaj danego aktywa dodajemy ceny zamknięcia z siedmiu ostatnich dni poprzedzających dzień dzisiejszy i dzielimy przez 7.

Wskaźnik siły względnej, czyli RSI (Relative Strength Index)

Wskaźnik siły względnej (RSI) jest to oscylator momentum, który mierzy szybkość i zmiany ruchów kursu spółki. Oscyluje on w przedziale od 0 do 100 i służy zazwyczaj do identyfikacji stanów wykupienia i wyprzedania na rynku akcji.
RSI(24) jest obliczany w następujący sposób:
RSI(24) = 100 – (100 / (1 + (Średni zysk / Średnia strata)))
Gdzie:

Wskaźnik analizy zbieżności i rozbieżności średnich kroczących, czyli MACD (Moving Average Convergence Divergence)

MACD jest wskaźnikiem dynamiki trendów, który pokazuje związek pomiędzy dwiema średnimi kroczącymi. Na wskaźnik ten składają się następujące elementy:
MACD jest używany do identyfikowania zmian trendu oraz potencjalnych szans na kupno/sprzedaż.

Wstęgi Bollingera

Na wstęgi Bollingera składa się środkowa wstęga (MA) oraz dwie zewnętrzne wstęgi, które są odchyleniami standardowymi od środkowej. Rozchodzą się one i zbliżają w zależności od zmienności rynku. Wstęgi Bollingera są pomocne w identyfikowaniu wykupienia i wyprzedania rynków oraz potencjalnych przebić cenowych.

Znaczenie wskaźników technicznych w przewidywaniu cen akcji

Wskaźniki techniczne odgrywają istotną rolę w analizie i prognozowaniu odnośnie rynku akcji. Oto kilka kluczowych powodów, dla których są ważne:

Obliczanie wskaźników technicznych w BigQuery przy użyciu SQL

Aby móc obliczyć wskaźniki techniczne w pierwszej kolejności musimy się upewnić, że posiadamy odpowiednie dane.
Ja na potrzeby tekstu przygotowałem dane historyczne dla spółek Google oraz Microsoft pobrane z portalu Yahoo Finance.
Moja Tabela wsadowa posiada następujące dane:
Potrzebować więc będziemy wymiary: Nazwa Spółki oraz Data, oraz związane z nimi miary: kurs otwarcia, kurs zamknięcia, najwyższy i najniższy kurs z danego dnia, oraz wolumen obrotu.
Poniżej znajduje się gotowe zapytanie, które utworzy widok w Google BigQuery.
				
					create or replace view `primal-monument-358918.Blog.daily_indicators` as
WITH ceny AS
( SELECT   Stock,Date,Open,High,Low,Close,Volume,

AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7,

AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS ma30,

AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 99 PRECEDING AND CURRENT ROW) AS ma100,

AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 199 PRECEDING AND CURRENT ROW) AS ma200,

SUM(CASE WHEN Close > Open THEN Close - Open ELSE 0 END) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) AS gain,

SUM(CASE WHEN Open > Close THEN Open - Close ELSE NULL END) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) AS loss,

MAX(High) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) AS highest,

MIN(Low) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) AS lowest,

(AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) - AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW)) AS macd

FROM `primal-monument-358918.Blog.ceny_gieldowe`),

wskazniki  AS (

SELECT stock,Close,volume,date,ma7,ma30,ma100,ma200,(100 - (100 / (1 + (gain / loss)))) AS rsi,Macd,
(CASE WHEN STDDEV_POP(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) = 0 THEN NULL ELSE ((Close - AVG(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW)) / STDDEV_POP(Close) OVER (PARTITION BY stock ORDER BY date ROWS BETWEEN 23 PRECEDING AND CURRENT ROW)) END)

AS bollinger_band

FROM ceny)

SELECT

Stock,Close,volume,date,ma7,ma30,ma100,ma200,rsi,macd,bollinger_band,
ABS(ma200 - Close) ma200_reach,

ABS(ma100 - Close) ma100_reach,

ABS(ma30 - Close) ma30_reach,

ABS(ma7 - Close) ma7_reach,

FROM wskazniki

				
			
W pierwszej kolejności podzapytaniem “ceny” wyliczamy średnie ruchome używając funkcji typu window a następnie poszczególne wskaźniki na podstawie tych cen wyliczamy podzapytaniem “wskazniki”.
Końcowa część zapytania SELECT zbiera wszystkie obliczone wskaźniki i dodatkowe parametry do dalszej analizy.
Końcowy rezultat powinien wyglądać mniej więcej tak:
Kolejnym krokiem może być wizualizacja danych. Do tego rekomenduję Looker Studio – darmowe narzędzi typu Business Intelligence, w którym możecie stworzyć swoje własne portfolio inwestycyjne oraz arkusz do analizy technicznej, który pozwoli wam na bieżąco śledzić najważniejsze wskaźniki dla wybranej spółki.
Mam nadzieję, że powyższy wpis pomógł wam lepiej zrozumieć czym są wskaźniki w analizie technicznej i przede wszystkim jak je wyliczyć w BigQuery.
Jeśli chcesz dowiedzieć się o tym jak nasza firma pomaga innym firmom tworzyć nowoczesny stack analityczny przy użyciu BigQuery – kliknij tutaj.