Зачастую наши стратегии предполагают выполнение одно из двух действий в зависимости от ситуации. Например, «если бар закрылся выше ЕМА50, то нужно продать текущие позиции; в противном случае покупаем позицию еще на 10% от депозита». Для реализации этого мы используем оператор if/else.
Оператор if/else дает нам возможность выбрать один из двух вариантов. Таким образом, индикатор или стратегия принимает решения на основе доступных данных. Благодаря этой функции наш код может разветвляться и обрабатывать разные ситуации.
При помощи оператора if/else можно отправлять команды для входа/выхода из рыночной позиции, рисовать линии тренда, размещать текстовые метки, рассчитывать значения и пр.
Оператор if/else состоит из нескольких частей:
- Сначала мы пишем ключевое слово if, за которым следует условие, оцениваемое как true/false.
Ниже следует 1 или несколько строк кода. Перед кодом необходимо сделать отступ в 4 пробела или 1 Tab. Этот код выполняется всякий раз, когда условие истинно. - Далее пишем ключевое слово else.
Под else есть еще один блок кода (опять же с отступом в 4 пробела или 1 Tab). Строка или строки кода, которые мы здесь запускаем, когда условие под if не соответствует действительности. - При желании мы можем сохранить значение, возвращаемое оператором if/else, в переменную.
- Таким образом, с оператором if/else всегда выполняется один из двух путей. Когда условие истинно, наш код под if запускается. Если условие ложно, выполняется код else.
Давайте рассмотрим несколько примеров.
1 2 3 4 5 6 7 |
//@version=5 strategy("if/else", overlay = true) if (close > ta.ema(close, 20)) strategy.entry("enter long", strategy.long, 1) else strategy.entry("enter short", strategy.short, 1) |
В данном случае мы оцениваем условие: «цена close закрылась выше, чем значение EMA20?» Если условие истинно мы открываем позицию в лонг, в противном случае выполняется код после else, мы открываем шорт.
Как сохранить результат работы оператора if/else в переменную:
1 2 3 4 5 |
Colour = if (close > ta.ema(close, 50)) color.lime else color.fuchsia plot(close, color=Colour, linewidth = 5) |
Проверяем условие после if : «цена close закрылась выше, чем значение EMA20?» Если условие истинно, то переменной Colour присваиваем цвет lime, в противном случае выполняется код после else — переменной переменной Colour присваиваем цвет color.fuchsia.
При помощи функции plot выводим график цен закрытия цветом Colour (color=Colour).
Еще один пример:
1 2 3 4 5 6 7 8 9 10 11 |
//@version=5 indicator("if/else", overlay = true) EMA50 = ta.ema(close, 50)//вычисляем ЕМА50 Colour = if (close > EMA50) //проверяем закрылась ли цена выше ЕМА50 color.lime // если да, то переменная Colour = color.lime else color.fuchsia // если нет, то Colour = color.fuchsia plot(series=EMA50, color=Colour, style=plot.style_cross, linewidth=3)// выводим график ЕМА50 в виде крестиков // цвет определяется переменной Colour |
Вот так можно использовать оператор if/else, для «разветвления» нашего кода и принимать разные решения, в зависимости от условий на рынке.