Проверка символа на существование

Вместо того чтобы просматривать весь список символов MQL-программа может проверить наличие конкретного символа по его имени. Для этой цели предназначена функция SymbolExist.

bool SymbolExist(const string name, bool &isСustom)

В параметре name следует передать название интересующего вас символа. Передаваемый по ссылке параметр isСustom будет установлен функцией согласно признаку, является ли указанный символ стандартным (false) или пользовательским (true).

Функция возвращает false, если символ не найден ни среди стандартных, ни среди пользовательских символов.

Частичным аналогом данной функции является запрос свойства SYMBOL_EXIST.

Разберем простой скрипт SymbolExists.mq5 для проверки данной функции. В его параметре пользователь может указать интересующее его название, которое передается в SymbolExist, а результат выводится в журнал. Если на вход подать пустую строку, будет проверен рабочий символ текущего графика. По умолчанию параметр имеет значение "XYZ", что предположительно не соответствует ни одному из доступных символов.

#property script_show_inputs
   
input string SymbolToCheck = "XYZ";
   
void OnStart()
{
   const string _SymbolToCheck = SymbolToCheck == "" ? _Symbol : SymbolToCheck;
   bool custom = false;
   PrintFormat("Symbol '%s' is %s"_SymbolToCheck,
      (SymbolExist(_SymbolToCheckcustom) ? (custom ? "custom" : "standard") : "missing"));
}

При запуске скрипта 2 раза — сначала со значением по умолчанию, а потом с пустой строкой на графике EURUSD — получим следующие записи в журнале.

Symbol 'XYZ' is missing
Symbol 'EURUSD' is standard

Если вы уже имеете пользовательские символы или создадите новый с какой-нибудь простой расчетной формулой, то сможете убедиться в заполнении переменной custom. Например, если в терминале открыть окно Символы и нажать кнопку Создать символ, то в поле Формула синтетического инструмента можно ввести "SP500/FTSE100" (названия индексов могут отличаться у вашего брокера), а в поле с названием Символа — "GBPUSD.INDEX". По нажатию кнопки OK будет создан пользовательский инструмент, для которого можно открыть график и на нем наш скрипт должен вывести:

Symbol 'GBPUSD.INDEX' is custom

При настройке собственного символа не забудьте задать не только формулу, но и достаточно "мелкие" значение размера пункта и шага изменения цены (тика) — в противном случае ряд синтетических котировок может получиться "ступенчатым" или даже выродиться в прямую линию.