В Pine Script существует множество встроенных переменных и функций. Помимо этого мы можем сами создавать свои переменные и писать функции. Это все прекрасно до тех пор, пока при компиляции кода мы не сталкиваемся с ошибкой «undeclared identifier» или «необъявленный идентификатор».

Дело в том то, что одна и та же ошибка возникает по совершенно разным причинам, что затрудняет ее устранение.

Сообщение об ошибке выводится в консоли Pine Editor и выглядит следующим образом:

Pine Script. Ошибка undeclared identifier или необъявленный идентификатор в TradingView?

Идентификатор — это имя, которое мы даем пользовательской переменной или функции, оно находится слева от = или => когда мы создаем нашу переменную или функцию.

Причина № 1. Неправильно введено имя переменной

Чтобы найти ошибку, обратите внимание, в какой строке она появилась (line 8 — строка 8).

Пример индикатора с ошибкой:

Причина № 1. Неправильно введено имя переменной

В данном случае в строке 8 мы используем переменную prVlume, хотя в строке 7 идентификатор называется prVolume. Поэтому выдается ошибка необъявленный идентификатор. Ведь prVlume написано с ошибка, пропущена буква О. Нужно исправить ошибку, сохранить скрипт и снова добавить на график.

Причина № 2. Ошибка регистра в имени переменной или функции

Имя, которое мы даем нашей пользовательской переменной или функции, чувствительно к регистру. Поэтому при обращении к пользовательской переменной или функции нужно в точности копировать их название с учетом регистра.

Приведем пример того же скрипта, в котором мы допустили ошибку в регистре: вместо prVolume ввели prvolume:

Причина № 2. Ошибка регистра в имени переменной или функции

Можно использовать только строчные буквы, чтобы избежать таких ситуаций.

Причина № 3. Забыли указать скобки при обращении к пользовательской функции

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

Если вы забыли скобки, то обязательно столкнетесь с ошибкой TradingView «необъявленный идентификатор», как в этом примере:

Причина № 3. Забыли указать скобки при обращении к пользовательской функции

Чтобы исправить ошибку, в строке 12 нужно написать emaCustom () вместо emaCustom.

Причина № 4. Обновление переменной перед ее объявлением

С помощью оператора (=) мы создаем новую переменную и присваиваем ей какое-то значение. Если мы потом захотим обновить его значение, мы используем оператор (:=). Но это должно быть именно в таком порядке — сначала мы создаем переменную (с помощью =), затем мы можем ее изменить ( :=).

Когда мы путаем местами эти операторы и сначала используем ( :=), а потом (=), то получаем ошибку undeclared identifier, например:

Причина № 4. Обновление переменной перед ее объявлением

В данном случае, чтобы исправить ошибку, нужно в 7 строке написать: prV = volume[1]

А в 8-й строке: prV := ta.sma (close, 50).

Причина № 5. Использование самоссылающейся переменной без (:=)

Ситуация усложняется, когда мы получаем ошибку «необъявленный идентификатор» (undeclared identifier) с пользовательской переменной, ссылающейся на себя.

Когда переменная ссылается на свое собственное предыдущее значение (например, profit := profit[1] + todayProfit ), эта переменная называется самоссылающейся переменной.

Обратите внимание, что ошибка возникает только с пользовательскими переменными, а не со встроенными типа: close, open, high, low, bar_inex и пр.

Нужно сделать две вещи, чтобы избежать ошибки:

  1. Создайте переменную с помощью оператора (=) и установите для нее значение по умолчанию ( profit = 0.0).
  2. Второй шаг — обновить переменную до нового значения с помощью оператора (:=). После этого вы можете ссылаться на предыдущие значения этой переменной.

Приведем пример:


В таком виде скрипт выдает ошибку: undeclared identifier.

Причина № 5. Использование самоссылающейся переменной без (:=)

Чтобы индикатор работал корректно, нужно перед 6 строкой установить значение по умолчанию для переменной: ClosePlus = 0.0.

А в 6-ой строке заменить оператор (=) на (:=). После этого скрипт скомпилируется без ошибок:

Причина № 5. Использование самоссылающейся переменной без (:=)

 

Заключение:

  1. Ошибка undeclared identifier (необъявленный идентификатор) появляется если мы делаем ошибку в имени переменной или функции, а также если мы забываем поставить () после имени функции.
  2. Обновление переменной перед ее инициализацией. С помощью оператора (=) мы создаем новую переменную, а с помощью оператора ( :=) меняем ее значение. Если перепутать местами эти операторы, то тоже получим ошибку необъявленный идентификатор.
  3. При создании пользовательской самоссылающейся переменной (например profit[1]) нужно сначала установить ее значение по умолчанию на 0.0 или 1.0 при помощи оператора (=), затем обновить переменную до нового значения с помощью оператора (:=).