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

MQL5 / Błędy

bład wykonania 4756

4756 — ERR_TRADE_SEND_FAILED

Kod, który sam w sobie nie mówi nic. Prawdziwa przyczyna siedzi w polu retcode struktury wyniku.

2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.

2026-08-02 10:41:55.803  Ekspert (EURUSD,H1)  OrderSend nie powiodło się, błąd 4756

Co ten kod znaczy

GetLastError zwraca 4756 wtedy, gdy OrderSend zwróciło false. To komunikat zbiorczy: „zapytanie nie zostało wykonane". Nie mówi, dlaczego.

Dlatego samo GetLastError jest tu bezużyteczne. Prawdziwa przyczyna leży w polu retcode struktury MqlTradeResult, którą przekazałeś do OrderSend.

Jak wyciągnąć prawdziwy powód
MqlTradeRequest zapytanie = {};
MqlTradeResult  wynik = {};

if(!OrderSend(zapytanie, wynik))
  {
   PrintFormat("OrderSend: błąd %d, retcode %d, komentarz: %s",
               GetLastError(), wynik.retcode, wynik.comment);
   return;
  }

if(wynik.retcode != TRADE_RETCODE_DONE && wynik.retcode != TRADE_RETCODE_PLACED)
   PrintFormat("Serwer odrzucił zlecenie: retcode %d", wynik.retcode);

Dopiero ten retcode prowadzi do konkretu — najczęściej 10016, 10014, 10030 albo 10027.

Częsta przyczyna: niewypełniona struktura

MqlTradeRequest ma kilkanaście pól. Te, których nie ustawisz, mają wartości przypadkowe, jeśli struktura nie została wyzerowana. Stąd zapytania odrzucane bez wyraźnego powodu.

Zerowanie struktury przed użyciem
MqlTradeRequest zapytanie;
ZeroMemory(zapytanie);        // albo: MqlTradeRequest zapytanie = {};

Minimalny zestaw pól dla zlecenia rynkowego to action, symbol, volume, type, price, deviation i type_filling. Opis każdego z nich jest przy OrderSend.

Architektura zamiast pojedynczego warunku

Obsługa błędów bywa dopisywana punktowo, przy każdym OrderSend osobno. Podejście całościowe — z rozróżnieniem błędów lokalnych i serwerowych oraz z ponawianiem — opisaliśmy w architekturze obsługi błędów.

Powiązane