Практически каждый скрипт TradingView использует в своих расчетах предыдущие ценовые бары. И индикаторы и стратегии могут работать с самими номерами баров.
Несмотря на то, что это не отображается на графиках TradingView, у каждой свечки есть определенный номер. Скрипты могут использовать это число для размещения рисунков и просмотра количества столбцов на графике.
Пример индикатора, который строит прямую по номерам баров. Всего на графике 123 бара:
Переменная bar_index возвращает номер текущего бара и имеет тип int (целое число). Значение bar_index отсчитывается от нуля, это значит, что общее количество баров на графике равно bar_index + 1.
Если мы хотим узнать, какой номер был у предыдущего бара, мы можем объединить bar_index с оператором обращения к истории ([]). Например, bar_index[10] возвращает номер бара 10 баров назад. Можно отнять от текущего номера бара: bar_index — 10 и мы получим то же значение.
Переменная bar_index относительно новая, т.к. в 3 и более ранних версиях доступ к номерам баров можно было получить с помощью переменной n.
Зачем нам нужно знать номера баров в TradingView
- bar_index необходим, когда мы хотим вывести метку , линию тренда, стрелку и пр. рисунки на график.
- Мы можем сохранить значение bar_index в переменной, и если происходит какое-то условие, мы можем сравнить номер текущего бара с сохраненным значением. Затем мы сможем посчитать сколько баров назад произошло то или иное событие.
- Иногда bar_index используется для ограничения периода тестирования стратегии на исторических данных.
- На последнем баре bar_index + 1 говорит нам сколько всего ценовых баров на графике.
Посчитаем количество баров и выведем метку при помощи bar_index
1 2 3 4 5 6 |
//@version=5 indicator(title='bar_index', overlay=true) if barstate.islast label.new(x=bar_index, y=high, text='Баров\n на графике:\n' + str.tostring(bar_index + 1), textcolor=color.white, color=color.black, size=size.normal) |
- Оператор if определяет блок команд, который должен быть выполнен, если выражение после if истинно. В данном случае переменная barstate.islast возвращает true, если текущий бар — это последний бар.
- Далее при помощи label.new рисуем метку по координатам х (bar_index) и y (high), на метке пишем текст: «Баров на графике (bar_index + 1)».
- При помощи функции str.tostring преобразуем переменную типа int в переменную типа string (подробнее о str.tostring читайте в нашей статье).
- Цвет текста белый textcolor=color.white, цвет метки черный color=color.black, размер метки нормальный size=size.normal.
Результат работы нашего индикатора:
Заключение
Скрипты TradingView получают доступ к номерам баров с помощью bar_index. Эта переменная начинает отсчет с 0 для первого бара, а затем увеличивается на единицу для каждого дополнительного ценового бара. На последнем баре графика bar_index + 1 говорит, сколько баров на графике.
Мы часто используем bar_index для позиционирования рисунков (например, линий тренда и меток) на графике. Мы также можем узнать сколько баров прошло между какими-либо событиями на графике.