Помимо арифметических операторов в Pine Script есть еще один оператор для выполнения вычислений: оператор модуля (%). Что делает этот оператор и как мы можем его использовать?
Когда мы выполняем целочисленное деление в Pine Script, любой дробный остаток теряется. Об этом мы говорили в предыдущей статье.
Но иногда нам нужно узнать именно остаток от целочисленного деления, а не отбрасывать его. Для этого мы используем оператор модуля (%). Этот оператор выполняет действие на двумя операндами и возвращает остаток от целочисленного деления. В других языках программирования его называют оператором остатка.
Например, 5 % 3 возвращает 2 (5/3 = 1 с остатком 2), а 25 % 3 дает 1 (25/3 = 8, остаток 1). При помощи оператора модуля можно найти сколько раз одно число содержится в другом (например 3, один раз содержится в 5, и 8 раз в 25).
Простой пример использования оператора модуля
1 2 3 4 |
//@version=5 indicator(title="modul", overlay=false) plot(series=bar_index % 5) |
bar_index — номер текущего бара.
Функция plot выводит остаток от деления номера бара на 5:
Как видите, наш график колеблется между 0 и 4. Каждый 5-й бар выражение (bar_index % 5) возвращает 0.
Как найти каждый N-ый бар при помощи оператора модуля
1 2 3 4 5 |
//@version=5 indicator(title="modul", overlay=true) Colour = (bar_index % 15 == 0) ? color.new(color.maroon, 70) : na bgcolor(color=Colour) |
При помощи условного тернарного оператора проверяем условие: какой остаток получается при делении номера (bar_index) на 15. Если остаток равен 0, значит бар индекс кратен 15, тогда в переменную Colour передаем цвет — color.new(color.maroon, 70). Если остаток не равен 0, то возвращаем n/a.
Функция bgcolor — заливает фон каждого 15-го бара указанным цветом, который хранится в переменной Colour.
Так выглядит график, на котором подсвечивается каждый 15-й бар:
Поиск четных и нечетных чисел при помощи оператора модуля
Если при делении числа на 2 в остатке получаем 0, значит делимое число четное. Давайте выделим четные и нечетные бары стрелочками разного цвета.
1 2 3 4 5 |
//@version=5 indicator(title="modul_2", overlay=true) Bar = (bar_index % 2 == 0) ? 1 : -1 plotarrow(series=Bar, colorup=color.fuchsia, colordown=color.black, maxheight=12) |
Номер бара делим на 0 и проверяем остаток. Если остаток равен 0, то тернарный оператор возвращает 1 в переменную Bar, если остаток не равен 0, то возвращаем -1.
При помощи функции plotarrow выводим на график разные стрелочки. colorup определяет цвет стрелок, направленных вверх, а colordown — цвет стрелок направленных вниз.
maxheight — максимально возможный размер стрелок в пикселях (по умолчанию 100), мы поменяли на 12.
Так выглядит график, на котором отмечены четные и нечетные бары:
Заключение
- Оператор модуля (%) возвращает остаток от целочисленного деления.
- С помощью модуля мы можем кратна ли заданная величина какому-то определенному числу, проверив равен ли остаток 0.
- Также можно узнать четное или не четное число, проверив делится ли оно на 2 с остатком или без.