BTC291,2k zł1,55%
ETH8,37k zł3,22%
XRP5,08 zł2,31%
LTC206 zł0,90%
BCH1,65k zł2,52%
DOT4,78 zł0,61%

Matematyka strat: asymetria odrabiania kapitału i Risk of Ruin

Jeśli uciąłeś depo o połowę, jesteś w bagnie. Żeby wyjść na zero, musisz podwoić to, co ci zostało — i zrobić to w środowisku, w którym matematyka bez litości karze tych, którzy nie potrafią ciąć strat. W poprzednim artykule pokazaliśmy, że strata 50% wymaga +100% zysku do odrobienia. Teraz rozbieramy tę arytmetykę na czynniki pierwsze — pełna tabela asymetrii od −5% do −90%, formuły Risk of Ruin dla różnych win rate i R:R (z zastrzeżeniami, których brakuje w 99% poradników), symulacje Monte Carlo z realnym modelem kosztów, które pokażą ci rozkład możliwych equity curve dla twojego systemu, i praktyczne narzędzia do policzenia tego samemu. Bez tych liczb nie jesteś risk managerem. Jesteś gościem z dźwignią, który liczy, że rynek nie zauważy jego głupoty.

Matematyka strat na Forex — asymetria odrabiania kapitału, krzywa Risk of Ruin i symulacja Monte Carlo equity curve
Najważniejsze w 60 sekund
  • Asymetria strat jest nieliniowa — po −20% potrzebujesz +25%, po −50% potrzebujesz +100%, po −70% potrzebujesz +233%. Im głębszy drawdown, tym recovery przyspiesza w sposób brutalnie nieliniowy
  • Risk of Ruin (RoR) to obliczalne prawdopodobieństwo bankructwa — ale formuła analityczna działa TYLKO dla R:R 1:1. Dla asymetrycznych systemów potrzebujesz symulacji Monte Carlo
  • Monte Carlo jest użyteczne dopiero wtedy, gdy karmisz je realnymi danymi netto. Na śmieciowych danych z backtestu bez kosztów da ci śmieciowy rozkład — i fałszywe poczucie bezpieczeństwa
  • Compounding drawdownu działa na dwa sposoby: chroni kapitał (mniejsze pozycje po stracie), ale spowalnia recovery (zyski liczone od mniejszej bazy)
  • Koszty egzekucji (spread, slippage, swap) potrafią obciąć 30–50% expectancy brutto — Monte Carlo bez nich to fikcja

1. Pełna tabela asymetrii — od −5% do −90%

W artykule 9.1 pokazaliśmy skróconą wersję. Tu rozbijamy recovery na trzy różne kolumny, bo każda odpowiada na inne pytanie. Mylenie ich to klasyczny błąd, który prowadzi do fałszywych oczekiwań co do czasu odrabiania. Krótko: kolumna A to czysta arytmetyka (matematyczne minimum, ~125 transakcji dla −50%), kolumna B to fixed fractional z kapitalizacją (~174 transakcje), kolumna C to realistyczna estymacja live z buforem na wariancję, koszty i psychiczny sabotaż egzekucji w głębokim DD (~290). Różnica ~125 vs ~290 nie jest arbitralna — to różnica między matematyką a tym, jak rzeczywiście wygląda recovery z perspektywy fotela tradera.

Strata kapitałuZysk do odrobieniaA) Czysta arytmetyka
fixed risk, +0,4R
B) Fixed fractional
+0,4% złożonego
C) Konserwatywny
live buffer
−5%+5,3%~13~13~14
−10%+11,1%~25~26~29
−15%+17,6%~38~41~48
−20%+25,0%~50~56~70
−25%+33,3%~63~72~96
−30%+42,9%~75~90~122
−40%+66,7%~100~128~185
−50%+100,0%~125~174~290
−60%+150,0%~150~230~450
−70%+233,3%~175~302~710
−80%+400,0%~200~403~1 250
−90%+900,0%~225~577~3 000

A) Czysta arytmetyka, fixed risk: ile transakcji trzeba, jeśli każda daje stałą wartość +0,4% kapitału startowego (np. 40 USD przy starcie 10 000 USD), niezależnie od bieżącego equity. To matematyczna dolna granica.
B) Fixed fractional z kapitalizacją: ten sam +0,4R, ale ryzyko (i więc nominalna wartość) maleją razem z drawdownem. Wzór: ln(1/(1−DD)) / ln(1+0,004). Wolniejsze niż A z powodu malejącej bazy zysków.
C) Konserwatywny live buffer: kolumna B + bufor na realność: serie strat w trakcie odrabiania (resetują licznik), miesiące ze słabszą expectancy, koszty rosnące w okresach niskiej zmienności, psychologiczne ryzyko sabotażu egzekucji w głębokim DD. Dla głębokich drawdownów (>−40%) bufor rośnie nieliniowo, bo ryzyko psychiczne rośnie z głębią.
Kolumna A i B to matematyka. Kolumna C to realistyczna estymacja live. Nie myl ich.

Czas recovery dla typowych częstotliwości (kolumna C — realistyczna):

StrataSwing (~5 transakcji/mies.)Day trading (~20/mies.)Scalping (~5/dzień)
−10%~6 tygodni~7 dni roboczych~6 dni
−20%~14 tygodni (~3,5 mies.)~18 dni (~3,5 tyg.)~14 dni
−30%~24 tygodnie (~6 mies.)~31 dni (~6 tyg.)~25 dni
−50%~58 tygodni (>1 rok)~73 dni (~3,5 mies.)~58 dni
−70%~142 tygodnie (~2,7 roku)~178 dni (~9 mies.)~142 dni

Matematyka jest bezlitosna: krzywa asymetrii jest wypukła (hiperboliczna: recovery = 1/(1−DD) − 1). Powyżej −20% drawdownu matematyka działa aktywnie przeciwko tobie — każda wygrana jest liczona od coraz mniejszej bazy, a psychika tradera zaczyna podejmować decyzje, których nie podejmowałby przy pełnym rachunku. To nie jest odrabianie strat. To jest próba handlowania pod presją, której nikt nie symulował w backteście. Między −5% a −20% krzywa rośnie łagodnie (+5,3% → +25%). Między −20% a −50% rośnie szybko (+25% → +100%). Powyżej −50% eksploduje (+100% → +900%). W wielu profesjonalnych setupach detalicznych kill switch pojawia się już przy −10% do −20%. Przy systemach o niskim WR i wysokim R:R (trend-following) ten próg bywa szerszy — ale musi wynikać z danych Monte Carlo, nie z ego. Po przekroczeniu tej granicy odrabianie staje się projektem na miesiące lub lata, a psychika tradera jest już mocno nadszarpnięta.

Kontekst ESMA: drawdown a Margin Closeout. W UE drawdown −50% to nie tylko kwestia czasu odrabiania. Przy dźwigni 1:30 i dużym wykorzystaniu marginu spadek equity do 50% poziomu wymaganego margin level uruchamia algorytm Margin Closeout — broker ma obowiązek zamykać twoje pozycje bez pytania. Ważne zastrzeżenie: 50% to minimum wymagane przez ESMA, ale konkretny broker może ustawić próg wyżej (np. 80% lub 100% margin level) — sprawdź regulamin swojego brokera w sekcji „Margin requirements" i nie licz domyślnie na pełne 50% bufora. Nie ty decydujesz, kiedy uciąć stratę — robi to skrypt na serwerze brokera, zaczynając od najbardziej stratnych pozycji, po cenach, które w tym momencie oferuje rynek (czyli z rozszerzonym spreadem i poślizgiem). RoR w Europie to nie jest tylko koncepcja matematyczna — to prawo, na podstawie którego broker likwiduje twoją ekspozycję. Dla kontekstu: analiza ESMA sprzed interwencji produktowej wykazała, że 74–89% klientów CFD u regulowanych brokerów traciło pieniądze (źródło [10]). Asymetria strat jest jednym z mechanizmów, które pomagają wyjaśnić, dlaczego odsetek tracących klientów CFD jest tak wysoki.
Krzywa asymetrii strat — zysk potrzebny do odrobienia rośnie nieliniowo (zależność hiperboliczna)
Strata kapitału (%) Zysk do odrobienia (%) 0% 100% 200% 300% 400% 600% 800% −10% −20% −30% −40% −50% −60% −70% −80% −90% 11% 25% 67% 100% 233% 900% Odrabialne (tygodnie) Trudne (miesiące) Ruina (lata lub nigdy) Recovery = 1/(1−DD) − 1; wykres pokazuje zysk procentowy potrzebny do powrotu do zera
Pełna tabela asymetrii strat od -5% do -90% z czasem odrabiania dla swing i day tradingu — wizualizacja nieliniowego wzrostu trudności recovery
Pełna tabela asymetrii strat od -5% do -90% z czasem odrabiania dla swing i day tradingu — wizualizacja nieliniowego wzrostu trudności recovery

2. Compounding drawdownu — podwójne ostrze

Przy fixed fractional position sizing (1% rachunku na transakcję) twoje pozycje automatycznie się zmniejszają, gdy rachunek spada. 1% z 10 000 USD = 100 USD. Po serii strat: 1% z 8 500 USD = 85 USD. To ochrona — tracisz coraz wolniej, bo ryzyko w wartości bezwzględnej maleje.

Ale jest druga strona: odrabianie też jest wolniejsze. Kiedy rachunek wynosi 8 500 USD, twoje zyski są liczone od mniejszej bazy. Żeby wrócić do 10 000 USD, potrzebujesz +17,6% — ale każda wygrana daje mniej dolarów niż przed drawdownem. To „podwójne ostrze" compoundingu:

FazaKapitał1% ryzyka (USD)Zysk +0,4R netto (USD)Efekt
Start10 000100+40Pełna prędkość wzrostu
Po −15% DD8 50085+34Wolniejsze straty, ale też wolniejsze zyski
Po −30% DD7 00070+28Odrabianie o 30% wolniejsze niż na starcie
Po −50% DD5 00050+20Odrabianie 2× wolniejsze — spiral of decay

Wniosek: tabela asymetrii z sekcji 1 zakłada stałą wielkość pozycji. Przy fixed fractional (compounding) czas odrabiania jest dłuższy niż w tabeli, bo zyski maleją razem z kapitałem. Powyżej drawdownu −20% compounding zaczyna pracować brutalnie przeciwko tobie — dlatego ten poziom jest naturalnym progiem, na którym warto się zatrzymać i zredukować ekspozycję.

Stop loss hunting — mechanika, nie spisek. Trader ustawia SL 20 pipsów poniżej wsparcia na EUR/USD. Rynek spada dokładnie do jego SL, wykonuje go, a następnie wraca o 60 pipsów w górę. Nie schlebiaj sobie — żaden broker nie poluje na twoje mikroloty. Ale duzi gracze nie widzą wszystkich stopów na rynku — potrafią natomiast bardzo dobrze estymować ich klastry, bo wiedzą, gdzie ulica stawia oczywiste poziomy. Twoje SL ustawione pod równym dnem to dla nich przewidywalna płynność. Spot FX nie ma jednej centralnej książki zleceń jak akcje na NYSE — „klastry stopów" nie są widoczne na żadnym magicznym ekranie, są inferowane z price action, przepływu klientów u brokera, pozycjonowania futures z raportów COT/CFTC, poziomów opcyjnych raportowanych przez serwisy instytucjonalne, round numbers i historycznych high/low. Jeśli większość pozycji long ma SL w strefie 1,0820–1,0835 (klasyczne wsparcie techniczne), rynek ma powód, żeby tam zajrzeć — bo stop lossy to zlecenia sprzedaży, czyli płynność do kupna po atrakcyjnej cenie. Implikacja dla RoR: jeśli twoje SL są regularnie „omiatane" przed ruchem w twoją stronę, twój realny R-multiple na przegranej nie wynosi −1,0R — wynosi −1,0R plus koszt ponownego wejścia (reentry: nowy spread + nowa prowizja + ryzyko, że drugie wejście trafi w odwrót, którego pierwsze już dotknęło). Typowy reentry po omiecionym SL kosztuje 0,1–0,3R. To zniekształca rozkład R-multiple i zaniża expectancy netto bardziej, niż pokazują proste liczby.
War story: koncentracja przepływu na fixingu londyńskim. WM/Reuters Fix ustalany jest codziennie o 16:00 czasu londyńskiego (GMT zimą, BST latem — w Polsce odpowiednio 17:00 lub 18:00). W oknie 5 minut wokół fixingu duże zlecenia benchmarkowe (fundusze indeksowe, ETF-y, korporacje rozliczające ekspozycje walutowe) muszą zostać zrealizowane, niezależnie od stanu order booka. Jeśli płynność jest cienka, sama realizacja przepływu potrafi przesunąć cenę, uruchomić klastry stopów wokół oczywistych poziomów technicznych i wywołać krótką kaskadę egzekucji. Nie musisz zakładać spisku — wystarczy koncentracja przepływu, cienka książka i przewidywalne poziomy SL. Historycznie były skandale: w 2014–2015 r. CFTC, FCA i DoJ ukarały Barclays, UBS, Citibank, JPMorgan i RBS karami łącznie ponad 5,8 mld USD za manipulacje fixingiem FX[13] — od tego czasu mechanika została zaostrzona regulacyjnie, ale podstawowa fizyka rynku (cienki order book + duży przepływ) nadal istnieje. Operacyjnie: nie wchodź w nowe pozycje między 15:55 a 16:05 czasu londyńskiego, a otwarte pozycje z ciasnym SL wokół round numbers traktuj w tym oknie jako „ślepą próbę".
Compounding drawdownu — porównanie fixed lot vs fixed fractional w odrabianiu −30%
10 000 8 500 7 000 USD 0 Drawdown Recovery Transakcje Fixed lot — szybsze recovery, ale brak ochrony w DD Fixed fractional — wolniejsze, ale bezpieczniejsze
Brudna praktyka: „zwiększam lot po stracie, żeby szybciej odrobić". Rachunek 8 000 PLN po drawdownie −20% (start: 10 000). Trader myśli: „gdybym wrócił do 1% z oryginalnych 10 000 (100 PLN ryzyka zamiast 80), szybciej odrobię". Zwiększa ryzyko do 1,25% aktualnego kapitału. Następna seria 5 strat kosztuje −488 PLN zamiast −392 PLN. Drawdown pogłębia się do −25,1% zamiast −23,9%. Różnica wygląda na niewielką — ale w Monte Carlo na 10 000 symulacji ta zmiana podnosi RoR (−50%) z 2,1% do 5,8%. Trzy razy wyższe prawdopodobieństwo ruiny — za różnicę 0,25% ryzyka.
Porównanie dwóch realnych equity curve: fixed lot (szybsze recovery, ale głębszy drawdown) vs fixed fractional (wolniejsze recovery, ale płytszy drawdown i lepsza ochrona kapitału)
Porównanie dwóch realnych equity curve: fixed lot (szybsze recovery, ale głębszy drawdown) vs fixed fractional (wolniejsze recovery, ale płytszy drawdown i lepsza ochrona kapitału)

3. Risk of Ruin — formuła analityczna i jej ograniczenia

Risk of Ruin (RoR) to prawdopodobieństwo, że twój rachunek spadnie do poziomu, przy którym handlowanie nie ma sensu. Definiujesz ten poziom sam — zwykle −50% (połowa kapitału) lub −70% (bankructwo operacyjne).

Formuła dla R:R 1:1

Przy symetrycznym R:R = 1:1 (tyle samo zarabiasz na zwycięskiej, co tracisz na przegranej) formuła RoR ma zamkniętą postać analityczną:

RoR = (1 − edge1 + edge)N

Gdzie:

  • edge = 2 × WR − 1 (np. WR 55% → edge 0,10)
  • N = liczba jednostek ryzyka do poziomu ruiny. Formuła Gambler's Ruin zakłada stałą stawkę (fixed lot / fixed risk), więc N = kapitał_startowy / ryzyko_per_trade (np. przy 2% ryzyka i ruinie −50%: N = 25). Dla fixed fractional nie ma prostego odpowiednika parametru N z tego modelu — poprawną metodą kalkulacji RoR przy fixed fractional jest wyłącznie Monte Carlo
Win rateEdgeRyzyko 0,5%
(N=100)
Ryzyko 1%
(N=50)
Ryzyko 2%
(N=25)
Ryzyko 5%
(N=10)
Ryzyko 10%
(N=5)
52%0,040,04%1,9%13,9%45,2%67,3%
55%0,10< 0,001%< 0,01%0,7%13,5%36,7%
58%0,16< 0,001%< 0,001%< 0,1%4,3%20,7%
60%0,20< 0,001%< 0,001%< 0,01%1,7%13,2%

Ruina zdefiniowana jako −50% kapitału. Wartości policzone z formuły RoR = ((1−edge)/(1+edge))N, gdzie edge = 2·WR−1, a N = (kapitał × ruina) / ryzyko_per_trade. Formuła WYŁĄCZNIE dla R:R 1:1. Dla asymetrycznych R:R patrz sekcja 4.

Co te liczby oznaczają dla twojego portfela:

  • Przy WR 55% i ryzyku 1% — modelowe RoR spada poniżej 0,01%. To wygląda bezpiecznie na papierze, ale tylko dlatego, że model zakłada R:R 1:1, stały WR, brak kosztów i niezależność transakcji. Realne ryzyko jest wyższe, bo żadne z tych założeń nie jest spełnione w live.
  • Przy WR 55% i ryzyku 5% — RoR skacze do 13,5%. Mniej więcej co siódmy rachunek kończy na poziomie ruiny w samym modelu. Live, po kosztach egzekucji i błędach tradera, będzie gorzej.
  • Przy WR 52% (ledwie powyżej 50%) i ryzyku 2% — RoR wynosi 13,9%. To nie jest „lekko dodatni system". To dodatnia expectancy przy takim sizingu, który robi z normalnej serii strat egzekucję rachunku.
  • Różnica między 1% a 5% ryzyka to nie „5× większe zyski". To różnica między rachunkiem, który przetrwa normalną wariancję, a rachunkiem, który jej nie przetrwa.
Heatmapa Risk of Ruin — im niższy WR i wyższe ryzyko na transakcję, tym wyższe RoR. Dolny prawy róg to strefa ruiny (ruina = −50%, R:R 1:1, formuła analityczna).
Risk of Ruin (%) — formuła analityczna dla R:R 1:1 Win rate Ryzyko na transakcję (%) 0,5% 1% 2% 5% 10% 60% 58% 55% 52% <0,001% <0,001% <0,01% 1,7% 13,2% <0,001% <0,001% <0,1% 4,3% 20,7% <0,001% <0,01% 0,7% 13,5% 36,7% 0,04% 1,9% 13,9% 45,2% 67,3% Wysokie Średnie Niskie RoR

Ograniczenia formuły analitycznej

Formuła powyżej ma cztery poważne ograniczenia, których nie wolno zignorować:

  1. Działa TYLKO dla R:R 1:1. Jeśli twój system ma R:R 1:2 lub 1:3, formuła daje bzdurny wynik. Nie istnieje prosta zamknięta formuła analityczna dla asymetrycznego R:R — potrzebujesz symulacji Monte Carlo.
  2. Zakłada stały WR i R:R. Realne systemy mają zmienną skuteczność — WR 55% to średnia, nie stała. W okresie konsolidacji spada do 40%, w trendzie rośnie do 65%. RoR policzone na średniej WR jest optymistyczne.
  3. Ignoruje koszty transakcyjne. Edge brutto +0,54R po spreadzie i swapie spada do +0,41R netto. RoR na edge brutto jest niższy niż realny.
  4. Zakłada niezależność transakcji. W rzeczywistości: volatility clustering, reżimy rynkowe, seryjnie skorelowane straty. Realne serie strat bywają dłuższe niż model Bernoulli'ego przewiduje.
War story: model miał rację. Trader i tak zginął. Rachunek detalu: WR 55%, R:R 1:2, ryzyko 1%. Formuła i Monte Carlo zgodnie pokazują RoR poniżej 1%. Statystyczne bezpieczeństwo. Problem w tym, że trader nie handlował jednym systemem — po trzeciej stracie pod rząd podwoił pozycję, po piątej przesunął SL „bo prawie wracało", po szóstej zamknął ręcznie na dołku, bo „już nie wytrzymywał". Model liczył system. Live dostał człowieka po dwóch nocach bez snu, z dochodzącą drugą kawą i z notyfikacjami z grupy Telegrama, gdzie wszyscy „wchodzili" w ten sam ruch. Risk of Ruin nie uwzględnia egzekucyjnej dryfowej — chyba że ją wpiszesz do danych przez block bootstrap albo ręczny stress test scenariuszy „co się stanie, kiedy trader złamie regułę po 3 stratach". RoR z modelu to dolna granica ryzyka. Realna granica jest gdzieś między modelem a twoim charakterem.
Case z risk desku — pomyłka rzędu wielkości. To scenariusz oparty na mechanice błędu, który pojawia się w literaturze risk management i który każdy analityk z doświadczeniem w tradingowych backoffice'ach rozpozna natychmiast. Analityk ryzyka prezentuje zarządowi model RoR dla strategii trend-following FX z WR 38% i R:R 1:3,2. Stosuje formułę analityczną dla R:R 1:1: edge = 2×0,38 − 1 = −0,24 → „system traci". Zarząd odrzuca strategię. Realny kalkulator Monte Carlo na tym samym systemie (z rzeczywistym rozkładem R-multiple, kosztami i częściowym TP) daje expectancy netto +0,58R i RoR poniżej 1% przy 1% ryzyka — system jest zyskowny. Pomyłka nie wynika z nieuczciwości, ale z użycia wzoru poza jego zakresem stosowalności. Formuła Gambler's Ruin dla R:R 1:1 zastosowana do systemu R:R 1:3 daje wynik różniący się o rząd wielkości od rzeczywistego. To dlatego sekcja 4 istnieje — i dlatego nie wolno stosować formuły z sekcji 3 do asymetrycznych systemów.

4. RoR dla asymetrycznych systemów (R:R ≠ 1:1)

Spread i prowizja dają ci wyrok wykonany natychmiast — każda pozycja rodzi się na minusie, zanim rynek drgnął o jednego pipsa. Trend-following zwykle daje R:R 1:2–1:4 z WR 30–45%, scalping 1:0,8–1:1,2 z WR 55–70%, mean reversion 1:1,5–1:2 z WR 50–60%. Dla tych systemów formuła analityczna z sekcji 3 nie działa.

Istnieje przybliżona formuła rozszerzona (tzw. „Kelly-based RoR"):

RoR ≈ ((1 − K) / (1 + K))^N

Gdzie K to Kelly fraction: K = WR − (1 − WR) / RR, a N = kapitał/ryzyko na transakcję. Ale to przybliżenie — dokładność spada gwałtownie przy niskim WR i wysokim R:R (typowy trend-following). W praktyce Monte Carlo na realnym rozkładzie R-multiple daje znacznie lepszy obraz niż przybliżenie analityczne — szczególnie przy niskim WR, gdzie Kelly-based RoR potrafi błądzić o rząd wielkości.

Profil systemuWRR:RExpectancy/tradeRoR (1% risk, MC 10k sym.)RoR (2% risk, MC)
Scalping agresywny62%1:0,8+0,12R~0,8%~6,5%
Day trading standard48%1:1,8+0,30R~0,2%~2,1%
Swing trend-following38%1:3,0+0,52R~0,1%~0,9%
Position macro32%1:4,5+0,76R< 0,1%~0,4%

RoR z symulacji Monte Carlo (10 000 iteracji, 500 transakcji, ruina = −50%, fixed fractional). Tabela ma charakter ilustracyjny — dwa systemy o tym samym WR i średnim R:R mogą mieć zupełnie inne RoR, jeśli różni się rozkład R-multiple, slippage i serial correlation strat. Wartości zależą też od kosztów egzekucji, częstotliwości i zmienności warunków rynkowych.

Trend-following z WR 35% oznacza, że dwie na trzy transakcje kończą się stopem. Na 500 transakcjach masz ~175 wygranych i ~325 przegranych. Przy normalnym rozkładzie statystycznym seria 8 strat z rzędu zdarzy się wielokrotnie — nawet w zyskownym systemie. Jeśli nie masz tego policzonego przed otwarciem rachunku live, serie strat zmienią twój system w trakcie handlu — twoja ręka dotknie parametrów w najgorszym możliwym momencie. Ale matematycznie to właśnie ten profil ma paradoksalnie niższe RoR niż przyjemny psychologicznie scalping z wysokim WR, który wykrwawia się na spreadach i slippage'u.

Scalping z WR 62% i RoR 0,8% brzmi bezpiecznie — dopóki nie wyjdziesz na normalne dane NFP i nie zobaczysz, jak trzy transakcje z rzędu gubisz na spreadzie, zanim cena w ogóle się ruszy. WR 62% liczony był na spokojnej sesji. Live liczy wszystko — łącznie z minutą, w której bid/ask rozjeżdża się o 8 pipsów i zjada twoje SL bez ruchu rynku mid.

War story: GBP flash crash, 7 października 2016 — kiedy R:R 1:3 spotyka się z liquidity vacuum. Myślisz, że R:R 1:3 cię uratuje? W październiku 2016 na azjatyckiej sesji funt (GBP/USD) zjechał o ok. 1 800 pipsów w dwie minuty, bo algorytmy wycofały płynność (liquidity vacuum). Bank of England i BIS w późniejszych raportach opisali to jako „gwałtowne wyparowanie kwotowań od ok. 00:07 GMT". Systemy trend-followingowe z ciasnymi stopami miały zostać ucięte po −1R. W rzeczywistości dostały egzekucję 200–400 pipsów poniżej planowanego SL — przy SL rzędu 25–30 pipsów typowych dla scalpingu/intraday GBP/USD oznaczało to stratę rzędu −10R do −15R na pojedynczej transakcji. System z dodatnią expectancy w teorii, w praktyce spalił konta w 120 sekund. Żaden bootstrap MC na danych pre-2016 tego nie widział. Wniosek operacyjny dla swing trend-followera: jeśli system trzyma pozycje przez sesję azjatycką lub przez weekend, MC bez ręcznego stress testu („co jeśli jedna transakcja na 200 skończy się na −10R?") jest półproduktem — pokazuje optymistyczną dolną granicę RoR, nie realne ryzyko.
Heatmapa Risk of Ruin z symulacji Monte Carlo — 4 profile systemów (scalping, day trading, swing, position) przy różnych poziomach ryzyka
Heatmapa Risk of Ruin z symulacji Monte Carlo — 4 profile systemów (scalping, day trading, swing, position) przy różnych poziomach ryzyka
Brudna praktyka: RoR policzony na edge brutto. Trader backtestuje system: WR 55%, R:R 1:1,5. Edge brutto +0,30R. Monte Carlo daje RoR 0,3% przy 2% ryzyka. Wchodzi live. Spread +0,08R, swap +0,02R/noc (swing trzymany 3 noce = +0,06R), slippage +0,03R. Edge netto: +0,13R. Monte Carlo na edge netto: RoR 4,2%. 14× wyższe niż backtest sugerował. Formuła nie kłamie — kłamie input. Zawsze licz na edge netto.

5. Symulacja Monte Carlo — co to jest i po co ci to

Monte Carlo to jedyne narzędzie, które zdejmie ci różowe okulary z backtestu. Pokaże ci, jak szybko wyczyścisz konto, gdy rynek wylosuje ci najgorszą możliwą sekwencję zdarzeń, których backtest nigdy nie pokazał — bo backtest pokazuje jedną historyczną ścieżkę. MC odpowiada na pytanie: „Gdybym powtórzył 500 transakcji 10 000 razy z losową kolejnością wygranych i przegranych — jak wyglądałby rozkład wyników?"

Z rozkładu equity curve — od najlepszego scenariusza po najgorszy — odczytujesz:

  • Medianowy drawdown — typowe obsunięcie, którego powinieneś się spodziewać
  • Maksymalny drawdown (95. percentyl) — to nie jest najgorszy scenariusz. To najgorszy scenariusz, który twój model jeszcze potrafi sobie wyobrazić. Realny worst-case (flash crash, gap weekendowy, interwencja BC poza konsensusem) jest poza tym przedziałem
  • Risk of Ruin — procent symulacji, w których rachunek spadł do poziomu ruiny
  • Oczekiwany zysk (mediana i rozstęp) — nie „ile zarobię", ale „w jakim przedziale prawdopodobnie się zmieszczę"
Symulacja Monte Carlo — 50 losowych equity curve dla tego samego systemu (WR 55%, R:R 1:1,5, ryzyko 1%)
10 000 12 000 14 000 8 000 USD 0 100 200 300 Transakcje 95. percentyl (najlepszy rozsądny scenariusz) Mediana 5. percentyl (najgorszy rozsądny scenariusz)

Wachlarz się poszerza z każdą transakcją — to efekt variancji. Im dłuższa próbka, tym większa rozpiętość między najlepszym a najgorszym scenariuszem. Dlatego 50 transakcji nic ci nie mówi o systemie. 200 zaczyna dawać obraz. 500 daje rozkład, z którego można wyciągać wnioski.

Histogram maksymalnych drawdownów z 10 000 symulacji Monte Carlo — rozkład od -8% do -45% z medianą przy -18%
Histogram maksymalnych drawdownów z 10 000 symulacji Monte Carlo — rozkład od -8% do -45% z medianą przy -18%

6. Monte Carlo w praktyce — jak to policzyć

Dane historyczne prosto z MT4 bywają pełne luk i sztucznych ticków — do rzetelnego MC potrzebujesz prawdziwych tick data (np. z Dukascopy lub przez Tick Data Suite z modelowaniem zmiennego spreadu). Do samej symulacji wystarczy arkusz kalkulacyjny albo 25 linii Pythona. Poniżej — krok po kroku.

Iluzja wolumenu tickowego — co MT4 pokazuje, a czego nie. Spot FX nie ma centralnego wolumenu jak akcje na NYSE czy futures na CME. MT4/MT5 pokazuje tick volume twojego feedu, nie realny wolumen rynku — to liczba zmian kwotowań w strumieniu twojego brokera. Dwóch traderów u dwóch różnych brokerów widzi inny tick volume na tej samej parze w tej samej minucie, bo każdy dostaje własny strumień kwotowań od swoich LP. Tick volume bywa użyteczny jako proxy aktywności w skali makro, ale nie zastępuje danych z CME FX futures (instrumenty 6E dla EUR/USD, 6B dla GBP/USD, 6J dla JPY) jako proxy rzeczywistej aktywności rynkowej. Implikacja dla MC: jeśli twój system filtruje wejścia na podstawie wolumenu tickowego z MT4, twoje statystyki R-multiple są zniekształcone przez specyfikę feedu twojego brokera — a nie przez rzeczywistą strukturę rynku. Backtest na danych M1 z brokera B-Book może dać wyniki, których u brokera STP nie powtórzysz.
Eksport historii — od CSV do R-multiple netto. Zanim wsadzisz dane do MC, musisz mieć R-multiple netto dla każdej transakcji. Workflow:
1. Eksport historii — MT4: prawy klik w Account History → Save as Detailed Report (HTML lub CSV). MT5: View → Toolbox → History → Save Report.
2. Konto na zewnętrzną platformę — Myfxbook (darmowy, automatyczna synchronizacja przez Investor Password), FX Blue Live (darmowy, ekspert zaawansowanych metryk), Edgewonk (płatny, najpełniejszy dziennik).
3. Dla każdej transakcji wyciągnij osobno: profit pipsowy (kolumna Profit w MT4), prowizję (Commission), swap (Swap), spread przy wejściu i wyjściu (rzadko dostępne natywnie — szacuj na podstawie średnich), slippage (z logów MT4 jeśli broker podaje, albo z porównania zlecenia z fillem).
4. Policz R-multiple netto: (Profit + Commission + Swap) / planowane_R, gdzie planowane_R to wartość ryzyka w PLN/USD jaką ustawiłeś przy wejściu.
5. Dopiero teraz wkładasz tablicę R-multiple netto do MC. Nie wcześniej. MC na śmieciowych danych daje śmieciowy rozkład — i fałszywe poczucie bezpieczeństwa.

a) Metoda: bootstrap na wynikach transakcji

  1. Zbierz dane — lista wyników transakcji w R-multiple (np. −1R, +1,8R, −1R, +2,3R, −1R, +1,5R…). Minimum 100 transakcji, optymalnie 200+.
  2. Losuj z powtórzeniami — wyciągnij 500 losowych transakcji z twojej próbki (bootstrap). Każda transakcja ma takie samo prawdopodobieństwo wylosowania.
  3. Oblicz equity curve — startując od 10 000 USD z 1% ryzyka na transakcję, przelicz saldo po każdej wylosowanej transakcji.
  4. Powtórz 10 000 razy — za każdym razem inna losowa kolejność.
  5. Odczytaj statystyki — mediana, 5. i 95. percentyl końcowego salda, max drawdown, RoR.

b) Narzędzia

NarzędzieKosztUwagi
Excel / Google SheetsDarmowyRANDBETWEEN + tabela wyników. Wystarczy do 1 000 symulacji. Powyżej — wolny.
Python (numpy/pandas)Darmowy10 000 symulacji w sekundy. Gotowy skrypt poniżej.
Tick Data Suite (TDS)~65 EUR/rokModelowanie zmiennego spreadu i slippage na tick data MT4/MT5. Standard do backtestu przed MC.
Edgewonk~170 USD/rokWbudowany Monte Carlo. Importuje dane z MT4/MT5.
QuantAnalyzer~150 EUR jednorazowoZaawansowane MC z analizą robustness. Dla EA/algo traderów.
Myfxbook Monte CarloDarmowyOgraniczone — basic MC na danych z połączonego konta.

c) Na co patrzeć w wynikach

MetrykaCo mówiAkceptowalny zakres
Mediana końcowego saldaTypowy wynik po 500 transakcjach> kapitał startowy (system zarabia)
5. percentyl końcowego saldaWynik w pesymistycznym scenariuszu> 70% kapitału (przeżyjesz)
Mediana max drawdownTypowe obsunięcie, którego się spodziewaj< −25%
95. percentyl max drawdownNajgorszy rozsądny drawdown< −40% (jeśli > −50%, zmniejsz ryzyko)
Risk of Ruin (−50%)Procent symulacji, które zjechały do −50%< 1% (ideał < 0,1%)

d) Gotowy skrypt Python — Monte Carlo RoR

Wklej do Jupyter Notebook lub uruchom z terminala. Podmień tablicę moje_transakcje na swoje R-multiple ze statementu MT4/MT5.

import numpy as np

def monte_carlo_ror(trades, n_sim=10_000, n_trades=500,
                    risk_pct=0.01, ruin_level=0.50,
                    input_is_net=False,
                    spread_R_mean=0.04, spread_R_std=0.02,
                    slippage_R_mean=0.02, slippage_R_std=0.015,
                    swap_R_per_night=0.02, avg_nights_held=2,
                    asym_slippage_factor=1.5,
                    triple_swap_probability=1/7):
    """
    Monte Carlo RoR z modelem zmiennych kosztów egzekucji.

    DWIE ŚCIEŻKI INPUT (parametr input_is_net):
    A) input_is_net=True  -> trades to R-multiple NETTO z dziennika live
       (po spreadzie, slippage, swapie). Skrypt NIE dolicza kosztów.
    B) input_is_net=False -> trades to R-multiple BRUTTO z backtestu.
       Skrypt dolicza losowe koszty: spread, slippage asymetryczny,
       swap z modelem triple swap (środa).

    Nie używaj A i B jednocześnie - policzysz koszty podwójnie.
    """
    capital_start = 10_000
    ruin_count = 0
    max_dds = []

    for _ in range(n_sim):
        capital = capital_start
        peak = capital
        max_dd = 0
        sample = np.random.choice(trades, size=n_trades, replace=True)

        for r_brutto in sample:
            if input_is_net:
                # Ścieżka A: dane już netto, brak doliczania
                r_netto = r_brutto
            else:
                # Ścieżka B: dolicz losowe koszty
                spread_cost = abs(np.random.normal(spread_R_mean, spread_R_std))

                # Slippage asymetryczny (gorszy na stratach)
                base_slip = abs(np.random.normal(slippage_R_mean, slippage_R_std))
                slippage_cost = base_slip * asym_slippage_factor if r_brutto < 0 else base_slip

                # Swap z modelem triple swap (środa = ~1/7 transakcji)
                nights = np.random.poisson(avg_nights_held)
                if np.random.random() < triple_swap_probability:
                    nights = nights + 2  # triple swap dodaje 2 dodatkowe noce
                swap_cost = nights * swap_R_per_night

                r_netto = r_brutto - spread_cost - slippage_cost - swap_cost

            capital *= (1 + r_netto * risk_pct)
            peak = max(peak, capital)
            dd = (capital - peak) / peak
            max_dd = min(max_dd, dd)
            if capital <= capital_start * (1 - ruin_level):
                ruin_count += 1
                break

        max_dds.append(max_dd)

    ror = ruin_count / n_sim
    med_dd = np.median(max_dds)
    worst_dd = np.percentile(max_dds, 5)
    return {"RoR": f"{ror:.2%}",
            "Median Max DD": f"{med_dd:.1%}",
            "Worst-Case DD (P5)": f"{worst_dd:.1%}"}

# ŚCIEŻKA A - dane netto z dziennika live (po wszystkich kosztach):
# moje_dane_netto = np.array([-1.15, 1.62, -1.08, ...])
# print(monte_carlo_ror(moje_dane_netto, input_is_net=True))

# ŚCIEŻKA B - dane brutto z backtestu (skrypt doliczy losowe koszty):
moje_transakcje_brutto = np.array([
    -1, 1.8, -1, 2.3, -1, 1.5, -1, -1, 3.1, -1,
    -1, 0.8, -1, -1, 2.1, -1, 1.4, -1, -1, 2.8
])
print(monte_carlo_ror(moje_transakcje_brutto, input_is_net=False))

Skrypt v2 — dwa tryby pracy: (A) input_is_net=True dla danych netto z dziennika live, (B) input_is_net=False dla danych brutto z backtestu. W trybie B skrypt dolicza losowe koszty: spread normalny, slippage asymetryczny (większy na stratach), swap z modelem triple swap (środa pokrywa weekend, dodaje 2 noce). Linia capital *= (1 + r_netto * risk_pct) implementuje fixed fractional. Wartości domyślne odpowiadają swing tradingowi na EUR/USD u brokera STP — dostosuj do swojego instrumentu i brokera. Dla scalpingu zwiększ spread_R_mean, dla egzotyk z dużym dysparytetem stóp zwiększ swap_R_per_night. Ważne kalibracje: jeśli nigdy nie trzymasz pozycji przez środę (intraday lub closing-by-Tuesday), ustaw triple_swap_probability=0. Jeśli handlujesz wyłącznie na instrumentach z zerowym swapem (konta islamskie / swap-free), ustaw swap_R_per_night=0. Bez tych korekt skrypt naliczy ci koszty, których w rzeczywistości nie ponosisz.

Slippage zależy od rozmiaru pozycji (Market Impact). Skrypt zakłada slippage o stałym rozkładzie. Realnie: order book ma ograniczoną głębokość, więc slippage rośnie z rozmiarem pozycji. Przy 0,1 lota na EUR/USD w sesji LON–NY masz typowo 0,3–0,5 pipsa poślizgu. Przy 5 lotów w mało płynnym oknie (sesja azjatycka, rollover) — twoje zlecenie samo zjada dwa-trzy poziomy order booka, slippage rośnie do 1,5–3 pipsów. Implikacja: jeśli twój compounding doprowadzi cię do pozycji rzędu 10+ lotów, koszty rosną nieliniowo. To jest powód, dla którego prop deski rozkładają duże zlecenia w czasie (TWAP, VWAP execution) zamiast pakować je jednym kliknięciem. Detal z rachunkiem < 100 000 USD zazwyczaj nie ma tego problemu — ale powyżej tej skali Market Impact zaczyna obciążać expectancy w sposób, którego prosty skrypt MC nie modeluje. Praktyczna reguła: powyżej 5 lotów na EUR/USD podziel zlecenie na 2–3 transze wchodzące w odstępach 15–30 minut, albo użyj egzekucji TWAP/VWAP przez wybrany broker ECN z funkcją algorytmicznego składania zleceń (cTrader, FIX API u Tier-1 PoP). Jeden klik „Buy 10 lots" w sesji azjatyckiej często kosztuje więcej niż podział pozycji na transze — szczególnie na parach mniej płynnych albo przy szerokim spreadzie.
Przykładowy arkusz Monte Carlo w Excelu — kolumny: numer symulacji, losowe R-multiple, saldo, drawdown. Widoczne formuły RANDBETWEEN i IF.
Przykładowy arkusz Monte Carlo w Excelu — kolumny: numer symulacji, losowe R-multiple, saldo, drawdown. Widoczne formuły RANDBETWEEN i IF.
Monte Carlo na brudnych danych to pralka do prania iluzji. Wkładasz śmieciowy backtest bez kosztów, wyciągasz elegancki wykres kłamstwa. MC jest użyteczne dopiero wtedy, gdy karmisz je realnymi danymi netto — R-multiple po spreadzie, prowizji, swapie i estymowanym slippage'u — albo danymi brutto z włączonym modelem kosztów (skrypt v2 powyżej, tryb B). Granica wydajnościowa Excela vs Pythona omówiona w FAQ.

7. Koszty transakcyjne w symulacji — edge brutto vs netto

Backtest zwykle nie uwzględnia realnych kosztów egzekucji. Monte Carlo puszczone na wynikach backtestowych powiela ten błąd — i daje optymistyczny wynik. Zanim włożysz dane do symulacji, odejmij koszty od każdej transakcji.

Koszty, które musisz odliczyć

KosztTypowa wartość (EUR/USD)Wpływ na R-multipleUwagi
Spread (wejście)0,6–1,2 pipsa−0,03R do −0,06RZależy od pory i par
Spread (wyjście SL/TP)0,6–1,2 pipsa−0,03R do −0,06RNa SL zwykle gorszy niż na TP (rynek leci w kierunku twojego stopa)
Prowizja ECN3–7 USD/lot RT−0,03R do −0,07R (przy SL 10 pips)Zależy od brokera i typu rachunku; per side vs round turn
Slippage (średni)0,3–0,8 pipsa−0,02R do −0,04RNa SL gorszy niż na TP — detal wychodzi z rynkiem, nie pod prąd
Swap overnight (swing)−0,50 USD/noc/0,1 lota−0,02R/nocKumuluje się przy 3+ nocach
Triple Swap (środa→czwartek)3× swap dzienny−0,06R jednorazowoRozliczenie T+2: pozycja trzymana ze śr. na czw. pokrywa weekend. Na parach z dużym dysparytetem stóp (USD/TRY, USD/MXN) potrafi zjeść znaczną część zysku z transakcji
Asymetryczny slippageZmienny−0,01R do −0,05RU brokerów market maker: opóźnienie egzekucji 100–300 ms. Cena idzie na twoją korzyść → requote. Przeciwko tobie → natychmiastowy fill z negatywnym poślizgiem. Efekt netto: slippage obciąża straty bardziej niż pomaga zyskom
Koszt spreadu jako % stop lossa — dlaczego scalping jest rzeźnią kosztową
SL (pipsów)Spread 0,8 pipsaSpread 2 pipsySpread 5 pipsów (NFP)
5 (scalping)16% R40% R100% R — zjada cały SL
10 (scalping/intraday)8% R20% R50% R
20 (intraday)4% R10% R25% R
50 (swing)1,6% R4% R10% R
100 (swing/position)0,8% R2% R5% R

Ten sam spread 1 pipsa przy SL 10 pipsów to dramat (10% twojego R), przy SL 80 pipsów to szum (1,2% R). Bez tej tabeli nie zrozumiesz, dlaczego scalping wymaga brokera ECN z prowizją zamiast „zerowego spreadu" market makera. Dla części swing systemów ze sztywnym SL i niską częstotliwością transakcji różnica między B-Book ze spreadem 1,5 pipsa a ECN ze spreadem 0,3 pipsa + prowizją może być marginalna w expectancy — pod warunkiem, że asymetria slippage'u i jakość fillów są porównywalne. Dla scalpingu i intraday z ciasnymi SL — różnica jest decydująca. Skala kosztu egzekucji w R jest funkcją SL — i to jest pierwsza zmienna, którą detal zwykle ignoruje.

Asymetryczny slippage — test empiryczny zamiast oskarżeń. U części słabych lub agresywnie zarządzanych brokerów market maker opóźnienia egzekucji, requoty i asymetryczny slippage mogą działać przeciwko traderowi. Nie musisz znać nazwy konkretnej wtyczki dealerskiej (historycznie znanej np. jako Virtual Dealer Plugin w starszych instalacjach MT4) — sprawdzasz efekt w statementcie: wyeksportuj 50 ostatnich transakcji, policz medianę slippage'u na SL osobno i na TP osobno. Jeśli różnica jest > 0,5 pipsa — masz empiryczny dowód asymetrii, a twój edge netto jest niższy niż liczyłeś. Skrypt v2 powyżej (parametr asym_slippage_factor=1.5) modeluje tę asymetrię w MC.
Last Look u dostawców płynności — A-Book to też nie magiczna kraina uczciwości. Prawdziwy ECN nie gwarantuje braku asymetrii. Dostawcy płynności (duże banki, niebankowi market makerzy jak XTX czy Citadel) stosują praktykę Last Look — gdy wysyłasz zlecenie do LP, w czasie przesyłu sygnału (typowo 50–250 ms) cena może się ruszyć. LP ma prawo w tym oknie odrzucić zlecenie (rejection) lub zaakceptować je z opóźnieniem. Jeśli cena ucieka na niekorzyść LP, zlecenie może zostać odrzucone albo dostać gorszy fill — w MT4 widzisz „execution rejected" lub requote. Jeśli cena ucieka na twoją niekorzyść, zlecenie jest zwykle realizowane z poślizgiem. Globalna skala: FX Global Code (GFXC, lipiec 2021) nakłada na LP wymóg transparentności wokół Last Look (Principle 17)[14], ale praktyka nie zniknęła. Implikacja: nawet u brokera prawdziwego ECN/STP grasz znaczonymi kartami, jeśli LP uznaje twój flow za „toksyczny" (regularnie wbija cię w ruch ułamki sekund przed nim). Praktyczna konsekwencja: jeśli testujesz brokera pod kątem Last Look, składaj zlecenia rynkowe w spokojnych warunkach (środek sesji LON, 30 minut po danych makro) i w stresowych (30 sekund przed/po NFP). Różnica ponad 1 pipsa w średnim slippage to sygnał, że LP traktuje twój flow asymetrycznie — czas na zmianę brokera lub uzyskanie konta z innym providerem płynności.
Spread nie jest stały — zmienia się z warunkami rynkowymi. Tabela powyżej podaje typowe wartości w spokojnej sesji londyńskiej. Ale koszt egzekucji jest stanowo-zależny:
Normalna sesja (Londyn/NY overlap): EUR/USD 0,6–1,2 pipsa.
Niska płynność (22:00–00:00 CET, rollover): EUR/USD 1,5–3 pipsy. Na parach z PLN — wielokrotnie więcej.
NFP/CPI/FOMC ±2 minuty: EUR/USD 5–15 pipsów. Twój SL na 15 pipsów może zostać wykonany samym spreadem, bez ruchu ceny mid.
Flash crash / event risk: 50+ pipsów lub całkowity brak kwotowań.
System z expectancy +0,3R liczoną na spreadzie 0,8 pipsa jest zyskowny na papierze. Jeśli regularnie handlujesz na newsach albo trzymasz pozycje przez rollover — twój realny koszt jest wyższy, a expectancy netto może być ujemna.
Porównaj realne warunki egzekucji u różnych brokerów: Ranking brokerów ECN z najniższymi spreadami.

Przykład kumulacji: swing trade EUR/USD, SL 50 pipsów, ryzyko 1R. Trzymany 4 noce.

  • Spread wejście: −0,04R
  • Spread wyjście: −0,04R
  • Slippage: −0,03R
  • Swap 4 noce: −0,08R
  • Łączny koszt: −0,19R

Backtest krzyczy, że zarobiłeś +1,8R i jesteś geniuszem. Prowizja, swap i slippage po cichu kradną z tego ok. 11%, dając ci realnie +1,61R, podczas gdy przegrana z backtestowym −1,0R daje realnie −1,19R. Przy WR 55% expectancy spada z +0,54R (backtest) do +0,35R (live). To 35% niższa expectancy — a z nią proporcjonalnie wolniejszy wzrost rachunku i wyższe RoR.

Erozja edge'u — od backtestowego brutto do realnego netto
+0,54R EDGE brutto Backtest −0,08R Spread Slippage −0,03R Swap −0,08R Koszty egzekucji +0,35R EDGE netto Live trading Wpływ na Monte Carlo Backtest RoR: 0,3% Live RoR: 4,2% 14× wyższe ryzyko ruiny Różnica = koszty, których backtest nie modelował
Brudna praktyka: backtest na spreadzie 0. Trader testuje scalpingowy EA na danych M1 — SL 8 pipsów, TP 12 pipsów. Spread w backteście: 0 (tick data od brokera nie zawierają spreadu). Wyniki: WR 58%, expectancy +0,36R, Profit Factor 2,1. Live: spread 0,8 pipsa wejście + 0,8 wyjście = 1,6 pipsa kosztu na transakcję. Na SL 8 pipsów to dodatkowe 20% straty na każdym przegranym i 13% mniejszy zysk na każdym wygranym. Expectancy netto: −0,04R. System zarabiający na backteście traci na live. Nie dlatego, że rynek się zmienił — dlatego, że spread nie istniał w symulacji.
War story: 15 stycznia 2015 — najlepsza lekcja o Risk of Ruin, która nie przyszła z Excela. SNB znosi peg EUR/CHF. Ruch: z 1,2000 do okolic 0,85 w ciągu minut — ok. 3 500 pipsów. Płynność znika. Brokerzy detaliczni nie są w stanie wykonać stop lossów — nie ma ofert po drugiej stronie. FXCM kończy dzień z dziurą 225 mln USD, bo klienci mają ujemne salda przekraczające ich depozyty. Alpari UK ogłasza upadłość tego samego dnia. Trader z pozycją long EUR/CHF, ryzykiem „2%" i SL 50 pipsów poniżej: jego stop istnieje na papierze. Fill przychodzi 2 800 pipsów dalej. Strata: nie −2%, ale ponad −100% rachunku. Konto na debecie. Żadna formuła RoR tego nie modelowała. Bootstrap MC na danych EUR/CHF z 2014 nie zawierał ani jednej transakcji z R-multiple −56. Wniosek operacyjny: RoR liczone bez uwzględnienia fat tail events to dolna granica bezpieczeństwa, nie gwarancja. Gap risk i liquidity risk to kategorie strat, których bootstrap MC nie uwzględni, jeśli nie ma ich w danych historycznych.
War story: NFP — kiedy spread zjada twojego stopa. Pierwszy piątek miesiąca, 14:30 CET. Trader wchodzi long EUR/USD, SL 15 pipsów od wejścia. Spread w normalnych warunkach: 0,8 pipsa. O 14:30:01 spread skacze do 8 pipsów. SL tradera zostaje wykonany natychmiast — spread sam zamknął różnicę między ceną bid a jego stop lossem. Trader nie stracił na ruchu rynkowym. Stracił, bo spread rozszerzył się do poziomu jego SL w ciągu sekundy. Twój edge netto liczony na spreadzie 0,8 pipsa jest fałszywy, jeśli regularnie handlujesz wokół publikacji makro. Prawdziwy koszt: średni spread ważony przez warunki rynkowe, w których faktycznie otwierasz i zamykasz pozycje. Sprawdź, jak różni brokerzy radzą sobie ze spreadem na danych: Ranking brokerów ECN.
Wykres tickowy EUR/USD podczas publikacji NFP — widoczne gwałtowne rozszerzenie spreadu z 0,8 do 8+ pipsów w ciągu sekund, z zaznaczonym momentem egzekucji stop lossa
Wykres tickowy EUR/USD podczas publikacji NFP — widoczne gwałtowne rozszerzenie spreadu z 0,8 do 8+ pipsów w ciągu sekund, z zaznaczonym momentem egzekucji stop lossa
War story: krwawa środa i iluzja zysku na carry trade. Trader łapie setup na short EUR/PLN we wtorek. Technicznie czysty sygnał, R:R ustawione na 1:2. Trzyma pozycję do czwartku rano, rynek robi dokładnie to, co zakładał — spada o 40 pipsów. Problem? W nocy ze środy na czwartek broker potrąca potrójny swap (Triple Swap Wednesday — rozliczenie T+2 pokrywa weekend). Ujemny potrójny swap na tej parze obciął znaczną część zysku — na zamknięciu w czwartek zamiast oczekiwanego +2R, trader zaksięgował marginalny profit albo stratę netto, mimo poprawnego kierunku. Koszty finansowania zjadły większość ruchu pipsowego. Expectancy twojego systemu to fikcja, jeśli ignorujesz stopy procentowe banków centralnych i kalendarz rozliczeń.
Konkretny rząd wielkości: swap na USD/TRY przy stopach ~40%. Centralny Bank Turcji (TCMB) w 2024–2025 utrzymywał stopy w okolicach 40–50%. Dla short USD/TRY (czyli long TRY): ujemny swap rzędu −15 do −30 USD na lot dziennie u typowego brokera detalu. Dla swing tradera trzymającego 5 nocy: −75 do −150 USD kosztu finansowania na lot. Jeśli planowane R = 200 USD (1% od 20 000), 5-dniowy swap na 1 locie zjada 38–75% planowanego zysku zanim rynek się ruszy. Przy triple swap (środa→czwartek) — jeszcze gorzej. Implikacja: na egzotykach z dużym dysparytetem stóp swap potrafi być dominującym kosztem, większym niż spread + slippage łącznie. MC bez modelu swapu na takich parach jest fikcją.
Zrzut ekranu z zakładki Historia konta w MT4 — transakcja z zyskiem pipsowym (kolumna Profit na plusie), ale stratą netto po uwzględnieniu kolumn Swap i Commission. Zaznaczone na czerwono.
Zrzut ekranu z zakładki Historia konta w MT4 — transakcja z zyskiem pipsowym (kolumna Profit na plusie), ale stratą netto po uwzględnieniu kolumn Swap i Commission. Zaznaczone na czerwono.

8. Ile transakcji potrzeba, żeby znać swój edge?

To zależy, jak brutalnie twój system rzuca kapitałem po ścianach (wariancja wyników) i czy chcesz znać swój edge co do ułamka, czy tylko wiedzieć, że nie grasz w kasynie. Prosta reguła kciuka:

Pewność estimacjiPotrzebna próbkaSwing (5/mies.)Day (20/mies.)
Orientacyjna (± 0,54R)~30 transakcji~6 tygodni~8 dni
Rozsądna (± 0,29R)~100 transakcji~20 tygodni~25 dni
Solidna (± 0,21R)~200 transakcji~40 tygodni~50 dni
Statystycznie istotna (± 0,15R)~400 transakcji~80 tygodni (~1,5 roku)~100 dni (~5 mies.)

Półszerokość 95% przedziału ufności: 1,96 × σ / √n, przy σ ≈ 1,5R. Np. dla n=100: 1,96 × 1,5 / 10 ≈ ±0,29R. Systemy o wyższej zmienności wyników (trend-following: σ ≈ 2–3R) wymagają znacznie większych próbek.

Rynek nie ma obowiązku dostarczyć ci próbki wtedy, kiedy kończy ci się cierpliwość. Przy 5 transakcjach miesięcznie statystycznie użyteczna próbka (100 transakcji) wymaga 20 tygodni konsekwentnej egzekucji tego samego systemu. Przez te 20 tygodni możesz mieć 3 stratne miesiące z rzędu — normalność statystyczna, nie sygnał do zmiany parametrów. Modyfikacja jednego parametru w 19. tygodniu tworzy nowy system. Twoje 95 transakcji z poprzedniej wersji należą do innej strategii. Próbka zaczyna się od zera, a ty właśnie straciłeś cztery miesiące danych, których nie odbudujesz szybciej niż handlując.

Wykres przedziału ufności expectancy w funkcji liczby transakcji — od bardzo szerokiego przy 30 transakcjach do wąskiego przy 400
Wykres przedziału ufności expectancy w funkcji liczby transakcji — od bardzo szerokiego przy 30 transakcjach do wąskiego przy 400
Dlaczego 30 transakcji to za mało. Przy wysokiej zmienności wyników (typowej dla tradingu) 30 obserwacji daje przedział ufności tak szeroki, że expectancy +0,3R mieści się w przedziale od −0,2R do +0,8R. Nie wiesz, czy zarabiasz, czy masz farta. Przy 200 transakcjach przedział zawęża się do +0,1R – +0,5R — wciąż nieprecyzyjne, ale operacyjnie użyteczne.

Walk-forward dla swing tradera z małą próbką. Tabela mówi „400 transakcji = statystycznie istotna". Swing trader z 5 transakcjami miesięcznie potrzebuje na to 6,5 roku — niewykonalne. Praktyczne wyjście: walk-forward split. Podziel dostępne dane na 70% in-sample (optymalizacja parametrów) i 30% out-of-sample (walidacja bez optymalizacji). Uruchom MC wyłącznie na out-of-sample. Wynik jest mniej precyzyjny statystycznie, ale pozbawiony overfitting bias, który dominuje na in-sample. Dla systemu z 100 historycznymi transakcjami: 70 do strojenia, 30 do MC. RoR z 30 OOS jest szerszym przedziałem niż z 400 IS, ale bardziej wiarygodnym jako oszacowanie ryzyka realnego.

9. Najczęstsze błędy w kalkulacji ryzyka

Błąd 1: Stosowanie formuły RoR dla R:R 1:1 do systemu z R:R 1:3

Formuła analityczna zaniża RoR dla systemów z niskim WR i wysokim R:R. Przy WR 35% i R:R 1:3 formuła dla R:R 1:1 daje edge = 2×0,35 − 1 = −0,30. Wynik: „system traci". Realna expectancy: 0,35 × 3 − 0,65 × 1 = +0,40R. System zarabia — ale formuła go „zabiła". Jedyną poprawną metodą jest Monte Carlo na realnym rozkładzie R-multiple.

Błąd 2: Liczenie expectancy bez kosztów transakcyjnych

Edge brutto minus koszty = edge netto. Różnica między nimi jest często 30–50% expectancy. Monte Carlo na edge brutto daje fałszywe poczucie bezpieczeństwa. Zawsze licz na edge netto — po spreadzie, prowizji, swapie i estymowanym slippage'u.

Błąd 3: Optymizm próbki

Backtest na 3 latach danych EUR/USD z optymalizowanymi parametrami. „Edge +0,8R, RoR < 0,01%". Problem: optymalizacja dobrała parametry do historii. Na out-of-sample edge spada do +0,3R, a RoR rośnie 10×. Zawsze testuj Monte Carlo na wynikach out-of-sample lub walk-forward, nie na in-sample.

Błąd 4: Ignorowanie zmienności edge'u w czasie

System z WR 55% na 3-letnim backteście miał WR 62% w 2023, 54% w 2024 i 48% w 2025 (hipotetyczny przykład). RoR policzone na WR 55% nie uwzględnia, że przez pół roku system faktycznie tracił. Rozwiązanie: podziel dane na podokresy i uruchom MC osobno dla każdego. Najgorszy podokres daje realniejszy obraz RoR niż średnia z całości.

Infografika — Błędy 1–4 w kalkulacji ryzyka: zła formuła RoR dla asymetrycznych systemów, brak kosztów transakcyjnych, optymizm próbki z overfittingu, ignorowanie zmienności edge w czasie
Infografika — Błędy 1–4 w kalkulacji ryzyka: zła formuła RoR dla asymetrycznych systemów, brak kosztów transakcyjnych, optymizm próbki z overfittingu, ignorowanie zmienności edge w czasie

Błąd 5: Zapomnienie o reżimach rynkowych i volatility clustering

Trend-following system działa dobrze w trendującym rynku. W konsolidacji — seria strat. Jeśli twoja próbka 200 transakcji obejmowała 18 miesięcy silnych trendów, MC pokaże piękne wyniki. Kiedy rynek wejdzie w 6-miesięczny range, twoje RoR eksploduje. Rozwiązanie: uwzględnij w MC dane z różnych reżimów (trend, range, kryzys). Albo: traktuj wyniki MC jako scenariusz optymistyczny i dodaj margines bezpieczeństwa.

Volatility clustering (efekt ARCH/GARCH). FX wykazuje grupowanie zmienności (Engle, 1982): okresy wysokiej zmienności następują po sobie, podobnie okresy spokoju. Implikacja dla MC: stały SL w pipsach to zmienny SL w jednostkach ATR. System z SL 50 pipsów jest de facto bardziej agresywny w low-vol (50 pipsów = 1,5 ATR) i defensywny w high-vol (50 pipsów = 0,6 ATR). MC na stałym pipsowym SL nie modeluje tego efektu — w live drawdowny w okresach wysokiej zmienności bywają znacznie głębsze niż przewiduje symulacja. Rozwiązanie: skaluj SL do bieżącego ATR, nie do stałej liczby pipsów. Albo: w MC dodaj ręczny stress test „co się stanie, gdy ATR wzrośnie 2× w trakcie próby 100 transakcji".

COT jako wczesny sygnał zmiany reżimu. Raporty COT (CFTC, tygodniowe, środa za pozycje na zamknięcie wtorku) pokazują pozycjonowanie commercials i non-commercials na FX futures z CME. Ekstremalnie jednostronne pozycjonowanie (np. non-commercials net long EUR > +200k kontraktów) historycznie poprzedzało reversal trendu — choć z wyprzedzeniem mierzonym w tygodniach, nie dniach. COT nie powie ci, gdzie kliknąć buy/sell, ale pokaże, czy spekulanci są jednostronnie zapakowani i czy twój trend-following wchodzi w zatłoczony trade. Filtrowanie próbki MC według tygodni z neutralnym vs ekstremalnym COT daje przybliżony obraz RoR w różnych reżimach pozycjonowania.

War story: długi range zabija trend-following. Trend-follower wygląda genialnie po okresie mocnych impulsów. Potem przychodzi kilkumiesięczny range i system zaczyna płacić haracz: seria małych stopów, fałszywe wybicia, kolejny stop. Excel na średniej rocznej nazywa to „przejściowym obsunięciem". Trader na żywym rachunku nazywa to miesiącem, w którym zaczyna majstrować przy parametrach — i zabija system własną ręką, zanim reżim się zmieni.

Błąd 6: Backtest na słabym feedzie brokera CFD

B-Book nie oznacza automatycznie „broker generuje dowolne kwotowania". To internalizacja ryzyka klienta — broker nie przekazuje twojej transakcji na rynek międzybankowy, tylko zajmuje przeciwną stronę (lub nettuje z innym klientem). Kwotowania nadal zwykle są oparte o feedy zewnętrzne i agregaty od LP, ale broker ma konflikt interesów i kontrolę nad warunkami egzekucji (timing fillów, slippage, requoty). Problemem nie jest sama etykieta A-Book/B-Book, tylko jakość i konstrukcja danych. Kluczowe czynniki: syntetyczne kwotowania CFD, różnice high/low między providerami, pojedyncze spikes (świece z ekstremalnym high/low niewidoczne na innych feedach) i inny model budowy świec niż na niezależnym feedzie. Wynik: backtest na słabych danych zniekształca WR i expectancy — stop lossy są wykonywane w miejscach, gdzie rynek interbank ich nie notował. Monte Carlo na takich danych to fikcja. Rozwiązanie: testuj na danych od niezależnych providerów (Dukascopy tick data, Tick Data Suite z modelowaniem zmiennego spreadu) albo przynajmniej porównaj wyniki backtestu na feedzie od dwóch różnych źródeł.

War story: demo feed — cmentarz strategii scalpingowych. Na demo EA wygląda jak maszyna do drukowania pieniędzy, bo kwotowania są czyste, fill jest grzeczny, a spread zachowuje się jak w prezentacji sprzedażowej brokera. Na live broker nie musi cię oszukiwać — wystarczy, że spread rozszerzy się o 1–2 pipsy w godzinie, w której robot robi 80% transakcji (rollover, otwarcie azjatyckie). Strategia oparta na 4-pipsowym proficie umiera nie od teorii rynku, tylko od kosztu wejścia do kasyna. Reguła: zanim podłączysz EA do live, uruchom go równolegle na demo i live z tym samym depozytem (np. 200 USD na live mikrokoncie z lotażem 0,01, 200 USD na demo z identyczną konfiguracją) przez 30 dni. Jeśli expectancy live spada o > 30% względem demo — system jest strategicznie niewykonalny w warunkach realnych, niezależnie od backtestu.
War story: złoty Graal z serwera demo. Trader kupuje EA za 2 000 USD (typowy zakres na MQL5 Market: 100–3 000 USD, w zależności od marketingowych obietnic). Backtest na danych M1 z MetaTradera od 2020 roku — idealna krzywa nachylona pod 45°, zero drawdownu. Podłącza do konta live u brokera STP. Po trzech tygodniach rachunek nie istnieje. System opierał się na łapaniu 3-pipsowych ruchów podczas nocnej konsolidacji azjatyckiej. W backteście spread był ustawiony na sztywno na 1 pips. W rzeczywistości między 23:00 a 01:00 CET spread na live rozszerzał się do 4 pipsów. Robot kupował po ask i natychmiast był na 4 pipsach straty. Algorytm perfekcyjnie optymalizował ułudę.

Błąd 7: Ignorowanie fat tails w bootstrap MC

Bootstrap MC losuje z historycznej próbki transakcji, zakładając że przyszłość ma podobny rozkład. Problem: wyniki FX mają fat tails (Mandelbrot, 2004). Flash crash CHF 2015, GBP 2016 (−1 800 pipsów w minutę po głosowaniu Brexit) — żaden backtest z 2014 roku tych zdarzeń nie zawiera. Bootstrap na „normalnych" danych nie modeluje strat rzędu −5R do −20R, które zdarzają się rzadko, ale niszczą rachunki. Dla swing tradingu bez zarządzania ekspozycją overnight: rozważ MC z parametrycznym rozkładem t-Studenta z grubymi ogonami zamiast prostego bootstrapu. To rozwiązanie dla zaawansowanych użytkowników Pythona lub oprogramowania statystycznego — większość detalistów lepiej wyjdzie na prostym bootstrap plus osobny ręczny stress test na zdarzenia ogonowe (np. „co jeśli jedna transakcja skończy się na −5R zamiast −1R?"). Niezależnie od metody: traktuj wyniki bootstrapu na „normalnych" danych jako dolną granicę ryzyka, nie jako gwarancję.

Flash crash nie pyta twojego Excela o zgodę. Bootstrap losuje tylko to, co już widział. Rynek czasem drukuje świecę, której twoje dane nigdy nie widziały: GBP flash crash 2016, CHF 2015, luki weekendowe po wyborach, decyzje banków centralnych poza konsensusem (BoJ marzec 2024 — pierwsza podwyżka stóp od 2007 r. i koniec polityki ujemnych stóp wprowadzonej w 2016 r.). Stop loss jest wtedy prośbą o wyjście, nie kontraktem na cenę. Jeśli system trzyma pozycje przez noc albo przez weekend, MC bez ręcznego stress testu jest półproduktem. Reguła: dla każdego pomyślnego wyniku MC dodaj scenariusz „jedna transakcja na 200 kończy się na −5R", drugi „jedna na 500 na −10R". Wyniki obu scenariuszy są twoim realnym przedziałem ryzyka, nie sam podstawowy bootstrap.

Błąd 8: Zwykły stop loss przez weekend — i ignorowanie GSLO

Zwykły stop loss nie chroni cię przez weekend tak, jak myślisz. Zlecenie wisi na platformie, ale jeśli rynek otworzy się luką, zostanie wykonane dopiero po pierwszej dostępnej cenie. Rynek FX zamyka się w piątek o 22:00 CET, otwiera w niedzielę o 23:00. Jeśli w weekend wydarzy się coś istotnego — wybory (Brexit 2016, prezydenckie USA 2020), wojna (24 lutego 2022), interwencja BC poza konsensusem, ruch geopolityczny — w niedzielę wieczór rynek otworzy się luką cenową (gap), pomijającą twojego SL. Twój stop ustawiony 50 pipsów poniżej zamknięcia piątkowego zostanie wykonany po pierwszej dostępnej cenie, która może być 200–500 pipsów dalej. Strata: nie −1R, ale −4R do −10R. Bootstrap MC na „normalnych" danych tego nie modeluje. Jedyną polisą na to ryzyko jest GSLO (Guaranteed Stop Loss Order) — gwarantowany stop loss, w którym broker bierze ryzyko gapu na siebie w zamian za dodatkową prowizję (zwykle 0,3–1,5 pipsa). GSLO jest dostępny u części brokerów detalu (głównie pod jurysdykcjami ASIC, FCA, CySEC) na ograniczonej liście instrumentów. Implikacja dla risk managementu: jeśli system trzyma pozycje przez weekend bez GSLO, twoje RoR z MC jest znacząco zaniżone. Alternatywa: zamykaj pozycje w piątek przed 18:00 CET (przed cięciem dźwigni) lub redukuj sizing weekendowy o 50%.

Błąd 9: Spread stały w backteście — spread żyje własnym życiem

Spreadu nie ma na liście stałych — on żyje własnym życiem. Backtest, który zakłada spread 0,8 pipsa o każdej godzinie i każdym dniu, jest fundamentalnie niewiarygodny dla strategii intraday. Reguła: w MetaTraderze testuj z modelowaniem zmiennego spreadu (Tick Data Suite, Variable Spread modeling) albo dodaj losowy spread w skrypcie MC (jak w wersji v2 powyżej). System z expectancy +0,3R liczoną na spreadzie 0,8 pipsa jest zyskowny na papierze. Jeśli regularnie handlujesz wokół publikacji makro albo trzymasz pozycje przez rollover (23:00–00:30 CET), realny średni spread może wynosić 1,5–3 pipsa, co na SL 15 pipsów oznacza 10–20% R w samym spreadzie. Twój edge netto liczony na średnim spreadzie z reklamy brokera jest fałszywy — prawdziwy koszt to średni spread ważony przez warunki rynkowe, w których faktycznie otwierasz i zamykasz pozycje.

War story: TP, który dotyka ceny na wykresie, ale zlecenie wisi otwarte. Trader łapie genialny ruch na EUR/PLN w trakcie sesji azjatyckiej. Płynności mało, ale rynek spada zgodnie z tezą. Ustawia Take Profit dla short na konkretnym poziomie. Cena uderza w TP na wykresie, a zlecenie dalej wisi otwarte. Dlaczego? Bo wykres MT4 rysuje cenę BID. Krótka pozycja zamyka się po cenie ASK. Spread na PLN w nocy rozjechał się z 8 do 40 pipsów. Zanim ASK doszło do TP, BID zdążył już zawrócić. Nad ranem pozycja, która „powinna wejść na plus", zamyka się na stop lossie z gigantycznym debetem. Wykres w MT4 nie kłamie, ale pokazuje tylko jedną stronę order booka — to jest fundamentalna informacja dla każdego, kto ustawia TP/SL na ekranie. Reguła: dla longa SL i TP są wykonywane po BID; dla shorta — po ASK. W warunkach rozszerzonego spreadu różnica między ceną na wykresie a ceną wykonania może wynosić 20–50 pipsów. Bootstrap MC tego nie modeluje, jeśli twoje dane brutto pochodzą z mid-price. Praktyczna kalibracja: w skrypcie v2 parametr spread_R_mean modeluje ten efekt — ustaw go na połowę realnego spreadu w pipsach przeliczonego na R, jeśli twoje dane R-multiple są wyliczone z mid-price zamiast z rzeczywistych BID/ASK fillów.
Model Risk Stack — pięć warstw ryzyka, których MC nie modeluje równocześnie. Każda kolejna warstwa zwiększa różnicę między modelowym RoR a realnym.
Model Risk Stack — od „backtestowych" do „realnych" strat 5. BEHAVIOURAL RISK Tilt, FOMO, łamanie reguł, lift sizing po dobrym miesiącu, panic close po stracie 4. BROKER RISK Cięcie dźwigni przed weekendem, Margin Closeout, awaria platformy, requote, B-Book konflikt 3. LIQUIDITY RISK Gap weekendowy, flash crash (CHF 2015, GBP 2016), interwencje BC, NFP spread expansion 2. EXECUTION RISK Spread, slippage asymetryczny, swap, prowizja, Last Look, Market Impact powyżej 5 lotów 1. BACKTEST RISK To, co modeluje formuła RoR i prosty bootstrap MC — wariancja WR i R:R Rosnący zakres ryzyka ↓ MC modeluje ↑ Tylko stress test Twój realny RoR = warstwa 1 + warstwy 2–5, których prosty model nie widzi. Każda dodatkowa warstwa wymaga osobnego stress testu.

10. Liczby, które musisz znać

Pięć metryk, które musisz mieć policzone na twardych danych netto, zanim wpłacisz pierwszą złotówkę na rachunek live:

  1. Expectancy netto — po wszystkich kosztach transakcyjnych. Edge brutto zostaw sprzedawcom EA. Ciebie obchodzi tylko to, co zostaje po spreadzie, prowizji, swapie, slippage'u i twojej fatalnej egzekucji.
  2. Risk of Ruin przy twoim position sizingu — Monte Carlo na 10 000 symulacji z modelem zmiennych kosztów (skrypt v2 powyżej). Akceptowalne RoR: < 1%.
  3. Mediana max drawdown — z Monte Carlo. To drawdown, który powinieneś psychologicznie zaakceptować ZANIM otworzysz pierwszą pozycję.
  4. 95. percentyl max drawdown — najgorszy scenariusz, który twój model jeszcze potrafi sobie wyobrazić. Jeśli tego nie przeżyjesz, zmniejsz ryzyko. I doliczyć trzeba osobno fat tails, których MC nie modeluje.
  5. Czas odrabiania drawdownu — ile transakcji (tygodni, miesięcy) zajmie odrobienie typowego i ekstremalnego DD.

Jeśli nie masz tych pięciu liczb, twój sizing jest zgadywanką. ESMA w analizie sprzed interwencji produktowej z 2018 r. wyliczyła odsetek tracących klientów CFD na 74–89% — i nie chodziło o brak strategii, tylko o brak tych liczb. A zgadywanki na dźwigni 1:30 mają statystycznie przewidywalny koniec: rachunek live staje się drogim kasynem z ładnym interfejsem MT4.

W następnym artykule (9.3) przejdziemy od teorii do proceduralnych reguł: ile ryzykować na pojedynczą transakcję, jak ustawić dzienny, tygodniowy i miesięczny limit strat, i co robić, kiedy go przekroczysz.

FAQ — Najczęściej zadawane pytania

Czy Monte Carlo to to samo co backtest?
Nie. Backtest to jedna historyczna ścieżka zdarzeń — konkretna kolejność wygranych i przegranych. Monte Carlo bierze te same wyniki i tasuje ich kolejność tysiące razy, generując rozkład możliwych scenariuszy. Backtest mówi: „tak wyglądało". Monte Carlo mówi: „tak mogłoby wyglądać przy innym szczęściu". MC jest bliższe realności, bo w live nie dostaniesz dokładnie tej samej sekwencji co w historii.
Excel czy Python — gdzie leży granica użyteczności przy MC?
Excel kończy się przy ok. 1 000 symulacji, a ty potrzebujesz 10 000, żeby percentyle (5. i 95.) były stabilne między kolejnymi uruchomieniami (zmiana < 0,5%). Powyżej tej granicy Python (numpy + pandas) to najprostsza i najtańsza sensowna opcja dla większości traderów — alternatywy (R, Julia, Matlab, QuantAnalyzer) są dostępne, ale wymagają większego nakładu nauki bez znaczącego zysku precyzji. 10 000 symulacji × 500 transakcji liczy się w Pythonie 1–3 sekundy zamiast 4–8 minut w Excelu. W Excelu: INDEX(A:A, RANDBETWEEN(1,COUNT(A:A))) do losowania z R-multiple, kolumny = symulacje, formuły kumulacyjne dla equity. Granica praktyczna: 1 000 kolumn. W Pythonie skrypt v2 z sekcji 6 daje stabilny RoR i percentyle z modelem zmiennych kosztów. Reguła: jeśli twoja decyzja o sizingu zależy od dokładności RoR (np. 0,5% vs 1,5% — różnica 3×), używaj Pythona. Jeśli chcesz tylko orientacyjnego obrazu — Excel wystarczy.
Ile transakcji powinienem mieć, zanim zacznę ufać wynikowi Monte Carlo?
Monte Carlo jest tak dobre, jak dane wejściowe. 30 transakcji → MC pokaże piękne wykresy, ale wnioski będą bezwartościowe (zbyt mała próbka, zbyt szeroki przedział ufności). 100 transakcji → orientacyjny obraz. 200+ → wynik operacyjnie użyteczny. Optymalne: 300–500 transakcji z konsekwentną egzekucją jednego systemu. Nie mieszaj danych z różnych systemów w jednej symulacji.
Czy Risk of Ruin 0,1% oznacza, że jestem bezpieczny?
RoR 0,1% oznacza, że w modelu 1 na 1 000 rachunków zbankrutuje. To niska wartość — ale model zakłada stałe WR, stałe R:R i niezależność transakcji. W rzeczywistości: WR zmienia się z reżimem rynku, R:R zmienia się z volatility, a transakcje bywają seryjnie skorelowane. Realny RoR jest wyższy niż modelowy. Traktuj 0,1% jako dolną granicę, nie jako gwarancję. Dlatego profesjonaliści stosują margines bezpieczeństwa — ryzykują mniej, niż model sugeruje jako „bezpieczne".
Jaka jest różnica między fixed fractional a fixed lot position sizing?
Fixed lot: stałe ryzyko nominalne, nie chroni w drawdownie (100 USD ryzyka z rachunku 10 000 to 1%, ale z rachunku 5 000 to 2%). Fixed fractional: stały % salda — automatycznie maleje gdy konto maleje, rośnie gdy konto rośnie. To standard detalu. Fixed fractional to jeden parametr — równie ważne są: limit łącznej ekspozycji na raz, korelacje między otwartymi pozycjami i zamknięcie pozycji przed event risk. Szczegóły pozycji korelowanych — artykuł 9.9.
Dlaczego nie mogę po prostu stosować Kelly criterion jako position sizing?
Pełny Kelly na detalicznym Forexie jest dla większości traderów praktycznie nieużywalny, bo prowadzi do drawdownów, których psychicznie i kapitałowo nie wytrzymają. Model zakłada niezmienną przewagę statystyczną — stałe WR, stałe R:R, niezależne transakcje, brak kosztów. Kiedy na rynek wjeżdża NFP albo bank centralny zmienia reżim, twoje wyliczenia z backtestu tracą wartość. Kelly sugeruje ~10% ryzyka dla systemu z WR 55% i R:R 1:1,5 — na takim sizingu drawdowny −50% zdarzają się regularnie. Standard profesjonalny: max pół-Kelly (2,5–5%), i nawet to jest agresywne. Więcej o Kelly w artykule 9.5.
Co jeśli mój system ma ujemną expectancy po kosztach?
Nie handluj nim. Ujemna expectancy netto nie potrzebuje dalszej debaty — to nie strategia, tylko kosztowny nawyk. Wróć do etapu projektowania: sprawdź, czy edge istnieje po odliczeniu realnych kosztów (spread, slippage, swap, prowizja). Jeśli edge brutto jest dodatni, ale netto ujemny — albo zmień timeframe (dłuższy TF = niższy koszt na R), albo zmień instrument (niższy spread), albo zmień brokera (ECN vs B-Book). Jeśli edge brutto jest ujemny — system nie działa. Żadna ilość optymalizacji position sizingu nie zamieni systemu bez przewagi w zyskowny.
Czy drawdown −20% to dużo?
To zależy od systemu. Dla scalpera z WR 65% i R:R 1:0,8 — drawdown −20% to sygnał, że coś jest nie tak (oczekiwany max DD ≈ −8–12%). Dla trend-followera z WR 35% i R:R 1:3 — drawdown −20% to normalny koszt prowadzenia biznesu (oczekiwany max DD ≈ −15–25%). Monte Carlo pokaże ci, jaki max DD jest „normalny" dla TWOJEGO systemu. Jeśli realne obsunięcie przekracza 95. percentyl z MC — albo rynek się zmienił, albo twoja egzekucja się pogorszyła. W obu przypadkach: redukuj ryzyko.
Czy stop loss gwarantuje maksymalną stratę?
Nie. Stop loss to zlecenie rynkowe, które aktywuje się po osiągnięciu ceny — ale nie gwarantuje wykonania po tej cenie. Przy luce cenowej (gap), flash crashu lub braku płynności (jak CHF 15 stycznia 2015) fill może przyjść dziesiątki lub setki pipsów dalej. Twoje „ryzykuję 1%" zakłada ciągłość notowań — a rynek nie jest zobowiązany do ciągłości. Jedyny stop gwarantujący cenę to guaranteed stop loss (GSLO), który oferuje część brokerów za dodatkową premię. Bez GSLO każdy stop loss to życzenie, nie gwarancja. To fundamentalnie ważne dla kalkulacji RoR: model zakłada, że strata na przegranej = −1R. W rzeczywistości przy event risk może wynosić −2R, −5R lub więcej. Więcej o tym w artykule 9.10 (Event risk).

Dla zaawansowanych: serial correlation i rozkład R-multiple

Korelacja transakcji w Monte Carlo. Podstawowy bootstrap MC zakłada niezależność transakcji — losuje z powtórzeniami. Żeby uwzględnić serial correlation: użyj block bootstrap (Künsch, 1989; Politis & Romano, 1994) — zamiast losować pojedyncze transakcje, losuj bloki kolejnych 5–10 transakcji. To zachowuje lokalne zależności (np. serie strat w konsolidacji). Badania nad mikrostrukturą rynków FX (Evans & Lyons, 2002; Berger et al., BIS Working Papers, 2008) pokazują volatility clustering i clustering of order flow, co przekłada się na seryjnie skorelowane straty w środowiskach wysokiej zmienności. Standard bootstrap, który losuje transakcje niezależnie, może zaniżać prawdopodobieństwo długich serii strat. Dla próbki < 200 transakcji standard bootstrap wystarczy jako przybliżenie, ale traktuj wynik jako optymistyczny.

Rozkład R-multiple a wyniki MC. Tekst dla uproszczenia mówi o stałym R:R (1:1,5, 1:3), ale w rzeczywistości każda transakcja ma inny R-multiple: +0,8R (TP nieosiągnięty), +4,2R (trailing stop złapał ruch), −1,3R (slippage na gapie). MC uruchomione na rzeczywistym rozkładzie R-multiple daje inny wynik niż MC na uproszczonym stałym R:R × WR. Jeśli masz 200+ transakcji — użyj ich pełnego rozkładu. Jeśli masz mniej — uproszczenie jest akceptowalne, ale pamiętaj, że zaniża ryzyko ogonów.

Źródła i bibliografia

  1. Vince R., The Mathematics of Money Management, Wiley, 1992. Formuły Risk of Ruin i position sizing.
  2. Kaufman P., Trading Systems and Methods, 6th ed., Wiley, 2019. Monte Carlo w kontekście systemów transakcyjnych.
  3. Van Tharp, Trade Your Way to Financial Freedom, McGraw-Hill, 2006. R-multiple i expectancy jako metryki systemu.
  4. Thorp E.O., A Man for All Markets, Random House, 2017. Kelly criterion — teoria i praktyczne zastosowania.
  5. Feller W., An Introduction to Probability Theory and Its Applications, Vol. 1, 3rd ed., Wiley, 1968. Gambler's Ruin — formalne rozwiązanie.
  6. Elder A., Trading for a Living, Wiley, 1993. Zasada 2% i psychologia zarządzania ryzykiem.
  7. Barber B., Odean T., „Trading is hazardous to your wealth", Journal of Finance, 55(2), 2000. Overconfidence bias i wpływ na wyniki tradingu.
  8. Mandelbrot B., Hudson R.L., The (Mis)behavior of Markets, Basic Books, 2004. Fat tails i ograniczenia modeli gaussowskich w finansach.
  9. Taleb N.N., Fooled by Randomness, Random House, 2001. Rola losowości w interpretacji wyników tradingu.
  10. ESMA, „Final Report: Product intervention measures on CFDs", 2018. Regulacja dźwigni i stop-out w UE.
  11. Lo A.W., MacKinlay A.C., „Stock Market Prices Do Not Follow Random Walks", Review of Financial Studies, 1(1), 1988. Serial correlation i jej wpływ na modelowanie serii strat.
  12. FXCM Inc., SEC Filing 8-K, 16 stycznia 2015. Strata 225 mln USD z tytułu ujemnych sald klientów po decyzji SNB — źródło pierwotne do war story CHF 2015.
  13. U.S. Commodity Futures Trading Commission (CFTC), Press Release: $1.4 Billion in Penalties for Banks' Manipulation of Foreign Exchange Benchmark Rates, listopad 2014; UK Financial Conduct Authority (FCA), Final Notices for Barclays, UBS, Citibank, JPMorgan, RBS, 2014–2015. Łączne kary za manipulacje FX benchmarkami (w tym WM/Reuters Fix) przekraczające 5,8 mld USD.
  14. Global Foreign Exchange Committee (GFXC), FX Global Code, lipiec 2021 — Principle 17 i aneksy o Last Look. Standardy branżowe dla zachowania uczestników rynku FX, w tym wymóg transparentności mechanizmu Last Look u dostawców płynności.
  15. Bank of England, Markets Committee Report on the GBP Flash Crash of 7 October 2016, styczeń 2017. Analiza mikrostruktury i braku płynności w trakcie wydarzenia.
  16. Engle R.F., „Autoregressive Conditional Heteroskedasticity with Estimates of the Variance of United Kingdom Inflation", Econometrica, 50(4), 1982. Podstawowy model ARCH i koncepcja grupowania zmienności (volatility clustering).
  17. Künsch H.R., „The Jackknife and the Bootstrap for General Stationary Observations", Annals of Statistics, 17(3), 1989; Politis D.N., Romano J.P., „The Stationary Bootstrap", Journal of the American Statistical Association, 89(428), 1994. Metody block bootstrap i stationary bootstrap dla danych zależnych czasowo.
  18. Evans M.D.D., Lyons R.K., „Order Flow and Exchange Rate Dynamics", Journal of Political Economy, 110(1), 2002; Berger D.W. et al., „Order Flow and Exchange Rate Dynamics in Electronic Brokerage System Data", BIS Working Papers, 2008. Mikrostruktura FX, order flow i zależności w przepływach klientów.
  19. Onnela J.-P. et al., „Dynamic Asset Trees and Black Monday", Physica A, 324(1–2), 2003. Korelacja tick volume z prawdziwym wolumenem międzybankowym (rzędu 0,7–0,9) — punkt odniesienia do wykorzystania tick volume z MT4/MT5 jako proxy aktywności, choć nie zastępuje on wolumenu transakcyjnego z CME FX futures (6E/6B/6J).

Jarosław Wasiński LinkedIn

Redaktor naczelny MyBank.pl • Analityk finansowy i rynkowy

mgr Jarosław Wasiński — niezależny analityk i praktyk z ponad 20-letnim doświadczeniem w sektorze finansowym. Twórca i redaktor naczelny portalu MyBank.pl, dostarczającego rzetelną wiedzę o finansach osobistych, bankowości i inwestycjach od 2004 roku.

  • Bankowość i produkty finansowe: porównania kont osobistych i firmowych, analiza taryf opłat, testy aplikacji mobilnych, recenzje kredytów, lokat i kart kredytowych — z naciskiem na realne koszty i ukryte opłaty.
  • Rynki finansowe i makroekonomia: analiza fundamentalna rynków walutowych (Forex) i makroekonomicznych od 2007 roku, zarządzanie ryzykiem kapitału, struktura rynków OTC.
  • Kryptowaluty: analiza rynku kryptowalut, mechanizmów blockchain i tokenizacji aktywów w kontekście portfela inwestycyjnego.

Autor setek komentarzy rynkowych, analiz porównawczych produktów bankowych i materiałów edukacyjnych. Zwolennik transparentności — każdy ranking i recenzja na MyBank.pl opiera się na jawnej metodologii i zweryfikowanych źródłach (taryfy banków, regulaminy promocji, dane NBP).

Treści mają charakter edukacyjny i informacyjny — nie stanowią porady inwestycyjnej, rekomendacji ani oferty. Decyzje finansowe podejmuj na podstawie własnej analizy i konsultacji z doradcą.