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

MQL5 / Błędy

retcode 10008

10008 — TRADE_RETCODE_PLACED

Zlecenie oczekujące zostało wystawione. Numer, który dostajesz, nie jest numerem pozycji, a droga od jednego do drugiego bywa przerwana.

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

CTrade::OrderSend: buy limit 0.10 EURUSD at 1.09100 [placed]

Co ten kod znaczy

Zlecenie oczekujące trafiło do systemu i czeka na osiągnięcie ceny. Pozycja jeszcze nie istnieje i może nigdy nie powstać.

Trzy numery, które nie są tym samym

To jest miejsce, w którym najczęściej gubi się kod śledzący własne zlecenia.

NumerKiedy powstajeGdzie go szukać
numer zleceniaprzy wystawieniuwynik.order
numer transakcjiprzy wykonaniuwynik.deal, później w historii
identyfikator pozycjiprzy otwarciu pozycjiPOSITION_IDENTIFIER

Numer zlecenia zapamiętany po kodzie 10008 nie posłuży do PositionSelectByTicket. Żeby dojść od zlecenia do pozycji, trzeba przejść przez transakcję: w historii transakcja ma pole DEAL_ORDER wskazujące zlecenie, z którego powstała, oraz DEAL_POSITION_ID wskazujące pozycję.

Zlecenia oczekujące liczy inna funkcja

PositionsTotal ich nie widzi. Ekspert, który sprawdza „czy mam już otwartą pozycję" i na tej podstawie wystrzega się drugiego wejścia, przy strategii opartej o zlecenia oczekujące policzy zero i wystawi kolejne.

Liczenie własnych zleceń oczekujących
int MojeZlecenia(const string symbol, const ulong magic)
  {
   int ile = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      ulong bilet = OrderGetTicket(i);
      if(bilet == 0)
         continue;

      if(OrderGetInteger(ORDER_MAGIC) != (long)magic)
         continue;
      if(OrderGetString(ORDER_SYMBOL) != symbol)
         continue;

      ile++;
     }

   return ile;
  }

Droga od zlecenia do pozycji bywa przerwana

Wystawione zlecenie nie jest gwarancją niczego. Może:

  • wygasnąć, jeśli podano czas wygaśnięcia — patrz 10022,
  • zostać anulowane przy aktywacji, gdy w tym momencie zabraknie depozytu albo zostanie przekroczony limit — wtedy przychodzi 10041 i zlecenie znika,
  • zostać przeskoczone przez lukę cenową, po której aktywuje się po cenie znacznie gorszej niż podana.

Jak dowiedzieć się o aktywacji

Odpytywanie listy pozycji przy każdym ticku działa, ale jest kosztowne i nieprecyzyjne. Właściwym mechanizmem jest OnTradeTransaction: aktywacja zlecenia generuje transakcję, a ta niesie komplet informacji łącznie z powodem.

Powiązane