W poniedziałek nasz agent badawczy AI znalazł strategię na kryptowalutowych kontraktach futures ze wskaźnikiem Sharpe’a 4.1. W czwartek, gdy policzyliśmy eksperymenty i przestaliśmy pozwalać agentowi dostrajać strategię względem tego samego okna walidacyjnego, wynik wynosił 0.8. Strategia się nie zmieniła. Zmieniła się nasza ocena tego, co udało się osiągnąć w trakcie poszukiwań.
Prowadziliśmy ten dziennik badawczy, bo łatwo powiedzieć „optymalizuj ostrożnie”, ale trudno przełożyć tę radę na praktykę, gdy agent potrafi pisać kod, uruchamiać backtesty, sprawdzać wynik i po kilku minutach próbować ponownie. Oto co się zepsuło, po kolei.
Poniedziałek: zadaj agentowi konkretne, ograniczone pytanie
Poprosiliśmy agenta o przetestowanie prostego pomysłu na godzinowy trend na płynnym rynku perpetual futures: otwarcie pozycji, gdy krótsza średnia krocząca przetnie dłuższą, ustalenie wielkości pozycji na podstawie stałego docelowego poziomu zmienności i zamknięcie jej przy przeciwnym sygnale. Określiliśmy instrument, daty, harmonogram opłat, historię funding rate, założenie dotyczące realizacji zleceń i zakresy parametrów, które agent mógł sprawdzać.
Próba historyczna obejmowała lata 2021–2025. Dane z lat 2021–2023 przeznaczyliśmy na rozwój, rok 2024 na walidację, a rok 2025 zostawiliśmy jako końcowy holdout. Podział zapisaliśmy w konfiguracji zadania, więc agent mógł odczytywać wyniki z okresu rozwoju i wyniki walidacji, ale nie miał dostępu do zwrotów z holdoutu.
Pierwszy błąd polegał na tym, że pozwoliliśmy agentowi sprawdzić 300 kombinacji parametrów w jednym zadaniu, nie zapisując budżetu poszukiwań jako wyniku badania. Agent zwrócił najlepszy wariant: szybką średnią z 9 godzin, wolną średnią z 73 godzin i docelową zmienność na poziomie 0.8%. Sharpe na walidacji wyniósł 4.1. Wiedzieliśmy, że agent sprawdził wiele ustawień. Nie zadbaliśmy jeszcze o to, by nie dało się o tym zapomnieć.
Wtorek: zwycięski wariant zmienił się po ponownym uruchomieniu
Uruchomiliśmy to samo zadanie ponownie w czystym środowisku. Najlepsze ustawienie się zmieniło, a Sharpe spadł do 2.7. W pierwszym uruchomieniu pamięć podręczna danych rynkowych podała zaktualizowany szereg funding rate, a przy ponownym uruchomieniu użyliśmy przypiętej migawki. Oba zadania deklarowały ten sam zakres dat, ale tylko jedno miało odtwarzalną wersję danych.
Przestaliśmy porównywać wyniki i zaczęliśmy zapisywać pełne informacje o eksperymencie: rewizję kodu, migawkę danych, opłaty, funding rate, ustawienia realizacji zleceń, wartości parametrów i każdą próbę uruchomioną przez agenta. Dzięki temu stało się jasne, że 4.1 nie było tajemniczą przewagą rynkową. Wynik należał do jednego ustawienia wybranego w trakcie poszukiwań obejmujących 300 prób na tym samym roku walidacyjnym.
Środa: zamroź poszukiwania przed otwarciem holdoutu
Powtórzyliśmy eksperyment na stałej migawce danych i z mniejszą, z góry określoną siatką: 24 kombinacjami. Agent mógł uszeregować je według wyników z okresu rozwoju obejmującego lata 2021–2023. Pozwoliliśmy mu zobaczyć dane z 2024 raz, by dokonać wyboru, po czym zablokowaliśmy wybrane ustawienia i kod.
Wybrana strategia osiągnęła Sharpe’a 0.8 na walidacji. Na zapieczętowanym holdoucie z 2025 roku wynik wyniósł 0.3 po uwzględnieniu opłat taker, funding rate i tego samego, stosowanego przez całe badanie, opóźnienia realizacji o 1 świecę. To była użyteczna odpowiedź. Nie stanowiła dowodu, że strategia przyniesie zysk na rachunku rzeczywistym.
Dygresja z tego tygodnia: więcej czasu zajęło nam uzgodnienie, co oznacza „1 próba”, niż napisanie kodu średnich kroczących. Zmianę zestawu parametrów liczyliśmy jako próbę, podobnie jak uruchomienia ze zmienionym sygnałem lub regułą ustalania wielkości pozycji. Dla nowej migawki danych albo nowego założenia dotyczącego realizacji zleceń tworzyliśmy osobny zapis uruchomienia, bo każde z nich mogło równie mocno zmienić kolejność wyników.
Czwartek: czego następnym razem byśmy nie robili
Zrezygnowalibyśmy z pierwszego, nieograniczonego zadania. Agent badawczy potrzebuje budżetu poszukiwań i zapisu sprawdzonych wariantów, zwłaszcza gdy może wykorzystać każdy wynik do wyboru kolejnej próby. Holdout trzeba też chronić przed nieformalnym podglądaniem: gdy ktoś pozna jego wynik i zmieni strategię, ten okres staje się kolejnym zbiorem walidacyjnym.
Przy małym zakresie poszukiwań praktyczny rejestr eksperymentów może być prosty i czytelny:
| Zapis | Dlaczego to ważne |
|---|---|
| Wersje kodu i danych | Dzięki temu ponowne uruchomienie oznacza te same dane wejściowe i logikę |
| Każdy sprawdzony wariant | Dzięki temu zwycięski wynik można ocenić w kontekście całych poszukiwań |
| Rola okresów rozwoju, walidacji i holdoutu | Dzięki temu wynik końcowy nie jest po cichu ponownie wykorzystywany do dostrajania |
| Opłaty, funding rate i założenia dotyczące realizacji zleceń | Dzięki temu raportowany wynik opisuje symulację, którą można odtworzyć |
Po otwarciu holdoutu wróć do okresu rozwoju z nowym pytaniem badawczym, a poprzedni wynik zachowaj jako materiał historyczny. Nie dopracowuj wciąż tej samej strategii, wykorzystując dane z okresu, który już widziała.
Agent wykonał swoje zadanie: szybko przeszukał ustawienia i znalazł konfigurację wartą zbadania. Naszym zadaniem było uczynić poszukiwania przejrzystymi, zachować nietknięty zbiór testowy i traktować wynik jak pomiar z własną historią. Ciekawy nie był wynik 4.1 ani 0.3. Ciekawe było dokładne zobaczenie, jak powstała ta pierwsza liczba.
← Wszystkie wpisy


