RiViL Lin&Hull & Heel&Toe
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator_rivil_lin&hull_&_heel&toe_for_tradingview_5969999791206177898.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «RiViL Lin&Hull & Heel&Toe» — это наложенный индикатор для TradingView (Pine Script v5), объединяющий три аналитических модуля. Первый модуль (RiViL Lin&Hull) строит регрессионный канал с настраиваемой длиной и отклонением, отображает метки направления тренда и опционально показывает уровни Фибоначчи внутри канала. Он также включает Hull-скользящую среднюю с визуальными сигналами пересечения ценой. Второй модуль (Heel&Toe) рассчитывает точки разворота (pivot points) шестью методами (Traditional, Fibonacci, Woodie, Classic, DeMark, Camarilla) на разных таймфреймах, отрисовывая уровни поддержки и сопротивления в виде линий и подписей. Третий компонент отображает уровни, основанные на локальных максимумах/минимумах, и полосы на основе EMA с метками AL/SAT. Индикатор поддерживает настраиваемые цвета, толщину линий, переключатели видимости и условия оповещений TradingView для пробоя канала, смены тренда и пересечений Hull MA.
Модуль Heel&Toe получает данные нужного таймфрейма через request.security и позволяет выбрать базу расчёта (дневные или интрадей значения). Пользователь может задать количество отображаемых исторических разворотов и расположение подписей. Все линии и метки обновляются при смене соответствующего периода. Индикатор не является автоматическим советником — он не совершает симуляцию сделок и не работает в тестере стратегий.
Встроенный дашборд отображает ссылку на Telegram-канал разработчика. Общая функциональность сосредоточена на визуальном анализе: отображении трендов, уровней, каналов и сигналов пересечения на графике цены.
Настройки программы
| Настройка | Описание |
|---|---|
| src | Источник — Источник данных для расчёта канала RiViL Lin&Hull. |
| len | Длина — Длина периода для расчёта канала RiViL Lin&Hull. |
| devlen | Отклонение — Множитель отклонения для расчёта ширины канала. |
| extendit | Продление линий — Включает или отключает продление линий канала вправо. |
| showfibo | Показать уровни Фибоначчи — Включает или отключает отображение уровней Фибоначчи внутри канала. |
| showbroken | Показать пробитый канал — Отображает пробитые линии канала пунктирным стилем. |
| brokencol | Цвет пробитого канала — Цвет отображения пробитого канала. |
| upcol | Цвет восходящего тренда — Цвет отображения восходящего тренда. |
| dncol | Цвет нисходящего тренда — Цвет отображения нисходящего тренда. |
| widt | Толщина линий — Толщина линий канала. |
| length | Длина Hull MA — Период для расчёта Hull-скользящей средней. |
| price | Источник Hull MA — Источник данных для расчёта Hull-скользящей средней. |
| showCrossovers | Показать пересечения — Отображает графические маркеры пересечения цены и Hull-скользящей средней. |
| kind | Тип расчёта — Метод расчёта точек разворота: Traditional, Fibonacci, Woodie, Classic, DeMark или Camarilla. |
| pivot_time_frame | Таймфрейм точек разворота — Таймфрейм для расчёта точек разворота: Auto, Daily, Weekly, Monthly и другие. |
| look_back | Количество точек разворота назад — Количество исторических точек разворота, отображаемых на графике. |
| is_daily_based | Использовать дневные значения — Использовать дневные значения при расчёте точек разворота на интрадей-графиках. |
| show_labels | Показать подписи — Включает или отключает отображение подписей уровней точек разворота. |
| position_labels | Расположение подписей — Расположение подписей уровней: Left или Right. |
| p_show | Показать P — Включает или отключает отображение центральной точки разворота (P). |
| p_color | Цвет P — Цвет линий и подписей центральной точки разворота (P). |
| s1r1_show | Показать S1/R1 — Включает или отключает отображение уровней S1/R1. |
| s1r1_color | Цвет S1/R1 — Цвет линий и подписей уровней S1/R1. |
| s2r2_show | Показать S2/R2 — Включает или отключает отображение уровней S2/R2. |
| s2r2_color | Цвет S2/R2 — Цвет линий и подписей уровней S2/R2. |
| s3r3_show | Показать S3/R3 — Включает или отключает отображение уровней S3/R3. |
| s3r3_color | Цвет S3/R3 — Цвет линий и подписей уровней S3/R3. |
| s4r4_show | Показать S4/R4 — Включает или отключает отображение уровней S4/R4. |
| s4r4_color | Цвет S4/R4 — Цвет линий и подписей уровней S4/R4. |
| s5r5_show | Показать S5/R5 — Включает или отключает отображение уровней S5/R5. |
| s5r5_color | Цвет S5/R5 — Цвет линий и подписей уровней S5/R5. |
| lengthh | Длина EMA — Период для расчёта EMA верхней и нижней полос. |
Поиск по коду файла
indicator(title = 'RiViL Lin&Hull & Heel&Toe', shorttitle = 'RiViL Lin&Hull & Heel&Toe', overlay=true, max_bars_back=1000, max_lines_count=300)
src = input(defval=close, title='Source', group='RiViL Lin&Hull (RLH)')
len = input.int(defval=100, title='Length', minval=10, group='RiViL Lin&Hull (RLH)')
devlen = input.float(defval=2., title='Deviation', minval=0.1, step=0.1, group='RiViL Lin&Hull (RLH)')
extendit = input(defval=true, title='Extend Lines', group='RiViL Lin&Hull (RLH)')
showfibo = input(defval=false, title='Show Fibonacci Levels', group='RiViL Lin&Hull (RLH)')
showbroken = input.bool(defval=true, title='Show Broken Channel', inline='brk', group='RiViL Lin&Hull (RLH)')
brokencol = input.color(defval=color.blue, title='', inline='brk', group='RiViL Lin&Hull (RLH)')
upcol = input.color(defval=color.lime, title='Up/Down Trend Colors', inline='trcols', group='RiViL Lin&Hull (RLH)')
dncol = input.color(defval=color.red, title='', inline='trcols', group='RiViL Lin&Hull (RLH)')
widt = input(defval=2, title='Line Width', group='RiViL Lin&Hull (RLH)')
var fibo_ratios = array.new_float(0)
var colors = array.new_color(2)
if barstate.isfirst
array.unshift(colors, upcol)
array.unshift(colors, dncol)
array.push(fibo_ratios, 0.236)
array.push(fibo_ratios, 0.382)
array.push(fibo_ratios, 0.618)
array.push(fibo_ratios, 0.786)
get_channel(src, len) =>
mid = math.sum(src, len) / len
slope = ta.linreg(src, len, 0) - ta.linreg(src, len, 1)
intercept = mid - slope * math.floor(len / 2) + (1 - len % 2) / 2 * slope
endy = intercept + slope * (len - 1)
dev = 0.0
for x = 0 to len - 1 by 1
dev += math.pow(src[x] - (slope * (len - x) + intercept), 2)
dev
dev := math.sqrt(dev / len)
[intercept, endy, dev, slope]
[y1_, y2_, dev, slope] = get_channel(src, len)
outofchannel = slope > 0 and close < y2_ - dev * devlen ? 0 : slope < 0 and close > y2_ + dev * devlen ? 2 : -1
var reglines = array.new_line(3)
var fibolines = array.new_line(4)
for x = 0 to 2 by 1
if not showbroken or outofchannel != x or nz(outofchannel[1], -1) != -1
line.delete(array.get(reglines, x))
else
line.set_color(array.get(reglines, x), color=brokencol)
line.set_width(array.get(reglines, x), width=2)
line.set_style(array.get(reglines, x), style=line.style_dotted)
line.set_extend(array.get(reglines, x), extend=extend.none)
array.set(reglines, x, line.new(x1=bar_index - (len - 1), y1=y1_ + dev * devlen * (x - 1), x2=bar_index, y2=y2_ + dev * devlen * (x - 1), color=array.get(colors, math.round(math.max(math.sign(slope), 0))), style=x % 2 == 1 ? line.style_solid : line.style_dashed, width=widt, extend=extendit ? extend.right : extend.none))
if showfibo
for x = 0 to 3 by 1
line.delete(array.get(fibolines, x))
array.set(fibolines, x, line.new(x1=bar_index - (len - 1), y1=y1_ - dev * devlen + dev * devlen * 2 * array.get(fibo_ratios, x), x2=bar_index, y2=y2_ - dev * devlen + dev * devlen * 2 * array.get(fibo_ratios, x), color=array.get(colors, math.round(math.max(math.sign(slope), 0))), style=line.style_dotted, width=widt, extend=extendit ? extend.right : extend.none))
var label sidelab = label.new(x=bar_index - (len - 1), y=y1_, text='S', size=size.large)
txt = slope > 0 ? slope > slope[1] ? '⇑' : '⇗' : slope < 0 ? slope < slope[1] ? '⇓' : '⇘' : '⇒'
stl = slope > 0 ? slope > slope[1] ? label.style_label_up : label.style_label_upper_right : slope < 0 ? slope < slope[1] ? label.style_label_down : label.style_label_lower_right : label.style_label_right
label.set_style(sidelab, stl)
label.set_text(sidelab, txt)
label.set_x(sidelab, bar_index - (len - 1))
label.set_y(sidelab, slope > 0 ? y1_ - dev * devlen : slope < 0 ? y1_ + dev * devlen : y1_)
label.set_color(sidelab, slope > 0 ? upcol : slope < 0 ? dncol : color.blue)
alertcondition(outofchannel, title='Channel Broken', message='Channel Broken')
trendisup = math.sign(slope) != math.sign(slope[1]) and slope > 0
trendisdown = math.sign(slope) != math.sign(slope[1]) and slope < 0
alertcondition(trendisup, title='Up trend', message='Up trend')
alertcondition(trendisdown, title='Down trend', message='Down trend')
length = input.int(16, minval=1)
price = input(ohlc4, title='Source')
showCrossovers = input(true, title='Show crossovers')
hull = ta.wma(2 * ta.wma(price, length / 2) - ta.wma(price, length), math.round(math.sqrt(length)))
plot(hull, title='Hull', color=ta.change(hull) < 0 ? #ff0000 : #00ff0a, linewidth=2, transp=0)
plotshape(showCrossovers and ta.crossover(price, hull), color=color.new(#00ff0a, 0), style=shape.circle, location=location.belowbar)
plotshape(showCrossovers and ta.crossunder(price, hull), color=color.new(#ff0000, 0), style=shape.circle, location=location.abovebar)
alertcondition(ta.crossover(price, hull) or ta.crossunder(price, hull), title='Hull MA cross', message='Hull cross - {{exchange}}:{{ticker}}, Price = {{price}}, Hull = {{hull}}, Volume = {{volume}}, Time = {{timenow}}')
alertcondition(ta.crossunder(price, hull), title='Hull MA sell', message='Hull sell')
alertcondition(ta.crossover(price, hull), title='Hull MA buy', message='Hull buy')
AUTO = "Auto"
DAILY = "Daily"
WEEKLY = "Weekly"
MONTHLY = "Monthly"
QUARTERLY = "Quarterly"
YEARLY = "Yearly"
BIYEARLY = "Biyearly"
TRIYEARLY = "Triyearly"
QUINQUENNIALLY = "Quinquennially"
DECENNIALLY = "Decennially"
TRADITIONAL = "Traditional"
FIBONACCI = "Fibonacci"
WOODIE = "Woodie"
CLASSIC = "Classic"
DEMARK = "DM"
CAMARILLA = "Camarilla"
kind = input.string(title="Type", defval="Traditional", options=[TRADITIONAL, FIBONACCI, WOODIE, CLASSIC, DEMARK, CAMARILLA], group='Heel&Toe')
pivot_time_frame = input.string(title="Pivots Timeframe", defval=AUTO, options=[AUTO, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY, BIYEARLY, TRIYEARLY, QUINQUENNIALLY, DECENNIALLY], group='Heel&Toe')
look_back = input.int(title="Number of Pivots Back", defval=15, minval=1, maxval=5000, group='Heel&Toe')
is_daily_based = input.bool(title="Use Daily-based Values", defval=true, tooltip="When this option is unchecked, Pivot Points will use intraday data while calculating on intraday charts. If Extended Hours are displayed on the chart, they will be taken into account during the pivot level calculation. If intraday OHLC values are different from daily-based values (normal for stocks), the pivot levels will also differ.", group='Heel&Toe')
show_labels = input.bool(title="Show Labels", defval=true, inline="labels", group='Heel&Toe')
position_labels = input.string("Left", "", options=["Left", "Right"], inline="labels", group='Heel&Toe')
var DEF_COLOR = color.blue
var arr_time = array.new_int()
var p = array.new_float()
p_show = input.bool(true, "P ", inline="P")
p_color = input.color(DEF_COLOR, "", inline="P")
var r1 = array.new_float()
var s1 = array.new_float()
s1r1_show = input.bool(true, "S1/R1", inline="S1/R1")
s1r1_color = input.color(DEF_COLOR, "", inline="S1/R1")
var r2 = array.new_float()
var s2 = array.new_float()
s2r2_show = input.bool(true, "S2/R2", inline="S2/R2")
s2r2_color = input.color(DEF_COLOR, "", inline="S2/R2")
var r3 = array.new_float()
var s3 = array.new_float()
s3r3_show = input.bool(true, "S3/R3", inline="S3/R3")
s3r3_color = input.color(DEF_COLOR, "", inline="S3/R3")
var r4 = array.new_float()
var s4 = array.new_float()
s4r4_show = input.bool(true, "S4/R4", inline="S4/R4")
s4r4_color = input.color(DEF_COLOR, "", inline="S4/R4")
var r5 = array.new_float()
var s5 = array.new_float()
s5r5_show = input.bool(true, "S5/R5", inline="S5/R5")
s5r5_color = input.color(DEF_COLOR, "", inline="S5/R5")
pivotX_open = float(na)
pivotX_open := nz(pivotX_open[1], open)
pivotX_high = float(na)
pivotX_high := nz(pivotX_high[1], high)
pivotX_low = float(na)
pivotX_low := nz(pivotX_low[1], low)
pivotX_prev_open = float(na)
pivotX_prev_open := nz(pivotX_prev_open[1])
pivotX_prev_high = float(na)
pivotX_prev_high := nz(pivotX_prev_high[1])
pivotX_prev_low = float(na)
pivotX_prev_low := nz(pivotX_prev_low[1])
pivotX_prev_close = float(na)
pivotX_prev_close := nz(pivotX_prev_close[1])
get_pivot_resolution() =>
resolution = "M"
if pivot_time_frame == AUTO
if timeframe.isintraday
resolution := timeframe.multiplier <= 15 ? "D" : "W"
else if timeframe.isweekly or timeframe.ismonthly
resolution := "12M"
else if pivot_time_frame == DAILY
resolution := "D"
else if pivot_time_frame == WEEKLY
resolution := "W"
else if pivot_time_frame == MONTHLY
resolution := "M"
else if pivot_time_frame == QUARTERLY
resolution := "3M"
else if pivot_time_frame == YEARLY or pivot_time_frame == BIYEARLY or pivot_time_frame == TRIYEARLY or pivot_time_frame == QUINQUENNIALLY or pivot_time_frame == DECENNIALLY
resolution := "12M"
resolution
var lines = array.new_line()
var labels = array.new_label()
draw_line(i, pivot, col) =>
if array.size(arr_time) > 1
array.push(lines, line.new(array.get(arr_time, i), array.get(pivot, i), array.get(arr_time, i + 1), array.get(pivot, i), color=col, xloc=xloc.bar_time))
draw_label(i, y, txt, txt_color) =>
if show_labels
offset = ' '
labels_align_str_left= position_labels == "Left" ? txt + offset : offset + txt
x = position_labels == "Left" ? array.get(arr_time, i) : array.get(arr_time, i + 1)
array.push(labels, label.new(x = x, y=y, text=labels_align_str_left, textcolor=txt_color, style=label.style_label_center, color=#00000000, xloc=xloc.bar_time))
traditional() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
array.push(p, pivotX_Median)
array.push(r1, pivotX_Median * 2 - pivotX_prev_low)
array.push(s1, pivotX_Median * 2 - pivotX_prev_high)
array.push(r2, pivotX_Median + 1 * (pivotX_prev_high - pivotX_prev_low))
array.push(s2, pivotX_Median - 1 * (pivotX_prev_high - pivotX_prev_low))
array.push(r3, pivotX_Median * 2 + (pivotX_prev_high - 2 * pivotX_prev_low))
array.push(s3, pivotX_Median * 2 - (2 * pivotX_prev_high - pivotX_prev_low))
array.push(r4, pivotX_Median * 3 + (pivotX_prev_high - 3 * pivotX_prev_low))
array.push(s4, pivotX_Median * 3 - (3 * pivotX_prev_high - pivotX_prev_low))
array.push(r5, pivotX_Median * 4 + (pivotX_prev_high - 4 * pivotX_prev_low))
array.push(s5, pivotX_Median * 4 - (4 * pivotX_prev_high - pivotX_prev_low))
fibonacci() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
array.push(p, pivotX_Median)
array.push(r1, pivotX_Median + 0.382 * pivot_range)
array.push(s1, pivotX_Median - 0.382 * pivot_range)
array.push(r2, pivotX_Median + 0.618 * pivot_range)
array.push(s2, pivotX_Median - 0.618 * pivot_range)
array.push(r3, pivotX_Median + 1 * pivot_range)
array.push(s3, pivotX_Показано первые 50% кода (символов: 17965)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.