Pobierz skondensowaną porcję wartościowej wiedzy o inwestowaniu!🙂

Dziś przyszedł w końcu czas na zamknięcie mini cyklu o budowaniu własnej strategii. Prezentuję praktyczny przykład budowania i testowania krótkoterminowej strategii algorytmicznej. Tych, którzy nie śledzili mojej strony na bieżąco, a są zainteresowani, odsyłam do części pierwszej i drugiej niniejszej trylogii. Znajomość tamtego materiału powinna znacząco pomóc w zrozumieniu tego wpisu.

To co, jak na mnie, jest nietypowe w tym wpisie, to fakt, że zamiast formy podcastowej wybrałem wpis blogowy. 🙂 Trudno byłoby zamieścić taką treść w postaci audio.

Pewnie powinienem był zacząć w stylu: poznaj strategię zarabiającą 40% w rok! 🙂 Tak, to poprawiłoby klikalność artykułu. Ale byłoby też nieuczciwe, bez podania ryzyka z tym związanego.

Artykuł pokazuje całą ścieżkę „od pomysłu, do przemysłu” budowy i wdrożenie własnej krótkoterminowej strategii transakcyjnej. 1 1. Zwracam uwagę na to, ponieważ w planach mam również prezentację strategii średnio/długoterminowej opartej na paradygmacie tzw. podążania za trendem (ang. trend following). Tam akcenty w procesie budowy i testowania strategii są rozłożone inaczej. × Same konkrety, twarde liczby, rachunek prawdopodobieństwa i statystyka. Aby jednak nie przerazić większości, dla celów edukacyjnych wybrany przykład jest prosty. Co nie znaczy, że ułomny — wręcz przeciwnie — pokazuje, że rozwiązanie proste, nie prostackie, może być piękne i efektywne.

UWAGA! Handel krótkoterminowy na rynkach kapitałowych zdecydowanie nie jest dla każdego, a w szczególności nie dla kogoś, kto szuka szybkich i łatwo zarobionych pieniędzy. Sam po wielu latach obecności na rynkach, wraz z możliwością inwestowania dużo większego kapitału alokuję go do strategii długoterminowych, które nie są tak absorbujące czasowo. Strategie krótkoterminowe docelowo będą u mnie marginesem mojej aktywności na rynkach kapitałowych.

UWAGA! Zamieszczona treść jest czysto edukacyjna. Nie jestem doradcą inwestycyjnym, ani profesjonalnym zarządzającym funduszami inwestycyjnymi. Zachęcam, aby wszystko weryfikować samodzielnie. Moje opinie są moimi opiniami — nie trzeba się z nimi zgadzać.

Słowo wstępne

Pomimo starań po zebraniu materiału w całość, wyszedł, jak na standardy blogowe, długi artykuł. Być może wielu się zawiedzie, zwłaszcza w świecie, gdzie w mediach społecznościowych dominują treści o wartości rozrywkowej, mylone często z treścią merytoryczną. Nie chodzi o to, że piszę tu o mechanice kwantowej, okraszając wpis równaniem Schrodingera, ale mimo wszystko przebrnięcie przez ten artykuł będzie wymagało od Ciebie czasu i pewnego wysiłku. Mała czarna może być niewystarczająca do niniejszej lektury. 🙂

Dzielę się w tym wpisie nie tylko swoją wiedzą i doświadczeniem (wciąż skromnym), ale i, a może nawet przede wszystkim, tym, co do powiedzenia mają osoby uznane w branży. Doświadczenia poparte wieloma dekadami spędzonymi na rynkach finansowych to wartość sama w sobie. Nagrywanie wywiadów w ramach podcastu umożliwiło nie tylko bliższe poznanie wielu ciekawych osób. To co jest wyjątkowo cenne, to fakt nawiązania współpracy z kilkoma osobami, od których mogę uczyć się być coraz lepszym traderem. Dziś częścią tych wiadomości dzielę się z Tobą.

Wiedza tu zawarta nie jest ani rewolucyjna, ani sekretna. Niemniej jednak w jednym miejscu skupia obszerny zakres praktycznego rzemiosła. W języku polskim i zupełnie za darmo.

Bądź krytyczny, staraj się wszystko weryfikować. Inspiruj się, ale nie traktuj niczego za pewnik. Szukaj swojej drogi. W końcu chodzi o Twoje pieniądze. Nie powierzajmy ich ślepemu trafowi.

Streszczenie

Dla zabieganych, czy mniej zainteresowanych, krótkie streszczenie poniżej.

TL;DR Strategia zapisana algorytmem ma wiele zalet. Jej stosowanie ułatwia osiągnąć ważną w tradingu obiektywność i powtarzalność podejmowanych decyzji. Ułatwia (ale nie eliminuje) odcięcie emocji od czynnika decyzyjnego. Mamy też możliwość automatyzacji handlu. Co nie mniej istotne, skwantyfikowanie strategii pozwala na jej statystyczną analizę. Ta z kolei pozwala w szczególności odpowiedzieć na pytanie, czy tkwi w strategii przewaga rynkowa.
Zbudowanie strategii wymaga jednak zweryfikowanego i sprawdzonego procesu, który poprowadzi nas przez wszystkie etapy jej życia: od planowania, implementacji, przez testowanie, wdrożenie i wycofanie z rynku. Jest to krytyczny element warsztatu każdego profesjonalnego tradera.
W artykule opisuję, w jaki sposób zbudować strategię, która ma szansę na realnym rynku. Pokazuję szereg potencjalnych pułapek, które bardzo łatwo popełnić, a które mogą wytworzyć w nas błędne przeświadczenie o posiadanej przewadze rynkowej. Wszystko jest poparte praktycznym przykładem — działającą strategią dla kontraktu terminowego na indeks NASDAQ-100.

Założenia

Żebyśmy się dobrze zrozumieli: poniższy przykład jest tylko przykładem. W wielu miejscach może coś być niedopowiedziane, albo uproszczone, co w zależności od Twojego stopnia znajomości tematu może być pewnym problemem. Niestety, ten wpis i tak jest już długi, dla wielu pewnie zbyt długi. Zależy mi jednak, abyś zrozumiał ogólne przesłanie. Nie martw się za bardzo teraz detalami, nie ulegaj zbytniej perfekcji.

Zatem, nie martw się tym, że sposobów wygładzania wskaźnika RSI jest klika, a Ty nie wiesz, który powinieneś wybrać. Nie jest istotne, czy średnia krocząca jest prosta, czy wykładnicza. Skup się na zrozumieniu całościowego obrazu, jakim jest proces budowy i weryfikacji strategii.

Zauważ, że prezentowana strategia jest prosta. I taka ma być. Dodawanie kolejnego poziomu skomplikowania zwykle nie ma sensu, tym bardziej, jeśli symulowane wyniki ulegają niewielkiej poprawie. Będzie o tym mowa jeszcze.

Proces weryfikacji strategii jest o wiele bardziej rozbudowany od samej strategii. Trochę dzielimy włos na czworo, ale to dla celów edukacyjnych.

Nie musisz być zawodowym programistą, by zająć się tradingiem. Ale podstawy programowania to kluczowa umiejętność w tej profesji. Opanowanie podstaw, które umożliwią Ci napisanie prostego skryptu z podstawową funkcjonalnością i logiką nie powinno Ci nastręczyć wiele trudności. O tym tu nie będę pisał – jeśli temat jest Ci obcy, warto zainwestować tam swój wysiłek.

Żeby przygotować ten artykuł, korzystałem z określonego oprogramowania. Proponuję Ci jednak, żeby skupić się przede wszystkim na zrozumieniu koncepcji, którą opisuję, a mniej na technikaliach.

Podstawowy aparat matematyczno-statystyczny też jest bardzo pomocny w tradingu, by nie powiedzieć niezbędny. I znów: nie chodzi o wielkie teorie. One często ładnie wyglądają na uniwersytetach, a średnio mają się w praktyce. Powinieneś jednak znać takie podstawowe pojęcia jak średnia, mediana, czy standardowe odchylenie.

Dla otrzeźwienia i zachęty do weryfikowania wszystkiego samodzielnie, polecam niniejszy artykuł o tym jak możemy oszukiwać się sami, budując piękne modele statystyczne, oraz poniższe słowa wybitnego fizyka, Richarda Feynmanna:

(…) if the process of computing the consequences is indefinite, then with a little skill any experimental result can be made to look like the expected consequences.

Strategia to nie wszystko

Na początek musimy zdać sobie sprawę z tego, że tak jak nie ma jednej idealnej metody na inwestowanie naszych pieniędzy na rynku, tak samo nie istnieje jedyna metoda budowy strategii rynkowej. Świetnie można to zauważyć chociażby słuchając wnikliwie gości mojego podcastu.

Prezentowana strategia jest czysto statystyczna i mechaniczna. Jej działanie opiera się tylko na reagowaniu na ruchy ceny, a jej logika jest banalna. Nie ma dla niej żadnego znaczenia, co jest powodem tych ruchów (komunikat ekonomiczny, polityka, etc.). Wpisuje się to w opinię rynkową, która mówi, że cena jest ostateczną daną. Osobiście lubię takie podejście: nie przewidujemy rynku (w oparciu o wydarzenia), tylko reagujemy na poruszające się ceny. Więcej na ten temat możesz znaleźć m.in. w moim wywiadzie z Tomem Basso — legendarnym traderze, który zarządzał portfelem o wielkości przekraczającej pół miliarda dolarów.

Bez względu na preferowaną metodologię budowy strategii inwestycyjnej, powinniśmy pamiętać o kilku uniwersalnych zasadach związanych z samym inwestowaniem:

  • Nie ma zysków bez ryzyka — jeśli nie satysfakcjonuje nas to, co oferują np. papiery dłużne emitowane przez rządy USA czy Niemiec, musimy zaakceptować wyższe ryzyko inwestycyjne (czytaj: ryzyko utraty inwestowanych środków)
  • Powinniśmy stawiać sobie realistyczne oczekiwania wobec naszych inwestycji — wyższe oczekiwania pociągają zwykle wyższe ryzyko
  • Każda strategia wymaga czasu, by móc spełnić swoje zadanie — nie oczekujmy natychmiastowych rezultatów
  • Powinniśmy jasno określić klasę instrumentów, którą chcemy poruszać się po rynku. Przykładowo handel kontraktami na S&P500 (wbudowana dźwignia finansowa) to nie to samo, co handel ETF na S&P500 (np. SPY). Odwrócony ETF na indeks S&P500 to nie to samo, co krótka pozycja na kontrakcie ES.
  • Musimy uczciwie odpowiedzieć sobie na pytanie, ile czasu możemy poświęcić rynkowi w trakcie dnia. Być może zamiast rzucania się na hiper aktywny handel lepiej rozpocząć od „spokojnego” handlu opartego na interwałach dziennych czy wręcz tygodniowych?
  • Strategia musi być w zgodzie z naszymi preferencjami — tylko wtedy możliwa jest niezbędna dyscyplina w podążaniu za nią
  • Nie oczekujmy, że rynki finansowe okażą się drogą na skróty do zarobienia pieniędzy. Dla większości inwestycje na rynkach finansowych kończą się stratami. Zarabianie pieniędzy na rynkach finansowych wymaga umiejętności i wytrwałości. To jest biznes, do tego wybitnie konkurencyjny, gdzie przychodzi nam walczyć z najlepszymi profesjonalistami.

Wymieniłem te zasady, aby ustrzec każdego, kto przewinie nieco dalej ten artykuł i skupi się wyłącznie na zyskach generowanych przez przykładową strategię. Zadaniem tego wpisu nie jest danie Ci ryby, tylko wędki. Ale to wymaga pracy po Twojej stronie. Bardzo dużo pracy.

Kolejna sprawa, to kwestia ryzyka. Strategia, nawet taka jak poniżej, to zaledwie mały wycinek tego, o czym musimy pamiętać — o portfelu. Zawodowcy nie stawiają wszystkiego na jedną kartę. Nie myślą w kontekście pojedynczej strategii, pojedynczej pozycji na rynku, tylko globalnie — w kategoriach portfela. To temat wybiegający poza obszar tego artykułu. Jest jednak kluczowy i będę do niego wracał, by to nie umknęło.

Wyobraźmy sobie, że mamy sensownie zbalansowany pod kątem ryzyka portfel, którego składowymi są całkiem przeciętne strategie — wciąż mamy szanse na odniesienie sukcesu, bo skupiamy się na przeżyciu na rynku. Przykładowo wiele transakcji zawieranych po krótkiej stronie rynku generuje marne wyniki, względem pozycji długich. I to w portfelach zarządzanych przez profesjonalistów. A mimo wszystko z perspektywy portfela, globalnie ma to sens i pozwala paradoksalnie minimalizować ryzyko i polepszyć parametry inwestycyji.

W innym scenariuszu, możemy mieć portfel, który ma źle zarządzane ryzyko, źle dobrany zestaw rynków (np. duża korelacja, mała dywersyfikacja). Pomimo, że będziemy mieć najlepsze strategie w takim portfelu, możemy wysadzić go w powietrze właśnie z powodu braku kontroli ryzyka. To właśnie ten element przesądza w długim terminie o naszym sukcesie, tudzież jego braku.

Chciałem podkreślić jeszcze jedną rzecz w kontekście budowanej przez nas strategii. Decydując się na jej stosowanie, powinniśmy wyzbyć się pokusy jej modyfikowania czy obchodzenia w trakcie jej działania na rynku, zwykle w obliczu stratnych transakcji. Są wyjątki 2 2. Polecam mój wywiad z Lindą Raschke, w którym przyznała, że nie jest w stanie podążać w 100% za mechaniczną strategią transakcyjną. Jej przewaga wynika jednak z ogromnego doświadczenia i rozumienia mechaniki rynkowej. Obrazowo można powiedzieć, że strategię ma w głowie, co potwierdził jej dobry znajomy — Perry Kaufman — mówiąc, że Linda działa na rynku niczym algorytm. × , ale zakładając, że artykuł jest skierowany do początkującego tradera, powinniśmy wystrzegać się improwizacji na rynku. 😉

Nie znaczy to, że mamy zamknąć oczy i zapomnieć o działającej na rynku strategii. Awaryjny plan jej wycofania z rynku musimy mieć opracowany jeszcze przed jej wdrożeniem. Będzie o tym jeszcze mowa.

Proces budowy strategii

Poniżej zamieściłem raz jeszcze prezentację, która zawiera m.in. etapy budowy strategii omówione w części 1 i części 2 niniejszego cyklu. Jeśli nie znasz tamtego materiału, polecam chociażby szybkie zapoznanie się z poniższą prezentacją, co powinno ułatwić zrozumienie czytanego właśnie artykułu.

Aby przechodzić pomiędzy slajdami, użyj strzałki w dolnym prawym rogu lub przesuń palcem, jeśli czytasz artykuł na ekranie dotykowym.

Cel

Wspominałem w poprzednich częściach tego cyklu, że musimy postawić przed sobą konkretny cel do osiągnięcia. Ktoś może pomyśleć, że to bez sensu — przecież chcemy zarobić na rynku — potrzebujemy do tego strategię. Tak, ale to nie wszystko. Musimy ocenić na ile ten cel jest realny. Ja postawiłem sobie tu, dla celów edukacyjnych, następujący cel:

  • Ma być to strategia działająca w oparciu o indeks giełdowy (np. S&P500, NASDAQ, DJIA). Piotr (jeśli czyta to wie, że o nim 🙂 ), na mojej stronie na Facebook’u sugerował indeks NASDAQ, a konkretnie kontrakt terminowy (symbol NQ). Do usług Piotrze. 🙂
  • Strategia może operować zarówno pozycjami długimi (gra na wzrosty) jak i krótkimi (gra na spadki)
  • Uśredniona oczekiwana stopa zwrotu to około 3000 – 5000 USD rocznie za kontrakt (depozyt na jeden kontrakt wynosi obecnie ponad 8000 USD, ale gdy kontrakt miał w przeszłości wartość poniżej 1000 punktów, to te wymogi były odpowiednio kilka razy mniejsze, jak i potencjalne stopy zwrotu)
  • Zależy mi, aby strategia była mało skorelowana ze strategiami wybiciowymi typu trend following
  • Dajemy sobie maksymalnie 20-30 godzin na zbudowanie takiej strategii. Jeśli się nie uda, szukamy innego pomysłu.

Przyznam, że osobiście dla mnie indeks NASDAQ jest trudny w ujęciu krótkoterminowym, jeśli chodzi o budowane strategie. Łatwiej przychodzi mi znaleźć coś sensownie działającego na innych indeksach. No więc mamy jakieś wyzwanie. 😉

Pomysł

Pomysł na strategię przyszedł niejako sam. 🙂 W listopadzie 2018 roku przygotowywałem się do podcastu z Larry Connorsem. Zaintrygowała mnie jedna ze strategii, którą przedstawił w swojej najnowszej książce. Co prawda jego pomysł odnosił się oryginalnie do ETF na S&P500 (konkretnie SPY), ale postanowiłem przetestować to dla rynku terminowego na indeks NASDAQ-100 (symbol NQ).

Aby zawrzeć transakcję, spełnione muszą zostać następujące warunki:

  • Cena jest powyżej średniej kroczącej liczonej za okres 200 dni
  • Wskaźnik RSI za okres czterech dni schodzi poniżej 30 – kupujemy wtedy na zamknięciu rynku pierwszą pozycję
  • Drugą pozycję kupujemy, gdy RSI spada poniżej 25
  • Wychodzimy z rynku, gdy RSI wraca na poziom powyżej 55

Kluczem do zrozumienia tej strategii jest zrozumienie istoty wskaźnika RSI 3 3. Wskaźnik RSI (ang. Relative Strength Index) to popularna metoda mierzenia tzw. wykupienia/wyprzedania rynku. Wskaźnik liczony jest w ten sposób, że dla badanego okresu (np. 5 dni), dzielimy średni zysk przez średnią stratę. Zyski i straty dla poszczególnych dni liczone są zwykle pomiędzy cenami zamknięcia (np. jeśli wczoraj cena zamknięcia wynosiła 100, a dziś 101, to mamy 1% zysk, 0% straty). W przypadku RSI wynik jest znormalizowany (oraz wygładzony), tak by wyniki zawierały się w przedziale 0-100. Wskazanie RSI na poziomie 0 oznacza, że mieliśmy spadek w całym okresie (np. wszystkie sesje były spadkowe -- wyprzedanie rynku), lub rynek stał w miejscu. Analogicznie, gdy mamy wskazanie 100, znaczy to, że cały okres był wzrostowy (wykupienie rynku). × oraz długoterminowej, 200-dniowej średniej kroczącej. To nie jest Voodoo, tylko prosta forma wyrażenia stanu rynku w formie skwantyfikowanej. Z Voodoo mamy kontakt wtedy, gdy bezmyślnie stosujemy miliard przeróżnych wskaźników analizy technicznej bez jakiegokolwiek zrozumienia. Tylko dlatego, bo ktoś udostępnił je nam w naszym oprogramowaniu. „Dumnie” wyglądają prezentowane wykresy z naniesionymi „mądrze” brzmiącymi wskaźnikami, na których ciężko dostrzec to co najważniejsze – cenę. W tym co robimy musi być zawarta prosta matematyka i logika. Wizualizacja jest tylko wypadkową tegoż.

Przykładowo moglibyśmy usunąć z naszej strategii powszechnie znany wskaźnik RSI i wyrazić tę koncepcję po swojemu. Byłoby nieco więcej kodowania. Wynik działania strategii nie powinien jednak finalnie specjalnie odbiegać od oryginalnego konceptu.

Mamy tu bardzo fajną strategię, ponieważ wprost odnosi się ona do wykorzystania stadnych zachowań na rynku. Nie jest to jakaś abstrakcyjna formułka, do której na siłę trzeba dopisać historyjkę wyjaśniającą jej działanie.

Mamy oto rynek byka (ceny powyżej długoterminowej średniej kroczącej), na którym w pewnym momencie następuje zwrot na południe. Czy to w oczekiwaniu na ważny komunikat ekonomiczny, a może ze względu na jakieś wydarzenie, mamy sytuację gdzie zanika popyt. Wskaźnik RSI spada poniżej 30. Wtedy kupowana jest pierwsza jednostka naszej pozycji. Jeśli rynek schłodzi się jeszcze bardziej (RSI poniżej 25-20), kupujemy drugą jednostkę. Zamknięcie pozycji następuje po ociepleniu rynku, gdy RSI wraca do pułapu powyżej 55.

Strategię można zakwalifikować do grupy tzw. strategii anty-trendowych (ang. counter trend). Prezentowana strategia zawiera co prawda transakcje w zgodzie z długoterminowym trendem wzrostowym, ale wchodzi w rynek pod prąd, gdy ten się cofa tworząc krótkoterminowy trend spadkowy. Preferuję ten rodzaj antytrendowego podejścia, względem łapania noża wbrew długoterminowemu trendowi. Strategie takie są z natury krótkoterminowe, mają wysoką trafność, ale transakcje zyskowne są zwykle znacznie mniejsze, niż transakcje stratne. Można na nie spoglądać jak na podejście hit & run.

Klasa strategii anty-trendowych może być ciekawym uzupełnieniem dla strategii podążających za trendem. Jeśli tak zestawione strategie mają negatywną korelację, a przy tym są zyskowne, to mamy bardzo pożądane właściwości dla konstrukcji każdego portfela. Przykładowo, zmorą strategii trendowych jest nagłe, chwilowe cofnięcie rynku powodujące zamknięcie pozycji (ang. whipsaw). Wejście do gry w takim momencie strategii jak ta prezentowana, pozwala zająć pozycję po niższej cenie, zanim strategia trendowa ponownie wejdzie w rynek.

Warto zwrócić uwagę na kilka aspektów:

  • Strategia działa tylko po długiej stronie rynku (gra tylko na wzrosty), ale nie walczy z głównym (długoterminowym) trendem — ma to sens w przypadku indeksu, który z definicji jest long-biased. Jeśli rynek jest spadkowy, nie kopiemy się z… niedźwiedziem. 😉
  • Strategia krótkoterminowo jest kontrariańska (kupowanie na spadającym rynku), ale jak wspomniałem powyżej, długoterminowo pozycja jest zajmowana w zgodzie z panującym trendem. Kupowanie na rynku, gdzie krótkoterminowo panuje popłoch, działanie wbrew większości, nie jest komfortowe. Ale właśnie w tym zachowaniu ma tkwić przewaga rynkowa.
  • Pozycja budowana jest w dwóch krokach — może zdarzyć się, że druga jednostka nie zostanie otwarta, gdyż wcześniej spełniony zostanie warunek zamknięcia pozycji (rynek wróci na poziom RSI powyżej 55)
  • Nie mamy wbudowanego sztywnego zlecenia obronnego (ang. stop loss), w którym poziom znany jest a priori (np. wyrażony procentowo czy kwotowo). Wyjście z rynku następuje dopiero, gdy wskazanie RSI przekroczy pułap 55.
  • Powyższe w praktyce oznacza, że po kupnie pierwszej jednostki rynek może zaliczyć jeszcze spory spadek, zanim RSI wróci w regiony powyżej 55 (czyli, znając metodę liczenia RSI, wtedy, gdy rynek zacznie odreagowywać spadek i pojawią się sesje wzrostowe).
  • W oryginale książkowym transakcje zawierane są po cenach zamknięcia na danych dziennych, co wymaga ode mnie małego komentarza, o czym poniżej

Otóż otwieranie/zamykanie pozycji po cenie zamknięcia (sesji) wymagałoby dodatkowych zabiegów, aby wyniki w testach nie były zafałszowane. 4 4. Problem można rozwiązać składają zlecenie np. na minutę przed zamknięciem rynku. × Z tego powodu postanowiłem zawierać transakcje po cenie otwarcia.

Sprawa kolejna, to kwestia braku twardego stop loss’a. Wszem i wobec się mówi o zleceniach obronnych, ale niestety bardziej w formie wyświechtanego sloganu, takiej prawdy objawionej, bez weryfikacji. Co do zasady: strategia musi mieć w sobie metodę zamknięcia pozycji, wyjścia z rynku. Co nie znaczy, że postawienie sztywnego zlecenia obronnego oddalonego np. 1% od rynku jest dobrym rozwiązaniem. Zwykle nie jest. Oparcie go na zmienności rynku (np. wykorzystując ATR) ma większy sens, ale też stosować je należy z ostrożnością. Im węższy stop loss, tym będzie nam wyrządzał zwykle więcej krzywdy na rachunku niźli go chronił (lubię te staropolskie słowa 😀 ). Pomijam sytuacje, gdzie rynek otwiera się z ogromną luką, a klasyczne zlecenia obronne stają się bezwartościowe. Ale to temat na inną historię.

Żeby nie przedłużać: polecam krótki rozdział książki Larry’ego Connorsa, Short Term Trading Strategies That Work, o wymownym tytule: Stops Hurt. Tak jest i w tym przypadku: stosowanie sztywnych stopów, nawet odległych, nie poprawiły strategii, ale wręcz pogarszały jej wyniki i to nie tylko w wymiarze zysku, ale i maksymalnych obsunięć kapitału — w najlepszym razie ich nie zmniejszyły. Boję się wywołania niepotrzebnej burzy tymi słowami… Ograniczmy więc mój wywód tylko do tej strategii. Sam korzystam ze sztywnych zleceń obronnych w wielu innych strategiach.

Dla instrumentu SPY wyniki prezentowane w oryginale przez Connorsa były bardzo zachęcające — trafność na poziomie nawet powyżej 90%! To cecha antytrendowego podejścia. Oczekiwałem, że również na kontrakcie NQ powinno udać się coś ugrać. Zakładałem, że wyniki mogą się nieco pogorszyć, ze względu na fakt większej obecności profesjonalnych graczy na rynku terminowym.

Ponieważ, jak już wspomniano powyżej, pozycja budowana jest w dwóch krokach (tzw. skalowanie pozycji), należy zwrócić uwagę na kilka aspektów 5 5. Mówimy o strategiach krótkoterminowych, gdyż wręcz przeciwnie ma się to przy klasycznych strategiach typu trend following. Ale nawet przy podejściu krótkoterminowym są traderzy, jak np. Andrea Unger, którzy w testach traktują zarządzanie pozycją jako element przewagi strategii i wprost ją z nią integrują od samego początku (czyli jak u nas w tym artykule). × :

  • Testowana strategia z wbudowanym skalowaniem pozycji może być rozdzielona na dwie oddzielne strategie, które de facto mają tę samą logikę, ale działają na odmiennych parametrach (jedna kupuje np. przy RSI = 30, a druga przy RSI = 25)
  • Testowanie strategii w oryginale (czyli ze skalowaniem pozycji) spowoduje, że w teście otrzymamy wiele transakcji skorelowanych — niejako wynik działania strategii na dwóch zestawach parametrów (przy zachowaniu identycznej logiki)
  • Skalowanie pozycji to element zarządzania pozycją — jeśli szukamy czystej przewagi, lepiej robić to zwykle przy wykorzystaniu jednego kontraktu (bez skalowania czy jakiejkolwiek formy zarządzania kapitałem)

Implementacja i testy na małym zbiorze danych

Osobiście do handlu automatycznego korzystam obecnie z platformy (i brokera zarazem) o nazwie TradeStation 6 6. Nie znaczy to, że musisz automatyzować swoje strategie, tym bardziej, jeśli funkcjonują na interwale dzeinnym, jak w opisywanym przypadku. Jest to często tylko dodatek, a nie cel sam w sobie, jeśli chodzi o trading. Naszym celem numer jeden jest znalezienie przewagi rynkowej. Nie uprawiamy tu HFT. × . W Polsce zdominowanej brokerami z instrumentami OTC jest to raczej egzotyk, ale dla naszych edukacyjnych potrzeb do tego artykułu, jest to bez znaczenia. Ważne jest zrozumienie koncepcji procesu budowania strategii, a wykorzystywane narzędzie jest… tylko narzędziem. Dla porządku jednak informuję, że omawianą strategię implementować będę w języku EasyLanguage, który jest wbudowany w TradeStation. Korzystam też z arkusza kalkulacyjnego Excel (wraz z makrami), Market System Analyzer (MSA) oraz StratOpt. Dodatkowo testowałem ten sam kod w AmiBrokerze (język AFL).

Dobór danych testowych

Należy zwrócić uwagę na dane, które służą do testowania. Zasada pierwsza jest taka, by testować strategię na danych, na których strategia będzie docelowo miała działać. Przykładowo więc, nie możemy tu wykorzystać danych indeksu NASDAQ-100, a następnie handlować kontraktami terminowymi na ten indeks. Z pewnością te dwa zestawy danych są mocno skorelowane. Różnice jednak będą występować, co zwłaszcza w przypadku krótkoterminowej strategii może być kluczowe podczas jej budowy, optymalizacji i testowania.

Sprawa kolejna to jakość danych. W przypadku kontraktów terminowych powinny to być tak zwane dane korygowane wstecznie. Innymi słowy poszczególne serie przy rolowaniu kontraktów powinny być skorygowane wstecz, aby usunąć np. nieistniejące luki cenowe, które w rzeczywistości nie występują, a które zaburzyć mogą testy 7 7. Kontrakty terminowe, w odróżnieniu od np. akcji, mają konkretną datę dostawy, po której notowania wygasają. Wynika to wprost z charakteru tego instrumentu, które historycznie powstał właśnie na potrzeby zabezpieczenia ryzyka. Na przykład rolnik może, chcąc zabezpieczyć ryzyko sprzedaży kukurydzy w przyszłości, sprzedać dziś kontrakt za konkretną cenę. Z punktu widzenia tradera rodzi to jednak potrzebę połączenia ze sobą serii kontraktów, tak by tworzyły one nieprzerwaną historię. Nie wnikając w szczegóły, bo można by o tym napisać odrębny artykuł, pomiędzy seriami kontraktów występują luki (dla dociekliwych polecam sprawdzić zjawiska takie jak contango i backwardation). Szczególnie duże luki mogą występować przy niektórych kontraktach towarowych, np. na gaz. Wynika to m.in. z wysokich kosztów jego przechowywania – kupno dziś gazu, z dostawą za np. pół roku musi w cenie to odzwierciedlać. Z tego powodu dane muszą być korygowane wstecznie, tak by zniwelować luki cenowe, które realnie nie występują, ponieważ są pomiędzy różnymi seriami kontraktów. Ma to znaczenie dla tradera, którego pozycja otwarta jest na przestrzeni więcej niż jednej serii, gdzie występuje potrzeba tzw. rolowania pozycji – przeniesienia na kolejną serię. W skrajnych sytuacjach niekorygowane dane mogą totalnie zaburzyć na wykresach długoterminowe, wieloletnie trendy. × . Tu korzystam z danych oferowanych przez TradeStation, które są korygowane — wszystko jest więc OK. W przypadku rynków terminowych zwykle mamy jasną informację z jakim typem danych mamy do czynienia. Uważać należy natomiast szczególnie na dane udostępniane dla instrumentów CFD. Może się okazać, że nasze sążniste testy można sobie wsadzić w… buty, jeśli nikt ich nie korygował. 😉 OK, w przypadku indeksu, aż tak ogromnych różnic raczej nie będzie, ale i tak byłbym ostrożny. Rynek sam w sobie jest wystarczająco nieprzewidywalny — starajmy się więc na etapie budowy i testowania strategii zrobić wszystko jak należy, a nad czym mamy kontrolę.

Sprawa związana z danymi jest jeszcze bardziej skomplikowana dla rynku akcji. Tu tylko zamarkuję temat. Kwestie splitów i dywidend to jedno. Bardziej uważaj na tzw. błąd przeżywalności (ang. survivorship bias), jeśli będziesz robił np. ranking spółek do portfela.

Często pojawia się pytanie: ile danych historyczny należy mieć, by testy były wiarygodne. Nie ma jednej prostej odpowiedzi. Generalnie należy kierować się zdrowym rozsądkiem. Przykładowo na potrzeby testu niniejszej strategii zdecydowałem, aby sięgnąć do roku 2000. Daje nam około 18 lat danych (pierwszy rok przepada na wyliczenie 200-dniowej średniej kroczącej). Ponieważ projektowana strategia jest z natury krótkoterminowa, taki zestaw danych powinien spokojnie wystarczyć, aby w teście było wystarczająco dużo transakcji.

Warto upewnić się też, że dane historyczne reprezentują różne fazy rynku w kontekście zmienności i panujących trendów. Chodzi o to, żeby przypadkiem zbytnio nie dopasować naszej strategii do historycznych ruchów cen, które już mogą się w podobnej postaci nie pojawić. Testy mają doprowadzić nas do stabilnej strategii, a nie optymalnej pod kątem generowanych (w symulacji) zysków.

Testy wstępne

Na tym etapie mamy już zdefiniowany cel oraz pomysł jak go osiągnąć. Tu uwaga: niestety w praktyce na tym kroku niepowodzeniem kończy się większość naszych pomysłów. Jeśli „wypali” nam jeden pomysł na dziesięć (tj. przejdziemy do kolejnego kroku procesu budowy), to jest to wynik świetny — może być znacznie, znacznie gorzej, zwłaszcza na początku, gdy brak nam doświadczenia. Niestety to trochę jak szukanie igły w stogu siana.

Nie wolno się jednak zniechęcać, jeśli poważnie traktujemy to, co robimy. Nie wolno też ulegać pokusie chodzenia na skróty — budowana strategia musi przejść przez gęste sito stawianych przed nią wymagań, zanim zechcemy postawić na nią realny kapitał.

Trudność leży też w tym, że niestety dość łatwo oszukiwać przy budowie strategii. W końcu przecież nikt tego nie widzi, prawda? W prosty sposób możemy przymknąć oko na mankamenty budowanej strategii, tudzież przypudrować tu i ówdzie jej słabe strony. Gorzej: możemy upiększyć strategię nieświadomie, mając w pamięci dane historyczne i stosownie to odzwierciedlając w logice strategii. Testy historyczne mogą wyglądać obiecująco i krzepiąco. Sęk w tym, że rynek to surowy recenzent, który bezlitośnie punktuje nasze słabe strony. Co gorsza — w zamian za nasz poświęcony czas zamiast dostać nagrodę, otrzymamy baty, tak finansowe jak i psychiczne.

Uwagi i założenia do testów wstępnych: 8 8. Bardzo ważne, aby nie próbować do bólu różnych okresów, aż wyniki będą satysfakcjonujące. Okres 2 lat powinien wstępnie pokazać, czy zaimplementowany pomysł ma przewagę na rynku. ×

  • Wykorzystam dane za okres 2013-2014 (2 lata) z pośród ponad 19 lat (okres za lata 2000 do początku 2019) na których będziemy robić testy docelowe — jest to wybór losowy, nie testowałem wcześniej tego pomysłu na tych danych i tym okresie
  • Ponieważ strategia wykorzystuje 200-dniową średnią kroczącą, niemal cały pierwszy rok „tracimy” na jej wyliczenie.
  • Korzystam z danych kontraktu terminowego E-mini NASDAQ-100 (NQ), kwotowania dzienne, sesja CME Globex 17:00-16:00
  • Koszty transakcyjne (kupno/sprzedaż jednego kontraktu; dla całej transakcji otwarcia i zamknięcia należy pomnożyć razy dwa):
    • Prowizja: 2.5 USD
    • Poślizg cenowy: 15 USD
  • Kapitał startowy: 100 000 USD
  • Wartość punktu: 20 USD (co przy obecnej wycenie na poziomie ok. 6500 punktów daje nam wartość jednego kontraktu około 130 000 USD)
  • Typ zleceń: market order (u nas najlepsza cena na otwarciu)
  • Wielkość pozycji: maksymalnie dwa kontrakty (jeśli zajdzie warunek skalowania pozycji)

Kwestia uwzględnienia prowizji i poślizgów cenowych jest kluczowa, szczególnie w strategiach krótkoterminowych. Może bowiem się okazać, że to właśnie te koszty „zjedzą” nasz papierowy zysk.

Zwracam też uwagę na wielkość kapitału startowego. Możesz się złapać za głowę — 100 tysięcy dolarów! Pogięło gościa, centralnie!

Tak, to wielka kwota dla większości z nas, tym bardziej, że tu tylko dla jednej strategii i to pomimo, że wartość kontraktu wynosi około 130 000 tysięcy dolarów. Depozyt zabezpieczający, czyli minimalna kwota jaka jest wymagana na koncie, by móc kupić/sprzedać jeden kontrakt, to na chwilę podczas pisania tego artykułu wynosi 8 360 USD 9 9. Dla pozycji otwieranych i zamykanych tego samego dnia wielkość depozytu może być znacznie mniejsza. U nas jednak ten warunek nie jest spełniony. × . Nawet jeśli uwzględnimy dwukrotność tej kwoty (16 720 USD), bo strategia może mieć otwartą pozycję z dwóch kontraktów równocześnie, to 100 000 USD wydaje się być przesadą, bo ponad 80 000 USD byłoby bezrobotne.

Wszysto jednak jest OK — ta kwota jest ustalona tylko do potrzeb testów. Nie liczę rocznej stopy zwrotu, bo ta będzie różna dla różnej kwoty startowej. Mamy tu instrument lewarowany i to od nas zależy poziom ryzyka, jaki chcemy ustawić dla tej strategii. Mniej kapitału startowego w symulacji, np. 20 000 USD, to spore ryzyko, że strategia na dzień dobry się wysypie nawet jeśli teoretycznie transakcja miałaby zakończyć się zyskiem. Chwilowy zjazd na linii kapitału, mógłby spowodować, że brakowałoby na pokrycie depozytu zabezpieczającego i do margin call’a w efekcie.

Dlatego to co nas będzie interesowało w testach, to kwota zysku jaką strategia generuje. Oczywiście spoglądać będziemy również na druga stronę równania — na ryzyko. Czyli ile w międzyczasie strategia traciła, bo to nie jest tak, że zarabiamy liniowo jak na lokacie w banku. Natomiast od naszego apetytu na ryzyko, plus od konstrukcji naszego portfela, w którym możemy (i powinniśmy) mieć też inne strategie, będzie zależało to ile powinniśmy mieć gotówki w portfelu. Do tematu jeszcze wrócimy przy okazji tak zwanej symulacji Monte Carlo. Policzymy na przykład coś w stylu: ile potrzebuję kapitału, by w przeciągu roku prawdopodobieństwo bankructwa tej strategii nie było większe niż 10%? To może się wydawać sporym ryzykiem, ale (1) to tylko przykład, (2) jeśli strategia jest tylko jedną z np. kilkudziesięciu w portfelu, może to być poziom akceptowalny.

Przejdźmy do konkretów. Tak wygląda pseudokod naszej strategii 10 10. SMA (ang. Simple Moving Average) -- średnia cen (np. zamknięcia) za wybrany okres. Np. SMA(200, Close) oznacza średnią cen zamknięcia za okres 200-dni. × :

jeśli na rynku nie ma otwartych pozycji to
  jeśli rynek jest powyżej SMA(200) to
    jeśli RSI spadnie poniżej 30 to
      kup 1 kontrakt na następnym otwarciu

jeśli na rynku otwarta jest 1 pozycja to
  jeśli rynek jest powyżej SMA(200) to
    jeśli RSI spadnie poniżej 25 to
      kup 1 kontrakt na następnym otwarciu

jeśli na rynku są otwarte pozycje to
  jeśli RSI wzrośnie powyżej 55 to
    zamknij wszystkie pozycje na następnym otwarciu

Przykładowe transakcje pokazane są na poniższym wykresie. Widać tam trzy zagrania. W pierwszym i drugim nie został spełniony warunek otwarcia drugiej jednostki: kupujemy i sprzedajemy więc tylko jeden kontrakt. W trzecim przykładzie po kupnie pierwszego kontraktu rynek spełnił warunek kupna drugiego kontraktu (tzw. skalowanie pozycji) — zanurkował jeszcze niżej od ostatniej transakcji.

Widać też, że kupno i sprzedaż odbywa się po cenie otwarcia.

Błękitna linia u dołu, przebiegająca na całej szerokości wykresu to długoterminowa średnia krocząca liczona dla 200-dni. Gdyby wykres świecowy znajdował się poniżej tej linii, strategia nie zawierałaby żadnych transakcji.

Teraz interesuje nas na ile zakodowana strategia spełnia nasze oczekiwania, by ewentualnie przejść do bardziej zaawansowanych testów. Aby się o tym przekonać sprawdzimy jak strategia działa dla różnych parametrów. W naszej strategii wybrałem do optymalizacji 3 parametry:

  • Wartość RSI do kupna pierwszej jednostki (zakres 26-35, krok co 1)
  • Wartość RSI do kupna drugiej jednostki (zakres 15-25, krok co 1)
  • Wartość RSI wyjścia z rynku (zakres 50-65, krok co 1)

Jeśli zastanawiasz się dlaczego takie, a nie inne zakresy optymalizacji parametru dla RSI dobrałem, postaraj się zrozumieć istotę tego prostego wskaźnika.

Larry Connors w swojej książce podał odpowiednio parametry RSI do otwarcia pierwszej i drugiej pozycji odpowiednio 30 i 25, oraz do zamknięcia pozycji 55. Chcę jednak sprawdzić, na ile strategia stabilna jest w sąsiedztwie tych parametrów. Dzięki komputerowi szybko sprawdzimy wyniki wszystkich kombinacji (dokładnie 1760 kombinacji przy założeniach powyżej). Parametr okresu z którego jest liczona wartość RSI, zawsze jest równy 4 i nie poddaję go optymalizacji. Dlaczego?

Otóż chodzi nam o szybkie kontry na rynku, liczone dla okresu 2-5 dni. Nie interesuje więc nas wartość RSI liczona np. dla okresu 15 czy 20 dni. Z drugiej strony — zmiana parametru z 4, na 2, 3, 5 czy 6 nie powinna jej wywrócić, co też sprawdziłem. Natomiast dla mnie wartość 4 ma sens, bo interesuje mnie wyłapanie kilkudniowych cofnięć na rynku. Nie będę się bawił w dzielenie włosa na czworo. 😉

Ile strategia może mieć maksymalnie parametrów (nie stałych, tylko parametrów podlegających optymalizacji)? Co do zasady — im mniej, tym lepiej. Im więcej strategia ma parametrów, tym łatwiej nam uzyskać dobre wyniki… w testach. Na danych historycznych. Jednocześnie spada prawdopodobieństwo działania strategii na realnym rynku. A nie o to przecież nam chodzi. Generalnie powinniśmy nauczyć się akceptować „nieoptymalne” rozwiązania na rzecz takich, które chociaż są ułomne, to mają szansę zadziałania w przyszłości.

Ja przykładowo staram się mieć w testach minimum 50 transakcji na parametr. Przykładowo, jeśli więc u nas strategia ma 3 parametry podlegające optymalizacji, to dla całego okresu (lata 2000-2018) powinniśmy mieć przynajmniej 150 transakcji.

Nie jest to prawda objawiona, tylko empiria.

Pierwsze wyniki

Tak wygląda optymalizacja parametrów strategii za okres dwóch lat — wszystkie kombinacje parametrów są zyskowne (poniżej posortowane od „najgorszych”).

Jak widzimy najgorsza kombinacja parametrów, za okres dwóch lat wygenerowała zysk ponad 8 000 USD. Wynik jest bardzo satysfakcjonujący. Chodziło nam wszak przede wszystkim, by przynajmniej 70-80% kombinacji parametrów była cokolwiek zyskowna 11 11. Należy pamiętać, że strategia w różnych okresach czasu ma prawo generować różne wyniki, bo zmieniają się warunki rynkowe i wartość kontraktu. Rozpiętość wartości jednego kontraktu NQ na przestrzeni ostatnich 19 lat wahała się pomiędzy mniej niż 20 000 USD, a niemal 160 000 USD! × . Tymczasem u nas wszystkie kombinacje parametrów zarobiły pieniądze na rynku. Super! To bardzo dobry prognostyk na dalszą część naszych testów. Pamiętajmy jednak, że wynik był wygenerowany dla okresu 2 lat — zawsze jest możliwość, że trafiliśmy na najlepszy okres dla danej strategii. Jeśli tak się zdarzy, wyjdzie to niebawem przy okazji bardziej rozbudowanych testów.

Nie interesuje nas w tym momencie ile mogliśmy zarobić na najlepszych parametrach — to i tak wynik optymalizacji, bez jakiejkolwiek gwarancji powtórzenia wyniku na rynku. To co wiemy na razie, to że strategia spełnia nasze oczekiwania, że logika jest poprawnie zaimplementowana i transakcje zawierane są zgodnie z założeniami. Możemy przejść do bardziej rozbudowanych testów.

Co jednak, gdyby wyniki były słabe na tym etapie?

PAMIĘTAJ Lepiej odrzucić dobry pomysł na tym etapie, niż stracić kapitał na złym pomyśle! Dane historyczne traktujmy z ostrożnością.

Cóż, w rzeczywistości niestety tak najczęściej właśnie się zdarzy. Wówczas możemy katować nasz dwuletni okres danych, zmieniając cokolwiek się nam podoba: rynek, sesję, czas (np. zamiast świec dziennych, świece 180-minutowe), jak i samą logikę strategii. Może się okazać, że zanim otrzymamy obiecujące wyniki, to z naszego pierwotnego pomysłu nic nie pozostało. Jest to dopuszczalne jednak na tym etapie, ponieważ działamy na małym podzbiorze danych historycznych.

To czego nie wolno nam robić na tym etapie, to podglądać jak strategia zachowuje się dla innych okresów niż nasz OGRANICZONY testowy zbiór danych!

To właśnie tu łatwo o oszukiwanie samych siebie. Łatwo przykładowo sprawdzić jak strategia zachowuje się dla pełnego zakresu danych historycznych (u nas to 19 lat). I co ewentualnie można byłoby zmienić, aby poprawić jej wyniki. Z pewnością przy odpowiedniej determinacji osiągniemy ładne wyniki 12 12. Twardziele mogą zaprzęgnąć do pracy np. algorytmy genetyczne, żeby było jeszcze prościej i szybciej. Żebym nie został źle zrozumiany: idea tej klasy algorytmów jest nęcąca. Pamiętam do dziś jak na studiach informatycznych, ponad 15 lat temu, byłem zafascynowany koncepcją tchnięcia pierwastka inteligencji w bezduszne komputery. Niemniej jednak należy stosować je z ogromną rozwagą i zrozumieniem tego, co się robi. Nie można traktować algorytmów genetycznych jako drogi na skróty. × . Tyle, że szanse na ich powtórzenie w przyszłości będą bardzo nikłe. Wyniki backtestu będą bowiem z dużym prawdopodobieństwem obarczone grzechem zbytniego dopasowania do danych historycznych (ang. curve fitting).

Rozbudowane testy

Na tym etapie mamy kompletnie zaimplementowaną strategię. Wiemy też, że dla losowo wybranego okresu 2 lat, strategia generuje bardzo obiecujące wyniki.

Teraz przyszedł czas, aby na pozostałych danych historycznych (a więc okres 2000-2018) przeprowadzić rozbudowane testy i przejść ewentualnie do kolejnego etapu (inkubacji).

To czego nam absolutnie nie wolno robić na tym etapie, to modyfikować strategii! Klamka zapadła. Owszem, dzięki temu uzyskalibyśmy lepsze wyniki, ale nie o to chodzi by backtest wyglądał ładnie, ale by nasza strategia miała szanse generować zyski na realnym rynku. Z mojego doświadczenia to tu powstaje najwięcej nieporozumień, a w efekcie nierzadko i wylewanych później żali. Na tym etapie nie jest naszą rolą poprawianie strategii, aby przeszła testy, albo żeby działała jeszcze lepiej!

Mówiąc inaczej: jeśli na tym etapie nasza strategia polegnie, to cóż — szkoda — porzucamy ten pomysł. Nie gmeramy przy strategii celem poprawy wyników, nie wracamy też do poprzedniego etapu, który niedawno opisywałem, czyli testów wstępnych. Nie próbujemy też na siłę dobrać optymalnych parametrów! To bardzo konserwatywne podejście, ale powtórzę raz jeszcze: lepiej stracić okazję zarobienia pieniędzy, niż stracić pieniądze.

Jest wiele innych pomysłów (więcej niż możemy tak na prawdę nawet sprawdzić w naszym życiu), innych rynków — nie warto na siłę dopasować pomysłu do danych historycznych! Efektem takiego działania jest zwykle później, obok straconych pieniędzy, frustracja i wieszanie przysłowiowych psów na algorytmach.

Konserwatywne podejście do testowania nie daje nam i tak gwarancji sukcesu. Zwiększamy tylko jego prawdopodobieństwo. Trading jest cholernie ciężkim zajęciem.

Co będziemy robić w ramach rozbudowanych testów? Coż, możliwości jest wiele, nie ma jednego idealnego. W ramach tego wpisu zrobimy:

  • Test Big Leap
  • Klastrowe testy kroczenia do przodu (ang. cluster walk-forward tests)
  • Symulację Monte Carlo
  • Sprawdzimy jak strategia zachowuje się na innych rynkach

O testach walk-forward mówiłem nieco już w poprzedniej części tego cyklu. Tu jeszcze raz temat delikatnie naświetlę, ale po więcej polecam zerknąć choćby do prezentacji z początku tego artykułu.

Wcześniej jednak zobaczmy szybko jak strategia działa dla pełnego okresu (lata 2000-2018), przy „domyślnych” parametrach RSI (30, 25, 55).

Niektórym bije już może mocniej serce na widok rosnącego historycznie portfela. Bez wnikania jeszcze w szczegółowe statystyki, widzimy, że linia kapitału pięknie pnie się w górę. Zielone obszary linii kapitału oznaczają momenty pobijania kolejnych szczytów wartości portfela. Około 230 transakcji zarobiło nam ponad 140 000 USD (to już po kosztach transakcyjnych i poślizgach cenowych), to jest przeciętnie jakieś 600 dolarów na transakcję. Fajnie. Ale nie ulegajmy nadmiernemu podnieceniu, a najlepiej nie podniecajmy się wcale. Serio. Naszą rolą jest powściągnąć emocje i wejść w rolę surowego policjanta, który będzie szukał dziury w całym. W końcu jeśli mamy zaprzęgnąć nasz kapitał do tej strategii, musimy być pewni, że zrobiliśmy wszystko co mogliśmy, aby porządnie ją zweryfikować.

Kolejna sprawa: widzimy powyżej linię kapitału za wiele lat i końcowy wynik. To co na wykresie wygląda jak mały ząbek skierowanyw dół, po którym wartość portfela znów pnie się w górę, może uśpić naszą czujność. Warto przyglądnąć się zawieranym transakcjom, jedna po drugiej. Będę o tym jeszcze później pisał, ale zastanówmy się jak będziemy się czuć, gdy na pewien czas, nawet tak zdaje się zarabiająca strategia robi nam dziurę w portfelu na 20 tysięcy USD. W praktyce takie okresy mogą oznaczać nieprzespane noce i mnożące się wątpliwości, czy aby przypadkiem nasza strategia nie zaprzestała działać. Dlatego musimy odrobić zadanie domowe i umieć stwierdzić, czy to co widzimy na rzeczywistym rynku nadal nie odbiega od normy, względem tego, co było w symulacji.

Naszym celem na obecnym etapie nie jest dobranie najlepszych parametrów i podkręcenie zysku. To zwykle najlepiej uzyskać przez zarządzanie pozycją (zwiększając lub zmniejszając ryzyko). Prymitywna optymalizacja, to zazwyczaj tylko iluzja, która nas może ogłupić, stwarzając fałszywe poczucie bezpieczeństwa. Mniej dyplomatycznie, excusez moi pour mon français, otrzymamy beaucoup de merde. 😉 Współcześnie dostępne oprogramowanie i mocne komputery są niczym brzytwa u małpy, jeśli wykorzystamy to w nieumiejętny sposób.

W realnym świecie, wynik jak powyższa linia kapitału może być dziełem przypadku. Nawet najlepszy pomysł zaczerpnięty z zewnętrznego źródła, mógł wcześniej być „katowany” do bólu, aż wygeneruje ładne wyniki. Przecież nikt publicznie nie będzie rozwodził się nad strategią, która nie działa. Naszą rolą jest teraz sprawdzić, czy strategia się obroni w testach.

Test „Big Leap

Jest to wstęp do bardziej rozbudowanych, czasochłonnych i ciężkich obliczeniowo testów. Jeśli strategia „obleje” test Big Leap, mamy marne szanse, aby przeszła ona pełne testy walk-forward (o których więcej za chwilę). Lepiej po prostu przejść do pracy nad nową strategią.

Big Leap to prosty trik, którego nauczyłem się od Roberta Pardo, a zarazem przygrywka do testów walk-forward. Twierdzi on, że dzięki wprowadzeniu tego testu, ograniczyli u siebie w zespole bardzo znacząco liczbę strategii, które poddają pełnym testom walk-forward. A to oszczędność czasu i mocy obliczeniowych komputerów. Tym bardziej, jeśli zarządza się wielomilionowym kapitałem, dziesiątkami lub setkami strategii, na wielu rynkach całego świata.

Alternatywą do testów walk-forward i cookresowej optymalizacji, może być podejście stosowane np. przez gościa mojego podcastu – Perry Kaufmana 13 13. Robert Pardo w 2008 roku wydał świetną książkę o testowaniu i optymalizowaniu strategii transakcyjnych pt. The Evaluation and Optimization of Trading Strategies. Omówił w niej m.in. podejście testów walk-forward, którego jest twórcą. A Perry Kaufman napisał do tej książki wstęp, chociaż sam nie korzysta z tej metodologii. Świat jest mały. × . Jego strategie działają równocześnie na kilku zestawach parametrów. Inaczej mówiąc jest to dywersyfikacja na poziomie parametrów. Warto rozważyć takie podejście, gdy stosuje to facet, który na rynkach spędził ponad 50 lat i nadal na nich funkcjonuje.

A na czym polega ten trik? Na bardzo prostym założeniu:

  • Historyczne dane testowe dzielone są na dwie równe części (np. 10 lat dzielimy na dwa 5-letnie okresy)
  • Na pierwszej części danych (tak zwanych in-sample, IS) optymalizujemy parametry, tzn. wybieramy najlepszy zestaw według wybranego kryterium (np. stopa zwrotu).
  • Tak dobrane parametry puszczamy następnie dla drugiej, nieoptymalizowanej części danych (są to tak zwane dane out-of-sample, OOS).
  • Jeśli wynik jest satysfakcjonujący, to robimy to samo, ale dla drugiej części danych, czyli optymalizujemy ją, a następnie dobrane tam parametry uruchamiamy dla pierwszej części danych.

Jeśli wynik takiego prostego testu jest satysfakcjonujący to przechodzimy do rozbudowanych i dużo bardziej czasochłonnych testów walk-forward.

Poniżej wynik testu Big Leap dla naszej strategii.


Są one jak najbardziej akceptowalne i dobrze rokujące dla pełnych testów walk-forward. Generalnie drugi testowy okres (lata 2009-2019), bez względu na to, czy mamy wyniki IS czy OOS, generuje lepsze wyniki niż pierwszy okres (lata 2000-2009). Jest to zrozumiałe jeśli spoglądniemy na to jak rosła wartość indeksu NASDAQ w czasie.

Mój wywiad z Robertem Pardo

W samym tylko roku 2008, przy zapaści światowej gospodarki, osiągnął wynik ponad 140%!

Czytaj dalej →

Testy walk-forward

Wykorzystamy tu koncepcję tzw. testów walk-forward, której autorem i popularyzatorem jest ikona branży finansowej, wspomniany już Robert Pardo — gość odcinka numer 19 w moim podcaście. Jest to metodologia sprawdzona w boju przez wiele funduszy inwestycyjnych. Sam Pardo w 2008 roku, przy światowej zapaści rynków finansowych, wygenerował ponad 140% zysku dla swojego funduszu, a przez magazyn Futures wybrany traderem tegoż roku.

Temat testowania metodą walk-forward sam w sobie jest dość rozległy i mógłby spokojnie wypełnić kilka wpisów jak niniejszy. Ale na nasze potrzeby zaczniemy od czegoś w miarę prostego.

O co chodzi w testach walk-forward? Ma on za zadanie rozwiązać problem doboru optymalnych parametrów, oraz i ich cookresowej reoptymalizacji (aktualizacji). Pierwsza cześć równania wydaje się prosta: ze wszystkich kombinacji parametrów naszej strategii wybiera się optymalny zestaw. Proste. Ale pojawia się kilka problemów.

Po pierwsze, jeśli już wybierzemy optymalne parametry, to jak sprawdzić, czy one działają na danych nieoptymalizowanych? Najprościej poprzez zostawienie sobie np. 20-30% danych historycznych, na których to sprawdzimy. Niektórzy tak robią. Ale można iść dalej.

Grafika poniżej prezentuje proces testowania metodą walk-forward. Bloki oznaczone IS (in-sample), to okresy w których system jest optymalizowany. Bloki OOS (out-of-sample), to okresy w których strategia działa na parametrach dobranych podczas optymalizacji okresu IS.

Załóżmy, że mamy 10 lat danych testowych jak na grafice powyżej, okres 2001-2010. Następnie wykonajmy coś takiego:

  • Trzy pierwsze lata (2001-2003) optymalizujemy, np. szukamy dla jakich parametrów strategia generuje najlepszych stosunek zysku do obsunięcia kapitału
  • Tak dobrane parametry aplikujemy na danych za rok 2004
  • Następnie, trzyletni okres z punktu pierwszego przesuwamy o rok dalej (a więc obejmuje teraz okres 2002-2004) i ponawiamy optymalizację, na tym nowym zbiorze danych
  • Ponownie tak dobrane optymalne parametry aplikujemy na kolejnym roku (2005)
  • Cała zabawa kontynuowana jest, aż skonsumujemy cały zakres historycznych danych

Co zyskujemy takim podejściem? Po pierwsze, zamiast konsumować od razu 70% danych na optymalizację, konsumujemy w naszym przykładzie tylko 30%. Lata 2004-2010 będą danymi out-of-sample, a więc nie są wynikiem optymalizacji.

Po drugie, mamy większą pewność co do jakości procesu optymalizującego, ponieważ widzimy nie jeden okres out-of-sample, ale aż siedem takich okresów.

Po trzecie, parametry aktualizowane są do najnowszych 3 lat wstecz 14 14. Można też stosować tzw. podejście anchored, czyli zakotwiczone. Polega ono na tym, że o ile okno OOS zawsze ma stała wielkość, to okno IS zakotwiczone jest właśnie od początku testowanego okresu. W ten sposób zakres danych, na których optymalizowane są parametry jest coraz dłuższy. Osobiście mnie to podejście nie przekonywało i nie widziałem w tym wartości dodanej. Robert Pardo również podziela taką opinię. × , a więc jest szansa, że w ten sposób strategia może być „świeża” i adaptować się do zmian rynkowych.

Aby jednak mieć większą pewność co do jakości testów, zamiast jednego testu walk-forward, zrobimy ich całą serię w różnych konfiguracjach. Czyli to co widzimy na grafice powyżej przeprowadzimy kilkadziesiąt razy, zmieniając rozmiar i liczbę okien IS/OOS.

Przykładowo, IS zamiast mieć długość 3 lat, będzie miało długość 2 lat, a OOS zamiast 1 roku, będzie miało długość 6 miesięcy. I takich kombinacji tworzymy właśnie kilkadziesiąt, by nie było zagrożenia, że mamy tylko jeden specyficzny układ IS/OOS, który „działa„.

Szukanie klastrów w testach walk-forward

Klastrowe testy walk-forward to po prostu zbiór wielu testów walk-forward. W naszym przykładzie jest to zestaw 30 testów walk-forward.

Co oznaczają poszczególne komórki z grafiki powyżej? Są to zestawy testów walk-forward o różnej konfiguracji w odniesieniu do długości okienek IS/OOS. Przykładowo, zakładając dla ułatwienia, że mamy 10 lat danych testowych, to blok na przecięciu OOS% = 15 i Runs = 25 oznacza:

  • dzielimy okres 10 lat na 25 równych części (146 dni każda, przy założeniu 365 dni w roku)
  • każdy taki okres 146 dni dzielimy na dane IS i OOS w proporcji 85% (124 dni) i 15% (22 dni)
  • co 22 dni strategia jest optymalizowana na danych z poprzednich 124 dni, a tak dobrane parametry wykorzystane są na rynku przez okres 22 dni właśnie
  • mając 10 lat danych, przy powyższych założeniach, test walk-forward re-optymalizuje strategię 25 razy
  • w ten sposób, pomijając pierwsze okienko IS o długości 124 dni, pozostały 10 letni okres jest w pełni zbiorem wyników OOS

I tu właśnie widać przewagę testów walk-forward. Spalamy mniej danych na optymalizację i mamy więcej wyników OOS, czyli na okresach nieoptymalizowanych.

Na potrzeby naszej strategii, aby test walk-forward „zdał” test (był zaznaczony na zielono), musi spełnić kilka warunków dla wyników na danych out-of-sample (OOS), czyli nieoptymalizowanych:

  • Zysk OOS (łącznie ze wszystkich okienek OOS) musi być większy od zera
  • Zysk OOS (łącznie ze wszystkich okienek OOS) nie może być mniejszy niż 50% zysku na danych IS
  • Przynajmniej 50% okienek OOS musi generować jakikolwiek zysk
  • Żadne pojedyncze okienko OOS nie może generować więcej niż 50% całościowego zysku z całego testu

Mamy zatem serię 30 różnych testów walk-forward. Zależy nam, by jak najwięcej przeszło test pozytywnie, a najlepiej by grupowały się one w klastry (stąd nazwa). Każdy taki klaster zbudowany jest z 9 komórek (9 różnych zestawów testów). Ideałem jest jak większość konfiguracji walk-forward zdaje test, ponieważ wtedy nie ma ryzyka, że nasz test jest ofiarą zbytniej optymalizacji… samego testu. Wiem, że brzmi to zawile, ale testy walk-forward nie są nic warte, jeśli usilnie wybraliśmy optymalne jego parametry.

U nas widać, że na 30 różnych zestawów testów walk-forward, test oblały tylko 3. To bardzo dobry wynik, zważywszy na wyśrubowane warunki, które wymienione są powyżej. W praktyce jednak, nawet te 3 komórki opisane jako FAILED wygenerowały zyski, co widać poniżej.

Poniżej widzimy linię kapitału dla zaznaczonego zestawu walk-forward, tj. OOS% = 10 i Runs = 5. Ta ostatnia wartość wskazuje liczbę okresów OOS. Na wykresie widać więc, że od nieco ponad 90 transakcji, aż do końca testowego okresu (łącznie ponad 100 transakcji), to wyniki nie będące wynikiem optymalizacji.

Wyniki klastrowych testów walk-forward wypadły bardzo pozytywnie. Można oczywiście zagłębić się w szczegółowe wyniki, ale co do zasady, jeśli strategia byłaby słaba, to na tym etapie najpewniej by poległa. Osobiście od tych testów oczekuję, aby większość testów walk-forward była na zielono. Dopuszczam do maksymalnie 4-5 testów, które nie spełniają tego warunku.

Na koniec uwaga: wykonanie takiego zestawu testów walk-forward dla dużego zestawu danych (np. 10-15 lat) przy niskim interwale (np. 5-minut), to sporo roboty nawet dla wydajnego procesora. Przyda się też automatyzacja tego procesu, bo jeśli przyjdzie nam odpalać każdy test „z ręki”, to zwyczajnie rzucimy w końcu tym w kąt. Jeśli teraz pomnożymy to przez kilka interwałów, dla którego chcemy wykonać testy (o czym nieco później słów kilka) + kilka rynków, to wytestowanie jednej strategii jest dość kosztownym zabiegiem. A na koniec dnia okaże się zwykle, że wynik testu nie jest dla nas satysfakcjonujący. Kto mówił, że będzie prosto? 😉

A teraz wyobraźcie sobie tę całą rzeszę delikwentów, którzy bez przygotowania, bez doświadczenia, rzucają się w czeluść rynku. I handlują. I wydaje się im, że mają przewagę na tymże rynku. Niektórzy nawet mają poczucie kontroli rynku. To jakby wsiadanie bez przygotowania do myśliwca F-16 z wiarą i przekonaniem o możliwości wykonania akrobacji powietrznej. Po pierwszym udanym korkociągu delikwent czuje euforię. Jestem Bogiem! Kwestia, zwykle krótkiego czasu, gdy dochodzi do szybkiego kontaktu z podłożem. Niekontrolowanym.

Na koniec poniżej garść statystyki dla naszej strategii. Dane nieoptymalizowane (OOS), dla jednego z zestawów walk-forward, przy założeniu, że okienko IS = 504 dni, a OOS = 126 dni. To oznacza, że strategia była reoptymalizowana co 126 dni.

  • Okres: 18 lat, 1 miesiąc, 26 dni
  • Procent czasu w rynku: 19,38%
  • Zysk: 128 830 USD
  • Profit Factor: 3.14
  • Transakcje stratne: -60 200 USD
  • Transakcje zyskowne: 189 030 USD
  • Liczba wszystkich transakcji: 232
  • Procent transakcji zyskownych: 78,45%
  • Przeciętna strata: -1 204 USD
  • Przeciętny zysk: 555 USD
  • Największa stratna transakcja: -5 765 USD
  • Największa zyskowna transakcja: 4 640 USD
  • Przeciętny miesięczny zysk: 1 691 USD
  • Koszt prowizji: 1 160 USD
  • Koszt poślizgów cenowych: 6 960 USD
  • Maksymalne obsunięcie kapitału (transakcja-do-transakcji): -12 400 USD
  • Maksymalne obsunięcie kapitału (intraday): -25 170 USD

Uwaga: liczba transakcji jest liczona tak, jak by nie było skalowania, tj. każda osobno. Mówiąc inaczej: jeśli było skalowanie pozycji (u nas 2 kontrakty w rynku), powyższa statystyka liczy to jako dwie oddzielne transakcje.

Dla porównywalnego okresu, strategia optymalizowana podejściem walk-forward wygenerowała ponad 13 000 USD większy zysk przy podobnym poziomie maksymalnego obsunięcia na krzywej kapitału, w porównaniu do strategii, która nie była optymalizowana i działała na domyślnych parametrach (30, 25, 55).

Według mnie, nie to jest jednak głównym celem i zaletą stosowania podejścia walk-forward. Tu się tak składa, że taka wersja reoptymalizowana wygenerowała nieco lepszy wynik — nie jest to jednak zasada.

To co jest istotne najbardziej, to fakt, że walk-forward daje nam większą pewność co do działania strategii w przyszłości. Mamy bowiem wiele okresów out-of-sample, działających na różnych wartościach parametrów. Przy jednym okresie out-of-sample (albo wręcz jego całkowitym braku) trudniej zakładać czego możemy oczekiwać w przyszłości.

Nie umniejszam też zalety walk-forward wynikającej z faktu dopasowywania strategii do zmian rynkowych. Sęk w tym jednak, że zmiany te zawsze będą opóźnione i nie należy oczekiwać zbyt wiele, szczególnie gdy rynek nie może się zdecydować w dłuższym terminie co do jego charakterystyki.

Symulacja Monte Carlo

Testy walk-forward mamy za sobą. Mamy ogrom transakcji i wiele możliwości wyboru, co do tego jaki zestaw tych testów wybrać i stosować przy ponownej optymalizacji.

Przeprowadźmy jednak jeszcze jeden test — tzw. symulację Monte Carlo. Metodę zaproponował pierwszy raz nasz wybitny matematyk, przedstawiciel lwowskiej szkoły matematycznej — Stanisław Ulam. Na czym to ma polegać? Niestety nie jest to oferta wypadu na sympatyczny weekend do najbardziej znanej dzielnicy Monako.

Wyobraźmy sobie, że mamy 100 transakcji z symulacji na danych historycznych, które układają się w pewien ciąg i kształtują nam krzywą kapitału. Załóżmy też, że strategia przy tej określonej sekwencji transakcji ładnie zarabia, obsunięcia na kapitale są akceptowalne.

Co jednak, gdybyśmy zmienili kolejność tych transakcji? I na przykład ułożyli je w taki ciąg, że mielibyśmy serię 10 stratnych transakcji z rzędu, jedna po drugiej? Czy nasz portfel by to przeżył?

Monte Carlo to właśnie sposób na to, by zasymulować wiele wariantów, losowo dobierając dane z pierwotnej symulacji. Przy użyciu komputera symulujemy wiele przebiegów tej samej strategii, tylko dobierając transakcje w różnej kolejności.

Można też podejść do tematu inaczej. Zamiast losowo dobierać różną kolejność transakcji, zasymulujemy przebieg strategii wielokrotnie, za każdym razem wprowadzając losowo małe zmiany w danych wejściowych, czyli notowaniach historycznych. Na potrzeby tego wpisu pozostaniemy przy pierwszym wariancie.

Z puli transakcji out-of-sample (232) z testu walk-forward, zrobimy „losowanie” i zasymulujemy roczny przebieg strategii. Czyli jeśli średnio w roku mamy przeciętnie około 12-15 transakcji, to sprawdzimy, jak wyglądać może rok z losowo dobranych transakcji (z puli 232 transakcji). Losowanie przeprowadzimy 2500 razy, a następnie policzymy kilka statystyk z tej próby.

Dlaczego tak? Możliwości realizacji tego typu symulacji jest bardzo wiele. Osobiście z pewną dozą ostrożności podchodzę do tego typu zabawy, m.in. ze względu na niestacjonarność rynków finansowych. W efekcie transakcje, które mamy z historycznych notowań, mogą się mieć nijak do rzeczywistości, jeśli rynek się zmienił, a strategia już nie ma przewagi rynkowej. To jest wada Monte Carlo 15 15. Nie chcę się narażać, ale dla mnie symulacja Monte Carlo jest nieco przereklamowana w kontekście tradingu. Być może przy naprawdę dużej liczbie transakcji (tysiące) i małego zakresu czasu, może to być bardziej przydatna forma testu. Problemem jest na przykład to, że transakcja zawarta na NASDAQ-100, gdy ten był przy poziomie 1000 punktów, versus, gdy jest na poziomie 7000 punktów, ma się jak pięść do nosa, gdy zestawić je razem przypadkowo jedna po drugiej. Nie należy też ufać, że Monte Carlo ustrzeże nas od zbytniego dopasowania modelu do danych. Ze znanych traderów z tego typu analizy korzysta np. Kevin Davey, który gościł u mnie w podcaście. × .

Kolejne ograniczenie tego typu symulacji polega na tym, że zakładamy brak zależności pomiędzy transakcjami (tzw. autokorelacja). Jeśli taka zależność występuje, symulacja Monte Carlo bez jej uwzględnienia będzie zaburzona. Aby wykluczyć występowanie autokorelacji można wykonać na przykład test Durbina-Watsona.

Na nasze potrzeby, interesuje mnie czego mogę oczekiwać od strategii w najbliższym roku. Sprawdzimy jaki minimalny kapitał startowy powinienem dobrać, aby strategia miała nie więcej niż 10% prawdopodobieństwa na bankructwo, tj. zejście do takiego poziomu wartości portfela, gdzie nie jest możliwe otwarcie kolejnej pozycji. Jest to tzw. risk-of-ruin.

Założenia symulacji:

  • Liczba losowań: 2500
  • Okres symulacji: 1 rok
  • Liczba transakcji w każdej symulacji: 15
  • Liczba wszystkich transakcji: 232
  • Poziom risk-of-ruin: 17 000 USD

Ostatnia wartość, 17 000 USD (odpowiednik mniej więcej dwukrotności depozytu zabezpieczającego), oznacza, że jeśli nasz kapitał zejdzie poniżej tej kwoty, to nie możemy otworzyć nowych pozycji (max. 2 kontraktów). Nie jest to rozwiązanie idealne, ponieważ wartość depozytu ulega zmianie w czasie pod wpływem zmiany wartości indeksu i zmienności rynkowej.

Przy takich założeniach symulacja Monte Carlo pokazała, że aby nie przekroczyć 10% prawdopodobieństwa bankructwa w ciągu roku, musimy mieć minimalnie na start 21 500 USD. Przy takim kapitale startowym tak wyglądają wyniki:

  • Mediana obsunięć kapitału: 6%
  • Mediana zysku: 8 063 USD
  • Mediana stopy zwrotu: 38%
  • Prawdopodobieństwo zyskownego roku: 89%

A tak wygląda mediana stopy zwrotu, w zależności od kapitału startowego:

I na tym zakończę temat związany z Monte Carlo. Konkludując: jeśli testy walk-forward układają się w klastry, generując dobre wyniki, to strategia ma spore szanse w rynku.

Testy dla wielu rynków i interwałów czasowych

Dla swoich potrzeb, robię testy klastrowych walk-forward dla zbioru kilku rynków na różnych interwałach czasowych (ang. timeframe). Nie oczekuję, że strategia zbudowana dla indeksu NASDAQ-100 będzie zarabiać na rynku tusz wieprzowych, ale chciałbym widzieć chociaż przeciętne zyski na podobnym rynku. Aby nie przedłużać, wykonałem serię testów dla danych dziennych dla kilku kontraktów terminowych na główne indeksy giełdowe w USA.

Generalnie każdy z rynków wygenerował zyski. Liczba zyskownych transakcji i Profit Factor dla każdego rynku jest satysfakcjonujący. Wyniki kwotowe nie mogą być wprost porównane, ponieważ kontrakty terminowe mają różną wielkość, niekiedy znacząco (vide E-mini Dow Jones vs E-mini S&P MidCap 400).

Zwrócić uwagę należy na tzw. maksymalne obsunięcie na linii kapitału intra-day. Mamy strategię działającą na dziennych świecach. Od otwarcia, do zamknięcia pozycji może upłynąć kilka dni. Jeśli mierzyć obsunięcie tylko według końcowego wyniku transakcji, nie zauważymy ryzyka, które występowało zanim zamknęliśmy określoną pozycję. Przykładowo pozycja otwarta na 4 dni wygenerowała zysk 2 000 USD. Ale w międzyczasie rynek mógł iść mocno przeciwko nam, np. na poziom -10 000 USD — możliwe tym bardziej, że nie mamy sztywnego stop lossa w naszej strategii.

Problem ten jest może mniejszy, gdy w portfelu mamy więcej nieskorelowanych strategii. Ale jeśli ktoś naiwnie liczy, że jeśli maksymalne obsunięcie (w wersji nie intra-day) wynosiło 15 000 USD w symulacji to zarazem najczarniejszy scenariusz jaki nas czeka w realu, to się może rozczarować. I to bardzo srodze, gdy jego portfel ma wartość np. tylko 20 000 USD. I to nawet w sytuacji, gdzie strategia finalnie zarabia. W międzyczasie może zabraknąć na pokrycie depozytów zabezpieczających i gra zakończy się margin call’em, czyli awaryjnym uzupełnieniem konta w kasę albo siłowym zamknięcie pozycji przez brokera.

Nie piszę o przetrzymywaniu, czy literacko pisząc, kiszeniu stratnych pozycji. Mowa o sytuacji, gdzie nie pada warunek zamknięcia pozycji, a rynek ostro idzie w drugą stronę. Mamy tu na podorędziu, przy skalowaniu, dwie pozycje kontraktowe — w przypadku kontraktów na NASDAQ-100, przy obecnej wycenie, kontrolujemy pozycję o wielkości ponad 260 000 USD. Warto mieć tego świadomość zawczasu.

Wnioski

Jeśli dotrwałeś do tego momentu to gratuluję. Przeszliśmy niemal całą drogę w procesie budowy strategii. A tak przynajmniej wydawać się może większości z nas. W końcu przecież testy wypadły niemal śpiewająco. Czas zarabiać pieniądze…

Tak, to prawda — strategia ma potencjał i spore szanse na powtórzenie chociaż w części wyników, które widzieliśmy w testach. Tak, w części, ponieważ to co widzimy w symulacji jest w pewnym sensie iluzją. Rzeczywistość bywa zwykle bardziej szorstka. Pomimo najlepszych starań, to co tam widzimy zawsze będzie obarczone grzechem dopasowania modelu (strategii) do danych historycznych. Co gorsza — rynki ewoluują. Jeśli coraz więcej i więcej uczestników rynku będzie wykorzystywać tę konkretną metodę, jej rynkowa przewaga będzie ulegać erozji w czasie.

Mam nadzieję, że udało mi się namacalnym przykładem udowodnić, że proste rzeczy mogą być efektywne. Zwróć uwagę: strategia jest banalna, ale warsztat, którym już ją obrabiamy, wymaga nieco zachodu. Jeśli jednak zależy Ci na kapitale, który angażujesz, musisz zrozumieć, że giełda to biznes — nie ma darmowych obiadów.

Inkubacja

O handlu papierowym, zwanym też inkubacją, mówiłem w podcaście oraz wspomniałem w prezentacji. W skrócie chodzi o to, że po zbudowaniu i wytestowaniu strategii, dobrze jest powstrzymać się z natychmiastowym wejściem nią na rynek. Okres ten może trwać od kilku tygodni, do nawet kilku miesięcy. Dzięki temu mamy możliwość „ochłonięcia” po oglądaniu ładnych wyników, jakie wygenerował nam backtest. Jest to taki zawór bezpieczeństwa, że nawet jeśli coś schrzaniliśmy na etapie budowy, to mamy szansę to sprawdzić na realnym rynku, ale bez angażowania realnego kapitału.

Jeśli strategia w tym okresie nie będzie działać w zgodzie z tym co zakładaliśmy i co wykazały testy, to poza straconym czasem, uratowaliśmy kapitał. W drugą stronę, może okazać się, że strategia od razu w trakcie inkubacji zaczęła pięknie zarabiać, a my poczujemy straconą okazję do zarobku. Lepiej stracić okazję, niż pieniądze. Myślę, że zbyt pochopne działania rynkowe są na szczycie powodów przez które ludzie tracą na rynkach finansowych pieniądze. Każdy z nas przez to przechodzi i warto się nad tym zastanowić.

Alternatywnie można też uruchomić handel na minimalnym kapitale. W przypadku instrumentów jak CFD jest to prostsze do osiągnięcia, niż na lewarowanych rynkach regulowanych, gdzie często nawet wartość jednego kontraktu (minimalnej jednostki, którą możemy handlować) opiewa na kwotę liczoną w dziesiątkach tysięcy dolarów.

Bardziej zaawansowani i doświadczeni mogą próbować skrócić lub wręcz wyeliminować etap inkubacji poprzez zarezerwowanie 6-12 miesięcy danych na „symulację przyszłości”. Jest to tak zwany okres super-out-of-sample (SOOS). Zalecam jednak mimo wszystko wstrzemięźliwość, choć dobrze wiem, jak nie jest to proste. 🙂

Wdrożenie na rynek i konserwacja

W moim przypadku strategie działają w większości w sposób automatyczny na platformie TradeStation (korzystam też z innych brokerów, gdzie handel nie jest automatyzowany). Ma to tę zaletę, że nie muszę śledzić na bieżąco rynku. Sprawdzam raz/dwa razy w ciągu dnia czy wszystko jest OK, a raz w tygodniu restartuję cały komputer i aktualizuję system operacyjny. Gdy jestem w podróży do komputera loguję się zdalnie. W sytuacji awaryjnej pozycjami mogę zarządzać też bezpośrednio ze strony brokera.

To wszystko nie oznacza, że od razu musisz automatyzować swój trading. Od lat obserwuję, że początkujący traderzy za swój cel podstawowy stawiają sobie budowę robota. To złe podejście, ponieważ nasz podstawowy akcent powinien być stawiany na wypracowanie przewagi rynkowej. Jest to dużo trudniejsze do osiągnięcia niż automatyzacja strategii, co jest zabiegiem czysto technicznym i w wydaniu domowym nie wypracuje nam przewagi rynkowej niczym HFT.

W ramach konserwacji, to o czym musimy pamiętać, to ponowna optymalizacja parametrów, jeśli korzystaliśmy z testów walk-forward. Sama strategia nie ulega zmianie, natomiast zgodnie z „harmonogramem” walk-forward co ustalony okres czasu powinniśmy naszą strategię ponownie optymalizować, uwzględniając najnowsze dane. W naszym przypadku, jak już wspominałem, okienko IS = 504 dni, a OOS = 126 dni. Znaczy to, że co 126 dni bierzemy ostatnie 504 dni notowań i optymalizujemy strategię. Tak dobrane parametry służyć nam mają do kolejnej optynalizacji za 126 dni.

Wycofanie z rynku

Tu sprawa jest prosta i omówiłem już ją w podcaście. Musimy ustalić kiedy strategia będzie wycofana z rynku w przypadku, gdy jej zachowanie zacznie odbiegać od tego co w testach. Niech to będzie kryterium, które spełnia Twoje oczekiwania. Ważne jest to, aby się tego później trzymać. Możemy więc powiedzieć sobie: jeśli strategia będzie miała obsuwę na poziomie 15 000 USD, odcinamy ją z rynku. Oczywiste jest, że jeśli obniżymy ten próg, to prawdopodobieństwo jej wyłączenia wzrośnie. Można to było zaobserwować w przypadku symulacji Monte Carlo, gdzie dla różnych wartości portfela badaliśmy prawdopodobieństwo jego bankructwa.

Nie powinniśmy oczekiwać, że strategia wróci do zarabiania, i trzymać ją nadal w rynku, wbrew wcześniejszym ustaleniom. Warto natomiast mieć ławkę rezerwową z innymi strategiami, które obecnie nie są w rynku.

Tu słowo przestrogi: odradzam doraźnego modyfikowania strategii, celem „poprawienia” słabych wyników. To, co zwykle uzyskamy, to tzw. efekt pewności wstecznej (ang. hindsight bias).

Kod źródłowy strategii

Jeśli interesuje Cię kod źródłowy opisywanej strategii, możesz go pobrać za darmo klikając w przycisk poniżej. Strategia zaimplementowana jest w dwóch językach: EasyLanguage (na platformę TradeStation/MultiCharts) oraz AFL (AmiBroker). Nie martw się — strategia jest tak banalna, a języki programowania wysokiego poziomu, że każdy nie-programista jest w stanie ją ogarnąć w mgnieniu oka.

Jeśli interesuje Cię kod w języku MQL, niestety nie pomogę Ci, ponieważ nie korzystam z MetaQuotes.

Pobierz kod źródłowy

Zakończenie

Do tego miejsca dotarli już chyba najwięksi twardziele. 😉 Spokojnie, nieprędko napiszę coś ponownie, tym bardziej, że tematyka raczej niszowa.

Co dalej?

To był tylko przykład budowy strategii. Zachęcam do eksperymentów i otwartego umysłu. 🙂 Zamiast ograniczać się do tego co powyżej, mamy wiele możliwości, np.:

  • Sprawdzić zachowanie strategii dla innych interwałów czasowych, innych (niestandardowych) konfiguracji sesji (np. gra tylko w określonych godzinach w trakcie sesji)
  • Poeksperymentować z innymi rynkami (w tym ETF, gdzie skuteczność strategii może być większa)
  • Modyfikacja metod wejścia/wyjścia
  • Zarządzanie pozycją — zamiast skalowania na dwie części jak w oryginale, spróbować można innego podejścia skalowania jak model 2/3/5: pierwsza pozycja 20% kapitału, druga 30% kapitału, a trzecia 50%, odpowiednio dla RSI na poziomie 30, 25, i 20.
Mój wywiad z Tomem Basso

Jack Schwager w znanej serii książek Czarodzieje Rynku przyznał, że to właśnie Tom Basso wywarł na nim największe wrażenie pośród wszystkich traderów.

Czytaj dalej →

Osobiście większość własnych krótkoterminowych strategii buduje poprzez modyfikacje innych strategii. Nic w tym złego. Nie warto natomiast komplikować za bardzo wszystkiego: dodawanie n-tego filtra i n-tego warunku wejścia/wyjścia z pozycji może poprawić wyniki, ale i podniesie ryzyko nadmiernego dopasowania modelu do historycznych notowań.

Moja rada wynikająca z wciąż niewielkiego doświadczenia: to co widzieliśmy w testach może, ale nie musi przypomnieć realne zachowanie. Oczekuj, że obsunięcia kapitału będą większe, będą trwały dłużej i pojawią się szybciej, niż tego oczekujesz. Rzeczy takie jak Flash Crash w 2010 roku zdarzają się na serio — warto zastanowić się jak byśmy przez to przeszli, jeśli w ogóle byśmy przeszli. Dla niektórych mogłoby to być ostatnie karmienie kaczek w życiu, bo okazało się, że to łabędź, czarny łabędź… 😉

To co tu zawarłem w tym artykule jest zaledwie muśnięciem tematu. Zwróć uwagę, że jest wielu traderów z dobrymi wynikami, którzy swoje krótkoterminowe strategie budują bez wykorzystania metod jak powyżej. Ale mam nadzieję, że dla mniej zaawansowanych okaże się dobrym punktem wyjścia do swojej drogi.

I na koniec raz jeszcze podkreślę, że kluczem profesjonalnego tradingu i inwestowania jest myślenie w kategorii portfela. Połączenie wielu pomysłów, przy kontroli poziomu korelacji, jest bardzo ciekawym kierunkiem do eksploracji i poszukiwania własnej przewagi rynkowej. Dużo bardziej, niż usilne poszukiwanie idealnej strategii, bądź idealnych parametrów.

Zaproszenie do dyskusji

Serdecznie zapraszam Cię do komentowania i zadawania pytań, bezpośrednio na tej stronie poniżej, lub na mojej stronie na Facebook’u lub moim profilu Twitter’owym.

Alternatywnie możesz zadać pytanie głosowe, nagrywając się na SpeakPipe. Pamiętaj tylko, że masz 90 sekund na nagranie 🙂

Bardzo zależy mi na Twoim głosie, za który już teraz z góry bardzo dziękuję 🙂

Footnotes

  1. Zwracam uwagę na to, ponieważ w planach mam również prezentację strategii średnio/długoterminowej opartej na paradygmacie tzw. podążania za trendem (ang. trend following). Tam akcenty w procesie budowy i testowania strategii są rozłożone inaczej.
  2. Polecam mój wywiad z Lindą Raschke, w którym przyznała, że nie jest w stanie podążać w 100% za mechaniczną strategią transakcyjną. Jej przewaga wynika jednak z ogromnego doświadczenia i rozumienia mechaniki rynkowej. Obrazowo można powiedzieć, że strategię ma w głowie, co potwierdził jej dobry znajomy — Perry Kaufman — mówiąc, że Linda działa na rynku niczym algorytm.
  3. Wskaźnik RSI (ang. Relative Strength Index) to popularna metoda mierzenia tzw. wykupienia/wyprzedania rynku. Wskaźnik liczony jest w ten sposób, że dla badanego okresu (np. 5 dni), dzielimy średni zysk przez średnią stratę. Zyski i straty dla poszczególnych dni liczone są zwykle pomiędzy cenami zamknięcia (np. jeśli wczoraj cena zamknięcia wynosiła 100, a dziś 101, to mamy 1% zysk, 0% straty). W przypadku RSI wynik jest znormalizowany (oraz wygładzony), tak by wyniki zawierały się w przedziale 0-100. Wskazanie RSI na poziomie 0 oznacza, że mieliśmy spadek w całym okresie (np. wszystkie sesje były spadkowe -- wyprzedanie rynku), lub rynek stał w miejscu. Analogicznie, gdy mamy wskazanie 100, znaczy to, że cały okres był wzrostowy (wykupienie rynku).
  4. Problem można rozwiązać składają zlecenie np. na minutę przed zamknięciem rynku.
  5. Mówimy o strategiach krótkoterminowych, gdyż wręcz przeciwnie ma się to przy klasycznych strategiach typu trend following. Ale nawet przy podejściu krótkoterminowym są traderzy, jak np. Andrea Unger, którzy w testach traktują zarządzanie pozycją jako element przewagi strategii i wprost ją z nią integrują od samego początku (czyli jak u nas w tym artykule).
  6. Nie znaczy to, że musisz automatyzować swoje strategie, tym bardziej, jeśli funkcjonują na interwale dzeinnym, jak w opisywanym przypadku. Jest to często tylko dodatek, a nie cel sam w sobie, jeśli chodzi o trading. Naszym celem numer jeden jest znalezienie przewagi rynkowej. Nie uprawiamy tu HFT.
  7. Kontrakty terminowe, w odróżnieniu od np. akcji, mają konkretną datę dostawy, po której notowania wygasają. Wynika to wprost z charakteru tego instrumentu, które historycznie powstał właśnie na potrzeby zabezpieczenia ryzyka. Na przykład rolnik może, chcąc zabezpieczyć ryzyko sprzedaży kukurydzy w przyszłości, sprzedać dziś kontrakt za konkretną cenę. Z punktu widzenia tradera rodzi to jednak potrzebę połączenia ze sobą serii kontraktów, tak by tworzyły one nieprzerwaną historię. Nie wnikając w szczegóły, bo można by o tym napisać odrębny artykuł, pomiędzy seriami kontraktów występują luki (dla dociekliwych polecam sprawdzić zjawiska takie jak contango i backwardation). Szczególnie duże luki mogą występować przy niektórych kontraktach towarowych, np. na gaz. Wynika to m.in. z wysokich kosztów jego przechowywania – kupno dziś gazu, z dostawą za np. pół roku musi w cenie to odzwierciedlać. Z tego powodu dane muszą być korygowane wstecznie, tak by zniwelować luki cenowe, które realnie nie występują, ponieważ są pomiędzy różnymi seriami kontraktów. Ma to znaczenie dla tradera, którego pozycja otwarta jest na przestrzeni więcej niż jednej serii, gdzie występuje potrzeba tzw. rolowania pozycji – przeniesienia na kolejną serię. W skrajnych sytuacjach niekorygowane dane mogą totalnie zaburzyć na wykresach długoterminowe, wieloletnie trendy.
  8. Bardzo ważne, aby nie próbować do bólu różnych okresów, aż wyniki będą satysfakcjonujące. Okres 2 lat powinien wstępnie pokazać, czy zaimplementowany pomysł ma przewagę na rynku.
  9. Dla pozycji otwieranych i zamykanych tego samego dnia wielkość depozytu może być znacznie mniejsza. U nas jednak ten warunek nie jest spełniony.
  10. SMA (ang. Simple Moving Average) -- średnia cen (np. zamknięcia) za wybrany okres. Np. SMA(200, Close) oznacza średnią cen zamknięcia za okres 200-dni.
  11. Należy pamiętać, że strategia w różnych okresach czasu ma prawo generować różne wyniki, bo zmieniają się warunki rynkowe i wartość kontraktu. Rozpiętość wartości jednego kontraktu NQ na przestrzeni ostatnich 19 lat wahała się pomiędzy mniej niż 20 000 USD, a niemal 160 000 USD!
  12. Twardziele mogą zaprzęgnąć do pracy np. algorytmy genetyczne, żeby było jeszcze prościej i szybciej. Żebym nie został źle zrozumiany: idea tej klasy algorytmów jest nęcąca. Pamiętam do dziś jak na studiach informatycznych, ponad 15 lat temu, byłem zafascynowany koncepcją tchnięcia pierwastka inteligencji w bezduszne komputery. Niemniej jednak należy stosować je z ogromną rozwagą i zrozumieniem tego, co się robi. Nie można traktować algorytmów genetycznych jako drogi na skróty.
  13. Robert Pardo w 2008 roku wydał świetną książkę o testowaniu i optymalizowaniu strategii transakcyjnych pt. The Evaluation and Optimization of Trading Strategies. Omówił w niej m.in. podejście testów walk-forward, którego jest twórcą. A Perry Kaufman napisał do tej książki wstęp, chociaż sam nie korzysta z tej metodologii. Świat jest mały.
  14. Można też stosować tzw. podejście anchored, czyli zakotwiczone. Polega ono na tym, że o ile okno OOS zawsze ma stała wielkość, to okno IS zakotwiczone jest właśnie od początku testowanego okresu. W ten sposób zakres danych, na których optymalizowane są parametry jest coraz dłuższy. Osobiście mnie to podejście nie przekonywało i nie widziałem w tym wartości dodanej. Robert Pardo również podziela taką opinię.
  15. Nie chcę się narażać, ale dla mnie symulacja Monte Carlo jest nieco przereklamowana w kontekście tradingu. Być może przy naprawdę dużej liczbie transakcji (tysiące) i małego zakresu czasu, może to być bardziej przydatna forma testu. Problemem jest na przykład to, że transakcja zawarta na NASDAQ-100, gdy ten był przy poziomie 1000 punktów, versus, gdy jest na poziomie 7000 punktów, ma się jak pięść do nosa, gdy zestawić je razem przypadkowo jedna po drugiej. Nie należy też ufać, że Monte Carlo ustrzeże nas od zbytniego dopasowania modelu do danych. Ze znanych traderów z tego typu analizy korzysta np. Kevin Davey, który gościł u mnie w podcaście.
Subskrybuj
Powiadom o
guest

24 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments

🚀 Ruszył polski portal ETF-ów - Atlas ETF!