Pierwszy skrypt w MetaEditorze
Gdzie MetaTrader trzyma pliki, czym różni się skrypt od eksperta i dlaczego twój kod nie pojawia się w Nawigatorze.
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Ta lekcja zakłada, że masz zainstalowanego MetaTradera 5 i wiesz, czym jest kompilacja. Jeśli nie — zacznij od czym jest MQL5 i reszty działu Od zera — zajmie kwadrans.
Trzy rodzaje programów
MQL5 zna trzy typy programów wykonywalnych i mylenie ich to pierwsza rzecz, która blokuje początkujących.
| Typ | Kiedy się uruchamia | Do czego |
|---|---|---|
| Skrypt | raz, po przeciągnięciu na wykres | jednorazowa operacja |
| Wskaźnik | przy każdym przeliczeniu wykresu | rysowanie na wykresie |
| Ekspert | przy każdym ticku i zdarzeniu | podejmowanie decyzji, handel |
Skrypt kończy się sam, kiedy jego funkcja OnStart dobiegnie końca. Ekspert siedzi na wykresie i czeka na kolejne zdarzenia. Zaczniemy od skryptu, bo nie wymaga zrozumienia cyklu życia — po prostu robi jedną rzecz i znika.
Gdzie mieszkają pliki
To jest miejsce, w którym gubi się najwięcej ludzi. MetaTrader nie widzi plików leżących gdziekolwiek na dysku — widzi tylko to, co jest w jego katalogu danych.
Katalog danych otwierasz z terminala: Plik → Otwórz katalog danych. W środku jest folder MQL5, a w nim:
MQL5\
Experts\ eksperci (.mq5)
Indicators\ wskaźniki
Scripts\ skrypty
Include\ pliki nagłówkowe (.mqh)
Libraries\ biblioteki
Files\ pliki danych, do których kod ma dostęp
Logs\ dziennikiKod
Nowy plik tworzysz przez Plik → Nowy → Skrypt. Kreator dopisze szkielet; poniżej jest to samo, tylko obrane z tego, czego na razie nie potrzebujesz.
//+------------------------------------------------------------------+
//| Wypisuje aktualną cenę symbolu, na którego wykresie go uruchomiono |
//+------------------------------------------------------------------+
#property script_show_inputs
input int LiczbaPowtorzen = 3; // ile razy wypisać cenę
void OnStart()
{
MqlTick tick;
for(int i = 0; i < LiczbaPowtorzen; i++)
{
if(!SymbolInfoTick(_Symbol, tick))
{
Print("Nie udało się pobrać ceny. Kod błędu: ", GetLastError());
return;
}
PrintFormat("%s bid=%.*f ask=%.*f spread=%d pkt",
_Symbol, _Digits, tick.bid, _Digits, tick.ask,
(int)MathRound((tick.ask - tick.bid) / _Point));
Sleep(1000);
}
}Kompilujesz klawiszem F7. Na dole, w zakładce Błędy, powinno pojawić się 0 errors, 0 warnings. Potem przeciągasz skrypt z Nawigatora na wykres.
Gdzie zobaczyć wynik
Print i PrintFormat nie piszą na wykresie. Ich wynik ląduje w terminalu, w oknie Skrzynka narzędziowa (Ctrl+T), w zakładce Eksperci. Zakładka Dziennik obok zawiera komunikaty samego terminala — połączenie z serwerem, autoryzacja — i tam twoich wpisów nie będzie.
2026-08-02 11:04:18.221 PierwszyKrok (EURUSD,H1) EURUSD bid=1.09312 ask=1.09325 spread=13 pktZadanie
Zmień skrypt tak, żeby przed pętlą wypisał trzy właściwości symbolu: minimalny wolumen zlecenia, krok wolumenu i rozmiar kontraktu. Wszystkie trzy pobierzesz przez SymbolInfoDouble ze stałymi SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_STEP i SYMBOL_TRADE_CONTRACT_SIZE. Uruchom skrypt na wykresie pary walutowej, a potem na wykresie indeksu albo akcji i porównaj wyniki — to te różnice sprawiają, że kod z internetu działa u autora, a u ciebie nie.