Matematyka strat: asymetria odrabiania kapitału i Risk of Ruin
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, które pokażą ci rozkład możliwych equity curve dla twojego systemu, i praktyczne narzędzia do policzenia tego samemu. Jeśli tego nie policzysz, nie zarządzasz ryzykiem — zgadujesz rozmiar własnej straty.
- 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ę. Teraz pełna tabela z trzema dodatkowymi kolumnami: czas odrabiania przy swing tradingu (5 transakcji/miesiąc) i day tradingu (20 transakcji/miesiąc), obie przy expectancy +0,4R netto i 1% ryzyka. Ważne: tabela zakłada stałą kwotę ryzyka na transakcję (ekwiwalent fixed lot / fixed risk), nie fixed fractional od bieżącego equity. Dzięki temu pokazuje dolną granicę czasu recovery. W realnym tradingu fixed fractional wydłuży odrabianie — bo zyski są liczone od coraz mniejszej bazy (szczegóły w sekcji 2).
| Strata kapitału | Zysk do odrobienia | Transakcje (0,4R, 1%) | Swing (~5/mies.) | Day (~20/mies.) |
|---|---|---|---|---|
| −5% | +5,3% | ~14 | ~3 tygodnie | ~3 dni robocze |
| −10% | +11,1% | ~29 | ~6 tygodni | ~7 dni roboczych |
| −15% | +17,6% | ~48 | ~10 tygodni | ~12 dni |
| −20% | +25,0% | ~70 | ~14 tygodni | ~18 dni |
| −25% | +33,3% | ~96 | ~19 tygodni | ~24 dni |
| −30% | +42,9% | ~122 | ~24 tygodnie | ~31 dni |
| −40% | +66,7% | ~185 | ~37 tygodni | ~46 dni |
| −50% | +100,0% | ~290 | ~58 tygodni (>1 rok) | ~73 dni (~3,5 mies.) |
| −60% | +150,0% | ~450 | ~90 tygodni (~1,7 roku) | ~113 dni (~5,5 mies.) |
| −70% | +233,3% | ~710 | ~142 tygodnie (~2,7 roku) | ~178 dni (~9 mies.) |
| −80% | +400,0% | ~1 250 | ~250 tygodni (~4,8 roku) | ~313 dni (~16 mies.) |
| −90% | +900,0% | ~3 000 | ~600 tygodni (~11,5 roku) | ~750 dni (~3 lata) |
Kalkulacja zakłada stałą expectancy +0,4R netto na transakcję z ryzykiem 1% — warunki optymistyczne. Realnie: expectancy fluktuuje, serie strat wydłużają recovery, a koszty transakcyjne rosną w okresach niskiej zmienności. Traktuj te liczby jako dolną granicę czasu odrabiania.
Kluczowa obserwacja: krzywa asymetrii nie jest liniowa — jest wypukła (hiperboliczna: recovery = 1/(1−DD) − 1). Między −5% a −20% 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.
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:
| Faza | Kapitał | 1% ryzyka (USD) | Zysk +0,4R netto (USD) | Efekt |
|---|---|---|---|---|
| Start | 10 000 | 100 | +40 | Pełna prędkość wzrostu |
| Po −15% DD | 8 500 | 85 | +34 | Wolniejsze straty, ale też wolniejsze zyski |
| Po −30% DD | 7 000 | 70 | +28 | Odrabianie o 30% wolniejsze niż na starcie |
| Po −50% DD | 5 000 | 50 | +20 | Odrabianie 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ę.
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 rate | Edge | Ryzyko 0,5% (N=100) | Ryzyko 1% (N=50) | Ryzyko 2% (N=25) | Ryzyko 5% (N=10) | Ryzyko 10% (N=5) |
|---|---|---|---|---|---|---|
| 52% | 0,04 | 0,02% | 1,3% | 11,3% | 44,9% | 67,0% |
| 55% | 0,10 | < 0,01% | 0,1% | 0,6% | 13,7% | 37,0% |
| 58% | 0,16 | < 0,01% | < 0,01% | < 0,01% | 3,3% | 18,2% |
| 60% | 0,20 | < 0,01% | < 0,01% | < 0,01% | 1,1% | 10,7% |
Ruina zdefiniowana jako −50% kapitału. Formuła WYŁĄCZNIE dla R:R 1:1. Dla asymetrycznych R:R patrz sekcja 4.
Kluczowe wnioski z tabeli:
- Przy WR 55% i ryzyku 1% — RoR wynosi 0,1%. Jeden rachunek na tysiąc. Dla większości systemów detalicznych to akceptowalny poziom.
- Przy WR 55% i ryzyku 5% — RoR skacze do 13,7%. Co siódmy rachunek. A to jest modelowe RoR — realnie, po kosztach egzekucji, będzie wyższe.
- Przy WR 52% (ledwie powyżej 50%) i ryzyku 2% — RoR wynosi 11,3%. System niby „zarabia", ale z takim position sizingiem co dziesiąty rachunek zostanie wyczyszczony.
- 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.
Ograniczenia formuły analitycznej
Formuła powyżej ma cztery poważne ograniczenia, których nie wolno zignorować:
- 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.
- 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.
- 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.
- 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.
4. RoR dla asymetrycznych systemów (R:R ≠ 1:1)
Większość realnych systemów ma asymetryczne R:R, a koszt wejścia sprawia, że każda pozycja startuje od ujemnego wyniku netto — spread i prowizja musisz odrobić, zanim zobaczysz jakikolwiek zysk. 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 systemu | WR | R:R | Expectancy/trade | RoR (1% risk, MC 10k sym.) | RoR (2% risk, MC) |
|---|---|---|---|---|---|
| Scalping agresywny | 62% | 1:0,8 | +0,12R | ~0,8% | ~6,5% |
| Day trading standard | 48% | 1:1,8 | +0,30R | ~0,2% | ~2,1% |
| Swing trend-following | 38% | 1:3,0 | +0,52R | ~0,1% | ~0,9% |
| Position macro | 32% | 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.
Wniosek: trend-following z WR 35% sprawi, że będziesz czuł się jak idiota przez 65% czasu. Emocjonalnie to tortura — serie po 5–7 strat z rzędu są statystyczną normalnością przy 500 transakcjach, nie sygnałem do wyłączenia systemu. 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.
5. Symulacja Monte Carlo — co to jest i po co ci to
Monte Carlo to metoda obliczeniowa, która 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?"
Twój backtest to jedna ścieżka zdarzeń. Monte Carlo generuje tysiące ścieżek, losowo tasując kolejność wygranych i przegranych (przy zachowaniu tego samego WR i R:R). Wynik: rozkład equity curve — od najlepszego scenariusza po najgorszy. Z tego rozkładu odczytujesz:
- Medianowy drawdown — typowe obsunięcie, którego powinieneś się spodziewać
- Maksymalny drawdown (95. percentyl) — najgorszy rozsądny scenariusz. Jeśli nie przeżyjesz tego DD, system jest za agresywny
- 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ę"
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.
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.
a) Metoda: bootstrap na wynikach transakcji
- Zbierz dane — lista wyników transakcji w R-multiple (np. −1R, +1,8R, −1R, +2,3R, −1R, +1,5R…). Minimum 100 transakcji, optymalnie 200+.
- Losuj z powtórzeniami — wyciągnij 500 losowych transakcji z twojej próbki (bootstrap). Każda transakcja ma takie samo prawdopodobieństwo wylosowania.
- Oblicz equity curve — startując od 10 000 USD z 1% ryzyka na transakcję, przelicz saldo po każdej wylosowanej transakcji.
- Powtórz 10 000 razy — za każdym razem inna losowa kolejność.
- Odczytaj statystyki — mediana, 5. i 95. percentyl końcowego salda, max drawdown, RoR.
b) Narzędzia
| Narzędzie | Koszt | Uwagi |
|---|---|---|
| Excel / Google Sheets | Darmowy | RANDBETWEEN + tabela wyników. Wystarczy do 1 000 symulacji. Powyżej — wolny. |
| Python (numpy/pandas) | Darmowy | 10 000 symulacji w sekundy. Gotowy skrypt poniżej. |
| Tick Data Suite (TDS) | ~65 EUR/rok | Modelowanie zmiennego spreadu i slippage na tick data MT4/MT5. Standard do backtestu przed MC. |
| Edgewonk | ~170 USD/rok | Wbudowany Monte Carlo. Importuje dane z MT4/MT5. |
| QuantAnalyzer | ~150 EUR jednorazowo | Zaawansowane MC z analizą robustness. Dla EA/algo traderów. |
| Myfxbook Monte Carlo | Darmowy | Ograniczone — basic MC na danych z połączonego konta. |
Policz to sam: zanim wpiszesz dane do MC, przelicz realną wartość pipsa i lota dla swoich parametrów za pomocą Kalkulatora Wartości Pipsa i Kalkulatora Lotów.
c) Na co patrzeć w wynikach
| Metryka | Co mówi | Akceptowalny zakres |
|---|---|---|
| Mediana końcowego salda | Typowy wynik po 500 transakcjach | > kapitał startowy (system zarabia) |
| 5. percentyl końcowego salda | Wynik w pesymistycznym scenariuszu | > 70% kapitału (przeżyjesz) |
| Mediana max drawdown | Typowe obsunięcie, którego się spodziewaj | < −25% |
| 95. percentyl max drawdown | Najgorszy 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):
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 in sample:
capital *= (1 + r * 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) # najgorszy drawdown (5. percentyl)
return {"RoR": f"{ror:.2%}",
"Median Max DD": f"{med_dd:.1%}",
"Worst-Case DD (P5)": f"{worst_dd:.1%}"}
# Przykład — wklej własne R-multiple z MT4/MT5:
moje_transakcje = 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))
Skrypt używa fixed fractional (linia capital *= (1 + r * risk_pct)). Zmień risk_pct na swój procent ryzyka, ruin_level na próg ruiny. Wynik: RoR, mediana max drawdown i 5. percentyl (pesymistyczny scenariusz).
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ć
| Koszt | Typowa wartość (EUR/USD) | Wpływ na R-multiple | Uwagi |
|---|---|---|---|
| Spread (wejście) | 0,6–1,2 pipsa | −0,03R do −0,06R | Zależy od pory i par |
| Spread (wyjście SL/TP) | 0,6–1,2 pipsa | −0,03R do −0,06R | Na SL zwykle gorszy niż na TP (rynek leci w kierunku twojego stopa) |
| Prowizja ECN | 3–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,04R | Na 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/noc | Kumuluje się przy 3+ nocach |
| Triple Swap (środa→czwartek) | 3× swap dzienny | −0,06R jednorazowo | Rozliczenie 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 slippage | Zmienny | −0,01R do −0,05R | U 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 |
• 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
Zwycięska transakcja z backtestowym +1,8R daje realnie +1,61R. 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.
8. Ile transakcji potrzeba, żeby znać swój edge?
Odpowiedź zależy od zmienności twojego systemu (odchylenie standardowe R-multiple) i od tego, jak precyzyjnie chcesz znać expectancy. Prosta reguła kciuka:
| Pewność estimacji | Potrzebna próbka | Swing (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 to nie mikrofalówka. Przy 5 transakcjach w miesiącu potrzebujesz pół roku mechanicznego wciskania przycisków, zanim próbka w ogóle zacznie być statystycznie użyteczna. Zmienisz choćby jeden parametr w 19. tygodniu? Wracasz na start — modyfikacja systemu w trakcie zbierania próbki unieważnia całe liczenie.
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.
Błąd 5: Zapomnienie o reżimach rynkowych
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.
Błąd 6: Backtest na słabym feedzie brokera CFD
Problemem nie jest sama etykieta A-Book/B-Book, tylko jakość i konstrukcja danych — choć dotyczy to w szczególności rachunków w modelu market maker / B-Book, gdzie broker sam generuje kwotowania. 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ł.
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ę.
10. Liczby, które musisz znać
Jeśli nie masz policzonych tych pięciu metryk na twardych danych netto, to nie masz systemu — masz drogie hobby z dostępem do dźwigni finansowej:
- Expectancy netto — po wszystkich kosztach transakcyjnych. Jeśli jest ujemna — nie handluj.
- Risk of Ruin przy twoim position sizingu — Monte Carlo na 10 000 symulacji. Akceptowalne RoR: < 1%.
- Mediana max drawdown — z Monte Carlo. To drawdown, który powinieneś psychologicznie zaakceptować ZANIM otworzy się pierwszą pozycję.
- 95. percentyl max drawdown — najgorszy rozsądny scenariusz. Jeśli tego nie przeżyjesz, zmniejsz ryzyko.
- Czas odrabiania drawdownu — ile transakcji (tygodni, miesięcy) zajmie odrobienie typowego i ekstremalnego DD.
Rynek nie nagradza za intencje. Nagradza za poprawnie policzone liczby — i za to, że nie handlowałeś, kiedy ich nie miałeś.
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?
Czy mogę policzyć Monte Carlo w Excelu?
Ile transakcji powinienem mieć, zanim zacznę ufać wynikowi Monte Carlo?
Czy Risk of Ruin 0,1% oznacza, że jestem bezpieczny?
Jaka jest różnica między fixed fractional a fixed lot position sizing?
Dlaczego nie mogę po prostu stosować Kelly criterion jako position sizing?
Co jeśli mój system ma ujemną expectancy po kosztach?
Czy drawdown −20% to dużo?
Czy stop loss gwarantuje maksymalną stratę?
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 — zamiast losować pojedyncze transakcje, losuj bloki kolejnych 5–10 transakcji. To zachowuje lokalne zależności (np. serie strat w konsolidacji). Badania (Lo, MacKinlay 1988) pokazują, że straty na FX bywają seryjnie skorelowane — szczególnie 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
- Vince R., The Mathematics of Money Management, Wiley, 1992. Formuły Risk of Ruin i position sizing.
- Kaufman P., Trading Systems and Methods, 6th ed., Wiley, 2019. Monte Carlo w kontekście systemów transakcyjnych.
- Van Tharp, Trade Your Way to Financial Freedom, McGraw-Hill, 2006. R-multiple i expectancy jako metryki systemu.
- Thorp E.O., A Man for All Markets, Random House, 2017. Kelly criterion — teoria i praktyczne zastosowania.
- Feller W., An Introduction to Probability Theory and Its Applications, Vol. 1, 3rd ed., Wiley, 1968. Gambler's Ruin — formalne rozwiązanie.
- Elder A., Trading for a Living, Wiley, 1993. Zasada 2% i psychologia zarządzania ryzykiem.
- Barber B., Odean T., „Trading is hazardous to your wealth", Journal of Finance, 55(2), 2000. Overconfidence bias i wpływ na wyniki tradingu.
- Mandelbrot B., Hudson R.L., The (Mis)behavior of Markets, Basic Books, 2004. Fat tails i ograniczenia modeli gaussowskich w finansach.
- Taleb N.N., Fooled by Randomness, Random House, 2001. Rola losowości w interpretacji wyników tradingu.
- ESMA, „Final Report: Product intervention measures on CFDs", 2018. Regulacja dźwigni i stop-out w UE.
- 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.
- 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.