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 4756Co 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.
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.
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.