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

MQL5 / Błędy

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 4302

Co 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 iCustom albo iMA na 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:

Dodanie symbolu i cierpliwe czekanie na dane
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.

Powiązane