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