Объединение нескольких значений true и/или false в одно значение true/false возможно с помощью двух логических операторов.

  • Логический оператор and возвращает значение true, если оба его операнда левый и правый имеют значение true.
  • Логический оператор or возвращает значение true, когда один из его операндов оценивается как true.
  • Логический оператор not работает только с одним операндом и возвращает true, если этот операнд false, и false, если этот операнд true. Это означает, что оператор not возвращает логическую противоположность (true или false) тому значению, для которого он был помещен.

Рассмотрим как работают логические операторы:

Pine Script. Логические операторы

В таблице ниже показаны различные результаты логических операций:

Pine Script. Логические операторы

Логические операторы можно использовать не только с двумя переменными, но и с 3-мя и более. Например, a and b and c возвращает true, если все три переменные tue, если же хоть одна из них false, то и результат будет false.

Использование логических переменных в скриптах

  • Для начала определяем переменную emaPeriod при помощи тернарного оператора. Условный оператор сохраняет значение 30 в переменной emaPeriod, когда график имеет дневное timeframe.isdaily или недельное timeframe.isweekly  разрешение, и помещает значение 50 в эту переменную для всех остальных временных рамок.
  • Далее вычисляем EMA с помощью функции ta.ema() по цене закрытия (close) и количество баров emaPeriod. Значение, возвращаемое функцией ta.ema(), помещается в серию переменных emaValues.
  • Теперь определяем цвет ЕМА при помощи вложенных тернарных операторов. Первый проверяет, превышает ли цена закрытия (close) (>) EMA (emaValues) и было ли предыдущее закрытие (close[1]) выше EMA предыдущего бара (emaValues[1]).
  • Когда это условие выполняется, оператор возвращает цвет лайм color.lime и сохраняет его в переменной emaColour.
  • Если оно ложно, второй оператор проверяет, было ли текущее (close < emaValues) и предыдущее (close[1] < emaValues[1]) закрытие меньше EMA.
  • Если это так, оператор возвращает color.fuchsia, и мы помещаем этот цвет в переменную emaColour.
  • Если ни одно из двух условий не выполняется, в качестве цвета по умолчанию возвращается черный.
  • Функция plot () выводит график ЕМА цветом, который определяется переменной emaColour, в 2 раза толще, чем по умолчанию ( linewidth=2).

Наш индикатор на дневной графике:

Pine Script. Логические операторы

Оператор not в Pine Script

Оператор not работает с одним операндом. Он возвращает true, когда его операнд оценивается как false, и возвращает false, когда его операнд имеет значение true. Это делает этот оператор полезным, когда что-то произошло (например, цена открылась гэп вверх или вниз), и мы хотим что-то сделать, когда этого не произошло.

Например, мы хотим отметить на графике случаи, когда цена отрылась гэпом вверх, все остальные бары пометим черными крестиками:

  1. Создаем переменную gapUp, которая возвращает результат true каждый раз, когда значение low текущего бара хотя бы на 3% больше, чем high предыдущего бара.
  2. Затем создаем вторую переменную backgroundColour, которой при помощи тернарного оператора присваиваем зеленый цвет, если случился гэп (gapUp == true).
  3. Функция bgcolor окрашивает задний фон бара, на котором случился гэп в зеленый цвет.
  4. Переменной noGap присваиваем значение true, если гэпа не случилось (noGap = not gapUp).
  5. Функция plotshape () выводит крестики черного цвета над всеми барами, где гэп не случился, т.е. когда переменной noGap присваивается значение true.

Наш индикатор на графике:

Pine Script. Логические операторы

Заключение

Логические операторы and и or оценивают два значения на предмет истины.

And возвращает истину только тогда, когда оба его операнда истинны.

Or возвращает истину, когда хотя бы один из его операндов истинен.

Оператор not работает с одним операндом и возвращает противоположное значение true/false, для которого он помещен.