Объединение нескольких значений true и/или false в одно значение true/false возможно с помощью двух логических операторов.
- Логический оператор and возвращает значение true, если оба его операнда левый и правый имеют значение true.
- Логический оператор or возвращает значение true, когда один из его операндов оценивается как true.
- Логический оператор not работает только с одним операндом и возвращает true, если этот операнд false, и false, если этот операнд true. Это означает, что оператор not возвращает логическую противоположность (true или false) тому значению, для которого он был помещен.
Рассмотрим как работают логические операторы:
В таблице ниже показаны различные результаты логических операций:
Логические операторы можно использовать не только с двумя переменными, но и с 3-мя и более. Например, a and b and c возвращает true, если все три переменные tue, если же хоть одна из них false, то и результат будет false.
Использование логических переменных в скриптах
1 2 3 4 5 6 7 8 |
//@version=5 indicator(title='Logical operators', overlay=true) emaPeriod = timeframe.isdaily or timeframe.isweekly ? 30 : 50 emaValues = ta.ema(close, emaPeriod) emaColour = close > emaValues and close[1] > emaValues[1]? color.lime : close < emaValues and close[1] < emaValues[1] ? color.fuchsia : color.black plot(series=emaValues, color=emaColour, linewidth=2) |
- Для начала определяем переменную 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).
Наш индикатор на дневной графике:
Оператор not в Pine Script
Оператор not работает с одним операндом. Он возвращает true, когда его операнд оценивается как false, и возвращает false, когда его операнд имеет значение true. Это делает этот оператор полезным, когда что-то произошло (например, цена открылась гэп вверх или вниз), и мы хотим что-то сделать, когда этого не произошло.
Например, мы хотим отметить на графике случаи, когда цена отрылась гэпом вверх, все остальные бары пометим черными крестиками:
1 2 3 4 5 6 7 8 |
//@version=5 indicator(title='Logical operators', overlay=true) gapUp = (low > 1.03*high[1]) backgroundColour = (gapUp == true) ? color.new(color.green,transp=60) : na bgcolor(color=backgroundColour) noGap = not gapUp plotshape(series=noGap, style=shape.xcross, location=location.abovebar, color=color.black) |
- Создаем переменную gapUp, которая возвращает результат true каждый раз, когда значение low текущего бара хотя бы на 3% больше, чем high предыдущего бара.
- Затем создаем вторую переменную backgroundColour, которой при помощи тернарного оператора присваиваем зеленый цвет, если случился гэп (gapUp == true).
- Функция bgcolor окрашивает задний фон бара, на котором случился гэп в зеленый цвет.
- Переменной noGap присваиваем значение true, если гэпа не случилось (noGap = not gapUp).
- Функция plotshape () выводит крестики черного цвета над всеми барами, где гэп не случился, т.е. когда переменной noGap присваивается значение true.
Наш индикатор на графике:
Заключение
Логические операторы and и or оценивают два значения на предмет истины.
And возвращает истину только тогда, когда оба его операнда истинны.
Or возвращает истину, когда хотя бы один из его операндов истинен.
Оператор not работает с одним операндом и возвращает противоположное значение true/false, для которого он помещен.