Problem
Ocena strategii na podstawie pojedynczego wykresu lub kilku udanych transakcji nie daje wiarygodnej odpowiedzi. Potrzebne było środowisko automatyzujące cały proces badawczy.
Drugim wyzwaniem była ilość i tempo danych. System nieustannie analizuje strumień z giełd kryptowalutowych, który w aktywnych okresach obejmuje nawet kilkadziesiąt transakcji rynkowych na sekundę. Rosnąca baza wymagała świadomego podejścia do retencji, agregacji i kompresji.
- pobieranie i zapis dużych ilości danych rynkowych
- uruchamianie wariantów strategii
- uwzględnianie rzeczywistych kosztów
- odtwarzanie historycznego przebiegu zdarzeń
- porównywanie wyników według spójnych kryteriów
- wersjonowanie kodu, parametrów i modeli
- oddzielenie eksperymentu od użycia rzeczywistego kapitału
- przygotowanie procesu do kontrolowanej autonomii agenta
Zastosowane rozwiązanie
Kernel jest wspólnym środowiskiem dla danych, strategii, symulacji i modeli uczenia maszynowego. Ten sam model domenowy obsługuje tryb historyczny, replay, wirtualny rachunek i dalszy rozwój rozwiązania.
System automatycznie uruchamia symulacje dla wielu zestawów parametrów, a następnie porównuje wynik, ryzyko i wpływ kosztów. Pozwala to szukać najbardziej opłacalnych oraz stabilnych konfiguracji bez sprowadzania oceny do pojedynczej udanej próby.
Każdy wynik można powiązać z danymi wejściowymi, kosztami, wersją strategii i modelu. Dzięki temu eksperyment można odtworzyć i porównać z innym zestawem parametrów.
- dane wejściowe i sygnały strategii
- predykcje modelu i poziom pewności
- stan rachunku oraz ekspozycji
- naliczone koszty
- decyzje o otwarciu i zamknięciu pozycji
- rezultat oraz wersja strategii i modelu
Kierunek rozwoju: autonomiczny agent tradingowy
Platforma badawcza nie jest celem końcowym projektu. Jest kontrolowanym etapem budowy agenta tradingowego, który docelowo ma działać autonomicznie lub półautonomicznie, zależnie od przyjętych limitów ryzyka i zakresu decyzji wymagających akceptacji człowieka.
Agent ma stale obserwować rynek, wykonywać predykcje, wybierać strategię i jej parametry, symulować skutki decyzji oraz kontrolować ekspozycję. W trybie półautonomicznym decyzja o wykonaniu działania może pozostać po stronie operatora, a system dostarcza uzasadnienie, kontekst i ocenę ryzyka.
Kernel rejestruje własne decyzje symulacyjne i ich późniejsze rezultaty. Kolejne cykle wykorzystują ten materiał do trenowania oraz oceny nowych wersji modeli. Trening może rozpoczynać się od początku, a zachowanie każdej wersji jest analizowane na tych samych danych i według tych samych kryteriów.
- ciągła analiza danych i zdarzeń rynkowych
- automatyczne generowanie i ocena decyzji symulacyjnych
- dobór parametrów na podstawie opłacalności, kosztów i ryzyka
- iteracyjne trenowanie modeli na wynikach wcześniejszych decyzji
- tryb autonomiczny lub akceptacja operatora w trybie półautonomicznym
- pełny ślad decyzji, danych, wersji modelu i rezultatu
Najważniejsze możliwości
- dane rynkowe czasu rzeczywistego i dane historyczne
- automatyczne uruchamianie wielu strategii i parametrów
- przetwarzanie nawet kilkudziesięciu transakcji rynkowych na sekundę
- backtesting i replay
- ranking wyników i wybór najbardziej opłacalnych i stabilnych konfiguracji
- symulacja opłat, spreadu, poślizgu i opóźnień
- wirtualne rachunki i kontrola ekspozycji
- analiza jakości wejść i momentów zamknięcia
- trenowanie i walidacja modeli
- rejestrowanie wersji modeli oraz metryk
- wybór i aktywowanie określonego kandydata
Modele uczenia maszynowego
Aktualna wersja wykorzystuje autorskie modele zbudowane przy użyciu XGBoost i LightGBM. Modele analizują przygotowane dane i zwracają ocenę kierunku oraz pewności predykcji. System przechowuje wyniki kolejnych wersji, dzięki czemu kandydatów można porównywać na tych samych danych.
Predykcja jest wejściem do kontrolowanego silnika strategii, który uwzględnia reguły ryzyka, koszty, ekspozycję i pozostałe warunki. Na obecnym etapie nie uruchamia samodzielnie działania na rzeczywistym kapitale.
Decyzje wygenerowane podczas symulacji, ich kontekst i rezultat tworzą materiał do oceny kolejnych modeli. System może rozpocząć nowy trening od początku, a następnie porównać zachowanie nowej wersji z poprzednimi kandydatami.
Optymalizacja warstwy danych
W trakcie rozwoju zoptymalizowano TimescaleDB. Rozmiar bazy zmniejszono z około 34 GB do około 9,5 GB, czyli o około 72%, przy zachowaniu kluczowych danych potrzebnych do kolejnych eksperymentów.
Uporządkowanie przechowywania, retencji i warstwy czasowej ograniczyło koszt operacji i usprawniło dalszą pracę na rosnącym zbiorze danych.
Rezultat biznesowy i badawczy
Powstało działające środowisko automatyzujące pracę badawczą: od ciągłego pozyskiwania danych, przez predykcje, serie symulacji i trening modeli, po porównanie wyników. Historia eksperymentów pozwala wracać do wcześniejszych wersji i oddzielać poprawę modelu od przypadkowego wyniku.
Uwzględnienie opłat, spreadu, poślizgu i opóźnień ogranicza ryzyko oceniania strategii na nierealistycznych założeniach. Optymalizacja bazy usprawniła dalsze iteracje na rosnącym zbiorze danych.
Najważniejszym rezultatem jest fundament przyszłego agenta tradingowego: wspólny, audytowalny proces łączący obserwację rynku, decyzję, symulację jej skutku, ocenę i ponowny trening.
Czas realizacji
Pierwsza działająca wersja powstała w około trzy miesiące. Projekt jest rozwijany iteracyjnie na podstawie wyników eksperymentów, jakości danych i porównania modeli.
Technologie
- .NET 8 i C#
- Python i FastAPI
- XGBoost i LightGBM
- PostgreSQL i TimescaleDB
- Redis
- Docker i Portainer
- Integracja z danymi Binance