Вопрос или проблема
Я пытаюсь построить максимумы и минимумы диапазона понедельника + вторника на графике для текущей недели до конца недели.
(При этом сохраняя исторические данные о максимумах/минимумах понедельника + вторника на графике)
То, что я получаю – это прерывистые, постепенно непрерывные линии, которые в конечном итоге становятся более гладкими к среде.
Позвольте мне прикрепить мой код и скриншот моего текущего результата.
Кроме того, я также прикрепляю желаемую визуализацию из скрипта.
Спасибо за любую помощь.
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, который предназначен для отображения высоких и низких значений диапазона понедельника и вторника, а также для создания выделенной области вокруг этого диапазона на графике.
Анализ текущего кода
Ваш текущий код в целом выглядит неплохо, однако вам необходимо внести некоторые изменения для достижения желаемого результата. Эта логика должна включать в себя:
- Правила для нахождения высоких и низких значений в понедельник и вторник.
- Запоминание и отображение истории этих значений на графике, чтобы вы могли видеть их на протяжении всей недели.
- Создание выделенной области вокруг диапазона.
Обновленный код 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)
Объяснение изменений
-
Исторические данные: Я добавил переменные для хранения исторических высоких и низких значений понедельника и вторника. Это позволит вам видеть данные за прошлые недели.
-
Упрощение обработки: Логика для нахождения максимумов и минимумов была упрощена с использованием
math.max
иmath.min
, что делает код более понятным. -
Выделенная область: Добавлено условие для фона, чтобы при отображении диапазона, фон окрасился в заданный цвет.
Заключение
Теперь данный скрипт должен корректно отображать высокие и низкие значения диапазона понедельника и вторника на графике, при этом выделяя нужные области. Попробуйте интегрировать этот код в вашу среду и убедитесь, что он отвечает вашим ожиданиям. Если у вас есть дополнительные вопросы или необходимость в других изменениях, не стесняйтесь задавать их!