Продолжаем изучать операторы Pine Script, сегодня расскажем об операторе обращения к историческим данным, это оператор серии ( [] ). Квадратные скобки пишут сразу после переменной или функции, а внутри них вводят целое положительное число.
Любое дробное число в скобках округляется по модулю в меньшую сторону. Оператор возвращает значение переменной или функции для указанного в скобках количества баров назад.
Например, open[1] возвращает цену открытия предыдущего бара, а low[3] возвращает минимум за 3 бара назад. Аналогично, ema(close, 10)[1] возвращает значение предыдущего бара 10-периодной экспоненциальной скользящей средней (EMA) на основе цен закрытия.
Как рассчитывается оператор исторических данных
Дело в том, что все скрипты TradingView выполняют свои расчеты на каждом баре, начиная с самого старого бара и заканчивая текущим. Соответственно возвращаемые значения зависят от того, на каком баре рассчитывается наш скрипт.
Например:
Обратите внимание, что оператор истории обращается к значениям предыдущего бара. Т.е. month [1] возвращает не предыдущий месяц, а месяц предыдущего бара. Хотя, если у нас месячный график, то предыдущий бар случился как раз в предыдущем месяце.
Некоторые особенности оператора обращения к истории
- Мы не можем многократно применять этот оператор к одному и тому же операнду. Получить значение цены 4 бара назад с помощью open[1][3] не получится. Вместо этого нужно написать open[4].
- Оператор обращения к истории может использовать только положительные значения. Отрицательные значения в квадратных скобках (high[-1]) не допускаются.
- Дробные значения в квадратных скобках округляются по модулю в меньшую сторону.
- Этот оператор работает только с сериями данных, таких как open [], close [], month [], high [], time[] and highest(high, 10).
- Возвращает значения NaN, когда мы пытаемся получить доступ к значению, превышающему количество баров на графике.
- В отличии от других языков программирования, оператор обращения к истории в Pine Script возвращает не одно значение, а целый ряд значений с определенным смещением!
Например, close[5] возвращает не одну цену закрытия, а серию цен, равных цене закрытия 5 баров назад, т.к. срипт выполняется на каждом баре.
Проиллюстрируем это на графике:
1 2 3 4 |
//@version=5 indicator(title="History operator", overlay=true) plot(series=close[5], linewidth=2, color=color.purple) |
Поскольку оператор обращения к истории возвращает ряд значений, мы можем использовать оператор [] и с аргументами функций. Например, вычисление 20-периодной EMA по цене закрытия 5 баров назад можно выполнить с помощью EMA (close[5], 20).
Если бы close[5] возвращал только одну цену закрытия (а не ряд цен), то мы не могли бы вычислить экспоненциальное среднее с его помощью.
Как при помощи оператора истории можно получить доступ к историческим данным
1 2 3 4 5 6 |
//@version=5 indicator(title="History operator", overlay=false) price = hl2 - hl2[10] colour = (price > price[1]) ? color.olive : color.yellow plot(series=price, color=colour, style=plot.style_columns) |
- 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]).
Например:
1 2 3 4 5 6 7 8 |
//@version=5 indicator(title="History operator", overlay=true) highestHigh = ta.highest(high, 10)[1] lowestLow = ta.lowest(low[1], 10) plot(series=highestHigh, color=color.fuchsia) plot(series=lowestLow, color=color.black) |
При помощи функции ta.highest мы вычисляем макс значение цены за 10 баров назад, со смещением на 1 бар [1], что позволяет нам не учитывать high текущего бара.
Таким же образом мы вычисляем low за 10 баров назад, не считая текущий бар.
plot выводит 2 графика, максимумы цветом фуксия и минимумы черным цветом.
Заключение
Оператор обращения к истории ( [] ) с положительным целым числом в квадратных скобках возвращает значения предыдущего бара. Этот оператор можно использовать с любой встроенной переменной, пользовательской переменной, стандартной функцией или пользовательской функцией, которая возвращает серию значений.
Оператор обращения к истории возвращает NaN, когда мы пытаемся получить доступ к большему количеству данных, чем количество баров на графике.
Илья 2023-05-10