Большинству операторов TradingView требуется два операнда, иногда один, но есть и такие, которым нужно 3 операнда. К ним относится условный тернарный оператор (тернарный значит тройной).

Условный оператор (?:) оценивает условие и возвращает одно из двух значений в зависимости от того, является ли это условие истинным или ложным. Он работает как оператор if/else, которого нет в языке Pine Script TradingView.

Тернарный оператор имеет следующий синтаксис:


Когда его условие condition оценивается как истинное, возвращается result 1,  в противном случае возвращается result 2.

Значения result 1 и result 2 должны быть одного и того же типа: целые числа, строка или цвет.

Использовать разные типы не допускается.

Условие condition может быть логическим выражением true/false (например, close > open) или числовым выражением (например, high — high[1]). Во втором случае значения 0, NaN и +Infinity и -Infinity считаются ложными, в то время как другие числовые значения рассматриваются как истинные.

Как определить значения переменной с помощью условного оператора


В данном случае условный оператор проверяет больше ли close, чем ta.ema(close, 9), если ДА, то в barcolor возвращается синий цвет, если НЕТ, то красный.

Раскрасим график при помощи тернарного оператора

В данном примере раскрасим фон за красными свечами в светло-красный, а за зелеными — в светло-зеленый:


Создадим переменную background (фон), значение которой устанавливается условным оператором.  Оценим условие, больше ли цена закрытия, чем цена открытия?  Если условие верно, то в переменную background возвращаем значение color.green,70 — зеленый цвет с прозрачностью 70.

Если условие не выполняется, то в переменную background возвращаем значение color.red,70 — красный цвет с прозрачностью 70.

Последний оператор устанавливает фон графика с помощью bgcolor().

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

Раскрасим график при помощи тернарного оператора

Тернарные операторы могут быть вложенными друг в друга, тогда условия проверяются последовательно друг за другом. Самый последний аргумент действует как значение по умолчанию, если ни одно из условий не оценивается как истинное.

Пример вложенного тернарного оператора: