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.
- 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łu | Zysk do odrobienia | A) 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):
| Strata | Swing (~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.
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,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.
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)
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 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.
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.
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ę"
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.
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
- 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,
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.
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 |
| SL (pipsów) | Spread 0,8 pipsa | Spread 2 pipsy | Spread 5 pipsów (NFP) |
|---|---|---|---|
| 5 (scalping) | 16% R | 40% R | 100% R — zjada cały SL |
| 10 (scalping/intraday) | 8% R | 20% R | 50% R |
| 20 (intraday) | 4% R | 10% R | 25% R |
| 50 (swing) | 1,6% R | 4% R | 10% R |
| 100 (swing/position) | 0,8% R | 2% R | 5% 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.
asym_slippage_factor=1.5) modeluje tę asymetrię w MC.• 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.
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ść 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 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.
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.
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.
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ł.
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ę.
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.
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.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:
- 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.
- 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%.
- Mediana max drawdown — z Monte Carlo. To drawdown, który powinieneś psychologicznie zaakceptować ZANIM otworzysz pierwszą pozycję.
- 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.
- 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?
Excel czy Python — gdzie leży granica użyteczności przy MC?
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 (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
- 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.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).