← К каталогу
Исходный код · ID 4709

ФибоКанал S&R

fibochannel s&r.pine

Похожие материалы по тегам

marketstructure_rsi_validator.mq5MQL5 / MetaTrader 5 · 1 общих теговxmc ea 1.02 d_grid_v1.mq5MQL5 / MetaTrader 5 · 1 общих теговxmc ea 1.02 d_grid_v1.mq4MQL4 / MetaTrader 4 · 1 общих теговtradingview kinetic momentum squeeze (1).pineTradingView · 1 общих теговmulti-signal trading signal system.pineTradingView · 1 общих теговaurumbreakclone_v016.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

«ФибоКанал S&R» — это индикатор для TradingView, написанный на Pine Script v5 и отображаемый на основном графике. Он автоматически находит точки разворота цены (пивоты) с помощью встроенных функций ta.pivothigh и ta.pivotlow, а затем строит из них каналы поддержки и сопротивления, продлевая их вправо по графику.

Индикатор рисует горизонтальные линии и метки в точках пивотов, выделяет активные и неактивные линии канала разными цветами и стилями. Между линиями верхнего и нижнего канала возможна заливка с градиентной окраской, зависящей от значения RSI(14).

Дополнительно индикатор отображает уровни Фибоначчи — коррекции (0.236, 0.382, 0.5, 0.618, 0.786 и другие) и расширения (1.618, 2, -0.618, -1 и другие). Каждый уровень можно включать или отключать индивидуально, настраивая его цвет, толщину и стиль линии. Все параметры управляются через панель свойств индикатора.

Настройки программы

НастройкаОписание
length Период (количество баров) для определения точек разворота цены.
max_pivot_points Максимальное количество хранимых точек разворота высоких и низких значений, используемых для построения канала.
channel_ext_length Количество баров вправо, на которое продлеваются линии канала.
source Источник данных (например, close), используемый для расчёта точек разворота.
show_plabels Включает или отключает отображение текстовых меток в точках разворота.
ALB1 Цвет меток для активных верхних точек разворота (пивотов высоких значений).
ALB2 Цвет меток для активных нижних точек разворота (пивотов низких значений).
ILB1 Цвет меток для неактивных верхних точек разворота.
ILB2 Цвет меток для неактивных нижних точек разворота.
show_plines Включает или отключает отображение горизонтальных линий в точках разворота.
ALN1 Цвет горизонтальных линий для активных верхних точек разворота.
ALN2 Цвет горизонтальных линий для активных нижних точек разворота.
ILN1 Цвет горизонтальных линий для неактивных верхних точек разворота.
ILN2 Цвет горизонтальных линий для неактивных нижних точек разворота.
show_chan Включает или отключает отображение каналов поддержки и сопротивления.
show_extendL Продлевает линии канала влево по графику при активации.
RLN Цвет линии сопротивления в канале.
SLN Цвет линии поддержки в канале.
d_fib Включает или отключает отображение уровней Фибоначчи коррекции.
FRH Цвет верхней части уровней Фибоначчи коррекции.
FRL Цвет нижней части уровней Фибоначчи коррекции.
sfib_R01 Включает или отключает уровень коррекции Фибоначчи 0.236.
sfib_R02 Включает или отключает уровень коррекции Фибоначчи 0.382.
sfib_R03 Включает или отключает уровень коррекции Фибоначчи 0.5.
sfib_R04 Включает или отключает уровень коррекции Фибоначчи 0.618.
sfib_R05 Включает или отключает уровень коррекции Фибоначчи 0.786.
sfib_R06 Включает или отключает уровень коррекции Фибоначчи 0.09.
sfib_R07 Включает или отключает уровень коррекции Фибоначчи 0.146.
sfib_R08 Включает или отключает уровень коррекции Фибоначчи 0.35.
sfib_R09 Включает или отключает уровень коррекции Фибоначчи 0.65.
sfib_R10 Включает или отключает уровень коррекции Фибоначчи 0.886.
d_fib2 Включает или отключает отображение уровней Фибоначчи расширения.
FEH Цвет верхней части уровней Фибоначчи расширения.
FEL Цвет нижней части уровней Фибоначчи расширения.
sfib_E01 Включает или отключает уровень расширения Фибоначчи 1.618.
sfib_E02 Включает или отключает уровень расширения Фибоначчи 2.0.
sfib_E03 Включает или отключает уровень расширения Фибоначчи -0.618.
sfib_E04 Включает или отключает уровень расширения Фибоначчи -1.0.
sfib_E05 Включает или отключает уровень расширения Фибоначчи 1.13.
sfib_E06 Включает или отключает уровень расширения Фибоначчи 1.272.
sfib_E07 Включает или отключает уровень расширения Фибоначчи 1.41.
sfib_E08 Включает или отключает уровень расширения Фибоначчи 1.786.
f_bg Включает или отключает заливку области между линиями канала с градиентом по RSI.
GF2 Цвет заливки канала при росте (при высоком значении RSI).
GF1 Цвет заливки канала при падении (при низком значении RSI).
f_transp Уровень прозрачности заливки канала (0 — непрозрачная, 100 — полностью прозрачная).
lwidth_piv Толщина горизонтальных линий точек разворота.
lwidth_chan Толщина линий канала поддержки и сопротивления.
lwidth_FR Толщина линий уровней Фибоначчи коррекции.
lwidth_FE Толщина линий уровней Фибоначчи расширения.
ppstyleAHL_input Стиль линий для активных горизонталей точек разворота (сплошная, точечная или пунктирная).
ppstyleIHL_input Стиль линий для неактивных горизонталей точек разворота.
ppstyleSRL_input Стиль линий канала поддержки и сопротивления.
ppstyleFRL_input Стиль линий для уровней Фибоначчи коррекции.
ppstyleFEL_input Стиль линий для уровней Фибоначчи расширения.
Получить полный код

Поиск по коду файла

indicator("<[Комбинация Фибоначчи_каналы_поддержка/сопротивление]>","<[ФибоКанал: S&R]>" , overlay = true, max_bars_back = 5000)

groupPP = "Точки разворота"
groupPL = "Метки и линии разворотов"
groupSR = "Уровни поддержки и сопротивления"
groupFR = "Уровни Фибоначчи (коррекции)"
groupFE = "Уровни Фибоначчи (расширения)"

length = input(21, title="Длина", inline="PP1", group=groupPP)
max_pivot_points = input.float(5, minval=2, title="Глубина поиска", inline="PP2", group=groupPP)
max_h_pivot_points = max_pivot_points
max_l_pivot_points = max_pivot_points
min_difference = 0.0
channel_ext_length = input(14, title="Расширение линий", inline="EXT", group=groupPP)
source = input(close, title="Источник", inline="PP1", group=groupPP)

show_plabels = input.bool(true, title="Показывать метки", inline="PP4", group=groupPL)

d_lbl_pivh = show_plabels ? true : false
d_lbl_pivl = show_plabels ? true : false

ALB1 = input.color(color.new(#99D31B, 25), title="Активные", inline="PP4A", group=groupPL)
ALB2 = input.color(color.new(#FA5032, 25), title="", inline="PP4A", group=groupPL)
ILB1 = input.color(color.new(#99D31B, 75), title="| Неактивные", inline="PP4A", group=groupPL)
ILB2 = input.color(color.new(#FF4500, 75), title="", inline="PP4A", group=groupPL)

show_plines = input.bool(true, title="Показывать линии", inline="PP5", group=groupPL)

d_pivh = show_plines ? true : false
d_pivl = show_plines ? true : false

ALN1 = input.color(color.new(#99D31B, 50), title="Активные", inline="PP5A", group=groupPL)
ALN2 = input.color(color.new(#FA5032, 50), title="", inline="PP5A", group=groupPL)
ILN1 = input.color(color.new(#99D31B, 50), title="Неактивные", inline="PP5B", group=groupPL)
ILN2 = input.color(color.new(#FF4500, 50), title="", inline="PP5B", group=groupPL)

show_chan = input.bool(true, title="Показывать канал", inline="CH1", group=groupSR)

d_chanh = show_chan ? true : false
d_chanl = show_chan ? true : false

show_extendL = input.bool(false, title="Расширять линии", inline="CH1B", group=groupSR)
extendL = show_extendL ? extend.left : extend.none

RLN = input.color(color.new(#99D31B, 25), title="Сопротивление", inline="CH1A", group=groupSR)
SLN = input.color(color.new(#FA5032, 25), title="Поддержка", inline="CH1A", group=groupSR)

d_fib = input.bool(true, title="Показывать уровни", inline="CH2", group=groupFR)

FRH = input.color(color.new(#99D31B, 25), title="Верх", inline="CH2A", group=groupFR)
FRL = input.color(color.new(#FA5032, 25), title="Низ", inline="CH2A", group=groupFR)

sfib_R01 = input.bool(true, title="01", inline="CH21", group=groupFR)
sfib_R02 = input.bool(true, title="02", inline="CH22", group=groupFR)
sfib_R03 = input.bool(true, title="03", inline="CH23", group=groupFR)
sfib_R04 = input.bool(true, title="04", inline="CH24", group=groupFR)
sfib_R05 = input.bool(true, title="05", inline="CH25", group=groupFR)

fib_R01 = sfib_R01 ? input.float(0.236, title="", inline="CH21", group=groupFR) : na
fib_R02 = sfib_R02 ? input.float(0.382, title="", inline="CH22", group=groupFR) : na
fib_R03 = sfib_R03 ? input.float(0.5, title="", inline="CH23", group=groupFR) : na
fib_R04 = sfib_R04 ? input.float(0.618, title="", inline="CH24", group=groupFR) : na
fib_R05 = sfib_R05 ? input.float(0.786, title="", inline="CH25", group=groupFR) : na

sfib_R06 = input.bool(false, title="06", inline="CH21", group=groupFR)
sfib_R07 = input.bool(false, title="07", inline="CH22", group=groupFR)
sfib_R08 = input.bool(false, title="08", inline="CH23", group=groupFR)
sfib_R09 = input.bool(false, title="09", inline="CH24", group=groupFR)
sfib_R10 = input.bool(false, title="10", inline="CH25", group=groupFR)

fib_R06 = sfib_R06 ? input.float(0.09, title="", inline="CH21", group=groupFR) : na
fib_R07 = sfib_R07 ? input.float(0.146, title="", inline="CH22", group=groupFR) : na
fib_R08 = sfib_R08 ? input.float(0.35, title="", inline="CH23", group=groupFR) : na
fib_R09 = sfib_R09 ? input.float(0.65, title="", inline="CH24", group=groupFR) : na
fib_R10 = sfib_R10 ? input.float(0.886, title="", inline="CH25", group=groupFR) : na

d_fib2 = input.bool(true, title="Показывать уровни", inline="CH3", group=groupFE)

FEH = input.color(color.new(#99D31B, 25), title="Верх", inline="CH3A", group=groupFE)
FEL = input.color(color.new(#FA5032, 25), title="Низ", inline="CH3A", group=groupFE)

sfib_E01 = input.bool(true, title="01", inline="CH31", group=groupFE)
sfib_E02 = input.bool(false, title="02", inline="CH32", group=groupFE)
sfib_E03 = input.bool(true, title="03", inline="CH33", group=groupFE)
sfib_E04 = input.bool(false, title="04", inline="CH34", group=groupFE)

fib_E01 = sfib_E01 ? input.float(1.618, title="", inline="CH31", group=groupFE) : na
fib_E02 = sfib_E02 ? input.float(2, title="", inline="CH32", group=groupFE) : na
fib_E03 = sfib_E03 ? input.float(-0.618, title="", inline="CH33", group=groupFE) : na
fib_E04 = sfib_E04 ? input.float(-1, title="", inline="CH34", group=groupFE) : na

sfib_E05 = input.bool(false, title="05", inline="CH31", group=groupFE)
sfib_E06 = input.bool(false, title="06", inline="CH32", group=groupFE)
sfib_E07 = input.bool(false, title="07", inline="CH33", group=groupFE)
sfib_E08 = input.bool(false, title="08", inline="CH34", group=groupFE)

fib_E05 = sfib_E05 ? input.float(1.13, title="", inline="CH31", group=groupFE) : na
fib_E06 = sfib_E06 ? input.float(1.272, title="", inline="CH32", group=groupFE) : na
fib_E07 = sfib_E07 ? input.float(1.41, title="", inline="CH33", group=groupFE) : na
fib_E08 = sfib_E08 ? input.float(1.786, title="", inline="CH34", group=groupFE) : na

f_bg = input.bool(true, title="Заливка канала", inline="CH4", group=groupSR)

GF2 = input.color(color.new(#99D31B, 0), title="Рост", inline="CH4A", group=groupSR)
GF1 = input.color(color.new(#FF4500, 0), title="Падение", inline="CH4A", group=groupSR)

f_transp = input.float(97, title="| Прозрачность", inline="CH4A", group=groupSR)

lwidth_piv = input.int(1, minval=0, title="| Толщина", inline="PP5", group=groupPL)
lwidth_chan = input.int(2, minval=0, title="| Толщина", inline="CH1", group=groupSR)
lwidth_FR = input.int(1, minval=0, title="| Толщина", inline="CH2", group=groupFR)
lwidth_FE = input.int(1, minval=0, title="| Толщина", inline="CH3", group=groupFE)

i_line0 = "Сплошная"
i_line1 = "Точечная"
i_line2 = "Пунктирная"

ppstyleAHL_input = input.string(i_line2, title="|", options=[i_line0, i_line1, i_line2], inline="PP5A", group=groupPL)
ppstyleIHL_input = input.string(i_line1, title="|", options=[i_line0, i_line1, i_line2], inline="PP5B", group=groupPL)
ppstyleSRL_input = input.string(i_line0, title="|", options=[i_line0, i_line1, i_line2], inline="CH1A", group=groupSR)
ppstyleFRL_input = input.string(i_line1, title="|", options=[i_line0, i_line1, i_line2], inline="CH2A", group=groupFR)
ppstyleFEL_input = input.string(i_line1, title="|", options=[i_line0, i_line1, i_line2], inline="CH3A", group=groupFE)

f_getLineStyle(_inputStyle) =>
    _return = _inputStyle == i_line1 ? line.style_dotted : _inputStyle == i_line2 ? line.style_dashed : line.style_solid
    _return

var ph_index = array.new_int()
var pl_index = array.new_int()
var ph_value = array.new_float()
var pl_value = array.new_float()

interp(l, h, s) => l + (h - l) * s

var float ph_val = na
var float pl_val = na

ph = ta.pivothigh(source, length, length)
pl = ta.pivotlow(source, length, length)

if not na(ph)
    bool ok = true
    ph_val := high[length]

    if array.size(ph_index) > 0
        if array.size(ph_index) >= max_h_pivot_points
            array.shift(ph_index)
            array.shift(ph_value)

        for i = 0 to array.size(ph_value) - 1
            if math.abs(ph_val - array.get(ph_value, i)) < min_difference
                ok := false
                if ph_val > array.get(ph_value, i)
                    array.set(ph_value, i , ph_val)
                    array.set(ph_index, i , bar_index[length])

    if ok
        array.push(ph_index, bar_index[length])
        array.push(ph_value, ph_val)

if not na(pl)
    bool ok = true
    pl_val := low[length]

    if array.size(pl_index) > 0
        if array.size(pl_index) >= max_l_pivot_points
            array.shift(pl_index)
            array.shift(pl_value)

        for i = 0 to array.size(pl_value) - 1
            if math.abs(pl_val - array.get(pl_value, i)) < min_difference
                ok := false
                if pl_val < array.get(pl_value, i)
                    array.set(pl_value, i , pl_val)
                    array.set(pl_index, i , bar_index[length])
    if ok
        array.push(pl_index, bar_index[length])
        array.push(pl_value, pl_val)

var lines = array.new_line()
var labels = array.new_label()
var fibs = array.new_line()

var line line_fc_up = line(na)
var line line_fc_down = line(na)
var linefill fill_fc = linefill(na)

rsiValue = ta.rsi(close, 14)

if barstate.isconfirmed
    ph_count = array.size(ph_index)
    pl_count = array.size(pl_index)

    for i = 0 to array.size(lines)
        if array.size(lines) > 0
            line.delete(array.shift(lines))

    for i = 0 to array.size(labels)
        if array.size(labels) > 0
            label.delete(array.shift(labels))

    if ph_count > 0
        for i = 0 to ph_count - 1
            if d_lbl_pivh
                array.push(labels, label.new(array.get(ph_index, i), array.get(ph_value, i), "", style=label.style_label_down, color=ILB1, size=size.tiny))
            if d_pivh
                array.push(lines, line.new(array.get(ph_index, i), array.get(ph_value, i), bar_index + channel_ext_length, array.get(ph_value, i), color=ILN1, width=lwidth_piv, style=f_getLineStyle(ppstyleIHL_input), extend=extend.none))

    if pl_count > 0
        for i = 0 to pl_count - 1
            if d_lbl_pivl
                array.push(labels, label.new(array.get(pl_index, i), array.get(pl_value, i), "", style=label.style_label_up, color=ILB2, size=size.tiny))
            if d_pivl
                array.push(lines, line.new(array.get(pl_index, i), array.get(pl_value, i), bar_index + channel_ext_length, array.get(pl_value, i), color=ILN2, width=lwidth_piv, style=f_getLineStyle(ppstyleIHL_input), extend=extend.none))

    if d_chanh
        if ph_count > 1
            tmp_arr = array.new_line()
            for i = 0 to ph_count - 1
                for j = 0 to ph_count - 1
                    h0 = array.get(ph_value, i)
                    h1 = array.get(ph_value, j)
                    h0i = array.get(ph_index, i)
                    h1i = array.get(ph_index, j)
                    if h0i < h1i 
                        array.push(tmp_arr, line.new(h0i, h0, h1i, h1, color=RLN, width=lwidth_chan, extend=extend.none, style=f_getLineStyle(ppstyleSRL_input)))
                    if h0i > h1i 
                        array.push(tmp_arr, line.new(h1i, h1, h0i, h0, color=RLN, width=lwidth_chan, extend=extend.none, style=f_getLineStyle(ppstyleSRL_input)))

            int min_ind = na
            float min_val = 100000.0
            for i = 0 to array.size(tmp_arr) - 1
                lp = line.get_price(array.get(tmp_arr, i), bar_index)
                if lp > high
                    if min_val > math.abs(lp - close)
                        min_val := math.abs(lp - close)
                        min_ind := i

            if not na(min_ind)
                line.delete(line_fc_up[1])
                best_line = array.get(tmp_arr, min_ind)
                line_fc_up := line.new(line.get_x1(best_line), line.get_y1(best_line), line.get_x2(best_line), line.get_y2(best_line), color=RLN, width=lwidth_chan, extend=extendL, style=f_getLineStyle(ppstyleSRL_input))

            for i = 0 to array.size(tmp_arr) - 1
                if array.size(tmp_arr) > 0
                    line.delete(array.shift(tmp_arr))

            for l in labels
                if label.get_x(l) == line.get_x1(line_fc_up) or label.get_x(l) == line.get_x2(line_fc_up)
                    label.se

Показано первые 50% кода (символов: 19434)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 943,40₽ ≈ $23.75