Monte Carlo Simulations
10 min czytania
Use randomized simulations to stress-test strategies, estimate drawdown distributions, and build confidence intervals around expected returns.
10 min czytania
Use randomized simulations to stress-test strategies, estimate drawdown distributions, and build confidence intervals around expected returns.
Symulacja Monte Carlo to technika statystyczna, która uruchamia tysiące losowych wariantów strategii tradingowej, aby oszacować rozkład możliwych wyników — drawdownów, krzywych kapitału, zwrotów końcowych. Dla traderów najczęstsza forma to trade-shuffle bootstrap: ponowne próbkowanie historycznych wyników transakcji w celu zbudowania przedziałów ufności wokół tego, co może się wydarzyć.
Losowość potrafi zabić strategię, która na papierze wygląda świetnie. Testy Monte Carlo pokazują, czy Twoja przewaga (edge) przetrwa chaos.
Wymagana wiedza wstępna: Wariancja i odchylenie standardowe, Skośność i kurtoza. Kontynuacja w: Prawo wielkich liczb i przedziały ufności.
Masz:
Ale prawdziwe pytanie brzmi:
Czy Twój system przetrwa losowość?
To, że strategia działała historycznie, nie znaczy, że jest odporna. Musisz przetestować:
Do tego właśnie służy symulacja Monte Carlo — i każdy poważny trader powinien jej używać.
Monte Carlo dla traderów występuje w dwóch wariantach: (1) trade-shuffle — bootstrap historycznych transakcji, gdzie próbkujesz ze zwracaniem, aby symulować dłuższe historie, lub bez zwracania, aby permutować ten sam zbiór; oraz (2) price-path MC, który symuluje syntetyczne serie cenowe z dopasowanego procesu (geometryczny ruch Browna, model Hestona).
Większość artykułów dla retail traderów używa pojęcia "Monte Carlo" w znaczeniu trade-shuffle bootstrap. To właśnie pokrywa reszta tej lekcji — i to właśnie zakłada niezależność Twoich transakcji.
Pomaga zobaczyć:
To nie jest backtest nowych transakcji — to przetasowanie rzeczywistych wyników, aby przetestować stresowo, jak się rozwijają. I co kluczowe: trade-shuffle MC zakłada, że wynik[i] jest niezależny od wyniku[i-1]. To założenie się rozpada dla strategii podążających za trendem i dla każdej strategii z autokorelacją w P&L.
| Wariant | Co jest losowane | Kluczowe założenie | Najlepsze dla |
|---|---|---|---|
| Trade-shuffle (bootstrap) | Kolejność historycznych transakcji | Transakcje są niezależne | Strategie mean-reverting / scalpingowe z dużą liczbą transakcji |
| Price-path (GBM / Heston) | Syntetyczne ceny z procesu parametrycznego | Zwroty podążają za tym procesem | Wypłaty z opcji, derywaty, dobór bufora kapitałowego |
| Walk-forward MC | Ponowne uruchomienie strategii na permutowanych foldach OOS | Przyszłe reżimy przypominają foldy OOS | Walidacja, że backtest nie został nadmiernie dopasowany |
Załóżmy, że:
Brzmi świetnie. Ale:
| Sekwencja A | Sekwencja B |
|---|---|
| Wygrana, Wygrana, Przegrana, Wygrana, ... | Przegrana, Przegrana, Przegrana, Przegrana, Wygrana, ... |
| Stały wzrost kapitału | Załamanie emocjonalne, ryzyko konta |
Te same transakcje. Inna kolejność. Radykalnie różne krzywe kapitału.
Monte Carlo pokazuje, jak źle może się to czuć — nawet jeśli Twoja przewaga jest dobra.
Użyj jej do ustawienia:
"Mój backtest pokazał 10% drawdown." Monte Carlo mówi: "Biorąc pod uwagę mój historyczny rozkład transakcji i przy założeniu niezależności, drawdown na 5. percentylu to 20–25%."
MC nie przewiduje — kwantyfikuje, co mogłoby się stać, jeśli Twoja próbka jest reprezentatywna i Twoje założenia się utrzymują. Jeśli reżim się zmieni, symulacja nic Ci nie powie o nowym świecie. Wariancja jest bardziej chaotyczna w realnym życiu — Monte Carlo eksponuje wyłącznie wariancję, która była już w Twojej próbce.
Dwa systemy mogą mieć ten sam średni zwrot, ale:
Monte Carlo sprawia, że te różnice są widoczne i mierzalne.
Wyniki MC są tak uczciwe jak ich dane wejściowe. Trzy pułapki:
Powiązana pułapka: bootstrapowanie rozkładu zwrotów z grubymi ogonami niedoszacowuje ogona, ponieważ sama próbka pominęła rzadkie zdarzenie. Najgorszy realny drawdown prawie zawsze leży poza kopertą MC.
Wypisz 100+ wyników transakcji (w R lub % zysku/straty)
Użyj Excela lub Google Sheets, aby:
RAND + SORT (próbkowanie bez zwracania — te same transakcje, nowa sekwencja)INDEX(trades, RANDBETWEEN(1, N)) (dopuszcza duplikaty — przydatne, by z 100 historycznych transakcji wyprojektować 500 przyszłych)Sumuj kumulacyjnie każdy przebieg
Powtórz 5 000+ razy
Wykreśl krzywe kapitału na 5. / 50. / 95. percentylu
| Metoda | Formuła Excel | Zastosowanie wyniku | Założenie |
|---|---|---|---|
| Ze zwracaniem (bootstrap) | INDEX(range, RANDBETWEEN(1,N)) | Projekcja dłuższych przyszłych historii | Transakcje są próbkami i.i.d. ze stabilnego rozkładu |
| Bez zwracania (permutacja) | RAND + SORT | Pokazuje, jak te same transakcje się przestawiają | Próbka jest uniwersum; zmienia się tylko sekwencja |
import numpy as np
trades = np.array([...]) # array of R-multiples per historical trade
N_RUNS, N_TRADES = 10_000, len(trades)
equity_paths = np.empty((N_RUNS, N_TRADES))
for i in range(N_RUNS):
sample = np.random.choice(trades, size=N_TRADES, replace=True) # bootstrap
equity_paths[i] = np.cumsum(sample)
drawdowns = equity_paths - np.maximum.accumulate(equity_paths, axis=1)
max_dd = np.min(drawdowns, axis=1)
print(np.percentile(max_dd, [5, 50, 95]))
Biblioteki: numpy / pandas do matematyki; vectorbt i quantstats opakowują to w raportowanie i statystyki Sharpe / Sortino / drawdown od ręki. backtesting.py oferuje analogiczne narzędzie bootstrap na księdze transakcji.
| Metryka | Znaczenie |
|---|---|
| Maksymalny drawdown (najgorszy przebieg) | Kapitał, który możesz stracić przed odbiciem |
| Mediana zwrotu | Co dzieje się najczęściej (oczekiwanie) |
| 95% przedział ufności | Granice o wysokiej pewności dla kapitału |
| Najlepszy przebieg | Nie spodziewaj się tego — to marzenie |
| Najgorszy przebieg | Planuj pod to — to cena gry |
Jeśli Twoja przewaga rozpada się w symulacji — prawdopodobnie nie jest odporna w realnym tradingu. Jeśli przetrwa symulację, wykluczyłeś część trybów awarii; nie udowodniłeś przetrwania.
Monte Carlo pokazuje wariancję i rozkład, w tym skośność i kurtozę Twoich ścieżek kapitału — bootstrap niedoszacowuje grubych ogonów, gdy próbka je pominęła. EV daje Ci tendencję centralną. Kryterium Kelly'ego pomaga odpowiednio dobierać wielkość pozycji względem rozkładu drawdownów, który produkuje MC. Prawo wielkich liczb mówi Ci, ile przebiegów potrzebujesz, zanim pasma percentyli się ustabilizują.
Razem tworzą plan wzrostu oparty na danych, który jest emocjonalnie i statystycznie zrównoważony.
Lektura uzupełniająca: Ralph Vince, The Mathematics of Money Management (1992) — fundamentalne ujęcie ponownego próbkowania transakcji do oszacowania ryzyka. Howard Bandy, Quantitative Trading Systems — rozdział o walidacji backtestów metodą bootstrap. Marcos López de Prado, Advances in Financial Machine Learning (2018) — kombinatoryjna oczyszczona walidacja krzyżowa jako uczciwsza alternatywa dla naiwnego MC. Andreas Clenow, Following the Trend (2013) — wprost o tym, dlaczego zastrzeżenia bootstrapu mają znaczenie dla strategii z autokorelacją w P&L.
Obserwuj, jak 20 symulowanych ścieżek kapitału rozbiega się od tego samego kapitału początkowego. Dostosuj win rate i kliknij Przetasuj, aby zobaczyć, jak losowość tworzy dziko różne wyniki z identycznych parametrów przewagi.
Ten sam zbiór transakcji w różnych kolejnościach produkuje radykalnie różne krzywe kapitału i drawdowny. Seria strat na początku może rozbić Twój próg tolerancji ryzyka, nawet jeśli długoterminowa wartość oczekiwana jest dodatnia — Monte Carlo przetasowuje kolejność, by ujawnić, jak źle ścieżka może się czuć.
Dla każdego losowego przebiegu MC raportuje najgorszy drawdown, medianę zwrotu i 95% przedział ufności na kapitale końcowym. Po agregacji tysięcy przebiegów daje Ci rozkład wyników kapitałowych — ale tylko warunkowo, jeśli Twoja historyczna próbka jest reprezentatywna.
Nie. Monte Carlo pokazuje, co mogłoby się wydarzyć przy danej próbce i założeniach (niezależność, stacjonarność). Nie prognozuje przyszłości. Realny najgorszy przypadek prawie zawsze leży poza kopertą MC, ponieważ zmiana reżimu, flash crash czy upadek brokera nie były w próbce.
Backtesty pokazują jedną ścieżkę. Monte Carlo pokazuje rozkład ścieżek — warunkowo, jeśli Twoja próbka jest reprezentatywna.
Realny najgorszy przypadek prawie zawsze leży poza kopertą MC, ponieważ zmiana reżimu, flash crash, upadek brokera nie znalazły się w Twoich 200 transakcjach. Używaj MC do ustawiania dolnych granic bólu, nigdy górnych. Jeśli MC mówi, że maks. DD to 20%, planuj pod 35%.
Kasyno nie symuluje. Już zna rozkład. Ty nie znasz — więc robisz bootstrap i pozostajesz pokorny wobec luki między swoją próbką a przyszłością.