Autooptymalizacja parametrów w Amibroker


Podczas testów mojego automatu transakcyjnego u kilku niezależnych użytkowników pojawiły się ciekawe zagadnienia do rozwiązania:
1. Autooptymalizacja parametrów
2. Czy codzienna optymalizacja to przeoptymalizowanie?
3. Jak zrobić autoptymalizację w Amibroker?
4. Zgodność parametrów systemu na wielu komputerach
5. Zachowanie systemu przy niewłaściwej pozycji

Poniżej omawiam je po kolei.

Autooptymalizacja parametrów

Zacznijmy najpierw od optymalizacji – jest to znalezienie zestawu parametrów systemu, który zapewnia najlepszy wynik w testach historycznych (backtest lub walkforward). Jeśli przykładowo dokonamy optymalizacji na okresie ostatniego miesiąca, możemy przyjąć, że w kolejnych dniach system będzie dostosowany maksymalnie do ostatniego zachowania rynku. Ja w moim automacie transakcyjnym stosowałem dotychczas optymalizację na okresie 8 tygodni i grałem tak przez kolejny tydzień, po czym w weekend następowała kolejna optymalizacja.

Taka optymalizacja jest jednak czasochłonna (kilka godzin pracy komputera, ale też ok. kwadransa pracy użytkownika). Stąd optymalizacje raz w tygodniu. W zadowoleniem przyjąłem w niedawno wydanej wersji Amibrokera funkcję batch, która pozwala wpisać do harmonogramu np. uruchomienie optymalizacji o godz. 17:05 i eksport jej wyników do pliku, by ok. północy można było w minutę przepisać najlepsze parametry do pliku systemu.

Zacząłem więc stosować optymalizację codziennie (też za ostatnie 8 tygodni) by po pierwsze system codziennie był maksymalnie dostosowany do ostatniej sytuacji, a po drugie, by nie okazało się, że pozycja długa zajęta w piątek była niewłaściwa, bo po optymalizacji należałoby na weekend mieć pozycję krótką.

Męczyło mnie jednak poczucie, że da się to zrobić jeszcze lepiej. Że Amibroker (z ew. jakimś dodatkiem) mógłby samodzielnie zapisywać te najlepsze parametry w pliku, z którego system pobierałby je do jutrzejszej gry. I tu dochodzimy do autooptymalizacji.

Autooptymalizacja to, jak sama nazwa wskazuje – optymalizacja automatyczna, niewymagająca od użytkownika uruchamiania optymalizacji i zapisywania najlepszych parametrów do pliku, by system nimi grał. Najlepsze systemy transakcyjne (używane głównie w bankach inwestycyjnych) mają autooptymalizację ustawiczną, czyli system non stop gra optymalnymi parametrami. Na potrzeby mojego automatu w zupełności wystarczyłaby mi (i zapewne wielu innym użytkownikom Amibrokera) autooptymalizacja codzienna.

Czy codzienna optymalizacja to przeoptymalizowanie?

Nie należy mylić autooptymalizacji, czy też częstej optymalizacji z przeoptymalizowaniem. Przeoptymalizowanie to zwiększenie liczby parametrów, by dopasować się do maksymalnie wielu historycznych dołków i szczytów – by krzywa kapitału była jak najbardziej gładka – równo wznosiła się do góry. Takie działanie prowadzi do tego, że system idealnie dostosowany do historii, kompletnie zawodzi w realnej grze.

Długo przekonywałem jednego z potencjalnych użytkowników mojego Automatu Transakcyjnego, że warto optymalizować parametry codziennie (ale chyba nie przekonałem, bo nie zdecydował się jak dotychczas na zamówienie licencji). Poniżej sygnały, jakie byłyby w ostatnich tygodniach, gdyby system grał cały tydzień parametrami ustawionymi w poprzedni weekend.

Zobacz Schowek 2 - Autooptymalizacja parametrów w Amibroker

Sygnały przy optymalizacji cotygodniowej

A tu sygnały jakie były realnie (z codzienną optymalizacją).

Zobacz Schowek 1 - Autooptymalizacja parametrów w Amibroker

Sygnały przy optymalizacji codziennej

Przy codziennej optymalizacji była strata 1068zł, a przy optymalizacji tygodniowej byłoby to strata 2707zł. Jak na razie więc wyniki są zbliżone, zobaczymy w kolejnych miesiącach, która opcja jest lepsza.

Jak zrobić autoptymalizację w Amibroker?

Użyłem do tego prostego skryptu, który zapisuje wartości parametrów z pliku generowanego przez funkcję batch Amibrokera (funkcja ta występuje od wersji 6.20), do drugiego pliku z samymi parametrami. Być może wkrótce zamiast konieczności użycia takiego skryptu pojawi się podobna funkcja w samym Amibrokerze, do tego czasu jednak skrypt jest niezbędny. Aktualizacja z 25-07-2017 – właśnie ta funkcja się pojawiła. Amibroker od wersji 6.25 umożliwia zapisywanie parametrów po optymalizacji (ale nie po Individual Optimize) w oddzielnym pliku – wystarczy dodać linijkę: SetOption(„OptimizeSaveParams”, True );

Teraz kilka prostych kroków dostępnych już w samym Amibrokerze. Na początek skopiuj plik afl Twojego systemu (np. system.afl) i nadaj mu nazwę np. test.afl. W tym pliku wszystkie parametry zapisz w formie:
par1 = Optimize(„par1”, 1, 3, 10, 1 );
par2 = Optimize(„par2”, 1, 11, 30, 1 );

Teraz otwórz okienko New analysis. Menu File -> New -> Analysis
1. wskaż plik test.afl, ustaw filtr symboli a w polu Range wybierz 1 recent day(s), po czym zmień 1 na 56 (co odpowiada 8 tygodniom), lub wpisz własną liczbę dni.
2. zapisz to jako wzorzec do optymalizacji (menu Fle -> Save as)
3. wybierz z menu File -> New -> Batch i dodaj poniższe działania

  • Load Project i wskaż zapisany przed chwilą plik wzorca
  • Optimize
  • Export to file i wskaż, gdzie mają zapisać się wyniki optymalizacji (krok zbędny od wersji 6.25, jeśli nie używasz Individual Optimize)
  • Execute and Wait i wskaż lokalizację skryptu (krok zbędny od wersji 6.25, jeśli nie używasz Individual Optimize)

4. Z menu File wybierz Save i zapisz plik batch np. pod nazwą batch1.abb
5. Kliknij na ikonkę zegara, dodaj harmonogram uruchamiania i zamknij okienko
6. Zapisz ponownie plik batch i zamknij wszystkie okienka poza oknem głównym Amibrokera

Teraz z Twojego oryginalnego pliku z systemem przenieś wszystkie optymalizowane parametry do pliku test.opt.afl. Zapisz to w następujący sposób:

par1 = x;
par2 = y;
itd.

Na koniec w Twoim oryginalnym pliku system.afl, w miejscu gdzie były parametry umieść linię:
#include „Formulas\Systems\test.opt.afl”;
podając ścieżkę do miejsca w folderze Amibroker, gdzie zapisałeś plik test.afl (bo tam, po optymalizacji będzie plik test.opt.afl).

To wszystko. Od teraz w momencie, gdy nastąpi czas wskazany w harmonogramie, uruchomi się optymalizacja, jej wyniki zapiszą się w pliku test.opt.afl, i te parametry zostaną uwzględnione w dalszej grze.

Ustawiczna autooptymalizacja

Gdy mamy już wykonane te wszystkie kroki i czas naszej optymalizacji jest krótki np. 40minut, nic nie stoi na przeszkodzie, by wykonywać to co godzinę (podczas normalnej pracy systemu), zbliżając się już mocno do autooptymalizacji ustawicznej, jak w najlepszych (kosztujących miliony) systemach banków transakcyjnych.

Zgodność parametrów systemu na wielu komputerach

Łatwo jest zmieniać parametry na systemie uruchomionym na pojedynczym komputerze. Dość łatwo jest też je przepisać do kilku systemów na komputerach nam dostępnych. Praca na komputerach obcych sobie osób nie wchodzi jednak w grę, należało więc znaleźć sposób na bezpieczne dla wszystkich „dystrybuowanie” parametrów po najnowszej optymalizacji.

Sposobem na to jest zapisanie pliku z parametrami na moim serwerze, do którego dostęp (tylko do odczytu) mają wszyscy użytkownicy Automatu. Ten plik jest następnie poleceniem #include zawarty w kodzie Amibrokera zainstalowanego u każdego użytkownika. W ten sposób natychmiast, jak zapiszę nowe parametry, są one ujęte w sposobie pracy systemu i każdego użytkownika. Rozwiązanie wygodne i bezpieczne dla wszystkich.

Zachowanie systemu przy niewłaściwej pozycji

Potencjalnym problemem może być sytuacja, gdy po optymalizacji zajmowana pozycja (zgodna z poprzednim sygnałem) jest sprzeczna z właściwą (wskazaną po optymalizacji), ale to dość łatwo można rozwiązać porównując przy każdej świeczce stan aktualny z pożądanym i w przypadku niezgodności składając automatyczne zlecenie odwracające. Tak to właśnie zaimplementowałem w moim automacie. Przy każdej świeczce zatem automat dąży do zajęcia pozycji właściwej. Przydaje się to też w sytuacji, gdy użytkownik zmienia oczekiwaną wielkość pozycji – nie musi wtedy ręcznie składać zlecenia dokupienia/odsprzedania części walorów – automat robi to za niego przy kolejnej świeczce (co kwadrans).


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


Zostaw komentarz