Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Od zera /

Czym jest kompilacja

Co dokładnie robi klawisz F7, czym różni się plik .mq5 od .ex5 i jak czytać komunikaty kompilatora.

Sprawdzone 2026-08-02.

Kod, który piszesz, to tekst. Terminal tekstu nie rozumie — potrzebuje wersji przetłumaczonej na postać, którą potrafi wykonać. Tym tłumaczeniem jest kompilacja.

Dwa pliki

PlikCo to jest
.mq5twój kod źródłowy, zwykły tekst, można otworzyć w notatniku
.ex5wynik kompilacji, plik wykonywalny, nieczytelny dla człowieka
.mqhplik nagłówkowy, kod dołączany do innych plików, sam się nie kompiluje

W Nawigatorze terminala widzisz programy, dla których istnieje .ex5. Sam plik .mq5 bez skompilowanej wersji jest dla platformy niewidoczny — i to odpowiada na pytanie „napisałem kod, dlaczego go nie ma na liście".

Jak skompilować

W MetaEditorze: klawisz F7 albo przycisk Kompiluj. Wynik pojawia się na dole okna, w zakładce Błędy.

'PierwszyKrok.mq5' PierwszyKrok.mq5 1 1
Result: 0 errors, 0 warnings, 132 msec elapsed

Zero błędów znaczy, że powstał plik .ex5 i program jest gotowy do uruchomienia. Nie znaczy, że robi to, co chciałeś — kompilator sprawdza poprawność językową, nie sens.

Błędy i ostrzeżenia

Błąd (error) zatrzymuje kompilację. Plik .ex5 nie powstaje albo zostaje stara wersja, co bywa mylące: uruchamiasz program i widzisz zachowanie sprzed poprawki, bo nowa się nie zbudowała.

Ostrzeżenie (warning) nie zatrzymuje niczego, ale prawie zawsze wskazuje prawdziwy problem. Najczęstsze w MQL5:

  • possible loss of data due to type conversion — przypisujesz long do int albo double do int. W kodzie handlowym to potrafi uciąć część wartości. Rzutuj jawnie: (int)SymbolInfoInteger(...).
  • declaration of 'x' hides global declaration — zmienna lokalna nazywa się tak samo jak globalna. Kod użyje lokalnej, co rzadko jest zamiarem.
  • return value of 'CopyBuffer' should be checked — wywołujesz funkcję i ignorujesz to, co zwróciła. W MQL5 ignorowanie wyniku funkcji handlowej jest jednym z najkosztowniejszych nawyków.

Ustaw sobie zasadę: zero ostrzeżeń tak samo jak zero błędów. Kod z dwudziestoma ostrzeżeniami to kod, w którym dwudziesta pierwsza, ta ważna, przepadnie.

Gdzie ląduje wynik

Plik .ex5 powstaje obok źródła. Skrypt z MQL5\Scripts\ daje .ex5 w MQL5\Scripts\, ekspert w MQL5\Experts\. Nie trzeba niczego przenosić ani kopiować.

Skąd biorą się błędy, których nie rozumiesz

Kompilator MQL5 podaje numer linii, ale przyczyna często siedzi wyżej. Typowe:

  • unexpected token w losowym miejscu — zwykle brakuje średnika albo klamry kilka linii wcześniej.
  • 'X' - undeclared identifier — literówka w nazwie zmiennej lub funkcji albo użycie czegoś, co istnieje tylko w MQL4, jak Ask czy Point.
  • wrong parameters count — funkcja przyjmuje inną liczbę argumentów, niż podałeś. Częste przy kodzie przepisywanym z MQL4, gdzie na przykład iMA miało jeden argument więcej.

Nasz przegląd kodu wyłapuje część z tych rzeczy zanim odpalisz kompilator, ale ostatnie słowo zawsze ma MetaEditor.

Kod, który nie skompiluje się starszym edytorem

Funkcje dodane w nowszych wersjach platformy nie istnieją w starszych, a preprocesor MQL5 nie pozwala tego obejść warunkowo. Objawia się to komunikatem o nieznanym identyfikatorze u kogoś, kto ma starszy terminal — opisaliśmy to przy buildach i zgodności.

Debugger

MetaEditor ma debugger uruchamiany klawiszem F5: możesz zatrzymać program w wybranej linii i podejrzeć wartości zmiennych. Działa zarówno na danych historycznych, jak i na bieżących. To narzędzie, po które warto sięgnąć, zanim zaczniesz obstawiać przyczynę przez wstawianie kolejnych Print.

Następny krok: pierwszy skrypt.