Обнаружение перерывов сеанса

#pine-script

#сценарий pine

Вопрос:

Вопрос о перерывах сеанса.

Я знаю, что вы можете добавить перерывы сеанса к диаграмме, активировав перерывы сеанса в масштабе времени диаграммы.
Затем он отображается в виде вертикальной линии на графике всякий раз, когда происходит перерыв сеанса, указывая на начало нового сеанса.
Эту строку разрыва сеанса можно отформатировать в настройках диаграммы в разделе Внешний вид> Перерывы сеанса.

Перерыв сеанса на графике

Я пытаюсь обнаружить этот перерыв сеанса в сценарии Pine.
Есть ли надежный способ в сценарии Pine определить начало нового сеанса?
Особенно для фьючерсных контрактов.

Обычно между остановкой сеанса и началом нового сеанса проходит некоторое время (пауза).
Поэтому моя идея заключалась в том, чтобы проверить разницу во времени между текущим баром и предыдущим баром.
Если эта разница во времени больше, чем «временная ширина» одного бара, это означает, что произошла «пауза».
Следовательно, начался новый сеанс.
Этот подход, похоже, работает большую часть дней.

Однако, когда я смотрю на тикер фьючерсов NYMEX:NG1! , эта логика не всегда кажется правильной.
В некоторые дни в этом тикере, похоже, есть «паузы» в середине сеанса.
Я подозреваю, что торговля была остановлена в эти моменты «паузы».
Пример можно увидеть, сравнив 27 Oct 2020 (обычный день) с 28 Oct 2020 (нерегулярный день с перерывами в середине сеанса).
Для примера я поместил график в часовой пояс Exchange с интервалом в 15 минут.
Зеленый фон — это мой код, обнаруживающий перерывы сеанса.

Перерывы сеанса

В 27 Oct 2020 (обычный день)
Вы можете видеть, что каждый такт начинается на 15 минут позже, чем предыдущий такт, что является нормальным и ожидаемым.
Сеанс начинается 18:00 и продолжается каждые 15 минут:

 18:00 - 18:15 - 18:30 - 18:45 - 19:00 - 19:15 - 19:30 - 19:45 - 20:00 - 20:15 - etc...  
  

Включено 28 Oct 2020 (нерегулярный день с перерывами в середине сеанса)
Вы можете видеть, что не каждый такт начинается 15 на несколько минут позже, чем предыдущий такт.
Сеанс также начинается 18:00 и продолжается каждые 15 минут, но НЕ последовательно:

 18:00 - 18:15 - 18:30 - (gap) - 19:15 - (gap) - 20:45 - (gap) 21:00 - 21:15 - 21:30 - 21:45 - (gap) - 22:30 - (gap) - 23:00 - (gap) - 23:45 - 00:00 - (gap) - 00:45 - (gap) - 03:00 - (gap) - 03:30 - (gap) - 03:45 - 04:00 - 04:15 - (gap) - 05:15 - 05:30 - (gap) - 06:00 - 06:15 - 06:30 - 06:45 - 07:00 - 07:15 - etc... (normal from here on).  
  

Мой код для обнаружения перерывов сеанса (зеленый фон на скриншоте выше)

 //@version=4
study("NewSession", overlay=true)

var bool    newSession      = na
var int     bar_width_in_ms = timeframe.multiplier * 60 * 1000

newSession := change(time) > bar_width_in_ms

bgcolor(newSession ? color.green : na, 70)
  

В заключение, мой вопрос заключается в следующем:
Есть ли какой-либо надежный способ в сценарии Pine определить начало нового сеанса?
Особенно для фьючерсных контрактов.

Ответ №1:

Вы можете использовать change(time("1D")) , чтобы отслеживать, где заканчивается один дневной бар и начинается другой:

 //@version=4
study("NewSession", overlay=true)
newSession = change(time("1D"))
bgcolor(newSession ? color.green : na, 70)
  

Комментарии:

1. Простое и элегантное решение 🙂

Ответ №2:

‘time_tradingday’ — возвращает время начала (в мс) текущего сеанса. Это можно использовать, как показано ниже.

 //@version=4
study("New Session Detection", overlay=true)
var d = 0
T = time_tradingday
if(T!=d)
    d:=T
    label.new(x=bar_index, y=high, text="New Day")