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

Немного теории:

  • вещественное или действительное число — это любое число, которое можно представить в виде десятичной дроби или в виде точки на числовой прямой (6,14616546; 5 1/2; число ПИ и пр.).
  • целое число — это любое число, которое не содержит дробной части, но может быть с отрицательным знаком (0;  -3;  8;  28; 02).

Существует три способа округления значений в Pine Script:

  1. Функция math.round округляет число по законам математики до ближайшего целого или дробного числа (если после запятой стоит число >=5 то округляем в большую сторону).
  2. Функция math.floor округляет до ближайшего целого числа в меньшую сторону. Если дробной части нет, то она возвращает то же самое число.
  3. Функция math.ceil округляет до ближайшего целого числа в большую сторону (не зависимо от того, какие цифры идут в дробной части).  Но если дробной части нет, то она возвращает то же самое число.

Давайте применим знания из предыдущей статьи о функции str.tostring и выведем на графике цену закрытия, а под ней округленные цены при помощи каждой из трех функций, чтобы наглядно увидеть разницу между ними:

 

Существует три способа округления значений в Pine Script:

Рассмотрим как происходит округление с помощью функции math.round

Рассмотрим на примерах, как происходит округление с помощью функции math.round

Обратите внимание на последнюю строчку.  Функция math.round округляет -4,5 до целого числа -4, а не -5. Потому что она округляет в большую сторону, если после запятой стоит число >=5, а -4 больше , чем -5.

Пример, построим скользящую среднюю по округленным значениям


Мы размещаем функцию ta.ema внутри функции round. Каждое значение, которое вычисляет ta.ema, округляется в большую или меньшую сторону до ближайшего целого числа. Затем при помощи функции plot отображаем на графике  округленную ema 50:

Пример, построим скользящую среднюю по округленным значениям

У функции math.round есть 2 аргумента:

  • number — обязательный аргумент, значение или серия значений для округлений.
  • precision — необязательный аргумент. Число десятичных знаков, до которых number будет округлено. Если он отсутствует, то округление производится до ближайшего целого числа!

Округляем значения в меньшую сторону при помощи функции math.floor

С помощью функции math.floor в TradingView можно округлять числа до целого значения в меньшую сторону. Эта функция принимает один числовой аргумент и возвращает целое число, которое меньше или равно аргументу. Так при округлении 55,894 мы получим целое число 55, а не 56.

  • Положительное значение, которое возвращает math.floor, становится меньше:  9,75 преобразуется в 9.
  • Отрицательное значение, которое возвращает math.floor, также становится меньше (то есть более отрицательным): -2,3 преобразуется в -3.

Рассмотрим как происходит округление с помощью функции math.floor

Рассмотрим на примерах, как происходит округление с помощью функции math.floor

Пример: округление размеров позиции в меньшую сторону с помощью math.floor

Допустим, мы хотим инвестировать не более 10 000 в позицию. Сколько акций мы можем купить на эту сумму?

Давайте посчитаем:


Пример: округление размеров позиции в меньшую сторону с помощью math.floor

Из этого примера мы также можем определить разницу между math.floor и math.round.

11 октября 2022 года акции Самолет стоили 2042 руб, наш депозит 10 000. Мы могли купить 10 000/2040 = 4,9 акций. math.round вернула бы нам значение 5, но 5 акций на свой депозит мы купить бы не смогли. А функция math.floor округлила бы значение 4,9 в меньшую сторону — до 4. И тогда мы купили бы нужное количество акций.

Округляем значения в большую сторону при помощи функции math.ceil

Функция math.ceil принимает один числовой аргумент и возвращает наименьшее целое число, которое больше или равно аргументу функции.

Итак, вместо 15,34 math.ceil вернет 16, а не 15.

  • Положительное значение, которое возвращает math.ceil становится больше: 10,4 преобразуется 11, а 5,02 в 6.
  • Отрицательное значение, которое возвращает math.ceil  тоже становится больше: -5,3 преобразуется в -5, а -6,65 в -6.

Рассмотрим как происходит округление с помощью функции math.ceil

Рассмотрим на примерах, как происходит округление с помощью функции math.ceil

Приведем пример использования функции math.ceil

Допустим, мы хотим диаграмму объема какой-либо бумаги в тысячах. Нам не нужны точные данные, поэтому мы будем округлять полученные значения при помощи функции math.ceil:


 

Приведем пример использования функции math.ceil

По итогу работы индикатора объем 20 417 преобразовался в 21, а 3 163 в 4.

Подведем итоги

В Pine Script TradingView есть три способа округления значений.

С помощью функции math.round мы округляем до ближайшего целого числа в большую или меньшую сторону по законам математики (от 0,5  округляем в большую сторону). У этой функции есть второй аргумент — precision, который позволят указать сколько цифр после запятой нужно оставить. Т.е. функция возвращает не только целые, но и дробные значения.

Округлять значения до целого числа можно в меньшую сторону при помощи функции math.floor. Таким образом 4,34 и 4,87 становятся, а -10,6 и -10,01 превращаются в -11.

Округлять значения в большую сторону до целого числа можно при помощи функции math.ceil. Это функция возвращает 6 для 5,6 и 5,12, а -8,31 и -8,75 функция возвращает -8.

Итак, math.round округляет значения в большую или меньшую сторону. С помощью math.floor мы получаем значение, меньшее или равное аргументу, переданному в функцию. И math.ceil возвращает значения, которые больше или равны значению аргумента.