EN
Artykuły / 19.2 Pod maską
Pod maskąszkic

Jak bot wysyła zlecenie w MT5 i co odpowiada serwer - kody zwrotne po ludzku

15.11.20263 min czytania

W skrócie: bot nie otwiera pozycji sam. Składa prośbę (symbol, kierunek, lot, SL, TP), wysyła ją do serwera brokera i dostaje odpowiedź z kodem. Kod “wykonano” to jedyny dowód, że pozycja jest. Resztę kodów dzielę na dwie grupy: takie, na które trzeba poczekać, i takie, które wymagają zmiany prośby.

Prośba i odpowiedź

Każda operacja bota to ten sam schemat: wypełnia strukturę z polami (rodzaj operacji, symbol, lot, cena, SL, TP, typ wypełnienia, komentarz, numer magic) i wywołuje wysyłkę. Wywołanie zwraca tylko informację, czy prośba w ogóle poszła do serwera. Co serwer o niej sądzi, mówi dopiero osobna struktura wyniku z kodem zwrotnym. Bot, który sprawdza tylko pierwszą rzecz, uważa, że otworzył pozycję, a serwer w tym czasie ją odrzucił.

Dlatego w logu każdej poważnej operacji chcę widzieć trzy rzeczy: co bot wysłał, jaki kod wrócił i jaki był bieżący kurs. Bez tego rozmowa o “dziwnym zachowaniu” kończy się zgadywaniem.

Kody, które widuję najczęściej

Kod Znaczenie Co zrobić
10009 zlecenie wykonane nic, to sukces
10004 requote, cena się zmieniła ponowić z nową ceną
10015 zła cena poprawić cenę zlecenia
10016 złe poziomy SL/TP poprawić SL/TP (za blisko ceny)
10018 rynek zamknięty czekać na sesję
10019 brak środków zmniejszyć lot, sprawdzić margin
10021 brak cen czekać na tik
10030 nieobsługiwany typ wypełnienia zmienić typ wypełnienia

Numery pochodzą z dokumentacji MQL5. W logu terminala te same odpowiedzi widać jako tekst w nawiasach kwadratowych, np. “No prices” albo “Invalid stops”.

Czekać czy poprawiać

Odpowiedzi o stanie rynku (rynek zamknięty, brak cen, requote) mijają same. Prośba była dobra, świat nie był gotowy. Tu rozsądnie jest zaczekać do następnego tiku i spróbować raz jeszcze, bez pętli co milisekundę.

Odpowiedzi o samej prośbie (złe stopy, zła cena, za duży lot, zły typ wypełnienia) nie miną. Ponowienie tej samej prośby da ten sam kod, więc bot, który ją powtarza, tylko śmieci w logu i obciąża serwer. Takie odpowiedzi to sygnał do poprawki w kodzie albo w ustawieniach. O limitach liczby próśb piszę osobno w artykule o spamie zleceń.

Przypadek: ponad 30 minut bez cen na złocie

Na koncie jednej z prop firm złoto na realu przez około 34 minut nie dostawało kwotowań. Połączenie działało, pozycje były zsynchronizowane, ale każda zmiana SL kończyła się odpowiedzią “No prices” (czternaście prób w ciągu kilkunastu minut). Restart terminala i ponowne logowanie nie pomogły, bo winny był kanał danych po stronie brokera. Pozycje cały czas miały stary SL, więc ochrona była, tylko bez podciągnięcia. Wniosek dla kodu: przy tym kodzie nie ponawiam w kółko, tylko czekam na nowy tik, bo dopiero on oznacza, że cena wróciła (bot 2010_GoldAsiaEmaChannelBreakoutEA nie miał wtedy pozycji, więc incydent go nie dotknął).

Czego bot nie może założyć

  • Że “wysłane” znaczy “wykonane”. Liczy się kod z serwera.
  • Że cena z chwili decyzji jest ceną z chwili wykonania. Rynek poruszył się w tym czasie.
  • Że ten sam symbol przyjmie te same typy wypełnienia u każdego brokera.
  • Że odmowa jest błędem bota. Często to normalna odpowiedź na stan rynku.

Checklista

  • Czy bot sprawdza kod zwrotny serwera, a nie tylko wynik wywołania wysyłki?
  • Czy w logu jest kod, tekst odpowiedzi i kurs z chwili próby?
  • Czy odpowiedzi o stanie rynku powodują czekanie na tik, a nie pętlę ponowień?
  • Czy odpowiedzi o samej prośbie nie są ponawiane bez zmiany?
  • Czy po “brak środków” bot nie próbuje wejść co tik?
  • Czy po serii odmów bot blokuje handel i zgłasza alarm?

Powiązane

Źródła

  • Dokumentacja MQL5, “Trade Server Return Codes” i “OrderSend”, docs.mql5.com (sprawdzone 15.11.2026).

Ostrzeżenie: artykuł ma charakter edukacyjny i nie jest poradą inwestycyjną. Wyniki z przeszłości nie gwarantują przyszłych. Handel na rynkach finansowych wiąże się z ryzykiem utraty kapitału.

Dalej w rozdziale

487

Cykl życia bota w MT5: OnInit, OnTick, OnTimer, OnDeinit

Bot w MT5 nie działa jak jedna pętla: terminal wywołuje jego funkcje w odpowiednich chwilach. Co dzieje się przy starcie, na tiku, przy zmianie interwału i przy zdjęciu bota z wykresu.

494

Tester kontra live: różnice w kodzie bota, przez które wynik się rozjeżdża

Bot może sprawdzić, że działa w Testerze, i zachować się inaczej niż na koncie. Opisuję, co faktycznie różni oba tryby, dlaczego nie robię rozgałęzień w kodzie i jak porównuję test z realnym tygodniem.