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

MQL5 / Błędy

retcode 10004

10004 — TRADE_RETCODE_REQUOTE

Cena zmieniła się między wysłaniem zapytania a jego przetworzeniem. Typowe dla rachunków z wykonaniem natychmiastowym.

1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.

Co ten kod znaczy

Serwer dostał zapytanie z ceną, która w momencie przetwarzania już nie obowiązywała, i zaproponował nową. To nie jest błąd w kodzie — to normalna reakcja rynku, na którą kod musi być przygotowany.

Skąd się bierze

  • rachunek z wykonaniem natychmiastowym (SYMBOL_TRADE_EXECUTION_INSTANT) i zbyt małe deviation
  • wysyłanie zlecenia w chwili publikacji danych makro
  • cena pobrana kilka linijek wcześniej i użyta po długich obliczeniach

Co z tym zrobić

Nowe ceny serwer zwraca w polach wynik.bid i wynik.ask. Powtórzenie zapytania z tymi cenami ma sens, ale wyłącznie z licznikiem prób:

Powtórzenie po rekwotowaniu, najwyżej trzy razy
for(int proba = 0; proba < 3; proba++)
  {
   MqlTick tick;
   if(!SymbolInfoTick(_Symbol, tick))
      break;

   zapytanie.price = NormalizeDouble(tick.ask, _Digits);

   if(OrderSend(zapytanie, wynik) && wynik.retcode == TRADE_RETCODE_DONE)
      return true;

   if(wynik.retcode != TRADE_RETCODE_REQUOTE &&
      wynik.retcode != TRADE_RETCODE_PRICE_CHANGED)
      break;                    // inny powód, powtarzanie nic nie da
  }

Pętla bez licznika prób przy rozchwianym rynku potrafi wysłać kilkaset zapytań w sekundę i skończyć się kodem 10024.

Zwiększenie deviation zmniejsza liczbę rekwotowań kosztem gorszej ceny wykonania. Wartość rzędu 20–30 punktów jest rozsądnym startem dla par walutowych.

Powiązane