Jak optymalizować system transakcyjny.

UWAGA: jest to zaawansowany temat i zalecane jest przeczytanie poprzednich rozdziałów przewodnika.

Wstęp

Program AmiBroker począwszy od wersji 3.70 zawiera wbudowaną funckję analizy danych - "Optymalizacja" (Optimization).

Idea optymalizacji jest prosta. Pierwszym etapem jest zbudowanie systemu transakcyjnego; załóżmy, że będzie to prosty system oparty na przecięciu dwóch średnich kroczących. Prawie każdy system zawiera parametry (takie jak np. liczba okresów uwzględnionych w średniej kroczącej) które determinują zachowanie systemu, np. na fakt, że dany system lepiej sprawdza się w inwestycjach o krótkich horyzoncie czasowym czy też daje lepsze rezultaty dla instrumentów o dużej zmienności. Optymalizacja jest procesem który pozwala na znalezienie najlepszej wartości danego parametru - czyli dającego największy zysk z transakcji na pojedynczym instrumencie bądź całym ich portfelu. AmiBroker jest jednym z niewielu programów który pozwala na optymalizację systemu jednocześnie dla wielu symboli.

Aby zoptymalizować system należy zdefiniować do 10 parametrów, które mają być uwzględnione w procesie. Następnym krokiem jest określenie minimalnej oraz maksymalnej wartości danego parametru oraz kroku o który zmieniać się mają wartości parametru. Następnie AmiBroker przeprowadzi wielokrotne testowanie historyczne systemu używając WSZYSTKICH możliwych kombinacji wartości parametrów. Kiedy proces ten się zakończy, AmiBroker wyświetli lilstę wszystkich wyników posortowanych względem osiąganego zysku. Możliwe jest również sprawdzenie wartości parametrów, które dają najlepsze wyniki.

Tworzenie formuły AFL

Optymalizacja jest obsługiwana przy pomocy funkcji Optimize(), której składnia wygląda następująco:

variable = optimize( "Description", default, min, max, step );

gdzie:

variable - jest zwykłą zmienną AFL, której zostanie przypisana wartość zwrócona przez funckję Optimize().
Podczas zwykłego testowania historycznego, skanowania, eksploracji oraz generowania komentarzy funckcja Optimize() zwraca wartość domyślną (default ) zatem wywołanie funckcji w tych przypadkach będzie równoznaczne z zapisem: variable = default;

Podczas przeprowadzania procesu Optymalizacji funckja zwraca kolejne wartości od min do max (włącznie) w kolejnych krokach równych step.

"Description" jest ciągiem znaków (String) używanym do rozróżnienia optymalizowanej zmiennej i jest wyświetlany w nagłówku kolumny na liście wyników optymalizacji.

default jest domyślną wartością zmiennej, którą funkcja Optimize() zwraca podczas testowanie historycznego, skanowania, eksploracji jak i w przypadku użycia we wskaźniku lub komentarzu.

min jest minimalną wartością optymalizowanej zmiennej

max jest maksymalną wartością optymalizowanej zmiennej

step jest interwałem zmiany wartości zmiennej w procesie optymalizacji od wartościmin do max

Uwagi:

Przykłady

1. Optymalizacja pojedynczej zmiennej:

sigavg = optimize( "Signal average", 9, 2, 20, 1 );

buy = cross( macd( 12, 26 ), signal( 12, 26, sigavg ) );
sell = cross( signal( 12, 26, sigavg ), macd( 12, 26 ) );

2. Optymalizacj wielu (3) zmiennych:

mfast = optimize( "MACD Fast", 12, 8, 16, 1 );
mslow = optimize("MACD Slow", 26, 17, 30, 1 );
sigavg = optimize( "Signal average", 9, 2, 20, 1 );

buy = cross( macd( mfast, mslow ) , signal( mfast, mslow, sigavg ) );
sell = cross( signal( mfast, mslow, sigavg ), macd( mfast, mslow ) );

Po wpisaniu formuły należy wcisnąć przyciskOptimize w oknie "Automatic Analysis". AmiBroker zacznie testować wszystkie możliwe kombinacje wartości zmiennych, a następnie wyświetli raport prezentujący listę wyników w kolejności wynikającej z osiąganego przez system zysku netto. Z uwagi na fakt, że możliwe jest posortowanie wyników względem każdej z kolumn, bardzo łatwo odczytać wartości parametrów dla namniejszego obsunięcia kapitału, najmniejszej ilości zawieranych transakcji, najwyższego współczynnika zysku, najniższego ryzyka rynkowego (market exposure) lub najwyższej rocznej stopy zwrotu uwzględniającej ryzyko. Ostatnia kolumna zawiera wartości optymalizowanych zmiennych dla danego testu.

Po ustaleniu która kombinacja parametrów daje wyniki najbardziej spełniające oczekiwania należy w funkcji Optimize() wartości domyślne (pole default - drugi parametr funkcji) zamienić na wartości optymalne. Na obecnym etapie niezbędna jest korekta manualna.