Stop-loss to nie polisa: dlaczego poślizg potrafi zaskoczyć
Stop-loss ma opinię polisy ubezpieczeniowej: ustawiasz poziom i od tej chwili wiesz, ile najwięcej możesz stracić. To mit. Stop-loss robi jedno: po przekroczeniu Twojego poziomu wysyła na rynek zlecenie zamknięcia pozycji. Ceny, po której to zlecenie się wykona, nie obiecuje nikt. Różnica między ceną, którą założyłeś, a ceną, którą naprawdę dostałeś, to poślizg. W spokojny dzień wynosi tick lub dwa i łatwo go zignorować.
Problem w tym, że poślizg nie rośnie liniowo z nerwowością rynku. W ogonie rozkładu, tam gdzie mieszkają dni takie jak 15 stycznia 2015 albo marzec 2020, potrafi być wielokrotnością wszystkiego, co założyłeś. A w zwykłe dni działa jego druga postać: mikropoślizg, tick lub dwa na transakcję, nieobecny na żadnym wyciągu. Rzadkie zdarzenia potrafią zdecydować o przetrwaniu rachunku; codzienny mikropoślizg o tym, czy przewaga w ogóle istnieje.
Co stop-loss obiecuje, a czego nie
Mechanika jest prostsza, niż sugeruje nazwa. Stop-loss to uśpione zlecenie: czeka, aż rynek zahandluje na zadanym poziomie lub przez niego, i wtedy budzi się jako zlecenie rynkowe. Wykonanie zaczyna się od najlepszej ceny dostępnej po drugiej stronie arkusza i schodzi w głąb, poziom po poziomie. Jeśli na Twoim poziomie i tuż za nim nikt nie czeka z przeciwnym zleceniem, wykonanie zsuwa się dalej.
Na CME Globex, gdzie handluje MES, jest przy tym warstwa, o której mało kto wie: natywny stop giełdy to Stop with Protection. Po aktywacji zachowuje się jak zlecenie rynkowe, ale tylko w wyznaczonym przez giełdę paśmie ochronnym od ceny aktywacji; część, która się w nim nie wypełni, zostaje jako zlecenie z limitem na krańcu pasma. Pasmo ogranicza najgorszy pojedynczy fill, w zamian dokłada ryzyko, że w ekstremalnym ruchu wyjście będzie częściowe. Osobną warstwą jest platforma: część brokerów trzyma stop u siebie i dopiero po aktywacji wysyła na giełdę własne zlecenie, więc warto wiedzieć, czym stop jest w Twojej platformie naprawdę, natywnym zleceniem giełdy czy syntetykiem brokera.
Istnieje też wariant jawnie odwrotny, stop-limit: po aktywacji wystawia zlecenie z limitem ceny. Nie wykona się gorzej niż limit, ale może wykonać się częściowo albo wcale, a rynek, który ucieka zbyt szybko, zostawia wtedy pozycję otwartą i krwawiącą dalej. Skala jest więc ciągła: od zlecenia rynkowego (nieznana cena, wykonanie najpewniejsze), przez Stop with Protection (cena ograniczona pasmem, wykonanie już nie w pełni pewne), po stop-limit (cena trzymana, wykonanie najmniej pewne). Wersji z twardą gwarancją i ceny, i wyjścia nie ma w ofercie żadnej giełdy.
Tick po ticku: jak liczymy poślizg
Na MES najmniejszy krok ceny, tick, to 0,25 punktu warte 1,25 dolara. Załóżmy pozycję długą jednym kontraktem ze stopem na 5850,00. Cena przebija poziom, zlecenie się budzi, a najbliższe zlecenie kupna, na którym nasz wolumen mieści się w całości, stoi na 5849,50. Wykonanie: dwa ticki poniżej założenia, 2,50 dolara. Tyle kosztował poślizg tego jednego wyjścia.
Żeby te kwoty miały sens niezależnie od wielkości pozycji, przeliczamy je na jednostki R, czyli ryzyko zdefiniowane odległością wejścia od stopa. Przy typowym dla naszych setupów ryzyku czterech punktów R jest warte 20 dolarów, więc dwa ticki poślizgu to 0,125 R. Brzmi niewinnie. Zapamiętaj tę liczbę, wrócimy do niej przy mikropoślizgu.
Jedno doprecyzowanie: poślizg dotyka obu końców transakcji, bo wejście z rynku też bierze cenę z arkusza, nie tę z wykresu. W naszym modelu kosztów zakładamy konserwatywnie dwa ticki na całą rundę, wejście i wyjście łącznie. Fill z przykładu wyżej sam wyczerpałby ten budżet i właśnie dlatego traktujemy te dwa ticki jako założenie do pilnowania na danych, a nie pesymizm na wyrost.
Ogon: frank 2015 i marzec 2020
Piętnastego stycznia 2015 roku Szwajcarski Bank Narodowy bez ostrzeżenia zniósł minimalny kurs 1,20 franka wobec euro, którego bronił od ponad trzech lat. Kurs EUR/CHF runął z 1,20 poniżej parytetu, a w szczycie paniki frank był mocniejszy o około 30 procent. W danych opublikowanych później przez FXCM 21 sekund po przebiciu 1,20 jedyne dostępne kwotowanie leżało około tysiąca pipsów niżej (dane FXCM). Stop-lossy ustawione kilkadziesiąt pipsów od ceny wykonywały się więc setki pipsów dalej, bo między starą a nową ceną prawie nikt nie stał z przeciwnym zleceniem. Dzień później broker Alpari UK poinformował, że jest niewypłacalny. Klienci FXCM, wówczas największego detalicznego brokera walutowego w USA, zjechali na ujemne salda łącznie o 225 milionów dolarów, a broker przetrwał konieczność ich pokrycia tylko dzięki 300 milionom awaryjnej pożyczki (źródła: Bloomberg/swissinfo, CNBC). To rynek walutowy, nie futures, ale mechanizm jest uniwersalny: płynność potrafi zniknąć w sekundy, a wtedy stop przestaje ograniczać stratę i zaczyna ją tylko rejestrować.
Pięć lat później to samo pokazał rynek akcji. Między 19 lutego a 23 marca 2020 roku S&P 500 spadł o 34 procent w 23 sesje, najszybciej w historii; cztery razy w ciągu dwóch tygodni handel na rynku kasowym wstrzymywały automatyczne bezpieczniki, a indeks strachu VIX przekroczył 80 (źródło: kronika krachu 2020). Kontrakty terminowe na S&P 500 handlują prawie całą dobę, więc problem nie polegał na tym, że nocą nie miał kto wykonać stopa. Polegał na płynności przy limicie: nocny handel futures ma twardy limit spadku, wówczas 5 procent, i kurs wielokrotnie do niego dobijał (reguły limitów CME). Rynek przy limicie formalnie pozostaje otwarty, ale niżej handlować nie może; gdy brakuje zleceń kupna, stop czeka. Handel wraca, po rozszerzeniu limitów w sesji dziennej albo po wznowieniu po halcie, dopiero tam, gdzie znajdzie się płynność, a to potrafi być daleko za poziomem stopa. Co się wtedy dzieje, zależy od zlecenia. Natywny Stop with Protection wykona się najdalej na krańcu swojego pasma ochronnego; jeśli handel wrócił poza pasmem, reszta zlecenia zawiśnie jako limit i pozycja pozostanie otwarta na uciekającym rynku. Na Globex nawet zwykłe zlecenie rynkowe ma zresztą własne pasmo ochronne (Market with Protection), więc wykonania „gdziekolwiek, byle wyjść” nie da się założyć bez dodatkowej logiki brokera, który sam ponawia zlecenie. W skrajnym ruchu każda z tych dróg może zostawić niezamkniętą pozycję, a jeśli wyjście dochodzi do skutku, to po cenie z miejsca, w którym wróciła płynność. Zlecenie robi dokładnie to, co ma w specyfikacji. Tylko nie to, co obiecuje nazwa.
Wniosek z obu historii traktujemy jako regułę, nie anegdotę: poślizg jest nieliniowy. W spokojnym rynku stop realizuje się tick lub dwa od poziomu. W rynku w panice ten sam stop potrafi wykonać się kilkadziesiąt ticków dalej, bo głębokość arkusza, z której korzysta zlecenie rynkowe, właśnie wyparowała. Kto planuje ryzyko wyłącznie na podstawie spokojnych dni, planuje je dla rynku, którego w dniu kryzysu nie będzie. Więcej o tym, dlaczego rzadkie zdarzenia niosą nieproporcjonalnie duże skutki, piszemy w recenzji „Antykruchości” Taleba.
Mikropoślizg: ile R znika bez żadnej katastrofy
Ogon jest widowiskowy, ale rzadki. Mikropoślizg jest niepozorny i codzienny: te dwa ticki na rundę, 0,125 R przy ryzyku czterech punktów. Po stu transakcjach to 12,5 R oddane rynkowi wyłącznie za to, że wejścia i wyjścia były o włos gorsze od cen z wykresu. Dla skali: intraday na MES przewaga rzędu plus 0,1 R na transakcję po wszystkich kosztach to wynik, o który trzeba się mocno postarać. W tym rachunku założony poślizg już siedzi. Wystarczy jednak, że rzeczywista egzekucja okaże się o dwa ticki na rundę gorsza od założenia, a dodatkowe 0,125 R na transakcję zjada taką przewagę w całości. System, który nie mierzy poślizgu jawnie, nawet nie wie, że to się dzieje.
Im ciaśniejszy stop, tym gorzej, bo te same dwa ticki stanowią większą część mniejszego ryzyka. Przy stopie wartym dwa punkty sam poślizg to już 0,25 R, a łączny koszt rundy w jednostkach R, prowizja i poślizg razem około 3,80 dolara, rośnie do 0,38 R. Przy symetrycznej wypłacie brutto, wygrana plus 1 R albo przegrana minus 1 R przed kosztami, samo wyjście na zero wymaga wtedy 69 procent trafnych transakcji, bo netto wygrana daje plus 0,62 R, a przegrana kosztuje minus 1,38 R. Pełny rachunek kosztów, razem z ich asymetrią, rozpisaliśmy w tekście o walidacji backtestu.
Jest jeszcze jeden powód, dla którego mikropoślizg umyka uwadze: nie ma go na żadnym wyciągu. Prowizję widać w rozliczeniu co do centa. Poślizg to cena, której nie dostałeś, więc żaden dokument go nie pokaże. Jedyny sposób, żeby go zobaczyć, to samodzielnie porównywać cenę decyzji z ceną wykonania. Robimy to dla każdej transakcji.
Stop a poziomy, na które patrzą wszyscy
Poślizg to koszt wykonania stopa. Osobną sprawą jest to, jak często stop w ogóle się uruchamia, a na to wpływa miejsce, w którym stoi. Poziomy widoczne dla wszystkich, poprzednie maksimum dnia, minimum nocnej sesji, okrągłe liczby, gromadzą skupiska zleceń obronnych, bo tysiące uczestników patrzy na ten sam wykres. Popularne wyjaśnienie mówi, że takie skupiska bywają celem: wybicie poziomu uruchamia cudze stopy i tworzy płynność, na której można oprzeć transakcje w przeciwną stronę. Traktujemy to jako roboczą hipotezę, nie ustaloną mechanikę rynku, bo z samego ruchu ceny nie da się odczytać niczyich intencji. Mierzymy za to rzecz sprawdzalną: w danych z fałszywych wybić zapisujemy osobną cechą, jak głęboko cena weszła ponad poziom, zanim zawróciła.
W specyfikacji naszych setupów odległość stopa od takich poziomów jest jawnie zdefiniowaną zmienną, a nie miejscem wskazanym na oko. Czy stop odsunięty od struktury rzeczywiście rzadziej pada ofiarą ruchu, po którym rynek natychmiast wraca w zakładanym kierunku, to pytanie empiryczne i tak je traktujemy: jako parametr do zbadania na własnych danych, nie jako regułę do ogłoszenia. To inne ryzyko niż poślizg, nie „ile stracę na wykonaniu”, tylko „jak często wyjście uruchomi się niepotrzebnie”. Formalnie to nie jest koszt egzekucji, tylko własność reguły wyjścia, dlatego mierzymy je osobno. Na wynik systemu wpływają jednak oba zjawiska i żadnego z nich nie zgadujemy.
Jak to mierzymy, zamiast zgadywać
W całym systemie obowiązują dwie zasady. Pierwsza dotyczy symulacji: poślizg jest w niej jawnym parametrem, nie domysłem. Każda testowa transakcja dostaje z góry dwa ticki kosztu egzekucji, a osobne pole w danych zapisuje, czy stop w ogóle miałby szansę się wypełnić. To pole służy do kalibracji założenia przy przeglądzie wyników, nie jest drugim kosztem doliczanym do tej samej transakcji. Test, który tego nie robi, po cichu przyjmuje poślizg zerowy, czyli wynik lepszy, niż rynek kiedykolwiek odda.
Druga dotyczy handlu na żywo: dla każdej transakcji zapisujemy różnicę między ceną decyzji a ceną wykonania, po obu stronach. To cenowa część metryki implementation shortfall; pełna wersja obejmuje też prowizje, koszt opóźnienia i koszt niewykonanej części zlecenia, które w naszym rachunku liczymy osobno. Oba strumienie danych spotykają się w jednym punkcie kontrolnym: jeśli zmierzony poślizg jest systematycznie większy od założonego, podnosimy założenie w modelu kosztów. Kierunek tej korekty jest zawsze ten sam, od zmierzonej rzeczywistości do założeń modelu, nigdy odwrotnie.
Z tego tekstu nie wynika, że stopy szkodzą. W naszym systemie stop-loss jest obowiązkowym elementem każdej specyfikacji setupu, bo pozycja bez zdefiniowanego wyjścia jest gorsza od każdego poślizgu, jaki widzieliśmy w danych. Wynika z niego coś węższego i bardziej praktycznego: polisa obiecuje odszkodowanie w znanej z góry wysokości, a stop-loss obiecuje próbę wyjścia po najlepszej dostępnej cenie, w granicach tego, co w danej chwili dopuszcza mechanika giełdy. Różnica między tymi obietnicami jest mierzalna i mierzymy ją na własnych transakcjach, zamiast wierzyć nazwie zlecenia.
Ten tekst opisuje mechanikę zleceń i sposób pomiaru kosztów egzekucji, nie stanowi rekomendacji inwestycyjnej ani porady. Budujemy warsztat badawczy i dzielimy się procesem; decyzje i ryzyko pozostają po Twojej stronie. Dane liczbowe dotyczące kontraktu MES i przywołanych wydarzeń rynkowych są zakotwiczone w źródłach z dat opisanych w tekście; parametry naszego modelu kosztów, w tym próg 69 procent trafień, zależą od przyjętej prowizji, założonego poślizgu i relacji zysku do straty, i mogą się zmieniać.