Trading algorytmiczny — automatyzacja, backtesting i pułapki
W poprzednim artykule rozbieraliśmy mechanikę news tradingu — środowisko, w którym ludzki refleks przegrywa z latencją algorytmów. Naturalny wniosek: „skoro nie dam rady ręcznie, niech robi to bot". Ten wniosek jest poprawny — pod warunkiem, że rozumiesz, co naprawdę kupujesz. Trading algorytmiczny to nie „włączam EA i zarabiam". To programowanie, testowanie, walidacja, infrastruktura i ciągła konserwacja systemu, który — nawet jeśli działa — pewnego dnia przestanie, bo rynek zmieni reżim. Disclosure brokerów CFD pod reżimem ESMA/KNF regularnie pokazują, że 70–80% rachunków detalicznych traci pieniądze[1]. Bot nie naprawia złego systemu. Przenosi tylko błąd z ręki tradera do kodu i potrafi egzekwować go szybciej, częściej i bez wahania. Jeśli system nie ma edge'u (art. 8.2), bot straci pieniądze szybciej i bardziej systematycznie niż człowiek.
- Trading algorytmiczny to nie „bot zarabia za mnie". 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 bez modelowania kosztów to fikcja. 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 i latency to zmienne, nie stałe.
- Większość retailowych systemów nie umiera przez rynek — umiera przez overfitting. Były dopasowane do historii tak mocno, że na nowych danych nie miały już czego eksploatować. Degrees of freedom (liczba swobodnych parametrów) to wróg numer jeden algo tradera.
- Duża część retailowych EA sprzedaje wygładzoną equity curve okupioną ukrytym ryzykiem ogona. Martingale, grid, brak twardego SL, agresywny averaging. Rankingi EA premiują to, co jeszcze nie eksplodowało. Kupujący widzi wynik, ale nie widzi pełnej dystrybucji ryzyka.
1. Czym jest trading algorytmiczny
Trading algorytmiczny to nie magiczna drukarka pieniędzy. To outsourcing twojej dyscypliny do maszyny, która nie wybacza błędów logicznych w kodzie. Jeśli logika systemu jest zła, automat będzie egzekwował ten błąd szybciej, konsekwentniej i bez momentu zawahania. 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 automatyzacja, ale nie sofistykacja.
- 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 na serwerach giełdy, latencja w mikrosekundach. Nieosiągalne dla detalisty — wymaga milionów USD na infrastrukturę[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.
Typowy scenariusz: EA kupiony za 299 USD z opisem „40% monthly ROI, 2 years backtested". 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 (martingale) — 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ędzie | Język | Krzywa uczenia | Backtesting | Live trading | Ekosystem |
|---|---|---|---|---|---|
| MQL4/MQL5 | C-podobny | Średnia | Wbudowany (Strategy Tester) | Bezpośrednio na MT4/MT5 | Największy: Market, CodeBase, forum |
| Python | Python | Niska–średnia | Backtrader, Zipline, vectorbt | Przez API brokera (OANDA, IB, cTrader) | Ogromny ekosystem data science |
| cTrader Automate | C# | Średnia–wysoka | Wbudowany | Bezpośrednio na cTrader | Mniejszy, ale rosnący |
| Pine Script | Pine Script | Niska | Wbudowany (TradingView) | Ograniczony (alerty → webhook) | Duży, ale ograniczenia w złożonych strategiach |
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 — sprawdź nasze porównanie kont ECN i standard, bo typ konta wpływa na model egzekucji i dostępność API.
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 to narzędzie do odrzucania złych pomysłów, nie maszyna do przewidywania przyszłości. 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ę? Sprawdź nasz ranking brokerów A-Book/ECN, gdzie testujemy realne spready i jakość filli na kontach live, a nie na wygładzonym demo.
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.
Backtest vs live — dlaczego wyniki się różnią
| Parametr | Backtest | Live |
|---|---|---|
| Spread | Stały lub historyczny średni | Zmienny, rozszerzony przy danych |
| Slippage | Zwykle 0 (domyślnie) | 0,5–15+ pip zależnie od warunków |
| Fill | Natychmiastowy, po cenie zlecenia | Opóźniony, z Last Look, partial fills |
| Latencja | 0 ms | 20–500 ms (VPS → broker → LP) |
| Requotes | Brak | Możliwe (szczególnie B-Book) |
| Dane | Czyste, bez luk | Luki, spike'y, feed disconnects |
| Interwencja tradera | Brak | Trader zmienia SL, dodaje filtry, wyłącza system w drawdownie |
Różnica między backtest a live to nie „mały margines". 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].
4. Overfitting — wróg numer jeden
Większość retailowych systemów nie umiera dlatego, że rynek je „zaskoczył". Umiera dlatego, że były dopasowane do historii tak mocno, że na nowych danych nie miały już czego eksploatować. Im więcej parametrów optymalizujesz, tym lepiej system pasuje do danych — i tym gorzej radzi sobie na nowych danych[3].
Jak wygląda overfitting w praktyce
- Masz pomysł: „MA crossover na EUR/USD".
- Testujesz MA(20) i MA(50) — wynik OK, expectancy +3 pip.
- Optymalizujesz: testujesz wszystkie kombinacje MA(5–100) × MA(10–200). Najlepsza: MA(17) i MA(43) — expectancy +11 pip.
- Dodajesz filtr RSI. Optymalizujesz. Expectancy: +18 pip.
- Dodajesz filtr godzinowy. Expectancy: +24 pip.
- Dodajesz filtr dnia tygodnia. Expectancy: +31 pip.
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.
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
- Podziel dane na okna — np. 12 miesięcy in-sample (IS), 3 miesiące out-of-sample (OOS).
- Optymalizuj na IS — znajdź najlepsze parametry.
- Testuj na OOS — uruchom system z tymi parametrami na danych, których nie widział.
- Przesuń okno — następne IS: miesiące 4–15, OOS: 16–18. Powtórz.
- Agreguj wyniki OOS — połącz wszystkie okresy OOS. To jest twój realny wynik.
Walk-forward efficiency (WFE) = (zysk OOS / zysk IS) × 100%. Reguła robocza (nie prawo fizyki): WFE powyżej 50% to warunek konieczny, nie wystarczający. 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 to filtr, nie gwarancja. 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?"
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.
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 jest użyteczne technicznie, ale nie odtwarza warunków egzekucyjnych live, więc nie nadaje się do oceny jakości edge'u netto. Feed „realny" — ale bez Last Look, bez LP-odrzutów, bez częściowych realizacji, bez rozszerzeń spreadu w momencie wyjścia. Demo nie kłamie — żyje w innej rzeczywistości płynnościowej. 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.
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.
- 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.
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:
- Średni spread per godzina/sesja — czy broker daje to, co reklamuje, o 3:00 w nocy?
- Slippage per typ zlecenia — stop vs limit. Czy asymetria istnieje?
- Odsetek rejectów — ile zleceń broker odrzucił? Na demo: zero. Na live: bywa kilka procent.
- Odsetek filli gorszych niż X — ile razy fill był gorszy niż 2 pipsy od ceny zlecenia?
- Expectancy: test vs forward vs live — trzy liczby. Jeśli live jest poniżej 50% backtesta — coś jest nie tak z egzekucją.
- Latencja z VPS do serwera brokera — pinguj regularnie. Jeśli rośnie — broker mógł zmienić infrastrukturę.
- Ś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.
Kiedy nie odpalać systemu — filtr sesyjności
| Okno | Problem | Co zrobić |
|---|---|---|
| 5 min przed/po NFP, CPI, FOMC | Spread ×5–15, slippage kilkanaście pip, liquidity void | Wyłącz wejścia, blokuj modyfikacje SL |
| Rollover (23:00–00:00 serwera) | Spread ×3–10 na crossach, fałszywe wycięcia SL | Filtr godzinowy: blokuj handel i modyfikację zleceń |
| Święta USA/UK (np. 4 lipca, Bank Holiday) | Płynność 30–50% normalnej, spread podwyższony | Wyłącz system lub zmniejsz sizing |
| Niedzielne otwarcie (pierwsze 15–30 min) | Gap, spread kilkukrotnie wyższy | Blokuj handel do normalizacji spreadu |
| Piątek 20:00–zamknięcie | Ryzyko 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 |
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. Porównaj realne spready w naszym rankingu brokerów ECN.
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. A wynik po kosztach może okazać się gorszy niż pasywny ETF na indeks. Twój czas ma cenę — licz go jako koszt alternatywny.
- 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.
8. Kiedy algo przestaje działać — regime change
Każdy system algorytmiczny kiedyś przestaje działać. Pytanie: kiedy to zauważysz i co zrobisz.
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ą.
Kiedy wyłączyć vs normalny drawdown
Brzmi racjonalnie na papierze: „wyłącz, gdy DD przekroczy 95. percentyl Monte Carlo". Teraz zrób to w praktyce: system jest na DD 22%, Monte Carlo mówi granica to 23%. Tracisz 2200 USD z konta 10 000 USD. Każda następna transakcja może być tą, która przebija granicę. Albo może cofnąć DD do 18% i okaże się, że wyłączyłeś system w granicach normalnej zmienności. Decyzja procesowa wygląda łatwo w arkuszu. Przy otwartych pozycjach wygląda inaczej. Ustal z góry drawdown trigger: 1,5× max DD z backtesta lub 95. percentyl Monte Carlo — i trzymaj się tego bez negocjacji.
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).
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
| Styl | Wrażliwość na spread/slippage | Wrażliwość na swap | Wrażliwość na regime change | Najważniejszy test robustness |
|---|---|---|---|---|
| Scalping | Ekstremalnie wysoka | Niska (krótki czas w pozycji) | Średnia | Spread +50%, latency +200ms |
| Intraday | Wysoka | Niska | Średnia–wysoka | Spread +30%, przesunięcie 1 bar |
| Swing / D1 | Średnia | Wysoka | Wysoka | Swap +50%, różne feedy |
| Position / carry | Niska | Ekstremalnie wysoka | Ekstremalnie wysoka | Zmiana 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. Rankingi EA premiują to, co jeszcze nie eksplodowało. 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".
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.Due diligence przed zakupem EA — 7 kroków
| Kryterium | Minimum | Czerwona flaga |
|---|---|---|
| Kod źródłowy | Dostę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 transakcji | 300+ (statystycznie istotne) | <100 transakcji |
| Max DD closed vs max floating DD | Oba podane | Tylko closed DD (floating ukryty = martingale) |
| SL na każdej pozycji | Twardy SL per trade | Brak SL, „mental stop", equity stop |
| Recovery factor | >3 (net profit / max DD) | <1 |
| Czy system dokłada do straty | Nie | Averaging, 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ę.
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.
Algo nie skraca drogi do przewagi. Zmienia źródło błędów: mniej decyzji pod wpływem emocji, więcej błędów w logice, danych i egzekucji. Zamiast tracić przez emocje, częściej tracisz przez błędy w logice, danych albo egzekucji, które wychodzą dopiero po czasie[10].
A-Book, B-Book i dlaczego twój EA musi to rozumieć
Nie możesz pisać algo na Forex/CFD bez zrozumienia, że detalista zwykle nie handluje na „rynku" — handluje w modelu egzekucji brokera (art. 2.7).
- B-Book — broker internalizuje flow (może, ale nie musi być bezpośrednią drugą stroną transakcji). Gdy EA zaczyna systematycznie zarabiać, broker może zmienić sposób obsługi tego konta — przenieść je do A-Book, zmienić priorytety routingu lub zmodyfikować warunki egzekucji. Toxic flow detection — systemy identyfikujące konta generujące konsekwentne straty dla brokera — to udokumentowany mechanizm rynkowy, choć jego zakres i częstotliwość stosowania różnią się między brokerami.
- 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ę?). Sprawdź nasze porównanie brokerów i ranking kont A-Book/ECN.
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.
| Metryka | Co mierzy | Czerwona flaga |
|---|---|---|
| Slippage per direction | Różnica fill vs request, long vs short | Asymetria na korzyść brokera (próg zależy od pary i stylu — np. >1 pip na majorsach dla scalpera) |
| Fill rate | % zrealizowanych zleceń / wysłanych | Wyraźnie niższy na live niż na demo (orientacyjnie: <95%) |
| Execution time | Czas od wysłania do filla | Systematycznie rośnie w czasie lub przy określonych typach zleceń |
| Spread at fill vs advertised | Realny spread w momencie filla | Wielokrotnie 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.
| Pozycja | Waluta dominująca | Kierunek USD | Kierunek risk-on/off |
|---|---|---|---|
| Long EUR/USD | USD | Short USD | Umiarkowany risk-on |
| Short USD/CHF | USD | Short USD | Risk-off / safe haven |
| Long GBP/USD | USD | Short USD | Risk-on |
| Long AUD/JPY | JPY / risk | Neutralny | Silny 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.
Od pomysłu do live — mapa procesu
| Krok | Co robisz | Kryterium przejścia dalej |
|---|---|---|
| 1. Pomysł | Hipoteza + logika wejścia/wyjścia | Jasna reguła, którą da się zapisać w kodzie |
| 2. Backtest z kosztami | Spread zmienny, slippage, prowizja, dane tickowe | Expectancy netto > 0 po kosztach |
| 3. Overfitting check | Minimalizuj parametry, sprawdź plateau | Wynik stabilny przy małych zmianach parametrów |
| 4. Rolling WFA | Przesuwane okno IS/OOS | WFE > 50% (reguła robocza) |
| 5. Anchored WFA | Stały punkt startowy, rosnące IS | WFE zbliżony do rolling — system się stabilizuje |
| 6. Monte Carlo | 10 000 permutacji, rozkład DD i expectancy | 95. percentyl DD akceptowalny, expectancy > 0 |
| 7. Robustness | Spread +50%, latency +200ms, 1-bar delay, różne feedy | System nadal zyskowny po pogorszeniu warunków |
| 8. Demo | Test techniczny kodu, min. 50 transakcji | Kod działa, otwiera/zamyka/zarządza pozycjami |
| 9. Live mikrolot | Walidacja kosztów egzekucji, min. 30–50 transakcji | Expectancy live ≥ 50% backtesta (poniżej — wróć do diagnostyki egzekucji) |
| 10. Monitoring | Rolling metryki: hit rate, expectancy, slippage, swap | DD 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.
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 jest idealny. Na live koszty egzekucji obniżają expectancy o 30–60%. Demo to krok pierwszy. Live z 0,01 lota to krok drugi — dopiero on daje realne dane o kosztach.
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
- ESMA, „MiFID II/MiFIR — Questions and Answers on Investor Protection Topics", 2023 — dane o odsetku klientów detalicznych tracących na CFD (70–80%).
- Pardo, R., The Evaluation and Optimization of Trading Strategies, Wiley, 2nd ed., 2008 — walk-forward analysis, backtesting methodology, modelowanie kosztów transakcyjnych.
- 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.
- 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.
- Pardo, R., „Walk-Forward Analysis: Definition, Protocol, and Application", konferencja Automated Trading Strategies, 2012 — protokół WFA; definicja walk-forward efficiency.
- 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
- López de Prado, M., Advances in Financial Machine Learning, Wiley, 2018 — backtest overfitting, combinatorially symmetric cross-validation; metody walidacji odporne na data snooping.
- MetaQuotes, „MQL5 Documentation — Strategy Tester", 2024 — dokumentacja Strategy Testera MT5; tryby testowania (Every tick, Real ticks).
- Bank for International Settlements, Triennial Central Bank Survey, 2022 — udział handlu algorytmicznego w obrotach FX (szacunkowo 70–80% wolumenu spot).
- 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.
- Chan, E., Algorithmic Trading: Winning Strategies and Their Rationale, Wiley, 2013 — budowa systemów mean reversion i momentum na FX; sizing, koszty, backtesting.
- Kissell, R., The Science of Algorithmic Trading and Portfolio Management, Academic Press, 2013 — modelowanie slippage'u, TCA, impact rynkowy zleceń.
- Aronson, D., Evidence-Based Technical Analysis, Wiley, 2006 — statystyczne podejście do testowania strategii; problemy wielokrotnego testowania hipotez.
- CME Group, „Algorithmic Trading and Market Structure", 2023 — rola algo tradingu na rynkach futures; wpływ na płynność i price discovery.
- FCA, „Algorithmic Trading Compliance in Wholesale Markets", 2018 — wymogi regulacyjne dla handlu algorytmicznego pod MiFID II.