Algorithmic trading — pierwsze kroki dla retail tradera
Algorithmic trading w wydaniu detalicznym sprowadza się do prostej zamiany ról: trader definiuje regułę, komputer ją wykonuje. „Gdy szybka średnia przebije wolną w górę i ATR z ostatnich dwudziestu świec rośnie, otwórz długą o wielkości 1 procent kapitału, stop 1,5 ATR poniżej". Tyle z definicji. Reszta — VPS-y, języki, frameworki — to nadbudowa. Problemem retailowych „algo" jest nie kod, lecz założenie, że automat zastąpi nieistniejącą przewagę. Nie zastąpi. Tylko szybciej i taniej za nich przegra.
Czym algo trading jest, a czym na pewno nie jest
Algorytm to dwie rzeczy w jednym: precyzyjnie zdefiniowana strategia oraz mechanizm, który ją odpala bez emocjonalnego wahania. Trader, który potrafi zapisać kompletny zestaw warunków wejścia, wyjścia, wielkości pozycji i zarządzania stratą w jednoznacznym języku, ma już połowę roboty zrobionej; reszta to tłumaczenie tego zapisu na MQL5, Pythona albo prosty alert. Trader bez tej dyscypliny najpierw uczy się składni języka, a potem odkrywa, że nie wie, co właściwie zakodować. Klasyczna porada — „najpierw zoperacjonalizuj strategię ręcznie, dopiero potem automatyzuj" — pojawia się w każdej rozsądnej książce o tradingu systematycznym i jest ignorowana w każdym kursie sprzedającym „bota za 199 dolarów". Algo nie jest też magicznym źródłem biernego dochodu: strategia, która działa dziś, działa dlatego, że pewna regularność rynkowa nadal istnieje; gdy ta regularność znika, algorytm traci tak samo jak ręczny trader, tylko bez ostrzeżenia w postaci „coś tu nie gra".
Drabina od alertów po pełną automatyzację
Naturalna ścieżka prowadzi przez cztery szczeble. Pierwszy to alerty na platformie wykresowej — TradingView albo MetaTrader — które wyzwalają dźwięk lub e-mail, gdy warunek wejścia jest spełniony. Trader nadal sam klika zlecenie, ale jest zmuszony przełożyć strategię na regułę na tyle precyzyjną, że potrafi ją wyrazić platforma. Wielu detalicznych traderów nigdy nie wychodzi poza ten etap i nie musi — alert z dyscypliną wystarczy, jeśli liczba sygnałów dziennie jest mała. Drugi szczebel to prosty Expert Advisor w MQL5 dla MetaTradera, najczęściej crossover dwóch średnich z trailing stopem albo wybicie z konsolidacji ATR. Kod takiego EA to dwieście do czterystu linii i powstaje w tygodnie, nie miesiące — szczegóły języka i pierwszego robota omawiamy w artykule o podstawach EA w MQL5. Trzeci szczebel to backtester w Pythonie z bibliotekami pandas, NumPy i backtrader; tu trader przestaje czekać na każde wykonanie testu w MT5 i iteruje dziesiątki wariantów strategii w ciągu jednego popołudnia — rozwijamy ten wątek w tekście o backteście Forex w Pythonie. Czwarty, opcjonalny, to bezpośrednie połączenie z brokerem przez REST lub FIX (Interactive Brokers, OANDA) i rezygnacja z MetaTradera jako warstwy pośredniczącej.
Umiejętności i wybór języka
Lista jest krótka. Najważniejsze jest myślenie statystyczne — rozumienie różnicy między skutecznością, profit factorem i wartością oczekiwaną, świadomość, że krzywa equity z pięćdziesięciu transakcji nie udowadnia jeszcze niczego. Bez tego nawet poprawnie napisany kod produkuje wnioski w stylu „strategia działa, bo ostatnie sześć transakcji było zyskownych", co jest tezą zerową, nie analizą. Drugie miejsce — cierpliwość do cyklu walidacyjnego: pomysł, kodowanie, backtest, walk-forward, demo trzy do sześciu miesięcy, dopiero potem mały kapitał na żywo. Trzecie — podstawy programowania: zmienne, pętle, funkcje, dataframe w pandas. Nie trzeba być inżynierem oprogramowania; wystarczy przeczytać cudzy kod EA i zmienić parametr bez psucia całości. Wybór języka zależy od jednej rzeczy: czy trader zostaje przy MetaTraderze, czy wychodzi poza ten ekosystem. MQL5 jest natywnym językiem MT5, latencja mierzy się w milisekundach, a Strategy Tester daje przyzwoity backtest od ręki. Python to cały świat poza MetaTraderem — pandas i NumPy do liczenia, backtrader albo vectorbt do testów, klienci REST do Interactive Brokers i OANDA. Tradeoffy omawiamy w artykule trading bot — MQL5 czy Python.
Przykład hipotetyczny — pierwsza strategia od koncepcji do backtestu
Załóżmy strategię crossover na EUR/USD na H1: wejście długie, gdy EMA 21 przebija SMA 55 w górę, a ATR z ostatnich czternastu świec jest większy niż jego średnia z pięćdziesięciu okresów. Stop 1,5 ATR poniżej ceny wejścia, take profit 2,5 ATR powyżej, pozycja 1 procent kapitału. Krok pierwszy: czterdzieści wejść ręcznie w MT5 na danych z ostatnich sześciu miesięcy — trader liczy skuteczność, średni zysk i średnią stratę, otrzymuje dajmy na to 38 procent skuteczności i profit factor 1,4. Krok drugi: kodowanie EA w MQL5 i Strategy Tester na pięcioletniej historii. Wynik zbliża się do wartości ręcznych albo systematycznie różni — w drugim przypadku trader wie, że albo źle zapisał regułę, albo coś w ręcznym wykonaniu interpretował intuicyjnie. Krok trzeci: ten sam EA w Pythonie z backtraderem, z uwzględnieniem spreadu i slippage. Krok czwarty: walk-forward, jeśli wyniki są stabilne. Liczby są ilustracyjne — pokazują kolejność, nie obietnicę.
„The biggest enemy of an algorithmic trader is data-snooping bias. Models that look great in backtest often fail in live trading not because the strategy is wrong, but because the trader optimised it on the same data they used to evaluate it." — Ernest P. Chan, Algorithmic Trading: Winning Strategies and Their Rationale, Wiley, 2013
Dlaczego większość detalicznych projektów algo upada
Powody są dwa i żaden nie ma związku z umiejętnością programowania. Pierwszy to brak przewagi rynkowej, którą warto automatyzować — trader pisze backtester, dopasowuje parametry do ostatnich pięciu lat danych i otrzymuje krzywą equity ładniejszą niż jakakolwiek rzeczywistość. Idzie na live, traci, dochodzi do wniosku, że potrzebuje „lepszej strategii" i powtarza pętlę. Sposób na wyodrębnienie i potwierdzenie przewagi, zanim siądzie się do klawiatury, omawiamy w tekście o odkrywaniu przewagi rynkowej. Drugi powód to nieakceptacja odpowiedzi „twoja strategia nie ma przewagi, wróć do deski kreślarskiej". Większość traderów woli mocniej zoptymalizować parametry niż ją usłyszeć — algorytm jej nie złagodzi, tylko powtórzy szybciej. Po stronie infrastruktury rzeczywistość jest banalna: VPS u Vultra albo Hetznera kosztuje pięć do dwudziestu euro miesięcznie, MetaTrader i Python są darmowe, dane Dukascopy też. Bariera wejścia mierzy się dziesiątkami euro, nie tysiącami. Wąskim gardłem jest czas i myślenie statystyczne, nie pieniądze. Praktyczną stronę wdrożenia EA na VPS-ie pokrywa sekcja automatyzacja EA, MQL, VPS na MyBank.pl.
Co zrobić jutro
- Otwórz dziennik i przez tydzień zapisuj każde swoje wejście w postaci jednoznacznej reguły „jeśli X i Y, to otwórz Z" — bez słów „zazwyczaj", „raczej", „czuję, że". Jeśli na koniec tygodnia nie potrafisz przepisać żadnej decyzji na taką regułę, to znaczy, że nie masz jeszcze strategii do zautomatyzowania, tylko zbiór reakcji.
- Pobierz darmowy MetaTrader 5 od brokera, otwórz konto demo i ustaw trzy alerty z TradingView lub natywnego alertu MT5 dla najprostszej wersji swojej reguły — przez dwa tygodnie obserwuj, czy alerty trafiają w te same momenty, które wybrałbyś ręcznie.
- W trzecim tygodniu zarejestruj się na mql5.com, otwórz MetaEditor wbudowany w MT5 i napisz najprostszy Expert Advisor — crossover EMA 21 i SMA 55 z trailing stopem 1,5 ATR — opierając się na dokumentacji MQL5 Reference; cel to pierwszy działający EA w czterdzieści do osiemdziesięciu godzin pracy, nie pierwszy zyskowny.
- Po dwóch miesiącach zainstaluj Pythona 3.11 lub nowszego, dodaj pandas, NumPy i backtrader poleceniem pip install, przejdź Backtrader Quickstart Guide i przepisz tego samego EA z MQL5 na strategię w backtraderze. Porównaj wyniki na tych samych danych — różnice powyżej kilku procent oznaczają ukryte założenie.
- Dopiero w piątym lub szóstym miesiącu odpal EA na koncie demo MetaTradera na VPS-ie u Vultra lub Hetznera. Daj mu trzy miesiące. Jeśli wyniki demo są zbliżone do walk-forwardu, dopiero wtedy rozważ konto live z kapitałem, którego utrata nie zmieni twojego budżetu — pięćset do dwóch tysięcy euro w pierwszej iteracji, nie więcej.
Źródła i bibliografia
-
MetaQuotes MetaTrader 5 — Automated Trading · oficjalny opis automatycznego handlu w MetaTraderze, ścieżek pozyskania robota i miejsca strategy testera w warsztacie www.metatrader5.com ↗
-
MetaQuotes MQL5 Reference — programming language for algorithmic trading · dokumentacja referencyjna języka MQL5 i pięciu typów aplikacji (EA, indykatory, skrypty, serwisy, biblioteki) www.mql5.com ↗
-
Backtrader Backtrader Quickstart Guide · podręcznik startowy frameworka backtrader w Pythonie — strategie, indykatory, optymalizacja parametrów www.backtrader.com ↗
-
BIS BIS Quarterly Review, December 2019 — FX trading rises to $6.6 trillion per day · omówienie elektronicznej egzekucji i roli niebankowych principal trading firms w obrocie walutowym — kontekst dla retail algo www.bis.org ↗
Najczęstsze pytania
Czym algorithmic trading w retail w ogóle jest, a czym nie?
Algorithmic trading w wydaniu detalicznym polega na powierzeniu komputerowi części wykonawczej: trader definiuje regułę w postaci jednoznacznego warunku („jeśli średnia 21-okresowa przebije średnią 55-okresową w górę i ATR z ostatnich dwudziestu świec rośnie, otwórz długą pozycję o wielkości 1 procent kapitału z trailing stopem 1,5 ATR"), a oprogramowanie rozpoznaje wystąpienie tego warunku i wystawia zlecenie, bez wahania, bez sprawdzania Telegrama i bez korekty na ostatnią porażkę. Tym, czym algorytm zdecydowanie nie jest, to magiczny generator biernego dochodu w trzech dziedzinach naraz. Nie poprawia przewagi, której nie ma — jeśli ręcznie trader przegrywa, automat przegra szybciej i taniej. Nie chroni przed zmianą reżimu — jeśli historia, na której powstał, była rynkiem trendującym, a teraz panuje range, kapitał topnieje równie skutecznie jak u tradera klikającego ręcznie. I nie eliminuje błędów logicznych w samej strategii — kodyfikuje je tylko szybciej i konsekwentniej.
Jak wygląda realistyczna drabina od ręcznego klikania do bota?
Pierwszy szczebel to alerty na platformie wykresowej — TradingView albo MT5 — które wyzwalają dźwięk lub e-mail, gdy warunek wejścia jest spełniony. Trader nadal klika, ale jest zmuszony przełożyć strategię na jednoznaczne reguły. Drugi szczebel to prosty Expert Advisor w MQL5 dla MetaTradera, najczęściej crossover dwóch średnich albo wybicie z konsolidacji z trailing stopem; piszemy o tym w artykule o podstawach EA w MQL5. Trzeci szczebel to backtester w Pythonie z bibliotekami pandas, NumPy i backtrader, który liczy krzywe equity i metryki ryzyka w ułamku sekundy — temat rozwijamy w tekście o backteście Forex w Pythonie. Czwarty, opcjonalny, to bezpośrednie połączenie z brokerem przez REST lub FIX (Interactive Brokers, OANDA) i rezygnacja z MetaTradera. Wybór między MQL5 a Pythonem szerzej omawiamy w artykule trading bot — MQL5 czy Python. Realistyczne tempo to od dwunastu do dwudziestu czterech miesięcy pracy popołudniami, nie weekend kursu na Udemy.
Jakich umiejętności faktycznie potrzebuję — i co je odróżnia od mitu „naucz się programować i bądź bogaty"?
Potrzebne są trzy rzeczy, w kolejności wagi. Po pierwsze, myślenie statystyczne: rozumienie różnicy między skutecznością, profit factorem i wartością oczekiwaną, świadomość czym jest rozkład wyników i dlaczego krzywa equity z pięćdziesięciu transakcji jeszcze niczego nie udowadnia. Po drugie, cierpliwość do cyklu walidacyjnego: pomysł, kodowanie, backtest, walk-forward, demo trzy do sześciu miesięcy, dopiero potem mały kapitał. Ten cykl trwa miesiącami i większość traderów się z niego wykrusza po dwóch lub trzech iteracjach. Po trzecie, podstawy programowania: zmienne, pętle, funkcje, struktury kontrolne i jakieś pojęcie o tym, co robi pandas DataFrame. Nie trzeba być inżynierem oprogramowania — wystarczy umieć przeczytać cudzy kod EA i zmienić w nim wartość parametru bez psucia całości. Mit „naucz się Pythona i bądź bogaty" pomija to, co najtrudniejsze i najmniej widowiskowe: posiadanie przewagi rynkowej, którą warto automatyzować. Bez niej kod jest tylko szybkim sposobem na spalenie depozytu.
Dlaczego większość detalicznych projektów algo upada — i czy istnieje warunek brzegowy, który zwiększa szansę?
Projekty algo upadają nie z powodu błędów w kodzie, choć tych jest na początku sporo. Upadają, bo nie ma przewagi do zautomatyzowania. Trader uczy się Pythona, pisze backtester, dopasowuje parametry do ostatnich pięciu lat danych i otrzymuje krzywą równania piękniejszą niż cokolwiek możliwego w realu — to klasyczny curve fitting. Idzie na live, traci, dochodzi do wniosku, że potrzebuje „lepszej strategii" i powtarza pętlę. Warunek brzegowy, który dramatycznie zwiększa szansę, to istnienie przewagi przed napisaniem pierwszej linii kodu — wystarczająco prosta reguła, która w ręcznym tradingu albo w czystej arytmetyce na danych historycznych daje pozytywną wartość oczekiwaną w wielu reżimach rynkowych, nie tylko w tym ostatnim. Sposób na wypreparowanie i sprawdzenie takiej przewagi omawiamy w artykule o odkrywaniu przewagi rynkowej. Druga rzecz, która oddziela trwałe projekty od jednorazowych, to gotowość do akceptacji wyniku, który mówi: „twoja strategia nie ma przewagi, wróć do deski kreślarskiej" — większość traderów woli mocniej zoptymalizować parametry niż ją usłyszeć. Algorytm jej nie złagodzi, on tylko ją powtórzy szybciej.