O autorze
Kto pisze ten dział, skąd wzięło się MQL5 w jego życiu i dlaczego wszystkie przykłady przechodzą przez kompilator. Oraz wprost: czego nie robi.
Sprawdzone 2026-08-03.
Mój pierwszy ekspert nie zarobił złotówki. Za to nauczył mnie czegoś cenniejszego: że komputer robi dokładnie to, co mu każesz, a nie to, co miałeś na myśli. Kilkanaście lat temu, w MQL4, napisałem kilkadziesiąt linijek, które miały otwierać pozycję po przecięciu dwóch średnich. Otwierały. Przy każdym ticku, po kilkaset razy dziennie, bo nie wiedziałem jeszcze, że trzeba sprawdzić, czy świeca się zmieniła.
To był początek. Potem było wszystko, co przechodzi każdy, kto zaczyna sam: zlecenia odrzucane kodem, którego nie da się znaleźć po polsku. Stop lossy odbijane przez brokera bez wyjaśnienia. Wskaźnik, który na wykresie wyglądał znakomicie, a w ekspercie zwracał zera. I ta szczególna odmiana bezradności, gdy backtest pokazuje równiutką rosnącą krzywą, rachunek demo pokazuje coś zupełnie innego, a nikt nie potrafi powiedzieć, dlaczego.
Dlaczego w ogóle piszę te programy
Nie po to, żeby maszyna zarabiała za mnie. Po to, żeby nie musiała zarabiać za mnie moja dyscyplina.
Ekspert nie przesuwa stop lossa, bo mu żal. Nie dokłada do stratnej pozycji, bo „przecież musi zawrócić". Nie zapomina zamknąć czegoś przed weekendem i nie handluje w nocy, gdy nie powinien. Wykonuje regułę, którą sam wcześniej zapisałeś — i właśnie dlatego cała trudność przenosi się w miejsce, w którym można nad nią zapanować: do reguły i do kodu, który ją realizuje.
Ta zamiana bardzo mi pomogła. Nie dlatego, że jakiś algorytm okazał się genialny — żaden się taki nie okazał — tylko dlatego, że przestałem podejmować kilkanaście drobnych decyzji dziennie w stanie, w którym człowiek podejmuje je najgorzej.
Potem przyszło MQL5
Nowa platforma i nowy język o niemal identycznej składni, w którym prawie nic nie działało tak samo.
OrderSend przestał przyjmować dwanaście argumentów i zaczął wymagać wypełnionej struktury. Zniknęły tablice Close[] i High[]. Zniknęło pojęcie zlecenia, które jest jednocześnie pozycją — pojawiły się trzy osobne rzeczy: zlecenie, transakcja i pozycja, każda z własnymi funkcjami i własnym numerem. Wskaźniki przestały zwracać liczbę, a zaczęły zwracać uchwyt, z którego trzeba osobno skopiować dane.
Kod, który działał latami, trzeba było napisać od nowa. I nie dało się tego zrobić mechanicznie, bo to nie było tłumaczenie z języka na język, tylko zmiana sposobu myślenia o rynku. Zajęło mi to znacznie więcej czasu, niż zakładałem, i większość tego czasu zeszła nie na pisanie, lecz na szukanie odpowiedzi na pytania, które ktoś już kiedyś zadał — zwykle po angielsku, na forum, w wątku sprzed ośmiu lat, między dwiema kłótniami o to, czy martyngał ma sens.
Skąd wziął się ten dział
Z notatek. Przez lata zbierałem je dla siebie: co znaczy ten kod błędu, czemu ta funkcja zwraca minus jeden, dlaczego u tego brokera zlecenie przechodzi, a u tamtego nie. Kiedy zebrało się tego kilkadziesiąt stron, doszedłem do wniosku, że skoro i tak muszę to uporządkować, to lepiej zrobić to porządnie i raz — dokładnie z tego samego powodu, dla którego powstały pozostałe serwisy w tej rodzinie: Ile zostaje o tym, co naprawdę zostaje z wynagrodzenia, Kredyt czy wynajem z dwudziestoletnią historią cen z bazy NBP, Giełda po ludzku i Giełda USA po ludzku ze screenerami spółek, Dywidendy z USA oraz Kapitał początkowy.
Drugi powód jest taki, że po polsku prawie tego nie ma. Jest dokumentacja MetaQuotes, świetna jako referencja i bezużyteczna, gdy nie wiesz jeszcze, czego szukać. Są kursy, które kończą się na przecięciu średnich. I jest sporo materiałów, w których programowanie jest tylko przystawką do sprzedaży strategii.
Trzy zasady, które z tego wynikają
Każdy fragment kodu przechodzi przez kompilator. Nie „powinien się skompilować" — przechodzi, w MetaEditorze, a wynik trafia pod artykuł razem z numerem builda i datą sprawdzenia. Fragmenty, których świadomie nie kompilujemy, bo pokazują błąd albo starą składnię, są oznaczone. To ta sama zasada, którą stosuję w kalkulatorach finansowych: liczba bez źródła jest tylko opinią, a kod bez kompilacji tylko obietnicą.
Piszę o tym, co poszło nie tak. Najwięcej miejsca zajmuje w tym dziale nie składnia, tylko pułapki — rzeczy, których kompilator nie zgłasza, a które kosztują. Bo to one zabrały mi najwięcej czasu i o nich najtrudniej znaleźć cokolwiek sensownego.
Backtest jest narzędziem do debugowania. Sprawdza, czy program robi to, co zaplanowałeś. Nie sprawdza, czy zarobi, i nie służy jako dowód. Piszemy o tym osobno przy pułapkach testera.
Czego nie robię
Nie doradzam inwestycyjnie i nie mam do tego uprawnień. Nie odpowiem na pytanie, czy dana strategia ma sens ani jakie ustawić parametry. Uczę pisać program, który wykona twoją regułę — twoja reguła pozostaje twoja.
Nie sprzedaję ekspertów ani sygnałów. Nie ma tu odnośników afiliacyjnych, nie ma linków do brokerów i nie ma reklam. Kod jest na licencji MIT: bierz, zmieniaj, tylko sprawdź go sam, zanim uruchomisz cokolwiek poza kontem demo.
Nie udaję, że wszystko wiem. Tam, gdzie zachowanie zależy od brokera albo od wersji platformy, jest to napisane wprost, razem z kodem, którym możesz to sprawdzić u siebie. Takich miejsc jest w MQL5 więcej, niż się wydaje.
Znalazłeś błąd
To najbardziej użyteczna rzecz, jaką można zrobić dla takiego serwisu. Jeśli fragment kodu się nie kompiluje, zachowuje się inaczej, niż napisałem, albo działa u twojego brokera inaczej niż opisane — napisz przez stronę kontaktu. Najbardziej pomaga podanie adresu strony, numeru builda MetaTradera i tego, co dokładnie zobaczyłeś w dzienniku.