12
Marek Gąd MQL Advisors www.mqladvisors.com [email protected] Najczęściej popełniane błędy podczas optymalizacji systemu transakcyjnego w programie MetaTrader4.

Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Embed Size (px)

DESCRIPTION

Każdy system transakcyjny zawiera określony zestaw zasad, wg których otwierane i zamykane są długie i krótkie pozycje. Zasady te zazwyczaj wymagają wprowadzenia parametrów, od których zależeć będzie moment wygenerowania sygnału kupna lub sprzedaży. Zmiana tych parametrów spowoduje również zmianę dochodowości całego systemu, dlatego kluczowa jest ich optymalizacja.

Citation preview

Page 1: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Marek Gąd

MQL Advisors

www.mqladvisors.com

[email protected]

Najczęściej popełniane błędy podczas optymalizacji systemu

transakcyjnego w programie MetaTrader4.

Page 2: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Spis treści

1. Wprowadzenie .................................................................................................................... 3

2. Błędy wynikające z konstrukcji testera ............................................................................... 3

2.1. Modelowanie kursu wewnątrz świec .......................................................................... 3

2.2. Model brokera ............................................................................................................. 6

2.3. Slippage ........................................................................................................................ 7

2.4. Algorytm genetyczny ................................................................................................... 8

3. Błędy interpretacyjne .......................................................................................................... 8

3.1. Analiza wykresu optymalizacji ..................................................................................... 8

3.2. Optymalizacja wielu okresów .................................................................................... 10

3.3. Analiza equity line ...................................................................................................... 10

3.4. Poziom i waluta depozytu początkowego ................................................................. 11

4. Podsumowanie .................................................................................................................. 12

Page 3: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

1. Wprowadzenie

It would be nice to develop trading systems without giving a thought to optimization.

Realistically, however, the development of a profitable trading strategy is a trial-and-error

activity in which some form of optimization always plays a role.

- J. Katz, D McCormick

Każdy system transakcyjny zawiera określony zestaw zasad, wg których otwierane

i zamykane są długie i krótkie pozycje. Zasady te zazwyczaj wymagają wprowadzenia

parametrów, od których zależeć będzie moment wygenerowania sygnału kupna lub

sprzedaży. Zmiana tych parametrów spowoduje również zmianę dochodowości całego

systemu, dlatego kluczowa jest ich optymalizacja.

Najpopularniejszy program do handlowania na Forexie, MetaTrader, udostępnia narzędzie

do testowania i optymalizowania strategii napisanych w języku MQL na danych

historycznych. Tester nie jest jednak pozbawiony wad, istnieje więc zagrożenie, że strategia,

która po optymalizacji wykazuje wspaniałe historyczne zyski, w rzeczywistości wyczyści konto

nieuważnego tradera. Innym zagrożeniem są również błędy w interpretacji otrzymanych

wyników.

2. Błędy wynikające z konstrukcji testera

2.1. Modelowanie kursu wewnątrz świec

Tester optymalizuje strategie wykorzystując dane historyczne. Jedyne dane o cenach każdej

świecy, które posiada, to poziom otwarcia, zamknięcia, maksymalny i minimalny.

Zachowanie kursu pomiędzy otwarciem a zamknięciem musi być więc modelowane.

MetaTrader umożliwia wybranie jednego z trzech sposobów:

Każdy tick,

Kontrola punktów,

Tylko ceny otwarcia.

Trzeci ze sposobów jest użyteczny tylko dla strategii, która generuje sygnały wyłącznie

w oparciu o ceny otwarcia świec i pozwala na znaczne skrócenie procesu optymalizacji, ale

jest bezużyteczny w każdym z innych przypadków. Metoda kontroli punktów modeluje

zachowanie kursu na podstawie danych z najbliższego krótszego okresu czasowego, np. dla

Page 4: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

świec jednogodzinnych użyte zostaną dane trzydziestominutowe. Ta metoda daje tylko

bardzo uproszczone wyniki i w zasadzie powinna być wykorzystywana np. podczas

pierwszego testu strategii w trybie wizualnym, aby sprawdzić, czy sygnały są generowane

prawidłowo.

Najbardziej dokładna metoda, każdy tick, wykorzystuje najmniejszy dostępny przedział

czasowy do modelowania zachowań kursu wewnątrz świecy. Najczęściej są to dane

jednominutowe, gdyż poszczególne ticki nie są udostępniane przez dostawców notowań,

a sam MetaTrader nie przechowuje tych danych napływających w czasie rzeczywistym

z wyjątkiem krótkiego przedziału czasowego (widocznego np. podczas własnoręcznego

wystawiania zleceń), ale dane te są systematycznie usuwane wraz z pojawianiem się nowych.

Wynika stąd pewien problem. Wykorzystanie danych jednominutowych zamiast ticków

sprawia, że testowanie jakiegokolwiek systemu skalpingowego lub docelowo mającego

handlować na wykresie jednominutowym mija się z celem. W racji tego, że nie istnieją dane

mogące wskazać na zachowanie kursu wewnątrz świecy 1M, kurs w przybliżeniu

modelowany jest w następujący sposób:

1. Rozpoczęcie na poziomie otwarcia,

2. Powolne „rozpychanie” świecy w kierunku minimum i maksimum,

3. Zakończenie na poziomie zamknięcia.

Rysunek 1. Przykład modelowania kursu w świecy jednotickowej

Źródło: Opracowanie własne

Załóżmy, że w przykładzie zobrazowanym na rysunku 1 testowany system w momencie

otwarcia wystawił zlecenie buy stop na poziomie nieco powyżej późniejszego kursu

zamknięcia ze stop loss poniżej otwarcia. Podczas testowania zlecenie to zostanie wykonane,

a następnie automatycznie zamknięte z powodu osiągnięcia poziomu stop loss.

W rzeczywistości jednak kurs mógł po otwarciu spaść do minimum, później wzrosnąć do

maksimum i łagodnie opaść do zamknięcia. W takiej sytuacji zlecenie zostanie wykonane, ale

wraz z zamknięciem świecy pozostanie otwarte, gdyż stop loss nie został osiągnięty.

Page 5: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Wynik podany przez tester dla tej strategii miałby więc niewiele wspólnego z rzeczywistością,

a optymalizator wskazałby na parametry pozwalające wyeliminować wpływ modelowania

kursu, a nie na najlepsze pod względem rzeczywistej dochodowości systemu. Jedyny sposób

na poradzenie sobie z tym problemem to odpowiednie dostosowanie kodu strategii tak, aby

zachowanie kursu wewnątrz świecy nie było kluczowym czynnikiem generującym sygnały

kupna/sprzedaży.

Problem nie dotyczy jednak wyłącznie świec jednominutowych. Załóżmy, że trader chce

zoptymalizować strategię opartą na świecach godzinowych w okresie 01.01.2005 –

31.12.2011. Tester w chwili uruchomienia wyszuka najniższe dostępne świece pokrywające

ten okres w celu modelowania świec jednogodzinnych.

Brokerzy zazwyczaj nie udostępniają jednak tak dużych baz danych świec jednominutowych.

Istnieje więc możliwość, że do modelowania użyte zostaną świece pięcio-, piętnasto- lub

trzydziestominutowe. Istnieje nawet możliwość, że tester wykorzysta tylko dane godzinowe,

modelując kurs tak jak zobrazowane jest to na rysunku 1. Aby zapewnić najwyższą jakość

modelowania, konieczne jest posiadanie szerokiej bazy danych świec jednominutowych.

MetaTrader umożliwia importowanie zewnętrznych danych z plików tekstowych lub CSV.

Dane takie można ściągnąć za darmo z kilku serwisów forexowych (np.

http://www.forextester.com/data/datasources.html). Istnieje jednak możliwość, że

zaimportowane dane jednominutowe nie będą się pokrywać z wyższymi przedziałami

czasowymi (np. wykres jednominutowy przekroczył maksimum świecy jednogodzinnej z tego

samego przedziału czasowego). W takim wypadku tester odrzuci wartości jednominutowe,

obniżając jakość modelowania. Aby poradzić sobie z tym problemem, należy wykorzystać

skrypt dostarczany standardowo z każdym terminalem o nazwie period_converter na

wykresie jednominutowym i jako parametr wpisać żądany okres świecy jako wielokrotność

jednej minuty (np. dla jednogodzinnych świec będzie to 60, dla jednodniowych 1440).

Uzyskane w ten sposób dane zapewnią najwyższą jakość modelowania kursu.

MetaTrader umożliwia dokonanie własnej analizy jakości modelowania. W momencie

uruchomienia testera program generuje szereg czasowy, który jest wykorzystywany podczas

testu i optymalizacji. W celu pokazania go na wykresie, należy wybrać Plik -> Otwórz offline,

a następnie znaleźć interesujący nas przedział czasowy i symbol. Dane generowane przez

tester posiadają oznaczenie G. Przedstawia to rysunek 2.

Page 6: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Rysunek 2 Otwieranie danych generowanych

Źródło: MetaTrader

Jeśli otrzymany wykres będzie się charakteryzował długimi ruchami kursu w linii prostej, to

jakość modelu jest niska, natomiast częsta zmiana kierunku ruchu wskazuje na wysoką

jakość. Przykład dobrego modelowania przedstawia rysunek 3.

Rysunek 3 Przykład dobrego modelowania jednej świecy 5M

Źródło: MetaTrader

2.2. Model brokera

Kolejny problem, niezależny od użytkownika i MetaTradera, wynika z rodzaju konta, na

którym docelowo ma działać dany system. Najpopularniejszym obecnie jest model market

maker, w którym broker jest stroną transakcji. Zazwyczaj posiadanie takiego konta nie wiąże

się z jakimikolwiek opłatami lub prowizjami, a broker zarabia wyłącznie na spreadzie.

Model ten posiada dwa warianty. W jednym z nich spread pozostaje na stałym poziomie,

w drugim natomiast podlega ciągłym zmianom. Ponieważ terminal nie przechowuje

Page 7: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

historycznych danych dotyczących wielkości spreadu, podczas testowania i optymalizacji

przyjmowany jest jego aktualny poziom. Jeśli obecnie jest on wyjątkowo niski, to wyniki

zwracane przez tester będą zawyżone w stosunku do rzeczywistości, a jeśli wysoki –

zaniżone. Dla najbardziej płynnych par walutowych o niskim średnim spreadzie błędy będą

niewielkie, jednak dla pozostałych może znacznie zafałszować obraz dochodowości strategii.

Największy problem pojawia się jednak, jeśli korzystamy modelu NDD (no dealing desk).

Broker nie występuje tutaj jako strona transakcji i nie ustala kursu – ceny podawane są

w czasie rzeczywistym z rynku międzybankowego. W tym modelu broker pobiera prowizję od

każdej transakcji, uzależnioną od wielkości pozycji.

Rozważmy więc system, który uzależnia wielkość pozycji od ekspozycji na ryzyko strat. Każde

zlecenie naraża tradera na stratę w wysokości 1% kapitału. W tym systemie wielkość pozycji

będzie odwrotnie proporcjonalna do szerokości przedziału kurs otwarcia pozycji – poziom

stop loss (wyrażonego jako wartość dodatnia).

W modelu NDD broker nalicza prowizję dopiero po otworzeniu pozycji. Język MQL nie

dostarcza narzędzi pozwalających na uzyskanie jej wysokości w momencie wyliczania ilości

lotów, co sprawia, że faktyczna ekspozycja na ryzyko wynosi 1% kapitału + prowizja.

Wyniki zwracane przez tester nie uwzględniają prowizji. Sprawia to, że w modelu NDD

strategia będzie zawsze przynosić gorsze rezultaty niż wynikało by to z optymalizacji na

danych historycznych. Sposobem rozwiązania tego problemu może być wprowadzenie do

kodu strategii modelu symulacji wielkości prowizji przed otwarciem zlecenia i wliczenie jej do

ekspozycji na ryzyko. Nie jest to jednak sposób doskonały, gdyż spowoduje to obniżenie

średniej wielkości pozycji w rzeczywistym handlu w stosunku do wyników testera na danych

historycznych, a tym samym niższa będzie dochodowość strategii. Jedynym skutecznym

sposobem jest jednak po prostu niewykorzystywanie modelu NDD.

2.3. Slippage

Na bardzo płynnych rynkach, między chwilą wysłania zlecenia buy lub sell a jego realizacją,

kurs może się zmienić, powodując otwarcie pozycji na poziomie innym niż pożądany. Ma to

szczególne znaczenie dla strategii skalpingowych i grających na niewielkich zmianach kursu

wysokimi lotami.

Jednym z parametrów funkcji OrderSend() jest tzw. slippage. Określa on maksymalne

odchylenie kursu (w pipsach wyrażonych liczbą całkowitą) od poziomu z chwili wysłania

zlecenia z egzekucją rynkową (zlecenia oczekujące z reguły wykonywane są po danej cenie,

ponieważ serwer brokera już je zarejestrował wcześniej, nie występują więc opóźnienia).

Podczas testowania i optymalizacji strategii tester zawsze otwiera zlecenia po cenie z danej

chwili, odchylenia zawsze wynoszą więc 0.

Page 8: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Konieczna staje się więc analiza wrażliwości strategii na możliwe odchylenia od cen

rynkowych. Najlepszym narzędziem umożliwiającym jej przeprowadzenie jest arkusz

kalkulacyjny, do którego importujemy historię wykonanych przez tester zleceń

i modyfikujemy ceny otwarcia tak, abyśmy uzyskali kilka wariantów pesymistycznych, czyli

zakładających np. średnie odchylenie od ceny rynkowej w wysokości 1 lub 2 pipsów.

Następnie sprawdzamy, czy w istotnym stopniu wpłynęło to na wyniki osiągane przez daną

strategię przy danych parametrach wejściowych.

2.4. Algorytm genetyczny

Podczas optymalizacji w opcjach domyślnie zaznaczona jest opcja wykorzystywania

algorytmu genetycznego. Zasada jego działania w prostych słowach jest następująca – jeśli

tester wykryje po raz pierwszy kombinację parametrów, przy której system jest dochodowy,

to cały dalszy proces będzie bazował na tej właśnie kombinacji. Pozwala to na znaczną

redukcję ilości przebiegów, a tym samym ograniczenie czasu trwania optymalizacji.

Istnieje jednak zagrożenie, że algorytm pominie w ten sposób kombinacje, które

w rzeczywistości przyniosły by bardzo dobre wyniki. Istnieje kilka sposobów na rozwiązanie

tego problemu:

Całkowita rezygnacja z algorytmu genetycznego – jest to sposób drastyczny, gdyż

powoduje, że próbie poddane będą wszystkie możliwe kombinacje parametrów, co

może oznaczać znaczny czas trwania całego procesu,

Zmniejszenie ilości możliwych kombinacji – spowoduje to, że algorytm pominie

procentowo mniej kombinacji,

Przeprowadzenie kilku optymalizacji, za każdym razem wybierając inny parametr

optymalizacji – otrzymane w ten sposób rezultaty można następnie połączyć

i analizować łącznie, np. w Excelu.

3. Błędy interpretacyjne

3.1. Analiza wykresu optymalizacji

Jednym z najczęstszych problemów początkujących traderów jest wybieranie parametrów,

które dają najwyższy zysk, nie uwzględniając faktu, że niewielkie zmiany wartości

parametrów w znaczny sposób wpływają na skuteczność systemu.

Page 9: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Najłatwiejszym sposobem na uniknięcie takiego błędu jest analiza wykresu optymalizacji.

Jeśli optymalizujemy tylko jeden parametr, wykres wyglądać będzie tak, jak na rysunku 4.

Rysunek 4 Przykład wykresu optymalizacji jednego parametru

Źródło: MetaTrader

Powyższy przykład posiada dwa maksima, jedno w przebiegu drugim, drugie w przebiegu

szesnastym. Jeśli wykorzystując parametr z pierwszego maksimum zmniejszymy go lub

zwiększymy o jeden krok, to system nadal będzie zyskowny. Jeśli natomiast wykorzystamy

drugie maksimum, to przy zmniejszeniu parametru o jeden krok system nadal sprawuje się

dobrze, ale zwiększenie o krok spowoduje spadek poniżej początkowego depozytu.

Wykorzystany powinien być zatem parametr z pierwszego maksimum, gdyż wtedy system

jest mniej wrażliwy na zmianę sytuacji rynkowej.

Rysunek 5 Przykład wykresu optymalizacji dwóch parametrów

Źródło: MetaTrader

Jeśli optymalizowane są dwa parametry, wykres przyjmuje wygląd zaprezentowany na

rysunku 5. Najciemniejszy kolor posiadają kombinacje najbardziej dochodowe,

a najjaśniejszy – najmniej. Przytoczony przykład posiada trzy kombinacje, dla których system

jest najbardziej dochodowy – (5,5;9,5), (7;8) i (7;10). Różnica w zysku, jak również innych

wynikach, takich jak największa strata, jest niewielka, trader staje więc przed koniecznością

wybrania jednej z trzech kombinacji. Wykorzystując tok myślenia taki sam jak w przypadku

jednego parametru, gracz powinien wybrać kombinację pierwszą, gdyż dochodowość jest

wtedy najmniej wrażliwa na zmiany parametrów.

Co jednak zrobić, jeśli optymalizacji poddawanych są więcej niż dwa parametry? Najbardziej

efektywnym sposobem jest stworzenie wykresów optymalizacji dla wszystkich kombinacji

par parametrów. Dla trzech parametrów będzie ich trzy, dla czterech – sześć, dla pięciu –

dziesięć itp. Następnie dla każdej pary wybiera się najlepszy i najmniej wrażliwy zestaw

i, porównując otrzymane wyniki, wybiera najbardziej skuteczny zestaw parametrów strategii.

Page 10: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

3.2. Optymalizacja wielu okresów

Optymalizując system na danych historycznych otrzymujemy zestaw parametrów, dla

którego strategia osiągnęła najlepszy wynik dla przeszłych warunków rynkowych. Następnie

parametry te docelowo użyte zostają w handlu w czasie rzeczywistym. Aby sprawdzić, czy

proces ten pozwala na dobre przewidywanie optymalnych parametrów, należy dokonać

optymalizacji dla wielu okresów. Zobrazowane zostało to na rysunku 6.

Rysunek 6 Optymalizacja dla wielu okresów

Źródło: Opracowanie własne

Podejście to symuluje wykorzystywanie parametrów z optymalizacji na podstawie przeszłych

okresów w przyszłym handlu. Przykład: optymalizujemy system w okresie 1.01.2011 –

31.03.2011, a otrzymane parametry wykorzystujemy do testu w okresie 1.04.2011 –

30.04.2011. Następnie powtarzamy tę czynność wielokrotnie, za każdym razem przesuwając

okresy o jeden miesiąc w przód. Zestawiając łącznie wyniki z testów jako ciągły proces (np.

w Excelu) możemy sprawdzić, czego należy się spodziewać od systemu w rzeczywistym

handlu i czy optymalizacja rzeczywiście pozwala na ustalanie parametrów odpowiednich do

stosowania w czasie rzeczywistym.

3.3. Analiza equity line

Często popełnianym błędem jest przyjęcie zoptymalizowanych parametrów bez sprawdzenia

wyglądu equity line dla danego zestawu. Dwa przykłady wyglądu linii kapitału przedstawia

rysunek 7 i 8.

Page 11: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

Rysunek 7 Przykład niepożądanej linii kapitału

Źródło: MetaTrader

Rysunek 8 Przykład pożądanej linii kapitału

Źródło: MetaTrader

W oba systemy są zyskowne, jednak w pierwszym przypadku trader powinien natychmiast

odrzucić ten zestaw parametrów i spróbować innego zestawu sugerowanego przez tester.

Linia kapitału zachowuje się chaotycznie, skokowo wzrastając i opadając, a seria dwóch

zleceń stratnych (12-13) prawie całkowicie zniweczyła poprzedzającą ją serię czterech

transakcji zyskownych (8-11). Zachodzi więc podejrzenie, że system ten może dla różnych

okresów czasu przynosić zupełnie różne rezultaty.

Drugi przypadek jest przykładem pożądanej linii kapitału. Długie serie zysków są przecinane

krótkimi seriami strat, a zyski osiągane są równomiernie i stabilnie. Tego typu system

teoretycznie będzie przynosił podobne zyski w różnych okresach czasu.

3.4. Poziom i waluta depozytu początkowego

Poziom depozytu początkowego powinien odpowiadać kapitałowi tradera. Wynika to z faktu,

że najczęściej stosowany jest algorytm zarządzania wielkością pozycji powodujący stałą

ekspozycję kapitału na ryzyko strat wyrażony procentowo. Może się więc okazać,

w przypadku niskiego depozytu, że dla danego zlecenia maksymalna wielkość pozycji wynosi

0,08 lota w przypadku, gdy minimalny lot wynosi 0,1. W takim wypadku serwer odrzuci

zlecenie. Jeśli natomiast podczas optymalizacji trader ustawi poziom depozytu na dużo

wyższym poziomie, to w wynikach transakcje tego typu zostaną uwzględnione, gdyż wielkość

pozycji będzie wyższa od minimalnej, co spowoduje, że wyniki tej optymalizacji nie będą

miały odniesienia do efektywności systemu w handlu rzeczywistym.

Tester pozwala również na ustalenie dowolnej waluty depozytu. Lista czterech walut,

proponowana standardowo przez MetaTradera, nie jest listą zamkniętą, gdyż można wpisać

Page 12: Najczęściej popełniane błędy podczas optymalizacji automatów inwestycyjnych (expert advisors) w MT4

trzyliterowy symbol dowolnej waluty (np. PLN). Rozwiązanie to nie jest pozbawione wad,

gdyż wyliczanie zysku oparte jest na ostatnim znanym kwotowaniu odpowiedniej pary (np.

USDPLN czy EURPLN), a nie rzeczywistym kursie w momencie rozliczenia transakcji. Jeśli

jednak strategia jest wyposażona w algorytm wyliczający zmienną wielkość pozycji, to

wpisanie odpowiedniej waluty depozytu da bardziej odpowiadające rzeczywistej

dochodowości systemu rezultaty.

4. Podsumowanie

Tester strategii, w który wyposażony jest MetaTrader jest narzędziem bardzo prostym

w obsłudze, ale niedoświadczonego tradera może w łatwy sposób doprowadzić do utraty

całego depozytu. Do analizy wyników optymalizacji i backtestingu należy podejść z dużą dozą

obiektywizmu i wiedzą na temat sposobu działania testera. Należy również opanować

początkową chęć rozpoczęcia handlu prawdziwymi pieniędzmi, jeśli system osiąga wspaniałe

wyniki na danych historycznych. Najlepiej jest uruchomić go najpierw na koncie demo i na

bieżąco analizować zawierane transakcje i zyskowność systemu, gdyż, jak pozuje własne

doświadczenie, wtedy twórca systemu otrzyma najbardziej obiektywne wyniki własnej

strategii.