Trading bot — MQL5 czy Python? Uczciwe porównanie i hybryda

Ostatnio zweryfikowano: · Treść aktualna długoterminowo
Ostrzeżenie · YMYL Ten artykuł ma charakter wyłącznie edukacyjny i nie stanowi rekomendacji inwestycyjnej. Handel na rynku Forex wiąże się z wysokim ryzykiem utraty kapitału — według ESMA 74–89% rachunków detalicznych traci pieniądze.

Wybór języka do automatyzacji strategii forexowej zwykle nie sprowadza się do estetyki kodu, tylko do tego, jak szybko bot trafi na rachunek live i jak wygodnie będzie tam żył przez kolejne lata. MQL5 daje to natychmiast w platformie, na której większość polskich brokerów detalicznych już wystawia rachunek — Python kosztuje kilka godzin konfiguracji, ale w zamian oferuje cały ekosystem analizy danych, uczenia maszynowego i pracy z wieloma brokerami z jednego skryptu. Wybór zależy od tego, co chcesz robić jutro, nie od tego, który język jest „lepszy".

Co właściwie porównujemy

MQL5 to język wbudowany w platformę MetaTrader 5 firmy MetaQuotes, zaprojektowany specjalnie do pisania Expert Advisorów i wskaźników. Python jest językiem ogólnego zastosowania, którego do tradingu używasz przez zewnętrzny pakiet — najczęściej oficjalny `MetaTrader5` od MetaQuotes albo bibliotekę API innego brokera. Porównanie ma sens dopiero w kontekście tego, co bot ma robić: jeżeli klasyczna strategia trendu lub wybicia ma chodzić na jednym rachunku w MT5 i otwierać kilka zleceń dziennie, MQL5 jest krótszą drogą do efektu. Jeżeli sygnał ma korzystać z modelu statystycznego, danych makro, kilku rachunków albo rynku spoza MetaQuotesa, ekosystem Pythona staje się trudny do zastąpienia. Wstęp do całego tematu leży w artykule o pierwszych krokach w handlu algorytmicznym, a sama mechanika EA w przewodniku po Expert Advisorach.

Atuty MQL5, których Python nie odda za darmo

Najpoważniejsza zaleta MQL5 jest banalna i często niedoceniana: połączenie z brokerem masz za darmo. EA rozpakowujesz do folderu MetaEditora, kompilujesz do pliku `.ex5`, wrzucasz na wykres i bot handluje — żadnego pisania warstwy egzekucyjnej, żadnej autoryzacji API, żadnego REST-a. Drugie: dojrzały Strategy Tester z trybem „every tick based on real ticks" pozwala odtworzyć historię tickową własnego brokera od kilku do kilkunastu lat wstecz, z prawdziwymi spreadami i prowizjami zapisanymi w specyfikacji symbolu. Trzecie: społeczność MQL5.com publikuje gotowe wskaźniki i biblioteki, więc kopiowanie szkieletu MA crossover albo modułu zarządzania ryzykiem zajmuje minuty. Czwarte: w platformie masz wbudowany debugger, profiler i optymalizację rozproszoną na sieci farm cloud — to wszystko bez doinstalowywania niczego. Punkt zaczepienia dla początkujących to artykuł o podstawach MQL5 EA oraz przewodnik backtestowania w MT4 i MT5.

Atuty Pythona, których MQL5 nie zastąpi

Pierwszy: dane. `pandas`, `numpy` i `statsmodels` to standard naukowy do szeregów czasowych, regresji i testów statystycznych — w MQL5 to samo robisz pętlą po tablicy, czyli o rząd wielkości wolniej i z większym ryzykiem błędu. Drugi: uczenie maszynowe. Jeżeli sygnał ma korzystać z random forest, gradient boostingu albo prostej sieci neuronowej, `scikit-learn` i `TensorFlow` rozwiązują to w kilkudziesięciu liniach kodu — w MQL5 takiego stosu po prostu nie ma. Trzeci: wektoryzowany backtesting w `vectorbt` Olega Polakowa albo event-driven w `backtraderze` Daniela Rodrigueza pozwala przebadać setki wariantów parametrów w czasie, w którym Strategy Tester zdąży uruchomić dwa przebiegi. Czwarty: oderwanie od brokera. Jeżeli abstrakcyjną warstwę egzekucji wepniesz sobie sam, ten sam skrypt obsłuży MT5, Interactive Brokers przez `ib_insync` oraz rynek krypto przez `ccxt`. Szerszy rozkład stosu i jego cykl badawczy są w artykule o backteście forex w Pythonie.

Hybryda, którą wybiera większość poważnych traderów detalicznych

W praktyce trzecia opcja okazuje się najlepsza i najmniej oczywista. Badania, dane historyczne i obliczenia statystyczne idą do Pythona, a egzekucja zostaje w MT5. Łącznikiem jest oficjalny pakiet `MetaTrader5` od MetaQuotes — instalujesz go przez `pip`, z poziomu skryptu inicjujesz połączenie z terminalem, pobierasz świece i ticki tej samej jakości, którą widzi EA, a zlecenia wysyłasz funkcjami `order_send` i `position_close`. Cały ekosystem statystyczny pracuje w Pythonie, a platforma broker-friendly i farma VPS-ów zostaje w MetaQuotes. Wariant alternatywny — gdy nie chcesz mieszać dwóch warstw w czasie rzeczywistym — to robić research wyłącznie w Pythonie, a po walidacji przepisać reguły na MQL5 i wdrożyć tradycyjnym EA. Wybór między tymi dwoma trybami zależy od tego, czy sygnał wymaga dostępu do bibliotek Pythona w trakcie sesji handlowej, czy tylko na etapie projektowania strategii.

„Python has become a powerful programming language and ecosystem for the financial industry — for everything from analyzing financial data to algorithmic trading to risk management." — Yves Hilpisch, Python for Finance: Mastering Data-Driven Finance, O'Reilly, 2018

Przykład hipotetyczny — to samo wybicie napisane w obu językach

Wyobraź sobie strategię wybicia londyńskiego na EUR/USD: w pierwszej godzinie sesji londyńskiej kupujesz, gdy kurs przebija maksimum poprzedniej godziny azjatyckiej, sprzedajesz na przebiciu minimum, stop oparty na ATR-20, take profit dwa razy stop. W MQL5 piszesz jedną klasę `CExpertAdvisor`, dwie funkcje obliczające zakres azjatyckiej sesji i wywołujesz `OrderSend` z parametrami. Całość mieści się w jednym pliku `.mq5` na około 250 linii, z czego sporo to obsługa błędów. Wdrożenie zajmuje pięć minut: kompilujesz, przeciągasz na wykres, włączasz `AutoTrading`. W Pythonie ten sam pomysł wygląda inaczej: importujesz `MetaTrader5`, ładujesz świece do `pandas`, liczysz ATR i poziomy w jednym wyrażeniu wektorowym, a egzekucję wpinasz w pętlę sprawdzającą nowy tik co kilkanaście sekund. Plik ma podobną długość, ale dochodzi obsługa wyjątków sieciowych i obowiązek samodzielnego pilnowania, czy terminal nie zerwał połączenia. W zamian dostajesz darmowy backtest w `vectorbt` na pięciu latach historii — w MQL5 to samo zajmie kilkadziesiąt minut w Strategy Testerze. Wszystkie liczby w tym przykładzie są wyłącznie ilustracyjne.

Werdykt — który wybrać i kiedy

Dla tradera detalicznego prowadzącego klasyczne strategie na jednym rachunku MT5, z jednym lub dwoma instrumentami, MQL5 jest krótszą drogą do efektu. Pierwszy bot napisany od zera w MQL5 trafia na demo szybciej niż konfiguracja środowiska Python na nowym laptopie. Dla każdego, kto chce sięgać po metody statystyczne, modele uczenia maszynowego, dane spoza MetaQuotesa albo wiele rachunków w różnych brokerach, Python wygrywa w długim okresie — nawet jeżeli pierwsze tygodnie wyglądają mniej spektakularnie. Hybryda Python plus MT5 jest dziś standardem dla traderów, którzy mają już rok lub dwa lata praktyki w jednym z tych światów i chcą uczciwego researchu bez rezygnacji z platformy, na której rachunek już działa. Najgorszą decyzją jest wybór języka na podstawie tutoriala obejrzanego rano — różnice są realne, ale dotyczą celu, a nie języka samego w sobie. Szerszy kontekst dotyczący samej automatyzacji rzemiosła zostawia sekcja o tradingu algorytmicznym na MyBank.pl.

Co zrobić jutro

  1. Wypisz na kartce trzy zdania o strategii, którą chcesz zautomatyzować — wejście, wyjście i zarządzanie pozycją — a następnie odpowiedz na jedno pytanie: czy potrzebujesz w sygnale czegoś poza notowaniami z brokera (model statystyczny, dane makro, sygnał z innego rynku); jeżeli nie, zaczynasz od MQL5, a jeżeli tak, zaczynasz od Pythona, nawet jeżeli pierwszy tydzień będzie wolniejszy niż w MetaEditorze.
  2. Zainstaluj MetaEditor wraz z platformą MT5 dowolnego brokera detalicznego oraz Pythona 3.11 z pakietami `MetaTrader5`, `pandas` i `backtrader` i napisz w obu środowiskach ten sam minimalny szkielet: w MQL5 EA, który wystawia zlecenie market BUY na 0,01 lota i zamyka je po dwóch minutach, a w Pythonie skrypt robiący to samo przez `order_send`; takie ćwiczenie zajmuje wieczór i pokazuje skalę różnic szybciej niż dziesięć godzin czytania dokumentacji.
  3. Uruchom Strategy Tester w trybie „every tick based on real ticks" na własnym EA na dwóch latach historii i porównaj wynik z tym samym pomysłem przepisanym wektorowo w `vectorbt`; różnica między oboma raportami powie ci, ile twoja strategia traci na realnym spreadzie brokera, a ile była optymistycznym przybliżeniem wektorowym — to dane do podjęcia decyzji, na której platformie będziesz utrzymywał live.
  4. Jeżeli zdecydujesz się na hybrydę, zaplanuj jeden weekend na podstawienie pakietu `MetaTrader5` jako jedynej warstwy między researchem a egzekucją: skrypt Pythona generuje sygnał, otwiera zlecenie przez `order_send` i loguje wszystko do pliku CSV, a klasyczny EA w MQL5 zostaje tylko jako bezpiecznik zamykający pozycje w razie zerwania połączenia z Pythonem.
  5. Po dwóch tygodniach pracy w wybranym wariancie odpowiedz sobie szczerze na dwa pytania: ile czasu spędziłeś na walce z językiem, a ile na faktycznej poprawie strategii; jeżeli stosunek przekracza dwa do jednego na rzecz języka, wybór jest zły dla twojego etapu i lepiej cofnąć się do prostszego stosu, niż uparcie ciągnąć stos, który nie służy researchowi.
Jarosław Wasiński
O autorze

Jarosław Wasiński

Redaktor naczelny MyBank.pl · Analityk finansowy i rynkowy

Niezależny analityk i praktyk z ponad 20-letnim doświadczeniem w sektorze finansowym. Twórca i redaktor naczelny portalu MyBank.pl, działającego od 2004 roku. Analiza fundamentalna rynków walutowych i makroekonomicznych od 2007 roku.

Źródła i bibliografia

  1. MetaQuotes MQL5 Reference — Python integration (MetaTrader5 package) · oficjalna dokumentacja pakietu MetaTrader5 dla Pythona: instalacja przez pip, połączenie z terminalem, pobieranie OHLC i tików, składanie zleceń przez order_send i zarządzanie pozycjami www.mql5.com ↗
  2. MetaQuotes MQL5 Reference — initialize() for MetaTrader 5 Python integration · oficjalna referencja funkcji initialize() inicjującej połączenie skryptu Pythona z działającym terminalem MetaTrader 5 — wymagany krok przed każdym pobraniem danych lub złożeniem zlecenia www.mql5.com ↗
  3. MetaQuotes MQL5 Reference — Order Properties (OrderSend constants) · enumeracje właściwości zleceń wykorzystywane przez OrderSend w MQL5 oraz odpowiednio przez order_send w pakiecie Pythona — typy zleceń, statusy realizacji, atrybuty wykonania www.mql5.com ↗
  4. Backtrader Backtrader Quickstart — building a strategy in Python · oficjalna ścieżka wprowadzająca event-driven backtesting w Pythonie: klasy Strategy i Cerebro, prowizja, optymalizacja parametrów i ścieżka od pomysłu do raportu www.backtrader.com ↗
  5. O'Reilly Media Yves Hilpisch — Python for Finance, 2nd Edition (2018) · kanoniczna pozycja o zastosowaniach Pythona w analityce finansowej, algorytmice i zarządzaniu ryzykiem — punkt odniesienia dla traderów decydujących się na język w długim okresie www.oreilly.com ↗

Najczęstsze pytania

Czy muszę dobrze znać Pythona, żeby zacząć?

Do pierwszego bota nie. Wystarczy znajomość podstaw — pętle, listy, funkcje, importowanie bibliotek, czytanie pliku CSV — i pakiet MetaTrader5 załatwi resztę. Pierwszy skrypt łączący się z terminalem, pobierający świece i wystawiający zlecenie mieści się w pięćdziesięciu liniach. Trudniejszą część stanowi nie sam język, a obsługa wyjątków sieciowych i pilnowanie, czy terminal nie zerwał połączenia. Lepiej trzymać dwa równoległe tory niż czekać aż „opanujesz Pythona w 100 procent": kurs podstaw przez cztery do sześciu tygodni po godzinie dziennie i natychmiastowy projekt, który właśnie ćwiczysz na realnych danych z własnego brokera. Krzywa nauki jest bardziej łagodna, niż sugerują marketingowe porównania, a finalna strategia rzadko wymaga więcej niż trzydziestu linii faktycznego kodu logiki.

Czy hybryda Python plus MT5 jest stabilna na live?

Tak, pod warunkiem że dopiszesz dwie warstwy bezpieczeństwa, których nie ma w naiwnej wersji ze strony pakietu. Pierwsza to obsługa zerwań połączenia: skrypt powinien w pętli ponawiać `mt5.initialize()` z opóźnieniem kilku sekund, a w przypadku trwałej awarii zamknąć otwarte pozycje przez awaryjny EA, który zostaje na wykresie cały czas. Druga to logowanie do pliku CSV co każdą operację — sygnał, ticket, czas wysłania zlecenia, czas potwierdzenia — bo bez tego nie odtworzysz, co się stało, gdy rachunek live nagle wygląda inaczej niż backtest. Z tymi dwoma elementami hybryda działa równie stabilnie co klasyczny EA i daje dodatkowo dostęp do całego ekosystemu Pythona w trakcie sesji handlowej.

Czy MQL5 nadąża z prędkością wykonania, jeśli strategia handluje na każdym tiku?

Tak, i to z dużym zapasem. EA napisany w MQL5 reaguje na funkcję OnTick natywnie wewnątrz terminala MetaTrader 5, więc opóźnienie od pojawienia się nowego ticka do wysłania zlecenia liczy się w milisekundach. Python działa w osobnym procesie i komunikuje się z terminalem przez interprocesorowy mechanizm pakietu MetaTrader5 — to dokłada kilkanaście do kilkudziesięciu milisekund w typowych warunkach i staje się odczuwalne przy strategiach skalpingowych z dziesiątkami zleceń dziennie. Dla strategii pracujących na zamknięciu świecy H1 albo M15 ten dystans nie ma znaczenia, ale dla skalpingu poniżej minuty MQL5 zostaje naturalnym wyborem, a Python warto zostawić w warstwie projektowej i walidacyjnej, bez wpinania go do egzekucji w czasie rzeczywistym.

Po czym poznać, że pora przejść z MQL5 na Pythona?

Sygnały są dość konkretne. Pierwszy — chcesz w sygnale użyć modelu statystycznego, regresji albo klasyfikatora uczenia maszynowego, a w MQL5 zaczynasz pisać własną implementację, którą scikit-learn rozwiązuje w trzech linijkach. Drugi — pracujesz z danymi spoza brokera (makro, sentyment, kalendarz publikacji, dane z innego rynku) i klejenie ich w MetaEditorze pochłania więcej czasu niż sam research. Trzeci — masz strategię, która ma działać na kilku rachunkach u różnych brokerów i nie chcesz utrzymywać kilku oddzielnych wersji tego samego EA. Czwarty — coraz częściej rezygnujesz z pomysłów, bo Strategy Tester nie zdąży policzyć wszystkich kombinacji parametrów w rozsądnym czasie. Jeżeli dwa z czterech sygnałów świecą się jednocześnie, koszt nauki Pythona zwraca się w ciągu trzech miesięcy.

Pogłębij temat · pełny przewodnik