Наиболее часто используемый оператор в TradingView — это оператор присваивания (=). Этот оператор требует использования двух операндов и присваивает значение справа от (=) переменной слева от него.
С его помощью в Pine Script происходит инициализация переменных:
1 2 3 4 5 |
Price = 1000 // переменной Price присвоим значение 1000 x=close*100 // переменной х присвоим результат умножения close*100 prVolume = volume[1] // переменной prVolume присвоим значение объема предыдущего бара SMA = ta.sma(close, 50) // переменной SMA присвоим значение, возвращаемое функцией SMA50 по ценам закрытия |
Ограничения оператора присваивания в Pine Script
Если мы один раз инициализировали переменную, то с помощью оператора присваивания изменить её нельзя:
Приведем пример, как писать нельзя:
1 2 3 4 5 |
indicator(title='price', overlay=true) prVolume = volume[1] prVolume = ta.sma(close, 50) plot(prVolume, linewidth=3) |
При компиляции такого скрипта возникает ошибка:
Чтобы устранить ошибку, нужно ввести новую переменную:
1 2 3 4 5 6 |
//@version=5 indicator(title='price', overlay=true) prVolume = volume[1] SMA = ta.sma(close, 50) plot(SMA, linewidth=3) |
Т.е. при помощи оператора (=) инициализировать одну и ту же переменную внутри одного скрипта можно только 1 раз.
Но, есть и другой выход, можно использовать другой оператор для повторной инициализации одной и той же переменной (:=) :
1 2 3 4 5 |
indicator(title='price', overlay=true) prVolume = volume[1] prVolume := ta.sma(close, 50) plot(prVolume, linewidth=3) |
Этот код работает правильно и выводит скользящую среднюю SMA 50 на график:
Логический оператор сравнения (==)
Давайте разберемся, чем отличаются одно = и два ==.
В операторе присваивания (=) используется один знак равенства, а в операторе сравнения на равенство (==) два. Разница между ними в том, что оператор присваивания присваивает значение справа переменной слева. А оператор сравнения проверяет, идентично ли значение справа значению слева.
1 2 3 4 5 6 |
//@version=5 indicator(title='color', overlay=true) x = close y = close [3] colour = x==y ? color.aqua : color.black barcolor(color=colour) |
Здесь переменной цвета colour присваивается значение, возвращаемое условным тернарным оператором (?:). Если условие истинно (x равно y), возвращается значение второго операнда color.aqua, в противном случае возвращается третий операнд color.black.
Так меняет график наш индикатор:
Если вместо «x==y» написать «x=y», то код будет скомпилирован с ошибкой.
Подведем итог
Оператор (=) присваивает переменным и аргументам во встроенных функциях определенные значения. Переменной слева от (=) устанавливается значение справа от (=). С помощью оператора присваивания можно только 1 раз присвоить установить значение существующим переменным внутри одного индикатора или стратегии.