GaiaEx AcademyGaiaEx Academy
Prognozowanie szeregów czasowych dla traderów krypto
DeweloperAI i ML12 min read

Prognozowanie szeregów czasowych dla traderów krypto

Przewidywanie ruchów cen za pomocą modeli sekwencyjnych

Udostępnij posty

Rozumienie danych szeregów czasowych

Szereg czasowy to sekwencja punktów danych uporządkowanych w czasie — ceny akcji w każdej minucie, dzienne zamknięcia Bitcoina, godzinowe odczyty temperatury. Tym, co odróżnia szereg czasowy od innych danych, jest to, że porządek ma znaczenie. Przemieszanie wierszy w zbiorze danych do klasyfikacji jest nieszkodliwe; przemieszanie szeregu czasowego niszczy jego sens.

Trzy właściwości definiują charakter każdego szeregu czasowego. Trend to długoterminowy kierunek — cena BTC przesunęła się z 3 000 USD na początku 2019 roku do 60 000 USD do końca 2021 roku, wyraźny trend wzrostowy. Sezonowość odnosi się do powtarzających się wzorców w ustalonych interwałach — rynki krypto często widzą zwiększony wolumen w godzinach amerykańskiej sesji giełdowej i zmniejszoną aktywność w weekendy. Stacjonarność oznacza, że właściwości statystyczne, takie jak średnia i wariancja, pozostają stałe w czasie. Większość finansowych szeregów czasowych jest niestacjonarna — ceny dryfują w górę lub gwałtownie spadają — co stwarza wyzwania dla modeli zakładających stabilne rozkłady.

Przed wprowadzeniem danych finansowych do jakiegokolwiek modelu, musisz je przekształcić. Wzięcie logarytmicznych stóp zwrotu (naturalnego logarytmu ilorazów cen między kolejnymi okresami) przekształca niestacjonarne ceny w przybliżenie stacjonarnych stóp zwrotu. Różnicowanie — odejmowanie poprzedniej wartości — osiąga podobny efekt. Te transformacje nie są opcjonalne; są warunkiem wstępnym prawidłowego działania większości metod prognozowania.

Dekompozycja finansowego szeregu czasowego (koncepcyjnie) Trend Wahania sezonowe czas → Obserwacja = trend + sezonowość + szum (stopy zwrotu często stabilizują szum)
Rzeczywiste ceny mieszają wolny dryft, powtarzające się wzorce i losowość — modele celują w te części, które chcesz przewidzieć.

ARIMA: klasyczny model bazowy

ARIMA (AutoRegressive Integrated Moving Average — autoregresyjna zintegrowana średnia ruchoma) jest przez dekady koniem roboczym prognozowania szeregów czasowych. Łączy trzy komponenty: AR(p) używa poprzednich p wartości do przewidywania następnej, I(d) różnicuje szereg d razy, aby osiągnąć stacjonarność, a MA(q) modeluje składniki błędu z poprzednich predykcji.

Dla danych finansowych, ARIMA służy jako kluczowy model bazowy. Każdy model uczenia maszynowego, który nie potrafi pobić dobrze dostrojonego ARIMA na twoim konkretnym zbiorze danych, dodaje złożoność bez wartości. W praktyce ARIMA często działa zaskakująco dobrze przy prognozach na krótki horyzont dla danych o niskiej częstotliwości (dzienne lub tygodniowe świece), gdzie stosunek sygnału do szumu jest do opanowania.

# Model bazowy ARIMA dla dziennych stóp zwrotu BTC
from statsmodels.tsa.arima.model import ARIMA
import pandas as pd

returns = prices.pct_change().dropna()
model = ARIMA(returns, order=(2, 0, 1))  # AR(2), brak różnicowania (stopy zwrotu już stacjonarne), MA(1)
fitted = model.fit()
forecast = fitted.forecast(steps=5)
print(f"AIC: {fitted.aic:.2f}")  # Niższe AIC = lepszy model

Ograniczenia ARIMA stają się widoczne przy złożonych wzorcach nieliniowych, zmianach reżimu i przestrzeniach cech wysokiej wymiarowości. To właśnie tutaj wchodzi w grę głębokie uczenie.

ARIMA(p,d,q): jak przeszłe wartości i błędy zasilają prognozę AR(p) y używa yt-1…t-p I(d) d różnicowań MA(q) błędy εt-1…t-q ŷt+1 prognoza Wybierz (p,d,q) za pomocą ACF/PACF, AIC lub walidacji krzyżowej rolling CV — a potem porównaj z modelami bazowymi ML. Stopy zwrotu finansowe często ustawiają d=0 przy użyciu logarytmicznych stóp zwrotu bezpośrednio
Autoregresja, integracja (różnicowanie) i szoki średniej ruchomej łączą się w jeden kompaktowy, liniowy silnik prognostyczny.

Sieci LSTM do modelowania sekwencji

Sieci Long Short-Term Memory (LSTM) to typ rekurencyjnej sieci neuronowej zaprojektowanej do uczenia się zależności dalekiego zasięgu w danych sekwencyjnych. W przeciwieństwie do zwykłych RNN, które cierpią z powodu zanikających gradientów i zapominają informacje już po kilku krokach czasowych, LSTM używają mechanizmu bramkowania — bramy zapominania (forget gate), bramy wejściowej (input gate) i bramy wyjściowej (output gate) — aby selektywnie zachowywać lub odrzucać informacje na przestrzeni setek kroków.

Dla finansowych szeregów czasowych, LSTM oferują dwie przewagi nad ARIMA: mogą modelować relacje nieliniowe (dynamika cen rzadko jest liniowa), oraz mogą jednocześnie uwzględniać wiele cech wejściowych — nie tylko przeszłe ceny, ale wolumen, zmienność, stopy finansowania, nierównowagę księgi zleceń i każdy inny sygnał, który uważasz za nośnik informacji predykcyjnej.

Przygotowanie danych dla LSTM wymaga ostrożnego okienkowania (windowing). Tworzysz wejściowe sekwencje o ustalonej długości (np. 60 kroków czasowych) sparowane z wartością docelową (następna cena lub stopa zwrotu). Normalizacja jest kluczowa — skaluj cechy do [0, 1] lub standaryzuj do zerowej średniej i jednostkowej wariancji. Ale tu jest pułapka: musisz dopasować skaler tylko na danych treningowych i przekształcać dane walidacyjne i testowe za pomocą tych samych parametrów. Dopasowanie na całym zbiorze danych powoduje wyciek informacji z przyszłości.

Nigdy nie normalizuj przy użyciu statystyk obliczonych z całego zbioru danych. Dopasuj swój skaler tylko na zbiorze treningowym, a następnie zastosuj go do zbiorów walidacyjnego i testowego. Ten jeden błąd powoduje więcej look-ahead bias (błędu wyprzedzającego) niż jakikolwiek inny błąd przygotowania danych.

# Przygotowanie danych LSTM z prawidłową normalizacją
import numpy as np
from sklearn.preprocessing import MinMaxScaler

def create_sequences(data, window=60):
    X, y = [], []
    for i in range(window, len(data)):
        X.append(data[i - window:i])
        y.append(data[i, 0])  # Przewidź następne zamknięcie
    return np.array(X), np.array(y)

# Dopasuj skaler TYLKO na danych treningowych
scaler = MinMaxScaler()
train_scaled = scaler.fit_transform(train_data)
test_scaled = scaler.transform(test_data)  # Przekształć, nie dopasowuj

X_train, y_train = create_sequences(train_scaled)
X_test, y_test = create_sequences(test_scaled)

Mechanizmy uwagi i Temporal Fusion Transformers

Ten sam mechanizm self-attention (uwagi własnej), który zrewolucjonizował przetwarzanie języka naturalnego, okazał się równie skuteczny w szeregach czasowych. Zamiast przetwarzać sekwencje krok po kroku jak LSTM, uwaga pozwala modelowi patrzeć na wszystkie kroki czasowe jednocześnie, ucząc się, które historyczne momenty są najbardziej istotne dla przewidywania przyszłości.

Temporal Fusion Transformer (TFT), wprowadzony przez Google Research w 2021 roku, jest zbudowany specjalnie do prognozowania szeregów czasowych na wiele horyzontów. Łączy kilka innowacji:

  • Sieci selekcji zmiennych — Automatycznie uczą się, które cechy wejściowe mają największe znaczenie, dając wbudowaną interpretowalność. Możesz zobaczyć, czy model bardziej opiera się na momentum cenowym, wolumenie, czy stopach finansowania.
  • Sieci residualne bramkowane (gated residual networks) — Wygaszają nieistotne wejścia i pozwalają modelowi obsługiwać złożone, nieliniowe interakcje cech.
  • Wielogłowicowa uwaga w czasie (multi-head attention over time) — Identyfikuje, które historyczne kroki czasowe są najbardziej informacyjne dla każdego horyzontu predykcji.
  • Wyniki kwantylowe — Zwraca przedziały predykcji (10., 50., 90. percentyl), a nie punktowe estymaty, dając ci miarę niepewności — kluczową dla zarządzania ryzykiem w handlu.

W praktyce TFT przewyższyły LSTM i tradycyjne modele w benchmarkach obejmujących prognozowanie zapotrzebowania na energię elektryczną, prognozowanie sprzedaży detalicznej i modelowanie zmienności finansowej. Dla rynków krypto dostępnych za pomocą platform takich jak GaiaEx, zdolność TFT do przetwarzania niejednorodnych wejść — statycznych metadanych (typ aktywa, data notowania), znanych przyszłych wartości (dzień tygodnia, godzina dnia) oraz obserwowanych zmiennych w czasie cech (cena, wolumen, wskaźniki on-chain) — czyni go szczególnie odpowiednim.

Praktyczny przykład: przewidywanie kierunku ceny BTC

Bądźmy szczerzy w kwestii tego, co jest osiągalne. Przewidzenie dokładnej ceny Bitcoina na jutro jest zasadniczo niemożliwe. Hipoteza rynku efektywnego (EMH) argumentuje, że ceny już odzwierciedlają wszystkie dostępne informacje, co czyni konsekwentne przewidywanie zadaniem daremnym. W kryptowalutach słaba forma EMH jest dyskusyjna — rynki są mniej efektywne niż akcje — ale stosunek szumu do sygnału pozostaje brutalny.

Bardziej realistycznym celem jest dokładność kierunkowa: czy BTC zamknie się wyżej czy niżej niż otworzył? Ten problem klasyfikacji binarnej jest bardziej wykonalny, i nawet skromne poprawy powyżej 50% dokładności (powiedzmy, konsekwentnie 53–55%) mogą być wysoce dochodowe przy odpowiednim rozmiarze pozycji i zarządzaniu ryzykiem.

Praktyczny potok wygląda tak:

  • Cechy: 60-okresowe stopy zwrotu, RSI, histogram MACD, szerokość wstęg Bollingera, wskaźnik wolumenu (obecny vs. średnia z 20 okresów), stopa finansowania z kontraktów perpetual futures, dominacja BTC oraz zmiana otwartych pozycji (open interest).
  • Model: Dwuwarstwowy LSTM z 128 jednostkami ukrytymi, dropout 0.3, po którym następuje warstwa gęsta (dense) z aktywacją sigmoid do klasyfikacji binarnej.
  • Podział: Trening na latach 2020–2023, walidacja na styczeń–czerwiec 2024, test na lipiec–grudzień 2024. Nigdy nie przemieszaj — dziel zawsze chronologicznie.
  • Ewaluacja: Dokładność kierunkowa, precyzja/czułość (precision/recall) na predykcjach w górę vs. w dół, oraz — co najważniejsze — symulowany P&L przy założeniu ustalonego rozmiaru pozycji na sygnał.

Jeśli twój model osiąga 54% dokładności kierunkowej na zbiorze testowym poza próbą (out-of-sample) z profit factor powyżej 1.2, masz coś warte dalszej eksploracji. Jeśli pokazuje 65% dokładności, prawie na pewno przeuczyłeś model. Prawdziwe przewagi na rynkach finansowych są małe, a każdy, kto twierdzi inaczej, sprzedaje coś innego.

Metryki ewaluacji i podejścia zespołowe (ensemble)

Wybór właściwej metryki decyduje o tym, czy optymalizujesz właściwą rzecz. MAE (Mean Absolute Error — średni błąd absolutny) mówi ci o średniej wielkości błędów predykcji w tych samych jednostkach co twoje dane — intuicyjne, ale nie penalizuje dysproporcjonalnie dużych błędów. RMSE (Root Mean Squared Error — błąd średniokwadratowy) podnosi błędy do kwadratu przed uśrednieniem, silnie penalizując wartości odstające — właściwe, gdy jedna katastrofalna błędna predykcja liczy się bardziej niż wiele małych. Dokładność kierunkowa mierzy procent przypadków, w których twój model poprawnie przewiduje, czy cena idzie w górę czy w dół — często najbardziej istotna metryka dla sygnałów handlowych.

Metody zespołowe (ensemble) łączą predykcje z wielu modeli, aby zmniejszyć wariancję i zwiększyć odporność. Powszechne podejścia obejmują:

  • Proste uśrednianie — Uśrednienie predykcji LSTM, Transformera i ARIMA. Jeśli każdy model wychwytuje inne aspekty sygnału, zespół (ensemble) przewyższa każdy pojedynczy model.
  • Stacking — Trenowanie metamodelu (np. drzewa gradient-boosted), aby nauczyć się optymalnej kombinacji predykcji modeli bazowych.
  • Przełączanie świadome reżimu (regime-aware switching) — Użycie detektora reżimu zmienności do wyboru, któremu modelowi ufać. LSTM może wyróżniać się na rynkach trendowych, podczas gdy model powrotu do średniej (mean-reversion) przewyższa go w warunkach zakresowych.

Jakiekolwiek podejście przyjmiesz, pamiętaj, że przepaść między badaniami a produkcją jest ogromna. Model, który przewiduje kierunek BTC z 55% dokładnością w notatniku Jupyter, musi przetrwać opóźnienie, slippage i koszty transakcyjne, gdy jest wykonywany na żywo za pomocą platformy takiej jak GaiaEx. Zbuduj swój potok ewaluacyjny, aby symulował te realia od pierwszego dnia — nie jako refleksję po fakcie.