sobota, 7 kwietnia 2018

Jak rzetelnie sprawdzić czy dana strategia działa?

Ostatnio napotkałem taki artykuł na bossafx.pl: Czy analiza techniczna może być skuteczna?, który tematycznie przypomina mój artykuł z 2011 Czy analiza techniczna działa? . Chociaż to tylko dwa przykłady, to ilustrują one niespójność podejść do tego samego problemu. O ile bossa zastosowała test serii, który testuje po prostu niezależność kolejnych obserwacji, to ja użyłem schematu Bernoulliego, który pozwala wykryć systematyczność powtarzania się danego zjawiska. Niestety czytelnik w ten sposób traci jasność, który sposób jest poprawniejszy. Odpowiedź jest prosta: moje podejście jest poprawne, natomiast bossy błędne. Jeśli mówimy akurat o analizie technicznej, to liniowa autokorelacja czy to stóp zwrotu czy to samych ich znaków, nie jest istotna dla AT. Przykładowo: wsparcia, opory, punkty odbicia lub formacje w ogóle nie pociągają za sobą konieczności jakichkolwiek autokorelacji. Mogą się pojawić spontanicznie pomiędzy przypadkowymi ruchami, a gdy się pojawią, to ich natura jest nieliniowa. Dlaczego więc bossa stosuje niewłaściwy test dla AT? Wydaje mi się, że to wynika z takiego prostackiego rozumowania:
1) test serii to test na sprawdzanie losowości procesu,
2) jeśli AT działa to znaczy, że zmiany są nielosowe.
Wniosek: jeśli test serii nie wykrywa zależności, to AT nie działa, a jeśli wykrywa, to działa. Oczywiście to jest kompletny nonsens i pomieszanie z poplątaniem. Nielosowość ma różne wymiary, a test serii wykrywa tylko ten najprostszy, podobny do zwykłej autokorelacji. Test serii jest mocniejszy od autokorelacji w tym sensie, że nie mają dla niego znaczenia wartości odstające, grube ogony czy asymetria rozkładu. Wykrywa jedynie wzory w seriach znaków. 

Jeżeli formacje AT nie są zwykłym złudzeniem, to odkryć je mogą tylko zaawansowane metody, jak np. sieci neuronowe, które są w stanie wychwycić nietrywialne wzory. Prostszym i bardziej dostępnym narzędziem jest także regresja nieparametryczna.

Ale chciałem mówić nie o samej AT, ale szerzej o tym jak wszystkie strategie oceniać w kontekście skuteczności. Oczywiście jest to tylko mały wycinek problemu selekcji, ale warto go poruszyć. Otóż wspomniałem na początku o schemacie Bernoulliego. Schemat ten to po prostu taka zbiorcza statystyka sukcesów i porażek danej strategii. Głównym pomysłem, od którego zaczynamy, jest początkowe (racjonalne) założenie, że wyniki sprawdzanej strategii są czysto przypadkowe, tzn. prawdopodobieństwo jej sukcesu jest równe prawdopodobieństwu porażki, a więc wynosi 50%. Ten pomysł przenosimy do rzeczywistości empirycznej w taki sposób: przetestowaliśmy naszą strategię na jakimś walorze i okazało się, że na 27 przypadków wystąpienia reguły (strategii), 19 z nich sprawdziło się. Przykładowo, nasza strategia to kupienie waloru, gdy zostanie przebita linia trendu spadkowego. Sukces to sytuacja, gdy po przebiciu kurs dalej rośnie. Porażka to sytuacja, gdy linia została przebita, ale kurs za chwilę się cofnął i dalej zaczął spadać. W naszym teście wystąpiło 27 linii trendu spadkowego (np. o długości co najmniej 2 miesiące jak w moim teście), która została w końcu przebita. Sukcesem było to, że 19 razy kurs przebił tę linię i dalej rósł. W pozostałych przypadkach po przebiciu wrócił do spadków. Przypominam, że zakładamy od początku, iż wszystkie sukcesy i porażki są tu przypadkowe, tzn. każde zdarzenie ma szansę 50%.
Kolejnym ważnym punktem jest pytanie, ile wynosi prawdopodobieństwo, że wystąpi dokładnie 19 przypadkowych sukcesów na 27 prób. Aby je obliczyć należy zastosować wzór Bernoulliego (funkcję  prawdopodobieństwa rozkładu dwumianowego):

(1)

W naszym przypadku p = 1/2, k = 19, n = 27. Po podstawieniu dostaniemy P(27) = 1,65%.

Na 27 prób 19 przypadkowych sukcesów (tj. 19/27 = 70% obserwacji) może się udać z prawdopodobieństwem 1,65%. Kolejnym krokiem jest sprawdzenie hipotezy zerowej czy ta szansa jest rzeczywiście przypadkowa, jak to od początku zakładamy. Musimy podjąć decyzję czy 1,65%  to dużo czy mało. Jak? Porównujemy uzyskane p-value, tj. wartość dystrybuanty rozkładu dwumianowego, z założonym poziomem istotności. Ilustrując prosto sprawę, zacznę od rozkładu Gaussa. Wiadomo, że w rozkładzie normalnym ponad 95% obserwacji znajduje się w zakresie średnia + 2 odchylenia standardowe. Jest to z pewnością powód, dla którego poziom istotności określa się na 5% jako względnie bezpieczne przybliżenie błędu 1 rodzaju, tj. odrzucenia hipotezy zerowej, która jest prawdziwa (w naszym przypadku odrzucono by losowość). Innymi słowy zakres (średnia plus 2 odchylenia standardowe) uznajemy za wystarczający do przybliżenia pełnej losowej zbiorowości (95% przybliża 100%), a to oczywiście  oznacza, że to co leży poza tym zakresem musi stanowić akceptowalny błąd (nieuwzględnienia możliwości wystąpienia pewnych skrajnych, czysto losowych zdarzeń). To znaczy, 5 na 100 zdarzeń czysto losowych będzie na tyle nietypowych, że wydawać się będą nielosowe i dlatego za takie je uznamy - to jest właśnie błąd pierwszego rodzaju.

Rozkład dwumianowy bardzo szybko przekształca się w rozkład normalny, więc 5% istotności jest dla niego też odpowiednie. Czyli 5% jest pewnym punktem odniesienia do porównania przypadkowości sukcesów. Ale nie możemy porównywać poprzednio obliczonego 1,65% do 5%, bo ta pierwsza wielkość to prawdopodobieństwo tylko konkretnej liczby 19 sukcesów, podczas gdy poziom 5% odnosi się do wszystkich teoretycznych, mało prawdopodobnych sukcesów (skoro wszystko poza główną masą 95%, to wszystko). Stąd musimy dostosować nasze obliczenia do tej kumulacji. Wyobrażamy sobie, że nasz test powtarzamy wielokrotnie w innych wymiarach przy ciągle zmieniających się danych giełdowych. Liczba sukcesów będzie się wtedy zmieniać, czasem będzie więcej sukcesów, czasem mniej - ułoży się to losowo. W ten sposób uzyskamy rozkład częstości i teoretycznie dwumianowy rozkład prawdopodobieństwa. Mając strukturę tego rozkładu, zadajemy pytanie jakie jest prawdopodobieństwo, że co najmniej 19 sukcesów będzie przypadkowych. Aby odpowiedzieć, należy zsumować wszystkie prawdopodobieństwa wystąpienia k, k+1, k+2, .... n sukcesów, tzn. od 19 do 27. W ten sposób uzyskamy dystrybuantę rozkładu. Najłatwiej to zrozumieć porównując dwa grafy poniżej. Pierwszy to "efekt reguły 2 sigm"* z poziomem 5% istotności na krańcach:


A drugi to prawdopodobieństwa dla kolejnej k-tej liczby sukcesów. Im większe k, tym szansa na sukces spada, bo po prostu większa liczba sukcesów staje się mniej prawdopodobna.


Wzór (1) stosujemy dla k = 19... 27 i sumujemy:


Suma to właśnie p-value. Jak powiedziałem wyżej, porównujemy p-wartość z poziomem istotności 5%, tj. 0,0261 < 0,05, ale co to oznacza? Na grafie poniżej obydwie wielkości możemy przeanalizować:



5% to teoretyczne (przyjęte) ryzyko odrzucenia "hipotezy przypadkowości" w sytuacji, gdyby była ona prawdziwa. W konsekwencji prowadziłoby to przyjęcia hipotezy alternatywnej, tzn. przyjęcia testowanej strategii, która w rzeczywistości byłaby nieskuteczna. Ale empiryczne ryzyko tego błędu okazuje się niższe od 5%: szansa, że hipoteza zerowa jest prawdziwa wynosi tylko 2,6% - odrzucamy hipotezę, że 19 sukcesów to tylko przypadek. Jest to w zasadzie najważniejsza konkluzja z tej analizy.

Na koniec - w Gretlu całą opisaną procedurę możemy wykonać bardzo szybko. Aby wyznaczyć p-wartość, wchodzimy w Narzędzia -> 'Wyznaczanie wartości p' i wybieramy rozkład dwumianowy. Mamy 3 pola do wpisania. W pierwszym, Prob, wpiszemy dla naszego przykładu 0,5, bo to jest pr-stwo sukcesu dla hipotezy zerowej (czyli losowości). Liczba (wszystkich) doświadczeń = 27. Za wartość wpiszemy liczbę sukcesów danej strategii, tj. 19:

Po akceptacji dostaniemy:


Szybko zauważymy, że wystarczy dodać pierwsze i ostatnie Prob(x): 0,00957865 + 0,0165408 = 0,02611945. To jest dokładnie nasza p-value, które wcześniej ręcznie obliczyłem. Czyli tak samo jak wcześniej ją porównujemy z poziomem istotności i dochodzimy do wniosku, że hipotezę zerową należy odrzucić i przyjąć hipotezę o "zyskowności" strategii.

* To nie do końca jest efekt reguły 2 sigm, bo zauważmy, że 5% obserwacji musi rozkładać się na obydwa ogony rozkładu, a nie tylko prawy. W rzeczywistości więc mamy poziom istotności 2,5% po lewej i po prawej stronie rozkładu. Oznacza to, że powinniśmy zastosować 2,5% zamiast 5% istotności, jeśli badamy hipotezę tylko prawego ogona. Mimo to używamy 5% na pojedynczym ogonie, co technicznie oznacza 10% istotności (5% po lewej i 5% po prawej). Innym wyjaśnieniem brania 5% może być założenie, że rozkład jest niesymetryczny - występuje tylko prawy ogon, a nie lewy. Ma to sens, bo w ten sposób zakładamy, że strategia może przynieść albo losowo przeciętne wyniki (środek rozkładu) albo losowo bardzo dobre wyniki (prawy ogon), natomiast nie może przynieść bardzo złych wyników, tzn. gorszych niż losowo przeciętne (lewy ogon). Warto tu przypomnieć, że 5% istotności może mieć także zastosowanie dla niesymetrycznych rozkładów, o czym już kiedyś pisałem (zob.  Jak daleko możesz się odchylić? ).

środa, 4 kwietnia 2018

3-miesięczna cykliczność (sezonowość?) WIG

Mimo iż takie testy jak X-12-ARIMA czy TRAMO-SEATS nie wykazują sezonowości w miesięcznych szeregach stóp zwrotu WIGu, to zauważyłem, że analiza spektralna wychwytuje pewną cykliczność, ściślej 3-miesięczną. Wziąłem do sprawdzianu miesięczne dane WIG w okresie 01.2010-03.2018 (stooq.pl):


Stopy zwrotu na pierwszy rzut oka wydają się czysto przypadkowe:


Co więcej, w stopach tych nie występuje w ogóle autokorelacja:


Może trochę zaskakującym być, że test ADF-GLS wskazał niestacjonarność stóp, podczas gdy KPSS czystą stacjonarność. Możliwe, że chodzi tu nie tyle o zmienność średniej, ale wariancji - w artykule Czy oczekiwane stopy zwrotu w ogóle się zmieniają? doszedłem do wniosku, że ADF-GLS wykrywa zmienność (niewarunkowej) wariancji w czasie oraz średniej, podczas gdy KPSS i ADF nadają się wykrywania zmian tylko w wartości oczekiwanej. Wariancja jest jednak kwestią odrębną i nie zajmuję się nią teraz.

Poddałem następnie stopy zwrotu analizie spektralnej. Oto wyniki:



Wyraźnie wybija się tu zaznaczona długość okresu = 2,65 m-cy, ok. 3 miesięcy. Tak wybijająca się wartość wydaje się świadczyć o występowaniu jakiegoś cyklu raz na kwartał. Oczywiście może być to przypadek, bo gretl nie wykonuje testu na istotność statystyczną tej cykliczności. Ale dodatkowo poddałem analizie spektralnej stopy zmian wolumenu WIG, który towarzyszył tym stopom zwrotu. Same stopy zmian wolumenu tak przebiegały:


Zarówno KPSS jak i ADF-GLS wskazał stacjonarność tej zmiennej. Można więc wykonać analizę spektralną. Oto jej wyniki:


W tym przypadku jeszcze wyraźniej wybija się jedna wartość świadcząca o cykliczności w obrotach giełdowych. I gdy spojrzymy na długość cyklu, to okazuje się ona być równa 2,88, czyli znów prawie 3 miesiące. Trudno uwierzyć, żeby to był przypadek.

Same zwroty nie korelują ze zmianami wolumenu. Ale sytuacja się zmienia, gdy porównamy siłę zmian, tzn. wartość bezwzględną albo kwadrat zmiennej. Na przykład kwadrat stopy zwrotu koreluje już z samymi stopami zmian wolumenu na poziomie 26,5% (i jest to istotne stat. przy p-value 1%). Korelacja ta jeszcze się zwiększa, gdy porównamy kwadraty stopy zwrotu z kwadratami zmian wolumenu - wzrasta do 30%.

Tak więc, pomimo iż na WIGu nie występuje miesięczna autokorelacja, to ukrywa się w nim kwartalna cykliczność powiązana z obrotami.

Dość naturalnym staje się pytanie w tym momencie o sezonowość kalendarzową. Sprawdziłem więc strukturę stóp zwrotu w każdym miesiącu oddzielnie. Wyniki zbiorcze można podsumować takim histogramem:


Pamiętajmy, że jest to niewielka liczba danych (poniżej 10-ciu obserwacji dla każdego miesiąca). Najgorszym kwartałem w tym zestawieniu są maj, czerwiec i lipiec (wszystkie ujemne), co chyba nie jest specjalnym zaskoczeniem. Zaznaczyłem w tej "grupie złych" także kwiecień, bo zaskakująco słabo wypadł w badanym okresie. Dodanie tego czwartego miesiąca zostaje jakby skompensowane poprzez odjęcie jednego miesiąca w ostatniej, także słabszej grupie, w której występują tylko 2 miesiące: listopad i grudzień.

P.S. W przedostatnim poście prognozowałem lekką poprawę na WIGu w marcu. Prognoza ta się nie sprawdziła, bo WIG znacząco spadł, niewiele mniej niż w lutym. Dlatego widać, że takie granie pod "sezon" obarczone jest ryzykiem.