Jak radykalnie przyśpieszyć optymalizację w Amibroker?


Optymalizacja w Amibroker – możliwości przyśpieszenia

Amibroker w optymalizacji jednego symbolu (instrument np. FW20) nadal używa tylko jednego rdzenia procesora. W czasach, gdy w telefonach mamy 8 rdzeni (a na komputerach stacjonarnych nawet 20) jest to rozwiązanie mocno archaiczne. Istnieje wprawdzie w Amibroker opcja Individual optimize używająca dwóch wątków (a w wersji professional 32), co sugeruje, że jednak „da się”, ale nie jest ona dostępna w najbardziej czasochłonnych testach Walk-Forward. Wydaje się, że jej udostępnienie to tylko prosta opcja wyboru, która wersja optymalizacji ma być używana w WF, co dałoby się zrobić może w godzinę, a wielu użytkownikom zaoszczędziłoby setki godzin. Mam nadzieję, że Amibroker udostępni taką opcję wkrótce, co byłoby dużym krokiem naprzód.

Druga możliwość przyśpieszenia optymalizacji (ok 2x) polega na użyciu Amibrokera w wersji 64-bit. Każdy użytkownik Amibrokera może zainstalować obie wersje (32-bit i 64-bit) i używać ich obu np. wersji 32-bit do codziennej gry (gdyż pluginy biur maklerskich są właśnie dla wersji 32-bit), a wersji 64-bit do testów.

Trzecia możliwość radykalnego przyśpieszenia to taki dobór wielkości optymalizowanych danych, by mieściły sie w cache procesora. Przykładowo procesor w moim laptopie ma 3MB cache, więc przetestowałem też plik z danymi kontraktów FW20 mieszczący się w tej wielkości (dla interwału 15min jest to zakres 6 lat, w zupełności wystarczający do testów).

Czwarta możliwosć to użycie opcji QuickAFL (Settings -> General), która pobiera do obliczeń tylko taką część danych, jaka jest w danym momencie używana (zatem prawdopodobnie nie trzeba optymalizować wielkości pliku, by zmieścił się w cache, ale to hipoteza, jakiej nie sprawdziłem).

Piąta możliwość (może nawet skuteczniejsza od poprzednich) to ograniczenie złożoności kodu afl. Na przykład w systemie mamy funkcje do rysowania wykresu, wskaźników, czy do składania zleceń, których do testów nie potrzebujemy. Warto więc na potrzeby testów zrobić kopię pliku z systemem i usunąć z niej wszystkie linie kodu, które nie wpływają na wynik optymalizacji. Np. usunięcie przydatnej podczas gry funkcji Equity (powoduje brak powtarzania tych samych sygnałów w kolejnych świeczkach), pozwoliło mi przyśpieszyć analizy o 11%.

Testy potencjału przyśpieszenia

Przykładowo – optymalizacja parametrów (używa tylko jednego wątku, jednego rdzenia procesora) dla jednego symbolu zajmuje:
– 400s w wersji 32-bit
– 275s w wersji 64-bit
– 107s w wersji 64-bit (dane w cache)

Natomiast opcja Individual Optimize (w wersji Amibroker Pro używa wszystkich wątków, wszystkich rdzeni procesora – u mnie 4/2) zajmuje:
– 101s w wersji 32-bit
– 70s w wersji 64-bit
– 47s w wersji 64-bit (dane w cache)

Czyli Individual optimize przy 2 rdzeniach procesora (a tyle jest w większości obecnie używanych komputerów), na pliku mieszczącym się w cache procesora (w nowych dochodzi ono nawet do 20MB) zajmuje 8x mniej czasu. Prawdopodobnie przy najnowszych procesorach wyposażonych w 16 rdzeni wyniki te byłyby jeszcze 8x lepsze – individual optimize na tym samym komputerze może być więc nawet 64x szybsza, niż Optimize. Przy prostych optymalizacjach kilku parametrów nie ma to może znczenia, ale przy zaawansowanych testach Walk-Forward (nie można w nich używać opcji Individual optimize) trwających nawet trzy miesiące, skrócenie ich do półtora dnia byłoby kolosalną zmianą i ulgą dla użytkowników. Wreszcie można by robić wiarygodne testy co kilka dni.

Jak 64-krotnie przyśpieszyć WalkForward?

Mam nadzieję, że „przełącznik” optimize/individual optimize znajdzie się w kolejnej wersji Amibrokera, a jeszcze lepiej, jakby po prostu Optimize wykorzystywało wszystkie rdzenie procesora. Ja tymczasem użyłem skryptu, jaki opisałem na bezemerytury.pl/autooptymalizacja-parametrow-w-amibroker i funkcją batch tworzę zbiór miesięcznych wyników testów Individual Optimize i Backtest, które innym skryptem scalam w jeden plik wynikowy. Tak wygląda lista poleceń w pliku Batch:

Zobacz Amibroker Batch Individual WalkForward - Jak radykalnie przyśpieszyć optymalizację w Amibroker?

Lista poleceń Batch dla procedury Individual WalkForward


Oczywiście to tylko polecenia dla jednego miesiąca, wszystkie kroki trzeba więc powtórzyć dla miesięcy kolejnych (Amibroker nie obsługuje tu operacji kopiuj-wklej, więc zamiast bezpośrednio w Amibroker, łatwiej to zrobić edytując ten batch choćby w zwykłym Notatniku).

Uwaga na błąd

Podczas pracy funkcji Individual Optimize Amibroker samoczynnie przestawia opcję Preferences -> Intraday – mimo ustawienia jej na „Start time of interval”, po kilku minutach przestawiła się na „Time of first tick”. Jeśli ta opcja ma znczenie np. a automatycznym handlu, należy po zakończeniu testowania przywrócić ją do właściwego stanu. Być może zostanie to wyeliminowane w kolejnych wersjach Amibrokera. Aktualizacja 2017-11-05 – wydaje się, ze ten błąd został naprawiony w wersji 6.27, choć nie ma o tym wzmianki w liście zmian.


Chcesz wiedzieć więcej? Wejdź na stronę z Poradnikami.


Zostaw komentarz