bład wykonania 4302
4302 — ERR_MARKET_NOT_SELECTED
Instrument nie jest wybrany w oknie Rynek. Ten kod nie znaczy, że symbol nie istnieje — od tego jest
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
2026-08-03 09:14:03.802 Ekspert (EURUSD,M15) iCustom dla GBPUSD zwrocilo -1, blad 4302Co ten kod znaczy
Symbol istnieje u brokera, ale nie ma go w oknie Rynek — więc terminal nie pobiera dla niego kwotowań ani nie pozwala tworzyć na nim wskaźników.
Skąd się bierze
- praca wielosymbolowa bez wcześniejszego
SymbolSelect - instrument usunięty ręcznie z okna Rynek przez użytkownika
- wywołanie
iCustomalboiMAna symbolu spoza listy - symbol dodany chwilę wcześniej, a dane jeszcze nie dojechały
Co z tym zrobić
Ten kod nie znaczy, że symbol nie istnieje — od tego jest 4301. Znaczy, że terminal go nie obserwuje. To rozróżnienie oszczędza szukania literówki w nazwie instrumentu, która jest poprawna.
Dodanie symbolu jest natychmiastowe, ale pobranie danych już nie:
bool PrzygotujSymbol(const string symbol)
{
if(!(bool)SymbolInfoInteger(symbol, SYMBOL_SELECT))
{
if(!SymbolSelect(symbol, true))
{
PrintFormat("Nie moge dodac %s do okna Rynek, blad %d",
symbol, GetLastError());
return false;
}
//--- dodany, ale danych jeszcze nie ma: wracamy przy kolejnym ticku
return false;
}
MqlTick tick;
return SymbolInfoTick(symbol, tick);
}Uchwyty wskaźników na obcym symbolu twórz dopiero wtedy, gdy ta funkcja zwróci prawdę. Utworzenie ich wcześniej daje INVALID_HANDLE i kod 4302, a potem 4807 przy każdej próbie kopiowania.