Каждый бар на графике имеет четыре точки: open, close, high, low. Самая важная из них — цена закрытия бара close. То, как эта цена изменилась относительно предыдущих баров определяет тренд. Давайте разберем как при помощи кода определить бары, которые закрылись выше или ниже?
Чтобы увидеть, закрылся ли бар выше или ниже, мы сравниваем закрытие текущего бара с закрытием предыдущего бара.
Три вещи помогают нам сравнивать цены:
- С помощью встроенной переменной close мы получаем цену закрытия текущего бара.
- Чтобы получить цену закрытия предыдущих баров, мы используем оператор обращения к истории ([]).
Например: close[1] возвращает нам цену закрытия предыдущего бара. close[5] — цену закрытия 5 баров назад. - Операторы сравнения помогают оценить полученные данные (больше (>), меньше (<) и равно (==)).
Как при помощи переменных оценить цену закрытия
Давайте придумаем переменную CloseVar, которая будет возвращать значение true/false, если цена закрытия текущего бара отличается от цены закрытия предыдущего бара.
CloseVar = (close > close[1]) — возвращает true, если цена закрытия текущего бара больше, чем предыдущего (аналогично можно использовать >=).
CloseVar= (close < close[1]) — возвращает true, если цена закрытия текущего бара меньше, чем предыдущего (аналогично можно использовать <=).
CloseVar= (close == close[1]) — возвращает true, если цена закрытия текущего бара равна цене закрытия предыдущего.
CloseVar= (close != close[1]) — возвращает true, если цена закрытия текущего бара не равна цене закрытия предыдущего.
Пример кода, оценивающий изменение цен закрытия:
1 2 3 4 |
//@version=5 indicator(title='close price', overlay=true) CloseVar = (close > close[1]) plotchar(CloseVar, char='🍤', size=size.tiny) |
CloseVar = (close > close[1]) — возвращает true, если цена закрытия текущего бара больше, чем предыдущего.
Функция plotchar выводит знак «креветка» на каждом баре, где CloseVar возвращает true, т.е. цена закрытия текущего бара больше, чем у предыдущего:
Чтобы объединить сравнения нескольких баров мы используем логические опараторы
- Оператор and объединяет сравнения так, что каждое из них должно быть истинным, прежде чем их комбинация тоже станет истинной true. Таким образом, мы можем задать условие, чтобы текущий бар и предыдущий бар закрылись выше.
- Оператор or также объединяет сравнения. Если хотя бы одно из указанных условий истинно, то совокупный результат будет истинным true.
Пример использования логических операторов для сравнения нескольких баров:
1 2 3 4 5 6 7 |
CloseVar = (close[1] < close[2]) and (close < close[1]) CloseVar = (close[1] < close[2]) and (close > close[1]) CloseVar = (close[2] > close[3]) and (close[1] > close[2]) and (close > close[1]) CloseVar = (close[1] < close[2]) or (close > close[1]) |
Как сравнивать цену закрытия бара в реальном времени?
Во время расчетов в реальном времени учитывается каждый тик изменения цены, что может стать проблемой для сравнения цен закрытия. Скажем, наш код проверяет закрылся ли текущий бар ниже (close < close[1]). Но в режиме реального времени последний тик сравнивается с закрытием предыдущего бара, а это нам не подходит.
Если ваш скрипт должен проверять только закрытые бары, включите переменную barstate.isconfirmed. Эта переменная возвращает true, если бар закрыт. Если бар по-прежнему получает обновления цен в реальном времени, то barstate.isconfirmed возвращает false. Таким образом, мы узнаем, сравниваем ли мы цены в реальном времени или цены закрытия.
Чтобы проверить, закрылся ли текущий бар в реальном времени выше, мы пишем:
1 2 3 4 5 6 7 8 9 |
CloseVar = barstate.isconfirmed and (close > close[1]) или CloseVar = barstate.isconfirmed and (close < close[1]) или CloseVar = barstate.isconfirmed and (close == close[1]) |
Комбинируя операторы сравнения и логические операторы вы можете создать любые условия для сравнения цен закрытия, цен открытия, highб low бара и пр.