Можно ли написать индикатор, в котором пользователь выделяет диапазон баров?

Можно ли написать индикатор, в котором пользователь выделяет диапазон баров? Написал индикатор, который меня устраивает, но он лучше работает если он суммирует свои показатели в определенном диапазоне… Пока делаю это вручную задавая индекс бара начала и конца. Хотел бы его улучшить чтобы можно было рисовать вручную прямоугольник, а индикатор определял начальный бар и конечный бар в прямоугольнике и проводил суммарные расчеты этого диапазона. (как например горизонтальные обьемы, пользователь сам выделяет диапазон)


Ответы (1 шт):

Автор решения: Максим

Вобщем разобрался, имелось ввиду чтобы водить начало и конец диапазона баров не вводя id первого и последнего бара необходимого диапазона, а чтобы на графике индикатор был в виде движущихся "линий" двигая которые мышкой можно было менять деапазон для расчетов индикатора. Это можно сделать с помощью функций input.time() и input.price(). В них необходимо указать confirm = true и можно их скомбинировать еще при помощи аргумента inline: https://www.tradingview.com/pine-script-reference/v5/#fun_input{dot}price https://www.tradingview.com/pine-script-reference/v5/#fun_input{dot}time Код в первой вариации на скорую руку с абсурдным названием переменных, но все выполняет и считает сумарный обьем за выделиный диапазон :)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Rohtar
//@version=5
indicator("изменяемый диапазон", overlay = true,max_lines_count = 500, max_boxes_count = 500)
var vol=0.0
i_date = input.time(timestamp("06 Jan 2022 00:00 +0300"), "Date",confirm =true)
l = label.new(i_date, ta.highest(high,5), "Date", xloc=xloc.bar_time)
t=label.get_x(l)
label.set_text(l,str.tostring(t))
i_date_end = input.time(timestamp("06 Jan 2022 00:00 +0300"), "Date",confirm =true)
l_end = label.new(i_date_end, ta.highest(high,5), "Date", xloc=xloc.bar_time)
label.set_color(l_end, color.red)
t_end=label.get_x(l_end)
label.set_text(l_end,str.tostring(t_end))
if i_date>i_date_end // для расчетов нельзя чтобі переменные начала и конца диапазона были в неправвильном порядке
    label.set_text(l,"Ошибка")
    label.set_text(l_end,"Конец не может быть перед началом")
if time>=i_date and time<=i_date_end
    vol:=vol+volume
label.set_text(l_end,str.tostring(vol))
label.delete(l[1])// удаляем предыдущуу метку после передвежения на новое место либо при обновлении точки относительно которой она отображаеться в баре
label.delete(l_end[1])
→ Ссылка