Нужна помощь в коде Pine script (новичок здесь)

Вопрос или проблема

Я пытаюсь построить максимумы и минимумы диапазона понедельника + вторника на графике для текущей недели до конца недели.

(При этом сохраняя исторические данные о максимумах/минимумах понедельника + вторника на графике)

То, что я получаю – это прерывистые, постепенно непрерывные линии, которые в конечном итоге становятся более гладкими к среде.

Позвольте мне прикрепить мой код и скриншот моего текущего результата.

Кроме того, я также прикрепляю желаемую визуализацию из скрипта.

Спасибо за любую помощь.

PS: если мы смогли бы получить красиво выделенный блок (как показано) вокруг диапазона понедельника + вторника, это было бы потрясающе!

Текущие и желаемые результаты(https://i.sstatic.net/TpsiAGaJ.png)

“Текущий код”

"ТЕКУЩИЙ КОД"

//@version=5
indicator("Диапазон понедельника", overlay = true)
// SessionLow() возвращает наименьшую цену в течение данной сессии,
// необязательно исправленной для указанного часового пояса.
// Возвращает 'na', когда сессия еще не началась или не отображается на графике.

// Настройка сессии с помощью входных данных
session  = input.session("0000-0000", title="Торговая сессия")
timeZone = input.string("UTC", title="Часовой пояс")
monSession = input.bool(true, title="Пн ", group="Торговая сессия", inline="d1")
tueSession = input.bool(true, title="Вт ", group="Торговая сессия", inline="d1")

SessionLow(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionLowPrice = na

    if insideSession and not insideSession[1]
        sessionLowPrice := low
    else if insideSession
        sessionLowPrice := math.min(sessionLowPrice, low)
    sessionLowPrice

SessionHigh(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionHighPrice = na

    if insideSession and not insideSession[1]
        sessionHighPrice := high
    else if insideSession
        sessionHighPrice := math.max(sessionHighPrice, high)
    sessionHighPrice

// InSession() возвращает 'true', когда текущая свеча происходит внутри
// указанной сессии, исправленной для данного часового пояса (необязательно).
// Возвращает 'false', когда свеча не происходит в этот временной период,
// или когда временной интервал графика составляет 1 день или более. 
InSession(sessionTimes, sessionTimeZone=syminfo.timezone) =>
    not na(time(timeframe.period, sessionTimes, sessionTimeZone))

// Создание строки дней недели на основе значения флажков
sessionDays = ""

if monSession
    sessionDays += "2"
if tueSession
    sessionDays += "3"

// Создание строки сессии, объединив время с днями
tradingSession = session + ":" + sessionDays

// Получение минимума сессии
sessLow = SessionLow(tradingSession, timeZone)
sessHigh = SessionHigh(tradingSession, timeZone)

// Показ минимума сессии на графике
plot(sessLow, color=color.red, title="Минимум сессии")

// Показ максимума сессии на графике
plot(sessHigh, color=color.red, title="Максимум сессии")

// Для визуальной проверки минимума сессии, выделите фон сессии
bgcolor(InSession(tradingSession, timeZone) ? color.new(color.aqua, 90) : na)

Ответ или решение

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

Анализ текущего кода

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

  1. Правила для нахождения высоких и низких значений в понедельник и вторник.
  2. Запоминание и отображение истории этих значений на графике, чтобы вы могли видеть их на протяжении всей недели.
  3. Создание выделенной области вокруг диапазона.

Обновленный код Pine Script

Ниже приведен обновленный код, который должен помочь вам достичь желаемого визуального эффекта:

//@version=5
indicator("Monday and Tuesday Range", overlay=true)

// Ввод параметров
session  = input.session("0000-0000", title="Trading Session")
timeZone = input.string("UTC", title="Time Zone")
monSession = input.bool(true, title="Mon", group="Trading Session", inline="d1")
tueSession = input.bool(true, title="Tue", group="Trading Session", inline="d1")

// Функции для нахождения минимума и максимума сессии
SessionLow(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionLowPrice = na

    if insideSession and not insideSession[1]
        sessionLowPrice := low
    else if insideSession
        sessionLowPrice := math.min(sessionLowPrice, low)

    sessionLowPrice

SessionHigh(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionHighPrice = na

    if insideSession and not insideSession[1]
        sessionHighPrice := high
    else if insideSession
        sessionHighPrice := math.max(sessionHighPrice, high)

    sessionHighPrice

// Формирование строки сессий
sessionDays = ""
if monSession
    sessionDays += "2"
if tueSession
    sessionDays += "3"

tradingSession = session + ":" + sessionDays

// Определение исторических высоких и низких значений
var float mondayHigh = na
var float mondayLow = na
var float tuesdayHigh = na
var float tuesdayLow = na

// Заполнение значений в зависимости от дня
if (dayofweek(timenow) == dayofweek.monday)
    mondayHigh := High
    mondayLow := Low
else if (dayofweek(timenow) == dayofweek.tuesday)
    tuesdayHigh := High
    tuesdayLow := Low

// Найти самый высокий и низкий уровень в понедельник и вторник
maxHigh = math.max(mondayHigh, tuesdayHigh)
minLow = math.min(mondayLow, tuesdayLow)

// Плотирование
plot(maxHigh, color=color.green, title="High Range", linewidth=2)
plot(minLow, color=color.red, title="Low Range", linewidth=2)

// Создание выделенной области
bgcolor((dayofweek(timenow) == dayofweek.monday or dayofweek(timenow) == dayofweek.tuesday) ? color.new(color.aqua, 90) : na)

Объяснение изменений

  1. Исторические данные: Я добавил переменные для хранения исторических высоких и низких значений понедельника и вторника. Это позволит вам видеть данные за прошлые недели.

  2. Упрощение обработки: Логика для нахождения максимумов и минимумов была упрощена с использованием math.max и math.min, что делает код более понятным.

  3. Выделенная область: Добавлено условие для фона, чтобы при отображении диапазона, фон окрасился в заданный цвет.

Заключение

Теперь данный скрипт должен корректно отображать высокие и низкие значения диапазона понедельника и вторника на графике, при этом выделяя нужные области. Попробуйте интегрировать этот код в вашу среду и убедитесь, что он отвечает вашим ожиданиям. Если у вас есть дополнительные вопросы или необходимость в других изменениях, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...