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

MQL5 / Błędy

bład wykonania 4805

4805 — ERR_INDICATOR_CANNOT_ADD

Nie udało się dołożyć wskaźnika: złe parametry albo wyczerpany limit uchwytów. Ostatnia przyczyna jest najbardziej podstępna, bo ujawnia się po czasie.

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

2026-08-03 08:33:51.664  Ekspert (EURUSD,H1)  iRSI zwrocilo INVALID_HANDLE, blad 4805

Co ten kod znaczy

Terminal nie mógł utworzyć wskaźnika. Komunikat jest zbiorczy i sam w sobie nie mówi, czy problem leży w parametrach, w symbolu, czy w liczbie już utworzonych uchwytów.

Skąd się bierze

  • parametr o wartości bezsensownej, na przykład okres równy zeru
  • symbol spoza okna Rynek — patrz 4302
  • nazwa wskaźnika własnego ze złą ścieżką albo bez kompilacji
  • wyczerpany limit jednocześnie utworzonych uchwytów

Co z tym zrobić

Ostatnia przyczyna jest najbardziej podstępna, bo ujawnia się po czasie. Kod tworzący uchwyty w pętli albo w OnTick działa przez kilkadziesiąt wywołań, a potem zaczyna dostawać ten kod — mimo że nic się w nim nie zmieniło.

Uchwyt raz, w OnInit, z kontrolą i komunikatem
int uchwyt = INVALID_HANDLE;

int OnInit()
  {
   if(OkresSredniej < 1)
     {
      Print("Okres musi wynosic co najmniej 1.");
      return INIT_PARAMETERS_INCORRECT;
     }

   uchwyt = iMA(_Symbol, _Period, OkresSredniej, 0, MODE_EMA, PRICE_CLOSE);

   if(uchwyt == INVALID_HANDLE)
     {
      PrintFormat("Nie udalo sie utworzyc wskaznika, blad %d. "
                  "Sprawdz parametry i czy symbol jest w oknie Rynek.",
                  GetLastError());
      return INIT_FAILED;
     }

   return INIT_SUCCEEDED;
  }

Kontrola parametrów przed utworzeniem uchwytu zamienia niejasny kod 4805 na komunikat, z którego coś wynika. Okres równy zeru jest najczęstszym przypadkiem, a bierze się zwykle z niezainicjowanej zmiennej wejściowej.

Powiązane