Продолжаем изучать операторы Pine Script, сегодня расскажем об операторе обращения к историческим данным, это оператор серии ( [] ). Квадратные скобки пишут сразу после переменной или функции, а внутри них вводят целое положительное число.

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

Например, open[1] возвращает цену открытия предыдущего бара, а low[3] возвращает минимум за 3 бара назад. Аналогично, ema(close, 10)[1] возвращает значение предыдущего бара 10-периодной экспоненциальной скользящей средней (EMA) на основе цен закрытия.

Мы можем получить доступ к значению текущего бара с помощью оператора обращения к истории (например, close[0] и volume[0]) или без него (close, volume).

Как рассчитывается оператор исторических данных

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

Например:

Pine Script. Индекс серии или оператор получения исторических данных

Обратите внимание, что оператор истории обращается к значениям предыдущего бара. Т.е. month [1] возвращает не предыдущий месяц, а месяц предыдущего бара. Хотя, если у нас месячный график, то предыдущий бар случился как раз в предыдущем месяце.

Некоторые особенности оператора обращения к истории

  1. Мы не можем многократно применять этот оператор к одному и тому же операнду. Получить значение цены 4 бара назад с помощью open[1][3] не получится. Вместо этого нужно написать open[4].
  2. Оператор обращения к истории может использовать только положительные значения. Отрицательные значения в квадратных скобках (high[-1]) не допускаются.
  3. Дробные значения в квадратных скобках округляются по модулю в меньшую сторону.
  4. Этот оператор работает только с сериями данных, таких как open [], close [], month [], high [], time[] and highest(high, 10).
  5. Возвращает значения NaN, когда мы пытаемся получить доступ к значению, превышающему количество баров на графике.
  6. В отличии от других языков программирования, оператор обращения к истории в Pine Script возвращает не одно значение, а целый ряд значений с определенным смещением!

Например, close[5] возвращает не одну цену закрытия, а серию цен, равных цене закрытия 5 баров назад, т.к. срипт выполняется на каждом баре.

Проиллюстрируем это на графике:


Некоторые особенности оператора обращения к истории

Поскольку оператор обращения к истории возвращает ряд значений, мы можем использовать оператор [] и с аргументами функций. Например, вычисление 20-периодной EMA по цене закрытия 5 баров назад можно выполнить с помощью EMA (close[5], 20).

Если бы close[5] возвращал только одну цену закрытия (а не ряд цен), то мы не могли бы вычислить экспоненциальное среднее с его помощью.

Как при помощи оператора истории можно получить доступ к историческим данным

  • hl2 — встроенная переменная, сокращение для (high + low)/2, возвращает среднюю точку бара.
  • Переменной price присваиваем разницу между текущим значением hl2 и значением hl2 10 баров назад.
  • Далее создаем переменную цвета colour и при помощи тернарного оператора присваиваем ей значение olive, если условие price > price[1] верно и yellow, если условие не выполняется.
  • В данном случае проверяется условие, больше ли середина текущего бара, чем предыдущего price > price[1].
  • При помощи функции plot выводим график, серию данных price, цвет столбца определяется переменной color=colour, стиль — переменной style=plot.style_columns, в данном случае диаграмма.

Результат работы скрипта на графике:

Как при помощи оператора истории можно получить доступ к историческим данным

Как работает оператор обращения к историческим данным с функциями

Оператор [ ] также можно использовать как с аргументами функций (например, sma(close[2], 50)) так и сразу после функции (sma(close, 50)[2]).

Например:


При помощи функции ta.highest мы вычисляем макс значение цены за 10 баров назад, со смещением на 1 бар [1], что позволяет нам не учитывать high текущего бара.

Таким же образом мы вычисляем low за 10 баров назад, не считая текущий бар.

plot выводит 2 графика, максимумы цветом фуксия и минимумы черным цветом.

Как работает оператор обращения к историческим данным с функциями

Заключение

Оператор обращения к истории ( [] ) с положительным целым числом в квадратных скобках возвращает значения предыдущего бара. Этот оператор можно использовать с любой встроенной переменной, пользовательской переменной, стандартной функцией или пользовательской функцией, которая возвращает серию значений.

Оператор обращения к истории возвращает NaN, когда мы пытаемся получить доступ к большему количеству данных, чем количество баров на графике.