BTC282,7k zł1,22%
ETH8,32k zł0,69%
XRP5,01 zł0,48%
LTC200 zł0,02%
BCH1,63k zł1,22%
DOT4,33 zł1,16%

Trading algorytmiczny — automatyzacja, backtesting i pułapki

Pierwszy EA, który napisałem, działał trzy tygodnie na live. Potem wyzerował 40% konta w 11 transakcjach. Zanim to nastąpiło, czułem się geniuszem. EA nie drukuje pieniędzy. EA drukuje twoje błędy — tylko szybciej i bez litości. Jeśli system nie ma edge'u (art. 8.2), automat egzekwuje go z pełną konsekwencją, bez ani jednego momentu zawahania, prosto do zera na rachunku. ESMA w komunikatach dotyczących interwencji produktowej CFD z 2018 r. wskazywała, że w analizowanym okresie i próbie dostawców CFD 74–89% rachunków detalicznych traciło pieniądze[1]. Bot nie zmienia tego rachunku. Przenosi tylko twoje błędy z ręki do kodu i potrafi je egzekwować szybciej, częściej i bez wahania.

Trading algorytmiczny na Forex — monitor z kodem strategii, wykresem backtestowym equity curve i logami egzekucji zleceń
5 rzeczy, które wyniesiesz z tego artykułu
  • Automat nie łamie zasad. Problem w tym, że jeśli zasady są głupie, będzie ich przestrzegał do zera na rachunku. Trading algorytmiczny to programowanie, testowanie i ciągła konserwacja systemu. Jeśli nie rozumiesz logiki swojego EA, nie jesteś algo traderem — jesteś klientem, który kupił czarną skrzynkę.
  • Backtest nie mówi, ile zarobisz. Mówi, które pomysły powinieneś wyrzucić, zanim zapłacisz rynkowi za lekcję. System z 300% ROI na backteście, który zakłada stały spread 0,5 pipsa i zero slippage'u, na żywo traci pieniądze. Spread, slippage, prowizja, latency i Last Look to zmienne, nie stałe.
  • Twój EA umiera nie dlatego, że rynek stał się magicznie trudniejszy — umiera, bo dopasowałeś go do szumu z historii. Każdy nowy okres OOS brutalnie pokazuje, że system nauczył się historii, nie rynku. Degrees of freedom (liczba swobodnych parametrów) to wróg numer jeden algo tradera.
  • Ranking EA to cmentarzysko, z którego chwilowo widać tylko te nagrobki, które jeszcze stoją. Duża część retailowych EA sprzedaje wygładzoną equity curve okupioną ukrytym ryzykiem ogona — martingale, grid, brak twardego SL, agresywny averaging. EA, które straciły 80% konta, znikają z rankingu, więc kupujący widzi tylko tych, którzy jeszcze nie eksplodowali.
  • Twój EA nie handluje na Forex. Handluje na feedzie twojego brokera, w jego modelu routingu, w jego arkuszu kwotowań. Model A-Book/B-Book, LP stack, MetaTrader Bridge (PrimeXM/oneZero), Last Look po stronie LP — to wszystko zmienne systemowe, nie tło. Twoja praca: mierzyć (slippage, rejecty, czas wykonania) i porównywać między venue, nie zakładać manipulacji.

1. Czym jest trading algorytmiczny

Bot nie zrobi z ciebie rentownego tradera. Jeśli twój system nie ma edge'u, algorytm wyczyści depozyt szybciej, niż zdążysz zrozumieć, który warunek w kodzie był błędny. Zdejmuje emocje z procesu i zostawia czystą statystykę: koszty per trade × liczba trade'ów = dystans do margin call i stop-out. Spectrum jest szerokie:

  • Prosty EA (Expert Advisor) — skrypt na MT4/MT5, który wykonuje regułę typu „kup, gdy MA(20) przetnie MA(50) w górę, SL 30 pip, TP 60 pip". To nie jest strategia. To if/then z podpiętym rachunkiem.
  • System systematyczny — zdefiniowane reguły wejścia, wyjścia, sizingu, filtrów reżimu — ale egzekucja ręczna lub półautomatyczna.
  • Pełna automatyzacja — system handluje samodzielnie 24/5. Wymaga infrastruktury (VPS, monitoring), ale eliminuje emocje z egzekucji.
  • HFT (High-Frequency Trading) — tysiące transakcji dziennie, co-location bezpośrednio przy matching engine giełdy, latencja w mikrosekundach, nie milisekundach. W HFT znaczenie mają nawet różnice długości kabli i trasy sygnału liczone w mikrosekundach. VPS w Amsterdamie próbujący handlować przez matching engine w New Jersey to zupełnie inna liga opóźnień — dziesiątki milisekund zamiast mikrosekund. Nieosiągalne dla detalisty: wymaga milionów USD na infrastrukturę, fizycznej obecności w data center giełdy i własnego stosu sieciowego[6].

Czym trading algorytmiczny NIE jest: ściągnięciem EA z forum, włączeniem go na demo i czekaniem na milion. Jeśli nie rozumiesz jednocześnie logiki strategii i zachowania kodu w egzekucji, jesteś zależny od kogoś innego. To wystarczy, żeby stracić kontrolę nad ryzykiem.

Spectrum tradingu algorytmicznego — od prostego EA na MT4 przez system systematyczny po pełną automatyzację i HFT, z zaznaczeniem wymagań kapitałowych i technicznych
Spectrum tradingu algorytmicznego — od prostego EA na MT4 przez system systematyczny po pełną automatyzację i HFT, z zaznaczeniem wymagań kapitałowych i technicznych

Kupiłeś EA za stówę z MQL5 Marketu z idealnie gładką krzywą kapitału? Gratulacje. Właśnie zasponsorowałeś kogoś, kto zaszył w kodzie asymetrycznego martingale'a i modli się, żeby rynek nie złapał mocnego trendu do końca tygodnia. Pierwsze tygodnie na demo wyglądają dobrze; na live — seria strat, EA otwiera 12 pozycji na skorelowanych parach, konto traci 60%. Kupujący nie wiedział, że EA podwajał pozycje po stracie — bo nie umiał przeczytać kodu. Więcej o tym, jak weryfikować EA: sekcja 9.

2. Narzędzia — MQL, Python, cTrader, API

Wybór narzędzia zależy od tego, co chcesz zrobić, ile umiesz programować i u jakiego brokera handlujesz.

NarzędzieJęzykBacktestingLive tradingNajwiększe ryzyko błędnej implementacji
MQL4/MQL5C-podobnyWbudowany (Strategy Tester)Bezpośrednio na MT4/MT5Mylone SYMBOL_TRADE_TICK_VALUE (tick ≠ pip), pułapki 3/5-digit pricing, błędne zarządzanie magic number i zleceniami pending
PythonPythonBacktrader, Zipline, vectorbtPrzez API brokera (OANDA, IB, cTrader)Look-ahead bias przy wektoryzacji, lookback windows używające przyszłych danych, brak modelowania spreadu/komisji w domyślnych szablonach
cTrader AutomateC#WbudowanyBezpośrednio na cTraderMniejszy ekosystem przykładów = łatwo skopiować błędny wzorzec; subtelne różnice modelu egzekucji vs MT5
Pine ScriptPine ScriptWbudowany (TradingView)Ograniczony (alerty → webhook)Repaint indicators (wartości wsteczne się zmieniają), różnica między barstate.isconfirmed a tick-by-tick, brak realnej egzekucji do walidacji kosztów

Jeśli handlujesz u brokera MT4-only i jesteś detalistą, MQL4 jest wyborem z przymusu, nie z wyboru — broker narzuca platformę. MQL5 ma lepszy backtester i architekturę. Python daje narzędzia statystyczne (walk-forward, Monte Carlo), których w MQL nie dostaniesz bez bólu. Wielu algo traderów używa obu: Python do research i walidacji, MQL do egzekucji. MQL4 i MQL5 to różne języki — EA z MT4 nie działa na MT5 bez przepisania. Wybór brokera determinuje dostępne narzędzia: zanim napiszesz pierwszą linijkę, upewnij się, że twój broker oferuje potrzebny API (MQL/MT4-MT5, FIX, REST), jawną politykę wobec EA i scalperów oraz typ konta (ECN/raw vs standard) pasujący do stylu strategii — bo typ konta wpływa na model egzekucji i dostępność API.

Łańcuch egzekucji zlecenia z EA — od kodu na VPS do banku Tier 1 i z powrotem
Droga zlecenia: EA → bank Tier 1, łączna latencja kumulatywna EA / VPS MQL5/Python VPS w LD4/NY4 +kilka ms SERWER BROKERA routing, VDP? internalizacja? +kilka ms BRIDGE PrimeXM / oneZero Integral / cTrader GW +kilka–dziesiątki ms AGREGATOR LP Last Look (5–50 ms) accept / reject ±LP hold BANK TIER 1 Citi / JPM / DB / UBS centralny LP Powrót: fill (cena, znak slippage'u, timestamp) albo reject fill / reject + timestamp Detalista: kilka rzędów wielkości za wolno wobec direct FIX cross-connect Konkretne liczby silnie zależą od brokera, bridge'a i lokalizacji VPS — empiryczna zmienna do pomiaru w logu egzekucji, nie stała z arkusza.

3. Backtesting — fundament i największa pułapka

Backtesting to symulacja systemu na danych historycznych. Jest fundamentem algo tradingu — bez niego nie wiesz, czy twój pomysł ma szansę działać. Ale backtest nie mówi, ile zarobisz. Mówi, które pomysły powinieneś wyrzucić, zanim zapłacisz rynkowi za lekcję. Większość detalistów używa go odwrotnie: szuka potwierdzenia, że ich pomysł działa.

Co backtest powinien modelować

  • Spread zmienny, nie stały — stały spread 0,5 pipsa na EUR/USD to fikcja. Realny spread zmienia się z godziny na godzinę, rozszerza się przy danych. Backtest z domyślnym spreadem MT4 zawyża wyniki.
  • Slippage — na żywym rynku fill bywa gorszy niż cena zlecenia. Backtest bez modelowania slippage'u (nawet 0,5–1 pip na trade) zawyża expectancy.
  • Prowizja — na rachunku ECN: 3–7 USD per round-turn lot. Na rachunku z markup — w spreadzie. Backtest musi to uwzględniać.
  • Dane tickowe vs OHLC — backtest na danych OHLC pomija ruchy wewnątrz świec. Strategy Tester w MT5 oferuje tryb „Every tick based on real ticks" — używaj go[8]. Ale uwaga: „real ticks" to lepsza symulacja, nie prawdziwa egzekucja. Nie odtwarza kolejek, dostępności płynności ani jakości filli.

Czego backtest nie odtworzy nawet na dobrych tickach

  • Rejecty i partial fills — na żywym rynku LP może odrzucić twoje zlecenie (Last Look) lub zrealizować je częściowo. Backtest zakłada 100% fill rate po cenie zlecenia.
  • Feed vs executable price — cena widoczna na wykresie nie musi być ceną, po której dostaniesz fill. W newsach widzisz tick, którego nie dało się realnie kupić.
  • Slippage asymetryczny — na stopach slippage jest gorszy niż na limitach. Backtest tego nie modeluje, chyba że programujesz to ręcznie.
  • Rollover i spread nocny — między 23:00 a 00:00 czasu serwera spready na crossach (np. GBP/NZD) mogą skoczyć z 3 do 40 pipsów. EA bez filtra blokującego handel w tej godzinie zostanie zmasakrowany przez fałszywe wycięcia SL.
  • Broker changing LP stack — twój broker może zmienić dostawcę płynności w dowolnym momencie. Dane historyczne nie odzwierciedlają przyszłych warunków egzekucji.
  • Mid-price bias — strategia testowana na mid-price (średnia bid/ask) może wyglądać lepiej niż na realnym bid/ask, szczególnie przy ciasnych targetach i krótkim horyzoncie. Jeśli TP wynosi 5 pipsów, a spread to 1,2 pipsa — backtest na mid zawyża expectancy o ~0,6 pipsa na stronę.

Nie wiesz, w jakim modelu broker obsługuje twoje flow i jak to wpływa na egzekucję? RTS 28 nie jest magicznym rentgenem twojego konta — to raport top venues/LP i polityki wykonania, który formalnie funkcjonował pod MiFID II w UE i UK. Status raportowania zmienia się: w UK FCA decyzją PS21/20 zniosła obowiązek zewnętrznej publikacji RTS 27 i RTS 28 z dniem 1 grudnia 2021 r., ale firmy nadal podlegają obowiązkowi Best Execution pod COBS 11.2A — wewnętrznie muszą prowadzić analizę jakości wykonania. W UE raporty były zawieszane w ramach „MiFID II quick fix". Praktyczne tłumaczenie dla detalisty: formalnie nikt nie ma obowiązku ujawnienia ci raportu publicznego, ale możesz zwrócić się do compliance brokera o dane z jego wewnętrznego Best Execution review — taka analiza istnieje, nawet jeśli nie jest publikowana. Niezależnie od tego, realny dowód jakości egzekucji daje dopiero twój własny log: requested price, fill price, timestamp wysłania i wykonania, spread at fill, reject reason. Porównaj to z 200 transakcjami z konta live (nie demo) — to jest twój audyt brokera, nie marketingowa broszura.

Tick volume ≠ wolumen rynku. Na retail FX nie masz centralnego wolumenu spot. Tick volume w MT4/MT5 to liczba zmian kwotowania u twojego brokera, nie rzeczywisty obrót na rynku. Budowanie strategii VSA (Volume Spread Analysis) na tick volume z MetaTradera to wróżenie z fusów. Jeśli potrzebujesz wolumenu, patrz na futures z CME (6E, 6B, 6J) — tam jest centralny arkusz z prawdziwym wolumenem. Ale nawet tam: korelacja futures-spot nie jest 1:1.

Ważna uwaga o rynku: detalista na MT4/MT5 zwykle nie testuje i nie handluje centralnego rynku spot FX. Testuje i handluje feed oraz warunki konkretnego brokera CFD/OTC. Dane historyczne, spready, jakość filli, dostępność płynności — wszystko jest specyficzne dla twojego brokera. Backtest na danych brokera A nie gwarantuje wyników u brokera B.

Zanim przejdziesz do wyników backtesta, zweryfikuj dane wejściowe — szczegółowa checklist jakości danych w sekcji 8 pokazuje, co sprawdzić: źródło, strefę czasową, jakość ticków, luki i zgodność broker test/live.

Data snooping: dane brokera ≠ prawda. Dane historyczne pobrane z MT4/MT5 brokera są „zanieczyszczone" — zawierają spready, które broker modyfikował historycznie, luki przy rolloverach CFD i błędy feedu „wyczyszczone" po fakcie. Backtest na danych brokera vs danych tickowych z niezależnego źródła (Dukascopy, TickData) może dawać wyniki różniące się o 20–40% w expectancy. Weryfikuj: porównaj OHLC swojego brokera z niezależnym źródłem na losowym tygodniu. Jeśli się nie zgadzają — wiesz, że twój backtest testuje artefakty feedu, nie strategię.
Raport z MT5 Strategy Tester — ustawienie Every tick based on real ticks, prowizja, spread zmienny, fragment raportu z DD, liczbą transakcji i parametrami testu
Raport z MT5 Strategy Tester — ustawienie Every tick based on real ticks, prowizja, spread zmienny, fragment raportu z DD, liczbą transakcji i parametrami testu

Backtest vs live — dlaczego wyniki się różnią

ParametrBacktestLive
SpreadStały lub historyczny średniZmienny, rozszerzony przy danych
SlippageZwykle 0 (domyślnie)0,5–15+ pip zależnie od warunków
FillNatychmiastowy, po cenie zleceniaOpóźniony, z Last Look, partial fills
Latencja0 ms20–500 ms (VPS → broker → LP)
RequotesBrakMożliwe (szczególnie B-Book)
DaneCzyste, bez lukLuki, spike'y, feed disconnects
Interwencja traderaBrakTrader zmienia SL, dodaje filtry, wyłącza system w drawdownie

Różnica między backtest a live nie jest marginalna. Jest strukturalna — i właśnie ta różnica zbiera haracze. System z expectancy +8 pip na backteście, po uwzględnieniu realnych kosztów (spread zmienny +2 pip, slippage +1,5 pip, prowizja +0,7 pip = 4,2 pip dodatkowego kosztu per trade) ma realną expectancy +3,8 pip. Do przeliczenia kosztów na wartość pieniężną użyj kalkulatora wartości pipsa. Jeśli latencja dodaje kolejne 1–2 pip — zostajesz z +1,8–2,8 pip[2].

Prosto z parkietu — 300% na backteście, -40% na live. Trader zbudował system trend-following na EUR/USD, M15. Backtest 2018–2023: CAGR 62%, max DD 14%, Sharpe 2,1. Włączył na live w styczniu 2024. Po 3 miesiącach: -40% equity. Backtest zakładał stały spread 0,8 pip i zero slippage. Na żywo średni spread: 1,2–1,8 pip (nocą 3–4 pip), slippage na stopach średnio 1,1 pip. System robił 8–12 transakcji dziennie — przy dodatkowym koszcie 2–3 pipsy per trade, expectancy z +5,2 pip (backtest) zmieniła się na -0,3 pip (live). Strategia mogła mieć sens. Symulacja kosztów i filli była do niczego. A to wystarczy, żeby wynik netto przeszedł z dodatniego w ujemny.
Prosto z parkietu — SNB, styczeń 2015: stop, który nie istniał. 15 stycznia 2015, 10:30 CET. SNB ogłasza usunięcie peg EUR/CHF. EUR/CHF spada o ponad 2500 pipsów w kilka minut, z kwotowaniami na niektórych platformach poniżej parytetu. Stop lossy nie zostały wykonane po cenie zlecenia — płynność wyparowała, kwotowania znikały, platformy się wieszały. Część klientów skończyła z ujemnym saldem. Kilku europejskich brokerów zbankrutowało (Alpari UK, Excel Markets). Dziś regulacje ESMA/KNF wymagają od brokerów CFD ochrony przed ujemnym saldem dla klientów detalicznych — ale 2015 rok pokazał, co dzieje się bez tej ochrony. I pokazał, że „stop loss" nie jest gwarancją — jest zleceniem rynkowym, które wykonuje się po pierwszej dostępnej cenie. Backtest na danych 2010–2023 nie zawiera tego zdarzenia — bo nie ma go jak modelować. Kill switch i limit maksymalnej straty w kodzie EA to nie paranoja. To infrastruktura bezpieczeństwa.
Prosto z parkietu — egzekucja, która zabiła złotego grala. Trader napisał scalper na sesję azjatycką. Demo: 15% miesięcznie, backtest 99,9%. Na live: krzywa zanurkowała w tydzień. Slippage był asymetryczny i rósł z każdą sesją. Diagnostyka: latencja odpowiedzi serwera brokera wydłużyła się z 40 ms do 300+ ms dla jego konta. Jednym z historycznie opisywanych mechanizmów w środowisku MT4 były wtyczki brokerskie pozwalające kontrolować sposób i tempo egzekucji per konto. Niezależnie od konkretnej przyczyny, dla tradera wniosek jest ten sam: backtest i demo to środowiska bez tarcia brokerskiego. Live jest pierwszym prawdziwym testem egzekucji. Backtest nie ma parametru „broker throttle". To był najdroższy brak w jego modelu kosztów.
Porównanie equity curve z backtesta (gładka, rosnąca) i equity curve z live tradingu (z głębszymi drawdownami i niższym CAGR) — ten sam system, różne koszty
Porównanie equity curve z backtesta (gładka, rosnąca) i equity curve z live tradingu (z głębszymi drawdownami i niższym CAGR) — ten sam system, różne koszty

4. Overfitting — wróg numer jeden

Twój EA umiera nie dlatego, że rynek stał się magicznie trudniejszy. Umiera dlatego, że dopasowałeś go do szumu z historii — każdy nowy okres OOS brutalnie pokazuje, że system nauczył się historii, nie rynku. Im więcej parametrów optymalizujesz, tym lepiej system pasuje do danych treningowych — i tym gorzej radzi sobie na nowych[3].

Jak wygląda overfitting w praktyce

  1. Masz pomysł: „breakout z konsolidacji londyńskiej, gdy wolumen tickowy w 30-minutowym oknie pre-breakout przekracza X-krotność średniej, a zakres konsolidacji jest mniejszy od Y-krotności ATR(14)".
  2. Testujesz wstępnie X = 1,5; Y = 0,8 — wynik OK, expectancy +3 pip per trade na EUR/USD.
  3. Optymalizujesz: skanujesz wszystkie kombinacje X ∈ {1,2; 1,3; ... 2,5} × Y ∈ {0,5; 0,55; ... 1,2} × długość okna (15, 30, 45, 60 min) × godzina startu konsolidacji (8:00–10:00 co 15 min). Najlepsza kombinacja: X = 1,73; Y = 0,67; okno 45 min; start 8:30 — expectancy +11 pip.
  4. Dodajesz filtr trendu HTF (cena nad/pod EMA200 D1). Optymalizujesz EMA200 ↔ EMA180/220. Expectancy: +18 pip.
  5. Dodajesz filtr godzinowy (handel tylko w czterech konkretnych godzinach). Expectancy: +24 pip.
  6. Dodajesz filtr dnia tygodnia (wyrzucasz piątki i poniedziałki). Expectancy: +31 pip.

Liczba przetestowanych kombinacji. Zanim klikniesz „best result", policz, ile wariantów rzeczywiście porównałeś. W powyższym przykładzie: 14 wartości X × 15 wartości Y × 4 okna × 9 godzin startu × 5 wariantów EMA × 24 kombinacje godzin handlu × 25 kombinacji dni tygodnia ≈ ~9 mln testów. Przy progu istotności 5% przypadkowo „statystycznie istotnych" wyników jest około 450 tysięcy. Twój „najlepszy" zestaw parametrów jest jednym z setek tysięcy losowych zwycięzców szumu, nie sygnałem rynku.

Overfitting w praktyce — expectancy rośnie z każdą warstwą parametrów, ale na nowych danych (OOS) system traci
0 +10 +20 +30 -5 pip / trade IN-SAMPLE (te same dane) OUT-OF-SAMPLE +3 MA(20/50) 2 param. +11 MA(17/43) 2 param. optym. +18 + filtr RSI 4 param. +24 + godziny 5 param. +31 + dzień tyg. 6+ param. -4 Nowe dane OVERFITTING więcej parametrów → lepszy backtest

Na backteście wygląda idealnie. Problem: 6+ parametrów zoptymalizowanych na tych samych danych. System nie odkrył wzorca — nauczył się historii. Bailey i López de Prado wykazali, że przy typowej liczbie prób optymalizacyjnych (1000+) prawdopodobieństwo znalezienia „zyskownego" systemu przez przypadek jest bardzo wysokie — nawet na losowych danych[4].

Sygnały ostrzegawcze overfittingu

  • System działa tylko na jednej parze, jednym interwale i jednym okresie.
  • Mała zmiana parametru (np. MA z 17 na 19) drastycznie pogarsza wynik — „wyspy" rentowności.
  • Wynik out-of-sample jest >50% gorszy niż in-sample.
  • System ma dużo parametrów (jako regułę roboczą: powyżej 5–6 — ale to heurystyka, nie prawo fizyki).
  • Equity curve na backteście jest „za gładka" — brak drawdownów to czerwona flaga.
Heatmapa optymalizacji parametrów MA fast/slow — stabilne plateau (rozsądne parametry) vs izolowana wyspa rentowności (overfitting): porównanie In-Sample i Out-of-Sample
Heatmapa optymalizacji parametrów MA fast/slow — stabilne plateau (rozsądne parametry) vs izolowana wyspa rentowności (overfitting): porównanie In-Sample i Out-of-Sample
P-hacking w tradingu. P-hacking to wielokrotne testowanie hipotez, aż znajdziesz „statystycznie istotny" wynik. W tradingu odpowiednikiem jest testowanie setek kombinacji parametrów i wybieranie najlepszej. Jeśli przetestujesz 1000 kombinacji, statystycznie ~50 z nich pokaże „istotny" wynik na poziomie 5% — czysto przez przypadek. Dlatego walk-forward analysis jest obowiązkowa, nie opcjonalna[13].

5. Walk-forward analysis i Monte Carlo

Jeśli backtest to pytanie „czy system działał?", to walk-forward analysis (WFA) to pytanie „czy system działał na danych, których nie widział podczas optymalizacji?"[5].

Procedura walk-forward

  1. Podziel dane na okna — np. 12 miesięcy in-sample (IS), 3 miesiące out-of-sample (OOS).
  2. Optymalizuj na IS — znajdź najlepsze parametry.
  3. Testuj na OOS — uruchom system z tymi parametrami na danych, których nie widział.
  4. Przesuń okno — następne IS: miesiące 4–15, OOS: 16–18. Powtórz.
  5. Agreguj wyniki OOS — połącz wszystkie okresy OOS. To jest twój realny wynik.

Walk-forward efficiency (WFE) = (zysk OOS / zysk IS) × 100%. WFE 70% nie daje ci gwarancji niczego. Daje ci mniejsze prawdopodobieństwo, że kupiłeś krzywą dopasowaną do historii — to nie to samo co edge. WFE odsiewa część śmieci, ale nie zamienia testu historycznego w gwarancję przyszłych wyników. Widziałem systemy z WFE 70%, które na live robiły –15% przez 6 miesięcy — bo walk-forward był przeprowadzony na jednym instrumencie w jednym reżimie rynku. WFE < 30% — prawdopodobnie overfitowany. WFE < 0% — system nie działa poza danymi treningowymi.

Anchored WFA vs rolling WFA

Rolling WFA (opisany wyżej) przesuwa okno: IS to zawsze ostatnie N miesięcy. Anchored WFA trzyma punkt startowy stały i rozszerza okno IS z każdym krokiem. Odpowiada na inne pytanie: „czy system jest stabilny, gdy widzi więcej danych?"

Rolling vs anchored WFA na osi czasu — dwa różne pytania o stabilność systemu
Rolling WFA — okno IS przesuwa się, IS ma stałą długość m.0 m.30 IS 12 mies. OOS 3 IS 12 mies. (przesunięte) OOS 3 IS 12 mies. (jeszcze dalej) OOS Każde okno IS ma tę samą długość — system uczy się ostatnich N miesięcy. Pytanie: „czy system działa na nowych danych po treningu na ostatnim oknie?" Anchored WFA — punkt startowy stały, IS rośnie m.0 m.30 IS 9 mies. OOS 3 IS 12 mies. (rozszerzone) OOS 3 IS 15 mies. (jeszcze szersze) OOS 3 Pytanie: „czy system jest stabilny, gdy widzi więcej historii?" Rolling WFE 60% + anchored WFE 20% = parametry pływały z oknem.

Jeśli rolling WFA daje WFE 60%, ale anchored WFA daje WFE 20% — system uczył się z przeszłości, nie adaptował do przyszłości. Parametry „pływały" z oknem zamiast stabilizować się. Ta różnica jest kluczowa: system z dobrym rolling WFE i słabym anchored WFE jest prawdopodobnie overfitowany do lokalnych reżimów. Oba testy powinny dawać zbliżone wyniki, zanim uznasz system za wart wdrożenia.

Monte Carlo — stress test expectancy

Monte Carlo to symulacja: bierzesz historyczne wyniki i losowo zmieniasz kolejność transakcji tysiące razy. Z 10 000 permutacji dostajesz rozkład: jaki jest najgorszy drawdown w 95% przypadków? Jaka jest minimalna expectancy?

Przykład: system ma 200 transakcji z WR 54%, średni zysk 18 pip, średnia strata –12 pip. Expectancy = 0,54 × 18 – 0,46 × 12 = +4,2 pip/trade. Po 10 000 permutacji Monte Carlo: w 95% scenariuszy max DD nie przekracza 22% konta, a expectancy nie spada poniżej +1,8 pip/trade. Jeśli na live DD zbliża się do 22% — system jest w strefie zagrożenia, ale jeszcze w zakresie. Jeśli przekroczył — degradacja jest prawdopodobna.

Matematyka Monte Carlo jest prosta do wdrożenia w Pythonie (biblioteka numpy, 15–20 linii kodu) lub Excelu (makro z losowaniem). Szczegóły metody: art. 8.2 — matematyka przewagi rynkowej.

Permutacja transakcji vs bootstrap z replacement — dwie metody, dwa różne pytania. Większość tutoriali algo upraszcza Monte Carlo do „pomieszaj kolejność trade'ów" — to jest permutacja bez powtórzeń. Statystyka: tasujesz oryginalne 200 transakcji w nowej kolejności, każda występuje raz, suma wyników jest identyczna. Pytanie, na które odpowiada: „jak źle mogłaby wyglądać equity curve, gdyby seria strat trafiła w innym momencie?". Limit metody: nie odpowiada na pytanie, czy próbka 200 transakcji jest reprezentatywna dla przyszłości — bo zakłada, że cała populacja przyszłych wyników to dokładnie te 200.

Bootstrap z replacement (losowanie ze zwracaniem) jest mocniejszą procedurą: w każdej z 10 000 iteracji losujesz 200 transakcji z powtórzeniami z oryginalnej puli. Niektóre transakcje pojawią się 3–4 razy, niektóre wcale. Suma wyników jest różna w każdej iteracji — to symuluje niepewność próbki, nie tylko niepewność kolejności. Pytanie, na które odpowiada: „jaki jest rozkład expectancy i DD, gdyby moja historia była tylko jedną z możliwych realizacji tego samego procesu losowego?". Wnioski są zwykle ostrzejsze niż z prostej permutacji: 95. percentyl DD bywa o 30–60% głębszy. Dla systemów detalicznych zalecam bootstrap — daje uczciwszy obraz tail risk niż samo tasowanie kolejności.

Walk-forward analysis — schemat przesuwanych okien In-Sample i Out-of-Sample z agregowaną equity curve OOS
Walk-forward analysis — schemat przesuwanych okien In-Sample i Out-of-Sample z agregowaną equity curve OOS

Matryca walidacyjna — kiedy wyrzucić, kiedy testować dalej

Po przejściu przez backtest, walk-forward (rolling i anchored) i Monte Carlo zwykle nie masz jednoznacznej odpowiedzi „działa / nie działa". Masz kombinację metryk, która klasyfikuje system:

IS expectancyRolling WFEAnchored WFEMC bootstrap (95. perc. DD)Werdykt
> 0> 50%> 40%akceptowalnyTest live na mikrolocie
> 0> 50%< 30%Overfitting do lokalnych reżimów — wróć do redukcji parametrów
> 030–50%Marginalny — testuj robustness przed live
> 0< 30%Wyrzuć do śmieci — overfitting
> 0DD > 1,5× max DD z backtestTail risk za duży — zmniejsz sizing albo wyrzuć
≤ 0Wyrzuć — system nie ma edge'u nawet w teście

Macierz nie jest definitywna — jest punktem startowym. Ale eliminuje 80% pomysłów, które trader inaczej testowałby przez kolejne 3 miesiące „po cichu w tle". To jest cel walidacji: szybciej odrzucać, nie dłużej testować.

6. Od backtesta do live — paper trading i infrastruktura

Po backteście i WFA nadal nie wiesz, jak system zachowa się na feedzie brokera, z realnym routingiem i realnymi błędami wykonania. Dlatego najpierw forward na demo, potem mikrolot na live.

Paper trading — test techniczny, nie prognoza

Demo to tor wyścigowy bez ruchu ulicznego. System jedzie. Ale nie ma kolizji, nie ma korków, nie ma karetki wyjeżdżającej z bocznej ulicy. Wyniki z demo mówią ci tylko: kod się kompiluje. Feed może wyglądać podobnie do live, czasem nawet ma zmienne spready, ale mechanika wykonania nie jest taka sama: brak realnego LP-risk, brak tych samych odrzutów, partial fills i kolejek płynności, bez człowieka ani LP, który musi wziąć drugą stronę twojego zlecenia. Traktuj demo jako test, czy kod działa technicznie (otwiera, zamyka, zarządza pozycjami). Minimum: 50–100 transakcji. Wyniki z demo nie prognozują wyników live.

Prosto z parkietu — demo vs live, dwa światy. System na demo robił +1,8% tygodniowo przez 6 tygodni. Na live z 0,01 lota: +0,3% pierwszego tygodnia, –0,8% drugiego. Na demo system dostał fill 0,3 pipsa od ceny sygnału. Na live pierwszy fill wpadł 6,8 pipsa gorzej, drugi został odrzucony, trzeci wszedł po rozszerzonym spreadzie. Po 40 transakcjach wyszło, że strategia miała dodatni edge tylko wtedy, gdy wejście było prawie natychmiastowe. W realnej egzekucji edge nie istniał. Kod działał. Pomysł nie przeżył rynku.

Infrastruktura

  • VPS — system musi działać 24/5 bez przerw. VPS blisko serwera brokera: latencja 1–10 ms zamiast 50–200 ms z domu. Koszt: 15–50 USD/miesiąc.
  • Monitoring — alert SMS/email/Telegram, gdy system padnie, drawdown przekroczy próg lub pozycja zawiśnie. Bez monitoringu dowiesz się o awarii po powrocie z pracy.
  • Kill switch — automatyczne zamknięcie wszystkich pozycji, gdy dzienny DD przekroczy próg. Fail-safe na disconnect, max pozycji jednocześnie, max DD.
Przed wdrożeniem algo na live — sprawdź u brokera:
  • Execution mode — Instant, Market, Exchange? Wpływa na requotes i slippage.
  • Max order rate — ile zleceń na sekundę toleruje serwer? Scalper wysyłający 5 zleceń/s może być blokowany.
  • Stop level / freeze level — minimalna odległość SL/TP od ceny. Jeśli stop level = 10 pipsów, a twój system stawia SL na 8 — zlecenie nie wejdzie. Różni się między brokerami i parami.
  • Swap table — porównaj swapy long/short na parach, które handlujesz. Różnice między brokerami bywają 2–3×.
  • VPS proximity — czy broker oferuje darmowy VPS lub hosting blisko serwera?
  • API availability — FIX, REST, WebSocket? Dla Pythona i zaawansowanej automatyzacji MT4/MT5 nie wystarczy.
Prosto z parkietu — NFP i latencja jako koszt ukryty. Piątek, 14:30 CET. NFP: 275k vs konsensus 198k. EUR/USD: ruch 80 pipsów w 400 milisekund. EA na VPS w Warszawie wysłał zlecenie w 14:30:00.340. Broker odebrał je o 14:30:00.847 — latencja 507 ms. Rynek w tym czasie przesunął się o 31 pipsów. Fill: 31 pipsów gorszy niż cena zlecenia. System zakładał max slippage 3 pipsy. Transakcja, która na backteście dawała +12 pip expectancy, kosztowała –19 pipsów. VPS bliżej serwera brokera — nie z perfekcjonizmu. Dlatego, że latencja podczas danych to nie milisekundy — to pieniądze.
Prosto z parkietu — SL, który nie zadziałał. EA grid/trend-following na GBP/USD. Trader zostawił pozycje na weekend. Bot miał zaprogramowany twardy SL na 20 pipsów. W niedzielę w nocy rynek otworzył się z luką 80 pipsów po politycznym newsie z UK. SL (który na serwerze jest zleceniem Market) zrealizowało się po pierwszej dostępnej cenie. Zamiast zaryzykować 2%, stracił 14% na jednej transakcji. Stop loss nie teleportuje cię z rynku — gdy book jest pusty, bot klika w próżnię, a fill przychodzi tam, gdzie ktoś wreszcie chce handlować.
Logi z VPS — alert drawdown, reconnect, journal z błędem wykonania (requote / off quotes / failed order), monitoring EA
Logi z VPS — alert drawdown, reconnect, journal z błędem wykonania (requote / off quotes / failed order), monitoring EA

Sizing startowy i checklist forward/live

Pierwszy miesiąc na live: minimalne loty. Cel nie jest zarabianie — jest walidacja. Jeśli po 30–50 transakcjach wyniki odbiegają znacząco od backtesta — wróć do diagnostyki. Checklist metryki do śledzenia:

  1. Średni spread per godzina/sesja — czy broker daje to, co reklamuje, o 3:00 w nocy?
  2. Slippage per typ zlecenia — stop vs limit. Czy asymetria istnieje?
  3. Odsetek rejectów — ile zleceń broker odrzucił? Na demo: zero. Na live: bywa kilka procent.
  4. Odsetek filli gorszych niż X — ile razy fill był gorszy niż 2 pipsy od ceny zlecenia?
  5. Expectancy: test vs forward vs live — trzy liczby. Jeśli live jest poniżej 50% backtesta — coś jest nie tak z egzekucją.
  6. Latencja z VPS do serwera brokera — pinguj regularnie. Jeśli rośnie — broker mógł zmienić infrastrukturę.
  7. Średni swap per trade i per para — swapy zmieniają się w czasie (zależą od stóp procentowych i polityki brokera). Monitoruj koszt przetrzymania pozycji: średni swap per trade, różnicę swapów long vs short na tej samej parze, zmiany swap rate w ujęciu miesięcznym. Jeśli swap rośnie — zysk systemu overnight maleje bez zmiany logiki.

Sizing z uwzględnieniem slippage — pseudokod

Artykuł mówi „modeluj slippage" — ale gdzie go wpisać? Poniższy przykład jest uproszczeniem poglądowym, nie gotowcem produkcyjnym. W praktyce przeliczenie lota musi uwzględniać specyfikę symbolu, liczbę miejsc po przecinku (3/5-digit pricing), wielkość ticka i walutę rachunku. Logika jest prosta — szczegóły implementacji nie:

// Schemat poglądowy — sizing z uwzględnieniem slippage i prowizji
double slippage_pips   = 1.5;      // empiryczny średni slippage [pipsy]
double commission_pips = 0.7;      // prowizja przeliczona na pipsy
double nominal_SL      = 25.0;     // nominalny SL w pipsach

double adjusted_SL_pips = nominal_SL + slippage_pips + commission_pips;
// adjusted_SL_pips = 25 + 1.5 + 0.7 = 27.2 pipsa

double risk_amount = AccountInfoDouble(ACCOUNT_EQUITY) * 0.01;  // 1% konta

// Wartość 1 pipsa dla 1 lota (zależy od symbolu i waluty rachunku)
// Zweryfikuj ręcznie dla swojego instrumentu!
double pip_value_per_lot = /* np. ~10 USD dla EUR/USD przy koncie USD */;

double lot_size = risk_amount / (adjusted_SL_pips * pip_value_per_lot);

Bez korekty o slippage i prowizję: ryzyko per trade wynosi 1% × (27,2/25,0) = 1,09% konta zamiast planowanego 1%. Na 200 transakcjach ta różnica kumuluje się. Uwaga: SYMBOL_TRADE_TICK_VALUE w MQL5 zwraca wartość jednego ticka (nie pipsa) i bywa zdradliwe dla instrumentów z niestandardową liczbą miejsc po przecinku lub dla par denominowanych w walutach innych niż waluta rachunku. Ręcznie zwaliduj logikę zarządzania wielkością pozycji w swoim kodzie, używając naszego kalkulatora wartości lota i pipsa.

Minimalny log egzekucji EA — bez tych pól nie masz danych do TCA

Backtest pokazuje krzywą equity. Live pokazuje wynik na rachunku. Pomiędzy nimi jest log egzekucji — i to on jest twoim jedynym źródłem prawdy o tym, jak broker realnie obsługuje twój system. Minimalny zestaw kolumn, który EA powinien zapisywać dla każdej transakcji:

PoleCo mierzy
signal_timeMoment, w którym strategia wygenerowała sygnał (przed wysłaniem)
send_timeTimestamp wysłania zlecenia z VPS
fill_timeTimestamp przyjęcia zlecenia przez serwer brokera (broker server time)
symbol + sidePara i kierunek (Buy/Sell)
requested_priceCena widziana przez EA w momencie sygnału
fill_priceCena, po której zlecenie faktycznie weszło
spread_at_signal / spread_at_fillSpread w obu momentach — pokazuje, czy LP rozszerzył kwotowanie między sygnałem a wykonaniem
slippage_pips(fill_price − requested_price) ze znakiem; osobna kolumna na pozytywny i negatywny slippage
commission + swapTwardy koszt transakcji
reject_codeKod odrzucenia z brokera (off quotes, requote, no money, market closed itp.)
broker_server_timeStrefa czasowa serwera brokera — krytyczne przy filtrach godzinowych i DST

Po 50–100 transakcjach taki log pozwala policzyć: rolling slippage per direction, asymetrię korzystny vs niekorzystny, fill rate, średni czas wykonania, korelację rejectów z konkretnymi godzinami lub eventami. Bez tych pól twój dziennik to pamiętnik, nie dane do Transaction Cost Analysis.

Przykładowy wiersz logu (orientacyjne wartości):

signal_time:        2026-03-12 14:30:00.120
send_time:          2026-03-12 14:30:00.184  (+64 ms)
fill_time:          2026-03-12 14:30:00.412  (+228 ms broker server)
symbol / side:      EURUSD / Buy
requested_price:    1.08420
fill_price:         1.08434
spread_at_signal:   0.6 pip
spread_at_fill:     2.1 pip          (rozszerzenie x3,5 w oknie publikacji)
slippage_pips:      -1.4 pip          (negatywny, na niekorzyść klienta)
commission:         3.50 USD          (round-trip 0,1 lota)
swap:               0
reject_code:        none
broker_server_time: GMT+2 (DST aware)

Taki wiersz pokazuje, że transakcja, która w backteście wyglądała jak +0,6 pip kosztu, w realu kosztowała 2,1 pip spreadu + 1,4 pip slippage'u + prowizja — sumarycznie ~4 pip friction zamiast zakładanych ~1 pip. Zbierz 50 takich wierszy i policz medianę slippage long vs short — to twój pierwszy realny audyt brokera.

Kiedy nie odpalać systemu — filtr sesyjności

Przed CPI, NFP, FOMC i decyzjami banków centralnych problemem nie jest tylko kierunek ruchu — problemem jest zmiana rynku z ciągłego w poszarpany. Spread przestaje być kosztem, a staje się zmienną losową; Last Look LP zaczyna selektywnie odrzucać; partial fill na ECN wchodzi w trzech transzach po coraz gorszej cenie. Backtest, który zakłada „spread normalny + slippage stały", w tym oknie nie modeluje rynku, na którym handlujesz. EA bez twardego filtra blokującego handel ±5 minut wokół Tier 1 to nie EA — to maszyna do przepłacania za chaos.

OknoProblemCo zrobić
5 min przed/po NFP, CPI, FOMCSpread ×5–15, slippage kilkanaście pip, liquidity voidWyłącz wejścia, blokuj modyfikacje SL
Rollover (23:00–00:00 serwera)Spread ×3–10 na crossach, fałszywe wycięcia SLFiltr godzinowy: blokuj handel i modyfikację zleceń
Święta USA/UK (np. 4 lipca, Bank Holiday)Płynność 30–50% normalnej, spread podwyższonyWyłącz system lub zmniejsz sizing
Niedzielne otwarcie (pierwsze 15–30 min)Gap, spread kilkukrotnie wyższyBlokuj handel do normalizacji spreadu
Piątek 20:00–zamknięcieRyzyko weekend gap, malejąca płynnośćNie otwieraj nowych pozycji. Rozważ zamknięcie lub redukcję pozycji, jeśli otwarta ekspozycja jest wysoka względem planu ryzyka, para wykonała nienaturalnie duży ruch względem ATR lub weekend niesie podwyższone ryzyko geopolityczne
Zmiana czasu (DST) USA vs EuropaBroker server (np. GMT+2/3) nie przestawia się synchronicznie z Europą lub USA — kalendarze ekonomiczne pokazują inne godziny niż EA, a filtry godzinowe blokują złe oknoZweryfikuj po każdej zmianie czasu (marzec, listopad w USA; ostatnia niedziela marca i października w UE): sprawdź broker_server_time w logu EA i zaktualizuj filtry godzinowe NFP/CPI/FOMC. Klasyczny scenariusz: filtr blokuje 14:25–14:35 pod NFP, a po DST broker handluje przez 2 tygodnie w złym oknie, zanim trader to zauważy

7. Koszty i realia prowadzenia algo

Trading algorytmiczny ma koszty, o których mało kto mówi — bo nie są widoczne na equity curve.

Koszty twarde

  • VPS — 15–50 USD/miesiąc. Tanich VPS za 5 USD unikaj — niestabilne łącze, high latency.
  • Dane tickowe — Dukascopy (bezpłatne z ograniczeniami). Profesjonalne: TickData, TrueFX — 100–500 USD/rok.
  • Narzędzia — Python bezpłatny. Profesjonalne platformy (MultiCharts, TradeStation): 50–200 USD/miesiąc.
  • Spread i prowizja — 10 transakcji/dzień × 1,5 pip kosztu × 22 dni × 12 miesięcy = 3960 pipsów/rok. Na locie 0,10 = ~396 USD/rok czysto na friction. Różnica spreadu między brokerami to 0,3–0,8 pip na majorsach — na 2640 transakcjach rocznie to 800–2100 pipsów. Zmierz realny efektywny spread na swoim koncie: eksport historii MT4/MT5, kolumny requested/fill, mediana slippage na wejściach i wyjściach osobno. Bez tej liczby wybór brokera to deklaracja, nie decyzja.

Koszty ukryte

  • Czas developmentu — 100 godzin na budowę? Tyle zajmuje postawienie środowiska i ogarnięcie składni. Większość czasu zabiera nie pisanie kodu, tylko walidacja danych, debugowanie, analiza logów i odrzucanie pomysłów, które nie przechodzą testu live. Realistycznie: 300–500 godzin w pierwszym roku na budowę, testowanie i iterację jednego systemu. Benchmark kosztu alternatywnego: przy orientacyjnej stawce pracy technicznej / freelance 100–150 PLN/h 400 godzin = 40 000–60 000 PLN. Przy koncie startowym 10 000 USD (~40 000 PLN) to 1,0–1,5× wartości rachunku rocznie — czas to kapitał, nie niedogodność. A wynik po kosztach może okazać się gorszy niż pasywny ETF na indeks. Licz czas jako pierwszy koszt, zanim policzysz drugi.
  • Swapy dla systemów overnight — system swing na D1 z 5 transakcjami tygodniowo trzyma pozycje 2–5 dni. Swapy na crossach (np. GBP/JPY) mogą zjadać orientacyjnie 1–3 pipsy dziennie (zależy od brokera i różnicy stóp). Na systemie z expectancy +8 pip per trade i średnim trzymaniem 3 dni — swapy to dodatkowe 3–9 pipsów kosztu, o których backtest wie tylko jeśli uruchomisz go z poprawnymi danymi historycznymi swapów. Większość brokerów nie udostępnia historii zmian swap rate.
  • Konserwacja — minimum 5–10 godzin/miesiąc. Zmiana parametrów brokera, aktualizacje, weryfikacja edge'u.
  • Koszt błędów implementacyjnych — bug w sizingu, źle obliczona prowizja, zły warunek wyjścia. Jeden błąd logiczny może działać przez tygodnie, zanim go zauważysz.
  • Koszt zmiany brokera — nowy spread, nowy LP stack, nowa latencja. System zoptymalizowany pod jednego brokera może nie działać u drugiego.
  • Koszt „martwego kapitału" — pieniądze na rachunkach testowych, u zapasowych brokerów, na VPS. Capital tied up, który nie pracuje.
Koszty prowadzenia tradingu algorytmicznego — VPS, dane, narzędzia, spread/prowizja, czas developmentu: roczne zestawienie
Koszty prowadzenia tradingu algorytmicznego — VPS, dane, narzędzia, spread/prowizja, czas developmentu: roczne zestawienie

8. Kiedy algo przestaje działać — regime change

Każdy system ma datę ważności. Różnica między amatorem a traderem polega na tym, czy zauważy ją przed obsunięciem 30%. Każde EA w końcu umiera — jedyną sztuką w algo tradingu jest zarobić na nim wystarczająco dużo, zanim rynek zmieni reżim i staniesz się źródłem przewidywalnego flow dla lepiej uzbrojonych uczestników rynku.

Dlaczego systemy degradują się

  • Regime change — system trend-following z 2020–2021 (silne trendy dolarowe) może nie działać w 2024 (ranging). Reżim rynku (art. 8.7) się zmienia, parametry systemu są dostrojone do starego reżimu.
  • Crowding — jeśli strategia jest popularna, coraz więcej uczestników ją gra. Edge maleje, bo rynek szybciej arbitrażuje sygnał.
  • Zmiany mikrostrukturalne — broker zmienia LP stack, spread się zmienia. System zoptymalizowany pod stary spread może nie działać pod nowy.

Sygnały degradacji

  • Hit rate spada — z 55% (ostatnie 500 trade'ów) do 42% (ostatnie 100). Patrz na rolling hit rate, nie na ostatni drawdown. (Te same metryki, które monitorujesz od startu — checklist z sekcji 6 — stają się z czasem sygnałami degradacji.)
  • Rolling expectancy per trade maleje systematycznie — nie jeden zły tydzień, ale trend w dół na 3–4 tygodnie.
  • Drawdown przekracza 95. percentyl Monte Carlo.
  • Średni czas w pozycji rośnie — system nie łapie ruchów, które łapał wcześniej.

Nie czekaj na okrągłą liczbę transakcji, żeby zacząć diagnozować. System mean reversion na H1 robi 3–5 transakcji tygodniowo — na „statystycznie istotną" próbkę czekasz miesiącami. W tym czasie broker mógł zmienić LP stack, rynek mógł zmienić reżim. Patrz na rolling metryki z tygodnia na tydzień: hit rate, expectancy, slippage, średni czas w pozycji. Trend w dół na 3–4 tygodnie to sygnał — nie czekaj, aż stanie się pewnością.

Equity curve systemu z pionową linią przy zmianie reżimu rynku (wzrost ATR / zmiana polityki banku centralnego) — system przestaje działać po zmianie środowiska
Equity curve systemu z pionową linią przy zmianie reżimu rynku (wzrost ATR / zmiana polityki banku centralnego) — system przestaje działać po zmianie środowiska

Kiedy wyłączyć vs normalny drawdown

Monte Carlo w Excelu wygląda świetnie w niedzielę przy kawie. W czwartek, kiedy masz −22% na żywym koncie, a następny tick decyduje, czy broker zamknie cię na stop-oucie z koszmarnym poślizgiem — arkusz ląduje w koszu, a ty zaczynasz modlić się do wykresu. Decyzja procesowa wygląda łatwo w arkuszu. Przy otwartych pozycjach wygląda inaczej. Zanim włączysz system na live, wpisz do kalendarza twardy próg: „DD = 22% → wyłączam dziś wieczór, nie jutro, nie po jeszcze jednej transakcji." Bo o 23:15, przy DD 21,8%, twój mózg zacznie produkować powody, dlaczego limit 22% to może jednak za konserwatywnie. Ustal z góry drawdown trigger: 1,5× max DD z backtesta lub 95. percentyl Monte Carlo — i trzymaj się tego bez negocjacji.

Prosto z parkietu — normalny DD czy degradacja? Trader miał algo na GBP/USD, mean reversion. 8 miesięcy stabilnego zysku, max DD 8%. Dziewiąty miesiąc: DD 12%. Spanikował, wyłączył. Dziesiąty miesiąc (bez systemu): rynek wrócił do mean reversion, system odrobił DD i zakończył kwartał na +5%. Monte Carlo tego systemu pokazywał 95. percentyl DD = 15%. 12% było w normalnym zakresie. Trader nie zrobił Monte Carlo przed live — „bo to dodatkowa praca".

Regime detection — wbudowany filtr EA

Artykuły edukacyjne opisują regime change jako zewnętrzne zagrożenie. Systematyczny trader buduje filtr reżimu bezpośrednio w system:

  • ADX jako przełącznik — ADX < 20 = rynek w range, system trend-following wyłączony. ADX > 25 = trend aktywny, system mean reversion wyłączony. To jedno z prostszych i praktycznych podejść do filtrowania reżimu.
  • Zmienność vs średnia — porównanie 20-dniowego ATR do 200-dniowej średniej ATR. Jeśli ATR(20) jest 2× wyższy niż średnia — reżim się zmienił, parametry systemu mogą nie pasować.
  • COT jako filtr tła — nie jako trigger wejścia, ale jako kontekst tygodniowy. Ekstremalny COT (>90 percentyl) w kierunku zgodnym z systemem = mniejszy edge, bo crowding. Ekstremalny COT przeciwko = potencjalny squeeze, system trend-following może mieć dodatkową siłę. (Art. 6.6)

Mechanika wdrożenia COT w EA: CFTC publikuje raport COT w piątek o 15:30 ET, ale dane dotyczą pozycji z poprzedniego wtorku — opóźnienie wynosi 3 dni robocze. To oznacza, że COT nie nadaje się jako trigger intraday ani nawet jako sygnał dziennego wejścia. Jedyny rozsądny sposób użycia: tygodniowy sygnał kontekstowy na D1 lub W1 — filtr „czy pozycjonowanie rynku jest skrajne?" sprawdzany raz w tygodniu po publikacji. Jeśli COT jest ekstremalny (>90 percentyl netto long/short), system zmniejsza sizing lub pauzuje sygnały w kierunku zgodnym z tłumem. Dane COT w EA: parsuj CSV z CFTC ręcznie lub przez API (np. Quandl/NASDAQ Data Link).

Regime detection — operacyjna macierz

Zamiast tłumaczyć „regime change" abstrakcyjnie, EA powinien mieć zaszytą prostą tabelę decyzyjną na trzech osiach: charakter ruchu (trend / range), zmienność (high / low) i tło risk-on/off. Filtr odpalasz na D1 lub W1, raz na sesję — nie intraday:

ReżimTrend / range (struktura)Volatility (ATR vs średnia)Risk-on/off (DXY, JPY, CHF)Co odpalasz, co wyłączasz
Trend, high volHH/HL lub LH/LLATR powyżej 75. percentylaRisk-on dla AUD/JPY, NZD/JPY; risk-off dla USD/JPY, CHFTrend-following ON, mean reversion OFF, breakout ON z katalizatorem
Trend, low volHH/HL słabaATR poniżej medianyTrend-following z zmniejszonym sizingiem; mean reversion OFF
Range, high volBrak nowych ekstremów + szerokie świeceATR powyżej 75. percentylaWszystko OFF — to jest „chop", w którym trend i reversion przegrywają z kosztami
Range, low volCena oscyluje w wąskim zakresieATR poniżej 25. percentylaRisk neutralnyMean reversion ON, trend-following OFF
Risk-off shockGwałtowna zmiana w 1–3 sesjeATR skacze 2× w tygodniuJPY/CHF gwałtownie umacniają sięWszystko OFF do stabilizacji 5 sesji

EA implementuje filtr jako proste zmienne stanu odświeżane raz dziennie. Gdy stan zmienia się z „trend, high vol" na „range, high vol" — system pauzuje wejścia, ale nie zamyka otwartych pozycji (chyba że mają twardy SL i są blisko). Pauza i likwidacja to różne decyzje — pierwsza chroni edge, druga niszczy tail expectations.

Schemat poglądowy w MQL5 (kod uproszczony, do dostosowania pod własną architekturę):

// Enum stanów reżimu
enum ENUM_REGIME { REGIME_TREND_HIGH, REGIME_TREND_LOW, REGIME_RANGE_LOW, REGIME_CHOP, REGIME_RISK_OFF };

ENUM_REGIME current_regime = REGIME_RANGE_LOW;
datetime last_regime_check = 0;

// Odświeżenie raz dziennie na nowym barze D1
void OnNewDailyBar() {
   current_regime = DetectRegime();   // implementacja: ATR-percentile, structure, DXY/JPY
   last_regime_check = TimeCurrent();
}

// W OnTick() — bramka wejścia
void OnTick() {
   if(current_regime == REGIME_CHOP || current_regime == REGIME_RISK_OFF) return; // blokada wejść
   if(IsTrendStrategy() && current_regime != REGIME_TREND_HIGH) return;
   if(IsMeanReversion() && current_regime != REGIME_RANGE_LOW) return;
   // dalej: logika sygnału, sizing, SL/TP
}

Kluczowe: filtr odpalasz raz na sesję, nie tickowo. Tickowa zmiana reżimu produkuje fałszywe pauzy i restarty na drobnych ruchach ATR. Lepiej raz dziennie z konserwatywnym progiem niż non-stop pulsacje stanu.

Robustness testing — system odporny vs system kruchy

System, który „działa" to za mało. System musi przetrwać warunki gorsze niż te, na których go testowałeś. Test robustness to celowe pogarszanie warunków i sprawdzanie, czy system nadal daje dodatnią expectancy:

  • Spread +50% — jeśli system zarabia przy spreadzie 1,0 pip, czy nadal zarabia przy 1,5 pip? Jeśli nie — jest zbyt wrażliwy na koszt wejścia.
  • Opóźnienie +200 ms — dodaj sztuczny delay do backtesta. Czy wynik spada o 10% czy o 60%? System scalping zwykle nie przeżywa — swing zwykle tak.
  • Różne feedy / brokerzy — uruchom ten sam system na danych tickowych z 2–3 różnych źródeł. Jeśli wyniki różnią się o >30% — system handluje artefaktami feedu, nie wzorcem rynkowym.
  • Przesunięcie wejścia o 1 bar — opóźnij sygnał wejścia o jedną świecę. Jeśli system się sypie — edge zależy od precyzji, której na live nie dostaniesz.
  • Swap +50% — dla systemów overnight: podnieś koszt swapu o połowę. Jeśli system z D1 traci rentowność — jest zależny od taniego finansowania, nie od wzorca.
  • Plateau parametrów — nie szukaj najlepszego punktu. Szukaj regionu, w którym cała okolica parametrów daje zysk. Jeśli parametr musi być MA(17) a nie MA(19) — to overfitting, nie robustness.

W Pythonie: biblioteka vectorbt pozwala stosunkowo szybko parametryzować spread, slippage i opóźnienie wejścia oraz uruchamiać wiele wariantów w pętli. W MQL: Strategy Tester pozwala ręcznie ustawić spread i slippage per test — żmudne, ale wykonalne.

Wrażliwość systemu na egzekucję — zależy od stylu

StylWrażliwość na spread/slippageWrażliwość na swapWrażliwość na regime changeNajważniejszy test robustness
ScalpingEkstremalnie wysokaNiska (krótki czas w pozycji)ŚredniaSpread +50%, latency +200ms
IntradayWysokaNiskaŚrednia–wysokaSpread +30%, przesunięcie 1 bar
Swing / D1ŚredniaWysokaWysokaSwap +50%, różne feedy
Position / carryNiskaEkstremalnie wysokaEkstremalnie wysokaZmiana stóp procentowych, regime shift

Kolumna „Scalping" w tabeli nie jest zaproszeniem — jest ostrzeżeniem. Detalista na MT4/MT5 u brokera CFD nie kontroluje latencji ani priorytetu routingu w stopniu, który pozwala zbudować zyskowny scalper na dłuższą metę. Wyjątki istnieją — ale są rzadsze niż sądzi większość traderów, którzy właśnie odkryli M1.

Checklist jakości danych

Trzy razy zbudowałem system, który „działał" na backteście i „nie działał" na live — zanim nauczyłem się, że moje dane z brokera miały błędną strefę czasową po zmianie DST. Filtr godzinowy, który miał blokować handel między 23:00 a 00:00, blokował 22:00–23:00. System handlował przez rollover. Problem z danymi, nie z logiką. Sprawdzaj dane przed systemem:

  • Źródło danych — broker (zanieczyszczone) vs niezależne (Dukascopy, TickData). Porównaj OHLC na losowym tygodniu.
  • Strefa czasowa — UTC, GMT+2, GMT+3? Zmiana DST zmienia godzinę świec — i zachowanie systemu z filtrem godzinowym.
  • Jakość ticków — ile ticków na minutę? Dane z <10 ticków/min na EUR/USD to interpolacja, nie rynek.
  • Luki — weekendy, święta, disconnect. Czy backtest poprawnie obsługuje luki, czy liczy je jako świece z zerowym wolumenem?
  • Sposób agregacji świec — broker A liczy świece od bid, broker B od mid. Na M1/M5 to robi różnicę.
  • Zgodność broker test/live — czy dane w backteście pochodzą od tego samego brokera, u którego handlujesz na live? Jeśli nie — testujesz inny rynek.

9. EA z marketu i social trading — co kupujesz

MQL5 Market, ZuluTrade, PAMM, copy trading — obietnica: „nie musisz się uczyć, ktoś inny będzie handlował za ciebie". Rzeczywistość jest mniej różowa.

MQL5 Market — ranking zwycięzców bez pełnej historii przegranych

Tysiące EA do kupienia, rankingowane po wynikach. Ranking EA to cmentarzysko, z którego chwilowo widać tylko te nagrobki, które jeszcze stoją. Kupujący widzi wynik, ale zwykle nie widzi pełnej dystrybucji ryzyka, historii zmian parametrów ani warunków, pod które system był ustawiony. EA, które straciły 80% konta, znikają z rankingu. To jest klasyczny survivor bias[7].

Typowe tricki vendorów:

  • Martingale — podwajanie po stracie. Equity curve idealna do momentu, gdy jedna seria strat zniszczy konto. Track record 12 miesięcy bez DD nie oznacza dobrego systemu — oznacza, że martingale jeszcze nie trafił na czarny łabędź.
  • Grid bez SL — pozycje co X pipsów bez stop lossa. Działa w range'u. Jeden trend i konto zerowe.
  • Cherry-picked backtest — vendor pokazuje najlepszy okres. Nie pokazuje walk-forward.
  • Demo jako „live proof" — konto demo z idealnym fillem nazwane „live results".
Prosto z parkietu — „AI-powered" = multiplier 2.0. EA z opisem „AI-adaptive momentum strategy, 24 months live, verified by MyFxBook". Po otwarciu kodu: 47 linii. Żadnego ML. Martingale 2× po każdej stracie z limitem 8 pozycji. „AI" to nazwa zmiennej: AI_Multiplier = 2.0. Odpowiedź vendora: „Strategy is proprietary, we cannot disclose logic." Tak wygląda istotny segment retailowego rynku EA, szczególnie tam, gdzie kupujący nie ma wglądu w logikę systemu i profil ryzyka.
Prosto z parkietu — grid, który nie wrócił. Grid wygląda genialnie, dopóki rynek wraca do średniej. Potem przychodzi dzień, w którym nie wraca. Algorytm dokłada pozycje co 30 pipsów, margin level topnieje, a trader patrzy na „tymczasową stratę", która miała się zamknąć po cofnięciu. Problem: rynek nie zna twojej średniej ceny i nie ma obowiązku dawać ci oddechu przed margin callem (czym jest margin call i stop out). USD/JPY, 2022: ruch rzędu 3700 pipsów od dołka (~115) do szczytu (~152), a potem gwałtowna korekta 2400 pipsów w drugą stronę. Grid w dowolnym kierunku nie przeżył — bo nikt nie projektuje grida na jednokierunkowy ruch tej skali.
Closed DD vs floating DD — dlaczego martingale „wygląda na stabilny" do dnia, w którym wybucha
10% 30% 50% 70% 100% drawdown (%) m. 1 m. 3 m. 5 m. 7 m. 9 m. 10 Closed DD ≈ 4% Floating DD rośnie do 50%+ margin call / stop-out Equity curve oparta na closed DD wygląda jak fundusz emerytalny. Floating DD pokazuje prawdziwy stan ryzyka. Przed kopiowaniem sprawdź oba.

Due diligence przed zakupem EA — 7 kroków

KryteriumMinimumCzerwona flaga
Kod źródłowyDostępny lub możliwość dekompilacji„Proprietary, cannot disclose"
Track record live (nie demo)12+ miesięcy, weryfikowalny (MyFxBook z prawami inwestora)Demo prezentowane jako „live results"
Liczba transakcji300+ (statystycznie istotne)<100 transakcji
Max DD closed vs max floating DDOba podaneTylko closed DD (floating ukryty = martingale)
SL na każdej pozycjiTwardy SL per tradeBrak SL, „mental stop", equity stop
Recovery factor>3 (net profit / max DD)<1
Czy system dokłada do stratyNieAveraging, grid, martingale

Social trading i copy trading

ZuluTrade, eToro CopyTrader, PAMM — kopiujesz „top tradera". Żadne pytanie due diligence nie ochroni cię przed tym, że „top trader" na ZuluTrade handluje kontem z lewarem 1:400 u brokera na Vanuatu, używa martingale zamaskowanego jako „averaging", a jego DD 4% na papierze oznacza, że jedna czarna seria go wyzeruje. Zanim skopiujesz — sprawdź, gdzie broker tego tradera trzyma pieniądze i jakie ma zabezpieczenia klientów. Odpowiedź często kończy rozmowę.

MQL5 Market — profil typowego martingale EA: łagodnie rosnąca linia kapitału kończąca się pionową krechą w dół (–99%)
MQL5 Market — profil typowego martingale EA: łagodnie rosnąca linia kapitału kończąca się pionową krechą w dół (–99%)

10. Algo dla detalisty — realistyczne oczekiwania

Co jest osiągalne

  • Swing/position algo na D1/H4 — mean reversion lub trend-following. 3–8 transakcji/tydzień. 10–30% CAGR brzmi dobrze na papierze. Ale górny koniec tego zakresu osiąga niewielka część detalistów budujących własne systemy, a DD 25% to psychologicznie coś zupełnie innego niż DD 25% w arkuszu. Przy koncie 10 000 USD to 2 500 USD, które znikają. Większość traderów wyłącza system przy DD 12% — zanim system ma szansę odrobić. I uwaga: zjedzą cię ujemne swapy i rozszerzenia spreadu o północy (rollover). Jeśli backtest nie uwzględnia brutalnego kosztu przetrzymania pozycji przez noc, papierowe +15% zamieniają się w realny minus.
  • Hybrydowe podejście: algo + discretionary — system generuje sygnały, trader decyduje o egzekucji na podstawie kontekstu (dane makro, reżim, COT — dział 7). Często skuteczniejsze niż czysty algo.
  • Automatyzacja zarządzania ryzykiem — zarządzanie ryzykiem to nie wstawienie sztywnego SL na 30 pipsów. Prawdziwe algo dynamicznie skaluje pozycję do zmienności (ATR) i wycina ryzyko z rynku, gdy spread u brokera rozszerza się do poziomu, przy którym system traci ekonomiczny sens. Nawet bez automatyzacji wejść — automatyczny sizing, trailing i kill switch eliminują najgorsze decyzje emocjonalne.

Co NIE jest osiągalne

  • HFT bez colocation — wymaga latencji w mikrosekundach i milionów USD. Na VPS za 30 USD z MT4 nie zrobisz HFT[6].
  • Stałe 10% miesięcznie — żaden system nie daje stałych zwrotów. Kto obiecuje „stałe X% miesięcznie" — albo kłamie, albo używa martingale.
  • „Set and forget" — system wymaga ciągłego monitoringu i rekalibracji.
Ile systemów przeżywa 2 lata? Nie istnieje publicznie dostępna, audytowana statystyka per strategia FX. Najbliższym publicznie dostępnym proxy są platformy z transparentnym track recordem (Collective2, MyFxBook, Darwinex) — w katalogach takich platform zdecydowana większość systemów wystawionych publicznie w danym roku w kolejnych 12–24 miesiącach albo przestaje być aktywna, albo wpada w ujemny CAGR netto, albo radykalnie zmienia parametry (co technicznie kończy „ten" system i zaczyna inny). Liczbę punktową trzeba traktować ostrożnie, bo metodologie liczenia różnią się między platformami i okresami; uczciwsze sformułowanie brzmi: spośród systemów, które ich autorzy uważali za wystarczająco dobre, żeby je publikować, większość nie przechodzi testu czasu. To również są wybrane casy — większość systemów uruchomionych w prywatnych folderach EA nigdy nie pojawia się w żadnej statystyce, bo gasną przed pierwszym publicznym zrzutem ekranu. Twój realny benchmark nie brzmi „czy zarobię 20% rocznie". Brzmi: „czy za 2 lata będę nadal w grze".

Algo nie likwiduje twojego problemu z edge'em. Przenosi go do kodu i zaczyna go egzekwować z pełną konsekwencją — bez ani jednego momentu zawahania. Jeśli logika była głupia, masz teraz głupią, ale bardzo pracowitą maszynę. Algo nie daje edge'u — zabiera ci wymówkę, że zawiniły emocje. Od tej chwili winny jest kod, dane albo twoje założenia[10].

A-Book, B-Book i dlaczego twój EA musi to rozumieć

Twój EA nie handluje na Forex. Handluje na feedzie twojego brokera, w jego modelu routingu, w jego arkuszu kwotowań. To może być cokolwiek — ECN z LMAX/Currenex, hybryda PoP, internalizujący market maker (art. 2.7). Bez zrozumienia tego pisanie systemu jest zgadywaniem.

  • B-Book — broker internalizuje flow (może, ale nie musi być bezpośrednią drugą stroną transakcji). Nie zakładaj, że broker „poluje" na twoje konto — zakładaj, że jego system zarządzania ryzykiem klasyfikuje flow. Toxic flow detection to identyfikowanie flow niosącego dla market makera lub LP wysokie ryzyko adverse selection — np. latency arbitrage, agresywny news trading, flow tuż przed zmianą kwotowania — i jest realnym elementem zarządzania ryzykiem egzekucji, a nie spiskową kategorią „klient zarabia". Jeśli twój styl pasuje do tej charakterystyki, warunki egzekucji mogą się zmienić nawet bez złej woli — przez routing, dobór LP, limity, opóźnienia i parametry serwera.
  • A-Book — broker przekazuje zlecenia do LP. Brak konfliktu interesów, ale slippage zależy od głębokości booka LP i czasu routingu.
  • Hybryda — większość brokerów detalicznych. Część flow internalizowana, część przekazywana. Nie wiesz, do której kategorii trafia twoje zlecenie.

Ta sama strategia może być zyskowna u jednego brokera i martwa u drugiego — nie dlatego, że „rynek się zmienił", tylko dlatego, że zmieniły się warunki egzekucji, filtracja flow albo polityka kwotowania. Jeśli twój EA jest zyskowny przez 3–6 miesięcy u brokera B-Book — monitoruj, czy warunki egzekucji nie pogarszają się wraz ze zmianą profilu twojego flow. Jak to zdiagnozować: analiza fill quality w czasie (rolling slippage per direction — czy systematycznie gorszy w jedną stronę?). Jeśli nie masz transparentności modelu: rozproszenie EA na 2–3 brokerów i porównanie rolling slippage między nimi daje ci empiryczny sygnał, kiedy jedna ze stron zaczyna gorzej wykonywać.

Fill quality analysis — jak mierzyć, czy broker cię karze

Transaction Cost Analysis (TCA) dla algo tradera detalicznego: po 50+ transakcjach porównaj requested price z fill price dla pozycji długich i krótkich osobno. Jeśli slippage jest systematycznie gorszy w jednym kierunku — masz problem strukturalny, nie rynkowy. MyFxBook ma „Trade Analysis" z kolumną entry/exit efficiency — ale większość traderów nie wie, jak to interpretować. Do przeliczenia kosztów egzekucji na pieniądze użyj naszych kalkulatorów kosztów, pipsów i spreadu.

MyFxBook Trade Analysis — kolumna entry efficiency, exit efficiency, slippage per direction: przykładowy screenshot z analizy fill quality
MyFxBook Trade Analysis — kolumna entry efficiency, exit efficiency, slippage per direction: przykładowy screenshot z analizy fill quality
MetrykaCo mierzyCzerwona flaga
Slippage per directionRóżnica fill vs request, long vs shortAsymetria na korzyść brokera (próg zależy od pary i stylu — np. >1 pip na majorsach dla scalpera)
Fill rate% zrealizowanych zleceń / wysłanychWyraźnie niższy na live niż na demo (orientacyjnie: <95%)
Execution timeCzas od wysłania do fillaSystematycznie rośnie w czasie lub przy określonych typach zleceń
Spread at fill vs advertisedRealny spread w momencie fillaWielokrotnie wyższy niż reklamowany w spokojnym rynku

Korelacje i ekspozycja — pułapka „12 pozycji na skorelowanych parach"

EA, który jednocześnie trzyma long EUR/USD, short USD/CHF i long GBP/USD, nie ma trzech pozycji — ma jedną: zakład na słabość dolara w trzech opakowaniach. Jeśli dolar się umocni, wszystkie trzy tracą jednocześnie.

PozycjaWaluta dominującaKierunek USDKierunek risk-on/off
Long EUR/USDUSDShort USDUmiarkowany risk-on
Short USD/CHFUSDShort USDRisk-off / safe haven
Long GBP/USDUSDShort USDRisk-on
Long AUD/JPYJPY / riskNeutralnySilny risk-on

EA musi mieć filtr ekspozycji walutowej. Zamiast arbitralnego limitu „max N pozycji" — mierz ekspozycję netto na każdą walutę bazową: sumuj notional (wielkość pozycji × kierunek) dla każdej waluty osobno. Jeśli sumaryczna ekspozycja na USD przekracza np. 3% konta — nowe pozycje z dominacją USD są blokowane. Uproszczona metoda: policz, ile twoich otwartych pozycji ma tę samą walutę po tej samej stronie. 3× short USD w różnych parach = jedna duża pozycja short USD w trzech opakowaniach. Więcej o korelacjach i ekspozycji walutowej: dział 7 — analiza międzyrynkowa.

Przykład liczenia netto na trzech parach. Konto 10 000 USD, otwarte: long 0,5 lota EUR/USD (ryzyko 1%), short 0,5 lota USD/CHF (ryzyko 1%), long 0,3 lota GBP/USD (ryzyko 0,8%). Wygląda jak trzy różne pozycje z łącznym ryzykiem 2,8%. Liczenie netto walutowe:

  • USD: long EUR/USD = short USD; short USD/CHF = short USD; long GBP/USD = short USD. Netto: −1,3 lota short USD (jednokierunkowy zakład na osłabienie dolara w trzech opakowaniach).
  • EUR: +0,5 long.
  • GBP: +0,3 long.
  • CHF: +0,5 long (short USD/CHF = long CHF).

Realne ryzyko: jeśli DXY zyska 1% po jastrzębi Fed, wszystkie trzy pozycje tracą równocześnie. Sumaryczna strata będzie bliżej 2,8% niż 1% — bo to jedna decyzja w trzech ekspozycjach. Filtr w EA: blokuj nową pozycję, jeśli jej waluta dominująca już ma netto powyżej progu (np. ±2 loty na walutę bazową dla konta 10k USD).

Od pomysłu do live — mapa procesu

KrokCo robiszKryterium przejścia dalej
1. PomysłHipoteza + logika wejścia/wyjściaJasna reguła, którą da się zapisać w kodzie
2. Backtest z kosztamiSpread zmienny, slippage, prowizja, dane tickoweExpectancy netto > 0 po kosztach
3. Overfitting checkMinimalizuj parametry, sprawdź plateauWynik stabilny przy małych zmianach parametrów
4. Rolling WFAPrzesuwane okno IS/OOSWFE > 50% (reguła robocza)
5. Anchored WFAStały punkt startowy, rosnące ISWFE zbliżony do rolling — system się stabilizuje
6. Monte Carlo10 000 permutacji, rozkład DD i expectancy95. percentyl DD akceptowalny, expectancy > 0
7. RobustnessSpread +50%, latency +200ms, 1-bar delay, różne feedySystem nadal zyskowny po pogorszeniu warunków
8. DemoTest techniczny kodu, min. 50 transakcjiKod działa, otwiera/zamyka/zarządza pozycjami
9. Live mikrolotWalidacja kosztów egzekucji, min. 30–50 transakcjiExpectancy live ≥ 50% backtesta (poniżej — wróć do diagnostyki egzekucji)
10. MonitoringRolling metryki: hit rate, expectancy, slippage, swapDD trigger = 1,5× max DD z backtesta lub 95. percentyl MC

Każdy krok to brama — jeśli system nie przechodzi kryterium, wraca do kroku wcześniejszego. Większość pomysłów odpada na kroku 2 lub 3. To nie jest wada procesu — to jest jego cel.

Domknięcie tezy. Algo trading dla detalisty nie jest skrótem do bogactwa ani sposobem na wyłączenie myślenia. Jest dyscypliną pomiaru tam, gdzie ręczny trader bazuje na intuicji: pomiaru kosztów (spread, slippage, prowizja, swap, latency, friction VDP), pomiaru jakości egzekucji (asymetria filli, fill rate, czas wykonania), pomiaru robustness systemu (spread +50%, latency +200 ms, różne feedy) i pomiaru reżimu rynku (matryca trend × volatility × risk-on/off). Bez logu egzekucji, walk-forward i Monte Carlo prowadzisz tylko szybszego dawcę płynności dla brokera. Z tymi narzędziami masz szansę na coś, co przeżyje pierwszy regime change — a w cyklu dwóch lat to jest realny, ambitny benchmark dla detalicznego algo. Nie 20% miesięcznie. Bycie nadal w grze za dwa lata.

FAQ — najczęściej zadawane pytania

Czy potrzebuję umieć programować?

Tak — przynajmniej na poziomie czytania i modyfikacji kodu. Bez tego jesteś klientem czarnej skrzynki. Minimum: podstawy MQL5 lub Pythona. Czas nauki: 2–4 miesiące regularnej praktyki.

Ile kosztuje start z algo tradingiem?

Minimum: konto u brokera (1000–5000 USD), VPS (15–50 USD/miesiąc), MT4/MT5 (bezpłatne). Opcjonalnie: dane tickowe (100–500 USD/rok), profesjonalne platformy (50–200 USD/miesiąc). Największy koszt to czas — setki godzin na budowę, debugging, walidację i wyrzucanie pomysłów, które nie działają. Pieniądze na start to mniej niż to kosztuje w godzinach.

Jaki jest realistyczny zwrot?

Swing/position algo: 10–30% CAGR przy DD 15–25%. Nie 10% miesięcznie — 10–30% rocznie, z miesiącami ujemnymi. Porównaj: ETF na S&P 500 daje historycznie ~8–10% CAGR bez żadnej pracy.

Czy EA z MQL5 Market może być zyskowny?

Teoretycznie tak. Praktycznie: duża część to martingale, gridy bez SL lub systemy overfitowane na jednym reżimie rynku. Sprawdź: walk-forward (nie tylko backtest), konto live (nie demo), realistyczne DD (brak DD = ukryty tail risk), SL na każdym tradzie, track record przez różne reżimy. Jeśli nie potrafisz przeczytać kodu — nie kupuj. Patrz sekcja 9: tabela due diligence.

MQL4 czy MQL5?

Jeśli broker oferuje MT5 — ucz się MQL5 (lepszy backtester, lepsza architektura). Jeśli tylko MT4 — MQL4. To różne języki — nie ucz się obu jednocześnie. Znasz Pythona? Rozważ handel przez API brokera.

Jak rozpoznać overfitting?

Walk-forward: wynik OOS >50% gorszy niż IS = overfitting. Inne sygnały: działa tylko na jednej parze, mała zmiana parametru niszczy wynik, 6+ parametrów, equity curve „za gładka". Profilaktyka: minimalizuj parametry, zawsze testuj OOS.

Czy demo wystarczy do walidacji?

Nie. Demo waliduje technikę, nie wyniki. Fill na demo bywa znacznie bardziej korzystny i mniej reprezentatywny niż live — bez Last Look, bez LP-odrzutów, bez partial fills, bez dynamicznego rozszerzenia spreadu w momencie wyjścia. Na live koszty egzekucji obniżają expectancy często o 30–60% względem testu / demo. Demo to krok pierwszy (czy kod się kompiluje i otwiera/zamyka pozycje). Live z 0,01 lota to krok drugi — dopiero on daje realne dane o kosztach na twoim konkretnym koncie.

Kiedy wyłączyć tracący system?

Ustal przed live: drawdown trigger = 1,5× max DD z backtesta lub 95. percentyl Monte Carlo. Nie wyłączaj po 3 stratach z rzędu (normalny DD). Wyłącz, gdy DD przekroczy próg — i wróć do diagnostyki.

Python czy MQL do algo tradingu?

Python: lepsze narzędzia statystyczne, lepsze do research/walidacji. MQL: natywna integracja z MT4/MT5, wbudowany backtester, bezpośrednia egzekucja. Wielu algo traderów używa obu: Python do research, MQL do egzekucji.

Czy algo eliminuje emocje?

Eliminuje emocje z egzekucji — system nie ma FOMO. Ale emocje nie znikają — zmieniają formę. Zamiast gonić świecę, zaczynasz dłubać w parametrach po serii strat i psujesz system dokładnie wtedy, kiedy powinieneś go zostawić w spokoju. Typowy scenariusz: drawdown 14%, trader zmniejsza SL „żeby zmniejszyć ryzyko" — system przestaje trafiać w wyjścia. Dodaje filtr — system przestaje wchodzić. Po kilku tygodniach „optymalizacji w locie" ma system dopasowany do drawdownu, który i tak by odrobił. Nie emocje zabijają algo — zabija interwencja w system, gdy boli.

Źródła i bibliografia

Badania i publikacje akademickie

  1. ESMA, „Product Intervention Analysis: Measure on Contracts for Differences", decyzje interwencyjne 2018 (m.in. ESMA35-43-1135) — pierwotne źródło zakresu 74–89% rachunków detalicznych CFD tracących pieniądze, w ramach pakietu interwencji produktowej obejmującego limity dźwigni, margin close-out i ochronę przed ujemnym saldem; uzupełniająco „MiFID II/MiFIR — Q&A on Investor Protection Topics", 2023.
  2. Pardo, R., The Evaluation and Optimization of Trading Strategies, Wiley, 2nd ed., 2008 — walk-forward analysis, backtesting methodology, modelowanie kosztów transakcyjnych.
  3. Bailey, D.H., Borwein, J.M., López de Prado, M., Zhu, Q.J., „Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance", Notices of the AMS, Vol. 61, 2014 — matematyczny dowód fałszywie pozytywnych wyników z wielokrotnego testowania.
  4. Harvey, C.R., Liu, Y., Zhu, H., „…and the Cross-Section of Expected Returns", Review of Financial Studies, Vol. 29, 2016 — p-hacking w badaniach finansowych; progi istotności po uwzględnieniu wielokrotnego testowania.
  5. Pardo, R., „Walk-Forward Analysis: Definition, Protocol, and Application", konferencja Automated Trading Strategies, 2012 — protokół WFA; definicja walk-forward efficiency.
  6. Aldridge, I., High-Frequency Trading: A Practical Guide to Algorithmic Strategies, Wiley, 2nd ed., 2013 — mechanika HFT, wymagania infrastrukturalne, latency arbitrage.

Źródła branżowe i praktyczne

  1. López de Prado, M., Advances in Financial Machine Learning, Wiley, 2018 — backtest overfitting, combinatorially symmetric cross-validation; metody walidacji odporne na data snooping.
  2. MetaQuotes, „MQL5 Documentation — Strategy Tester", 2024 — dokumentacja Strategy Testera MT5; tryby testowania (Every tick, Real ticks).
  3. Bank for International Settlements, Triennial Central Bank Survey, 2022 — udział handlu algorytmicznego w obrotach FX (szacunkowo 70–80% wolumenu spot).
  4. Barber, B.M., Odean, T., „Trading is Hazardous to Your Wealth", Journal of Finance, Vol. 55, 2000 — aktywny trading u detalistów generuje niższe zwroty niż buy-and-hold po uwzględnieniu kosztów.
  5. Chan, E., Algorithmic Trading: Winning Strategies and Their Rationale, Wiley, 2013 — budowa systemów mean reversion i momentum na FX; sizing, koszty, backtesting.
  6. Kissell, R., The Science of Algorithmic Trading and Portfolio Management, Academic Press, 2013 — modelowanie slippage'u, TCA, impact rynkowy zleceń.
  7. Aronson, D., Evidence-Based Technical Analysis, Wiley, 2006 — statystyczne podejście do testowania strategii; problemy wielokrotnego testowania hipotez.
  8. CME Group, „Algorithmic Trading and Market Structure", 2023 — rola algo tradingu na rynkach futures; wpływ na płynność i price discovery.
  9. FCA, „Algorithmic Trading Compliance in Wholesale Markets", 2018 — wymogi regulacyjne dla handlu algorytmicznego pod MiFID II.
  10. BIS Markets Committee, „The sterling 'flash event' of 7 October 2016", styczeń 2017 — raport BIS przy współpracy banków centralnych (w tym Bank of England) opisujący mechanikę flash crashu GBP/USD: rola algorytmów, cienkiej płynności wczesnej sesji azjatyckiej, kaskady stop lossów i amplifikacji ruchu przez automaty.
  11. Global Foreign Exchange Committee, FX Global Code, 2021 (updated) — kodeks etyczny rynku FX OTC; Principle 17: „Market Participants employing Last Look should be transparent regarding its use." Definicja Last Look, hold time, symetrii odrzucania zleceń i obowiązków ujawnień LP.

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ą.