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

Liquidity Trendline With Signals [StratifyTrade]

trading view script rsi by secret solution_6266878028173809325.pine

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

indicator harmonic lab for tradingview.pineTradingView · 2 общих теговsmc+ict+indicators+scalping master.pineTradingView · 2 общих теговliquidity trendline with signals(1).pineTradingView · 2 общих теговsmc & ict & indicators + scalping master(1)_5976621784668052077.pineTradingView · 2 общих теговares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Основной индикатор «Liquidity Trendline With Signals [StratifyTrade]» строит линии ликвидности на основе пивотов высоких и низких цен (ta.pivothigh / ta.pivotlow), обновляет их по склону и определяет пробои при пересечении ценой этих линий. Отображает графические маркеры пробоев вверх и вниз, а также заливки между парами линий. В файле также присутствуют дополнительные модули анализа: зоны перекупленности/перепроданности на основе RSI и ADX с линиями уровней, осциллятор ядерной регрессии (Kernel Regression), динамические уровни Фибоначчи, панель направленной силы для символов, обнаружение паттернов гармонических форм и анализ пробоев по объёму. Модули активируются соответствующими логическими переключателями и используют пользовательские параметры для настройки периодов, цветов и отображения.

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

НастройкаОписание
len Период Lookback — Период Lookback для расчёта пивотов.
cup Цвет восходящих линий ликвидности — Цвет линий восходящей ликвидности.
cdn Цвет нисходящих линий ликвидности — Цвет линий нисходящей ликвидности.
space Расстояние отступа — Расстояние отступа (Padding) для линий ликвидности.
shs Показать пробои — Отображает маркеры пробоев (Breakouts) на графике.
showBSP Показать Book Short Profit — Отображает маркеры Book Short Profit (подсчёт последовательных баров).
showNWB Показать Nadaraya-Watson Envelope — Включает отображение осциллятора Nadaraya-Watson Envelope.
length Размер окна осциллятора — Размер окна для расчёта осциллятора Nadaraya-Watson Envelope.
nwh Ширина полосы осциллятора — Ширина полосы (bandwidth) для расчёта Nadaraya-Watson Envelope.
nwmult Множитель стандартного отклонения — Множитель для расчёта стандартного отклонения в Nadaraya-Watson Envelope.
src Источник данных — Источник данных для расчёта Nadaraya-Watson Envelope.
up_col Цвет восходящей линии — Цвет восходящей линии осциллятора Nadaraya-Watson.
dn_col Цвет нисходящей линии — Цвет нисходящей линии.
PrimaryTrendline Основная трендовая линия — Включает отображение основной трендовой линии на основе пивотов.
SecondaryTrendline Вторичная трендовая линия — Включает отображение второй трендовой линии на основе пивотов.
htfpivotLength Длина пивотов основной трендовой линии — Длина пивотов для основной трендовой линии.
ltfpivotLength Длина пивотов второй трендовой линии — Длина пивотов для второй трендовой линии.
htfonlyLastLine Показать только последнюю линию основной трендовой линии — Отображать только последнюю линию основной трендовой линии.
ltfonlyLastLine Показать только последнюю линию второй трендовой линии — Отображать только последнюю линию второй трендовой линии.
rsi_osc Включить отображение осциллятора RSI — Включает отображение осциллятора RSI с зонами поддержки и сопротивления на графике.
RSIi_source Источник RSI — Источник данных для расчёта RSI (цена закрытия или OBV).
RSIi_length Длина RSI — Длина расчёта RSI (количество баров).
oscPlacement Расположение осциллятора RSI — Расположение осциллятора RSI (сверху или снизу).
lookbackLength Длина отображения осциллятора RSI — Длина отображения осциллятора RSI на графике.
ADX_osc Включить отображение осциллятора ADX — Включает отображение осциллятора ADX с зонами поддержки и сопротивления на графике.
ADXi_source Источник ADX — Источник данных для расчёта ADX (например, цена закрытия или OBV).
ADXi_length Длина ADX — Длина расчёта ADX (количество баров).
adxSmoothing Сглаживание ADX — Сглаживание значения ADX (количество баров).
ADXoscPlacement Расположение осциллятора ADX — Расположение осциллятора ADX (сверху или снизу).
ADXlookbackLength Длина отображения осциллятора ADX — Количество баров для отображения осциллятора ADX на графике.
ROpoints Отображать осциллятор ядерной регрессии — Включает отображение осциллятора ядерной регрессии (Kernel Regression Oscillator).
source Источник данных осциллятора — Источник данных для осциллятора ядерной регрессии.
bandwidth Ширина полосы ядерной регрессии — Ширина полосы для расчёта осциллятора ядерной регрессии.
bbwidth Ширина сглаживания сигнала — Параметр сглаживания сигнала осциллятора.
sdLook Период стандартного отклонения — Период расчёта скользящей средней для стандартного отклонения осциллятора.
sdMult Множитель стандартного отклонения для границ — Множитель стандартного отклонения для границ перекупленности/перепроданности осциллятора.
ColMode Выбор цветовой палитры — Выбор цветовой палитры для осциллятора (Classic, Modern, Robust, Accented, Monochrome).
man Пользовательская цветовая палитра — Включает пользовательскую цветовую палитру для осциллятора.
manUpC Пользовательский цвет восходящего движения — Пользовательский цвет восходящего движения осциллятора.
manDnC Пользовательский цвет нисходящего движения — Пользовательский цвет нисходящего движения осциллятора.
bbsig Показать трендовые сигналы — Включает отображение трендовых сигналов осциллятора.
BCol Включить цветовую индикацию баров — Включает цветовую индикацию баров на графике.
devS Включить заливку полос отклонения — Включает заливку полос отклонения.
OBOS Включить заливку зон перекупленности/перепроданности — Включает заливку зон перекупленности/перепроданности.
showCB Показать коробку консолидации — Включает отображение коробки консолидации (Consolidation Box).
showDSP Показать панель направленной силы — Включает отображение панели направленной силы (Directional Strength Panel).
showFIBLevels Показать уровни Фибоначчи — Включает отображение динамических уровней Фибоначчи.
input_lookback Диапазон поиска пивотов — Количество баров для поиска пивотов в динамических уровнях Фибоначчи.
input_extend Направление продления линий — Направление продления линий Фибоначчи (None, Right, Left, Both).
input_width Толщина линий уровней — Толщина линий уровней Фибоначчи.
input_labels Отображать подписи уровней — Отображать подписи уровней Фибоначчи.
input_offset Смещение подписей уровней — Смещение подписей уровней Фибоначчи вправо.
input_prices Отображать цены уровней — Отображать цены уровней Фибоначчи рядом с подписями.
input_bullColor Цвет бычьего тренда — Цвет бычьего тренда для уровней Фибоначчи.
input_bearColor Цвет медвежьего тренда — Цвет медвежьего тренда для уровней Фибоначчи.
input_trendline Отображать трендовую линию — Отображать трендовую линию между пивотами Фибоначчи.
input_use236 Уровень Фибоначчи 0.236 — Включает отображение уровня Фибоначчи 0.236.
input_236 Коэффициент Фибоначчи 0.236 — Значение коэффициента Фибоначчи 0.236.
input_use382 Уровень Фибоначчи 0.382 — Включает отображение уровня Фибоначчи 0.382.
input_382 Коэффициент Фибоначчи 0.382 — Значение коэффициента Фибоначчи 0.382.
input_use5 Уровень Фибоначчи 0.5 — Включает отображение уровня Фибоначчи 0.5.
input_5 Коэффициент Фибоначчи 0.5 — Значение коэффициента Фибоначчи 0.5.
input_use618 Уровень Фибоначчи 0.618 — Включает отображение уровня Фибоначчи 0.618.
input_618 Коэффициент Фибоначчи 0.618 — Значение коэффициента Фибоначчи 0.618.
input_use786 Уровень Фибоначчи 0.786 — Включает отображение уровня Фибоначчи 0.786.
input_786 Коэффициент Фибоначчи 0.786 — Значение коэффициента Фибоначчи 0.786.
smaLength Период SMA — Период простой скользящей средней (SMA).
emaLength Период EMA — Период экспоненциальной скользящей средней (EMA).
slMultiplier Множитель ATR для стоп-лосса — Множитель ATR для расчёта уровня стоп-лосса.
tpMultiplier Множитель ATR для тейк-профита — Множитель ATR для расчёта уровня тейк-профита.
slColor Цвет линии стоп-лосса — Цвет линии стоп-лосса.
tpColor Цвет линии тейк-профита — Цвет линии тейк-профита.
entryColor Цвет линии входа — Цвет линии входа в позицию.
step Количество шагов — Количество шагов для построения паттернов.
left Начальное значение L — Начальное значение параметра L (количество баров слева для пивотов).
lPlus Инкремент L — Инкремент увеличения параметра L для каждого следующего паттерна.
perc R = % от L — Процент от L для расчёта R (расстояние правого пивота).
minAC Минимальное соотношение AB к C — Минимальное соотношение AB к C для бычьего паттерна.
maxAC Максимальное соотношение AB к C — Максимальное соотношение AB к C для медвежьего паттерна.
minBD Минимальное соотношение BC к D — Минимальное соотношение BC к D для бычьего паттерна.
maxBD Максимальное соотношение BC к D — Максимальное соотношение BC к D для медвежьего паттерна.
bull Шаг бычьих паттернов — Шаг обнаружения бычьих гармонических паттернов.
bear Шаг медвежьих паттернов — Шаг обнаружения медвежьих гармонических паттернов.
c_labelBull Цвет метки бычьего паттерна — Цвет метки бычьего паттерна.
c_lbTxtBull Цвет текста метки бычьего паттерна — Цвет текста метки бычьего паттерна.
c_linesBull Цвет линий бычьего паттерна — Цвет линий бычьего паттерна.
c_labelBear Цвет метки медвежьего паттерна — Цвет метки медвежьего паттерна.
c_lbTxtBear Цвет текста метки медвежьего паттерна — Цвет текста метки медвежьего паттерна.
c_linesBear Цвет линий медвежьего паттерна — Цвет линий медвежьего паттерна.
lookback Количество баров для проверки объёма — Количество баров для проверки максимального объёмного бара.
htf_tf Таймфрейм HTF — Внешний таймфрейм (HTF) для отображения свечей и тренда.
up_color Цвет восходящего тренда HTF — Цвет восходящего тренда на таймфрейме HTF.
down_color Цвет нисходящего тренда HTF — Цвет нисходящего тренда на таймфрейме HTF.
show_ma Показать скользящие средние — Отображает скользящие средние (короткую и длинную) на графике HTF.
enable_smoothing Включить сглаживание скользящей средней — Включает сглаживание скользящей средней (использование WMA от SMA).
Получить полный код

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

indicator("Liquidity Trendline With Signals [StratifyTrade]" ,"StratifyTrade" , overlay = true , max_lines_count = 500 )

len     = input.int    (5                , "Period  "            ,          tooltip = "Lookback period",    inline = "a", group = "SETTINGS")
cup      = input.color(#0044ff, ""                            , "" ,                                                            inline = "a", group = "SETTINGS")
cdn      = input.color(#ff2b00, ""                            , "" ,                                                            inline = "a", group = "SETTINGS")
space = input.float(2                , "Padding"              ,          tooltip = "Padding distance", inline = "b", group = "SETTINGS", step = 0.1)
shs      = input.bool (true          , "Show Breakouts",                                                                      inline = "z", group = "SETTINGS")

ph = ta.pivothigh(high, len, len)
pl = ta.pivotlow (low , len, len)

type store
    float src
    int      n

type bar
    float o = open
    float h = high
    float l = low
    float c = close
    int      n = bar_index
    float v = volume

type draw
    line[] upln
    line[] dnln

var store[] upbin = array.new<store>()
var store[] dnbin = array.new<store>()

var draw d = draw.new(array.new<line>(), array.new<line>())

bar b = bar.new()
atr      = ta.atr(200)

method slope(line ln) =>
    x = ln.get_x2() - ln.get_x1()
    y = ln.get_y2() - ln.get_y1()
    y / x

vol() =>
    math.min(atr * 0.1, close * (0.1/100))

var bool broken    = false
color        active    = na
bool plup = false
bool pldn = false

if ph 
    bool      remove = false
    var bool valid = false

    upbin.unshift(store.new(b.h[len], b.n[len]))
    if upbin.size() > 1
        current = upbin.get(0)
        before    = upbin.get(1)
        if current.src < before.src
            if broken
                valid := true

            else
                valid := false
                if upbin.size() > 3
                    pastold = upbin.get(3)
                    pastcur = upbin.get(2)
                    now          = upbin.get(1)
                    late        = upbin.get(0)
                    if now.src < pastcur.src and now.src < pastold.src and late.src < pastcur.src and late.src < pastold.src
                        valid := true

                    else
                        valid := false

                else 
                    valid := false

                    if valid

                        d.upln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src                                , y2 = current.src                                , color = cdn))
                        d.upln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src - vol() * space, y2 = current.src - vol() * space, color = cdn))

                        ln = d.upln.get(1)
                        for i = 0 to (b.n - before.n)
                            slope = ln.slope()
                            ln.set_x2(b.n[i])
                            ln.set_y2(ln.get_y2() - slope)
                            if low[i] > ln.get_y2()
                                remove := true
                                break

                            if remove
                                d.upln.get(0).delete()
                                d.upln.get(1).delete()
                                d.upln              .clear()
                                upbin                .clear()
                                broken := true

                            else
                                d.upln.get(0).delete()
                                d.upln.get(1).delete()      
                                d.upln              .clear ()

                                d.upln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src                                , y2 = current.src                                , color = cdn))
                                d.upln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src - vol() * space, y2 = current.src - vol() * space, color = cdn))

                                linefill.new(d.upln.get(0), d.upln.get(1), color = color.new(cdn, 40))
                                upbin.clear()
                                broken := false

if d.upln.size() > 1

    btm = d.upln.get(0)
    top = d.upln.get(1)

    if b.l > top.get_y2()
        d.upln.clear()
        broken := true
        upbin.clear()
        plup      := true

    if d.upln.size() > 1

        slup = top.slope()
        sldn = btm.slope()

        top.set_x2(b.n)
        top.set_y2(top.get_y2() + slup)

        btm.set_x2(b.n)
        btm.set_y2(btm.get_y2() + sldn)

if pl
    bool        remove = false
    var bool valid = false

    dnbin.unshift(store.new(b.l[len], b.n[len]))
    if dnbin.size() > 1
        current = dnbin.get(0)
        before    = dnbin.get(1)
        if current.src > before.src
            if broken
                valid := true

            else
                valid := false
                if dnbin.size() > 3
                    pastold = dnbin.get(3)
                    pastcur = dnbin.get(2)
                    now          = dnbin.get(1)
                    late        = dnbin.get(0)

                    if now.src > pastcur.src and now.src > pastold.src and late.src > pastcur.src and late.src > pastold.src
                        valid := true

                    else
                        valid := false

                else 
                    valid := false

            if valid
                d.dnln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src                                , y2 = current.src                                , color = cup))
                d.dnln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src + vol() * space, y2 = current.src + vol() * space, color = cup))

                ln = d.dnln.get(1)

                for i = 0 to (b.n - before.n)
                    slope = ln.slope()
                    ln.set_x2(b.n[i])
                    ln.set_y2(ln.get_y2() - slope)
                    if high[i] < ln.get_y2()
                        remove := true
                        break

                if remove
                    d.dnln.get(0).delete()
                    d.dnln.get(1).delete()
                    d.dnln              .clear ()
                    dnbin                .clear ()
                    broken := true

                else
                    d.dnln.get(0).delete()
                    d.dnln.get(1).delete()      
                    d.dnln              .clear ()

                    d.dnln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src, y2 = current.src, color = cup))
                    d.dnln.unshift(line.new(x1 = before.n, x2 = current.n, y1 = before.src + vol() * space, y2 = current.src + vol() * space, color = cup))

                    linefill.new(d.dnln.get(0), d.dnln.get(1), color = color.new(cup, 40))
                    dnbin.clear()
                    broken := false

if d.dnln.size() > 1

    btm = d.dnln.get(0)
    top = d.dnln.get(1)

    if b.h < btm.get_y2()
        d.dnln.clear()
        broken := true
        dnbin.clear()
        pldn      := true

    if d.dnln.size() > 1

        slup = top.slope()
        sldn = btm.slope()

        top.set_x2(b.n)
        top.set_y2(top.get_y2() + slup)

        btm.set_x2(b.n)
        btm.set_y2(btm.get_y2() + sldn)

plotshape(pldn and shs ? b.h[1] : na, "Breaking Down", shape.triangledown, location = location.abovebar, color = cdn    , offset = -1, size = size.small)
plotshape(plup and shs ? b.l[1] : na, "Breaking Up"    , shape.triangleup    , location = location.belowbar, color = cup, offset = -1, size = size.small)

startyear = 2020    //input(defval = 2020, title = "Start Year")
startmonth = 1    //input(defval = 1, title = "Start Month")
startday = 1    //input(defval = 1, title = "Start day")
starttime = timestamp(startyear, startmonth, startday, 0, 0, 0)

f_tfInMinutes() => 
    _tfInMinutes = (
     timeframe.period == '1' ? '3' :
     timeframe.period == '3' ? '5' :
     timeframe.period == '5' ? '15' :
     timeframe.period == '15' ? '30' :
     timeframe.period == '30' ? '60' :
     timeframe.period == '60' ? '240' : 'D')
my_time = f_tfInMinutes()

autoHTF(str) => str == '1S' ? '1' : 
 str == '1' ? '5' : 
 str == '2' ? '5' : 
 str == '3' ? '15' : 
 str == '5' ? '15' : 
 str == '10' ? '15' : 
 str == '15' ? '60' : 
 str == '30' ? '60' : 
 str == '45' ? '120' : 
 str == '60' ? '120' : 
 str == '120' ? '240' : 
 str == '180' ? '240' : 
 str == '240' ? 'D' : 
 str == 'D' ? 'W' :
 '5W'

gethtf(res, src) =>
    gethtfvalue = 0.0
    gethtfvalue := request.security(syminfo.tickerid, res, src, gaps=barmerge.gaps_off,lookahead=barmerge.lookahead_on)

period = my_time //input.timeframe(title='Primary TL Period', defval='15', group = GROUP_PIVOT)
period1 = '' //input.timeframe(title='Secondary TL Period', defval='5', group = GROUP_PIVOT)

var dest = 0
var dest_value = 0.0
var origin = 0
var org_value = 0.0
var count = 0

var dest2 = 0
var dest2_value = 0.0
var origin2 = 0
var org2_value = 0.0
var count2 = 0

Multicalc(customperiod) =>
    m = 1
    s = 1

    if customperiod == '1D' or customperiod == 'D'
        m := 24
        m
    if customperiod == '1W' or customperiod == 'W'
        m := 24 * 7
        m
    if customperiod == '1M' or customperiod == 'M'
        if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12
            m := 24 * 7 * 31
            m
            if month == 2
                m := 24 * 7 * 28
                m
            else
                m := 24 * 7 * 30
                m
        else
            if customperiod == '1'
                s := 1
                m := s / 60
                m
            if customperiod == '3'
                s := 3
                m := s / 60
                m
            if customperiod == '5'
                s := 5
                m := s / 60
                m
            if customperiod == '15'
                s := 15
                m := s / 60
                m
            if customperiod == '30'
                s := 30
                m := s / 60
                m
            if customperiod == '60' or customperiod == ''
                s := 60
                m := s / 60
                m
            if customperiod == '120'
                s := 120
                m := s / 60
                m
            if customperiod == '180'
                s := 180
                m := s / 60
                m
            if customperiod == '240'
                s := 240
                m := s / 60
                m
    m

n = 2
x = 0, x1 = 0

if period == ''
    x := Multicalc(timeframe.period)
    x
else
    x := Multicalc(period)
    x
z = Multicalc(timeframe.period)

if period1 == ''
    x1 := Multicalc(timeframe.period)
    x1
else
    x1 := Multicalc(period1)
    x1
z1 = Multicalc(timeframe.period)

x := math.floor(x / z)
x1 := math.floor(x1 / z1)

i_dateFilter = false //input(false, '═════ Date Range Filtering ═════')
i_fromYear = 2020 //input.int(2020, 'From Year', minval=1900)
i_fromMonth = 1 //input.int(1, 'From Month', minval=1, maxval=12)
i_fromDay = 1 //input.int(1, 'From Day', minval=1, maxval=31)
i_toYear = 2999 //input.int(2999, 'To Year', minval=1900)
i_toMonth = 1 //input.int(1, 'To Month', minval=1, maxval=12)
i_toDay = 1 //input.int(1, 'To Day', minval=1, maxval=31)

fromDate = timestamp(i_fromYear, i_fromMonth, i_fromDay, 00, 00)
toDate = timestamp(i_toYear, i_toMonth, i_toDay, 23, 59)

f_tradeDateIsAllowed() =>
    not i_dateFilter or time >= fromDate and time <= toDate

showBSP = input(false, title="Book Short Profit", group = "Book Short Profit")
TD = 0
TD := close > close[4] ? nz(TD[1])+1 : 0
TDUp = TD - ta.valuewhen(TD < TD[1], TD, 1 )
plotshape(showBSP ? TDUp==7?true:na : na,style=shape.triangledown, color=color.red, text="7",textcolor=color.red, location=location.abovebar)
plotshape(showBSP ? TDUp==8?true:na : na,style=shape.triangledown, color=color.red, text="8",textcolor=color.red, location=location.abovebar)
plotshape(showBSP ? TDUp==9?true:na : na,style=shape.triangledown, color=color.red, text="❌",textcolor=color.red, location=location.abovebar)
TS = 0
TS := close < close[4] ? nz(TS[1])+1 : 0
TDDn = TS - ta.valuewhen(TS < TS[1], TS, 1 )
plotshape(showBSP ? TDDn==7?true:na : na,style=shape.triangleup, color=color.green, text="7",textcolor=color.green, location=location.belowbar)
plotshape(showBSP ? TDDn==8?true:na : na,style=shape.triangleup, color=color.green, text="8",textcolor=color.green, location=location.belowbar)
plotshape(showBSP ? TDDn==9?true:na : na,style=shape.triangleup, color=color.green,text="✅",textcolor=color.green, location=location.belowbar)

showNWB = input(false, title="Nadaraya-Watson Envelope", group = "Nadaraya-Watson Envelope")

length = input.float(500,'Window Size',maxval=500,minval=0)
nwh            = input.float(45.,'Bandwidth')
nwmult      = input.float(3.) 
src        = input.source(hl2,'Source')

up_col = input.color(#39ff14,'Colors',inline='col')
dn_col = input.color(#ff1100,'',inline='col')

nwn = bar_index
var k = 2
var nwupper = array.new_line(0) 
var nwlower = array.new_line(0) 

lset(l,x1,y1,x2,y2,col)=>
    line.set_xy1(l,x1,y1)
    line.set_xy2(l,x2,y2)
    line.set_color(l,col)
    line.set_width(l,2)

if barstate.isfirst
    for i = 0 to length/k-1
        array.push(nwupper,line.new(na,na,na,na))
        array.push(nwlower,line.new(na,na,na,na))

line nwup = na
line nwdn = na

cross_up = 0.
cross_dn = 0.
if barstate.islast and showNWB
    y = array.new_float(0)

    sum_e = 0.
    for i = 0 to length-1
        sum = 0.
        sumw = 0.

        for j = 0 to length-1
            w = math.exp(-(math.pow(i-j,2)/(nwh*nwh*2)))
            sum += src[j]*w
            sumw += w

        y2 = sum/sumw
        sum_e += math.abs(src[i] - y2)
        array.push(y,y2)

    mae = sum_e/length*nwmult

    for i = 1 to length-1
        y2 = array.get(y,i)
        y1 = array.get(y,i-1)

        nwup := array.get(nwupper,i/k)
        nwdn := array.get(nwlower,i/k)

        lset(nwup,nwn-i+1,y1 + mae,nwn-i,y2 + mae,up_col)
        lset(nwdn,nwn-i+1,y1 - mae,nwn-i,y2 - mae,dn_col)

        if src[i] > y1 + mae and src[i+1] < y1 + mae
            label.new(nwn-i,src[i],'▼',color=#00000000,style=label.style_label_down,textcolor=dn_col,textalign=text.align_center)
        if src[i] < y1 - mae and src[i+1] > y1 - mae
            label.new(nwn-i,src[i],'▲',color=#00000000,style=label.style_label_up,textcolor=up_col,textalign=text.align_center)

    cross_up := array.get(y,0) + mae
    cross_dn := array.get(y,0) - mae

var string GROUP_PIVOT            = "████ Pivot Trendline ████"

PrimaryTrendline                        = input.bool (false, "Primary TrendLine", group = GROUP_PIVOT)
SecondaryTrendline                    = input.bool (false, "Secondary TrendLine", group = GROUP_PIVOT)

htfpivotLength = input(21, group = GROUP_PIVOT)
ltfpivotLength = input(21, group = GROUP_PIVOT)

htfleftBars = htfpivotLength * x
htfrightBars = htfpivotLength * x

ltfleftBars = ltfpivotLength //* x1
ltfrightBars = ltfpivotLength //* x1

htfonlyLastLine = input(false, "Show Primary Last TrendLine")
ltfonlyLastLine = input(false, "Show Secondary Last TrendLine")

htfswh = ta.pivothigh(htfleftBars, htfrightBars)
htfswh_cond = not na(htfswh)
htfhprice = 0.0
htfhprice := htfswh_cond ? htfswh : htfhprice[1]
htfhindex = 0
htfhindex := htfswh_cond ? bar_index - htfrightBars : htfhindex[1]

htfswl = ta.pivotlow(htfleftBars, htfrightBars)
htfswl_cond = not na(htfswl)
htflprice = 0.0
htflprice := htfswl_cond ? htfswl : htflprice[1]
htflindex = 0
htflindex := htfswl_cond ? bar_index - htfrightBars : htflindex[1]

ltfswh = ta.pivothigh(ltfleftBars, ltfrightBars)[2]
ltfswh_cond = not na(ltfswh)
ltfhprice = 0.0
ltfhprice := ltfswh_cond ? ltfswh : ltfhprice[1]
ltfhindex = 0
ltfhindex := ltfswh_cond ? bar_index - ltfrightBars : ltfhindex[1]

ltfswl = ta.pivotlow(ltfleftBars, ltfrightBars)[2]
ltfswl_cond = not na(ltfswl)
ltflprice = 0.0
ltflprice := ltfswl_cond ? ltfswl : ltflprice[1]
ltflindex = 0
ltflindex := ltfswl_cond ? bar_index - ltfrightBars : ltflindex[1]

var htflineHigh = PrimaryTrendline ? line.new(0,0,0,0, xloc.bar_time, extend=extend.right) : na
var ltflineHigh = SecondaryTrendline ? line.new(0,0,0,0, xloc.bar_time, extend=extend.right) : na

if htfhindex != htfhindex[1] and PrimaryTrendline
    if not htfonlyLastLine
        line.delete(htflineHigh)
    line.set_color(htflineHigh, color.new(color.red, 50))
    line.set_extend(htflineHigh, extend.none)
    htflineHigh := line.new(htfhindex[1], htfhprice[1], htfhindex, htfhprice, extend=extend.right, color=color.new(color.red,25), width=4)

if ltfhindex != ltfhindex[1] and SecondaryTrendline
    if not ltfonlyLastLine
        line.delete(ltflineHigh)
    line.set_color(ltflineHigh, color.new(color.red, 50))
    line.set_extend(ltflineHigh, extend.none)
    ltflineHigh := line.new(ltfhindex[1], ltfhprice[1], ltfhindex, ltfhprice, extend=extend.right, color=color.new(color.white,25), width=2)

var htflineLow = PrimaryTrendline ? line.new(0,0,0,0, xloc.bar_time, extend=extend.right) : na
var ltflineLow = SecondaryTrendline ? line.new(0,0,0,0, xloc.bar_time, extend=extend.right) : na

if htflindex != htflindex[1] and PrimaryTrendline
    if not htfonlyLastLine
        line.delete(htflineLow)
    line.set_color(htflineLow, color.new(color.green, 50))
    line.set_extend(htflineLow, extend.none)
    htflineLow := line.new(htflindex[1], htflprice[1], htflindex, htflprice, extend=extend.right,color=color.new(color.green,25), width=4)

if ltflindex != ltflindex[1] and SecondaryTrendline
    if not ltfonlyLastLine
        line.delete(ltflineLow)
    line.set_color(ltflineLow, color.new(color.green, 50))
    line.set_extend(ltflineLow, extend.none)
    ltflineLow := line.new(ltflindex[1], ltflprice[1], ltflindex, ltflprice, extend=extend.right,color=color.new(color.white,25), width=2)

f_getPrice(_osc, _thresh, _cross) =>
    avgHigh = math.avg(high, close)
    avgLow    = math.avg(low , close)

    var return_1 = 0.

    if _cross == 'over' or _cross == 'both'
        if ta.crossover(_osc, _thresh)
            return_1 := avgHigh
            return_1
    if _cross == 'under' or _cross == 'both'
        if ta.crossunder(_osc, _thresh)
            return_1 := avgLow
            return_1
    return_1

normalize(_src, _min, _max) =>

    var _historicMin =    10e10
    var _historicMax = -10e10
    _historicMin := math.min(nz(_src, _historicMin), _historicMin)
    _historicMax := math.max(nz(_src, _historicMax), _historicMax)
    _min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10)

group_rsi_osc      = '████ RSI Oscillator Overlay Display Settings ████'
rsi_osc                  = input.bool(false, 'Enable RSI Overlay Display'                                                              , group = group_rsi_osc)

RSIi_source            = input.string('Price (close)', 'Source', options=['Price (close)', 'On Balance Volume (OBV)'], inline='RSI', group='RSI Settings')
RSIi_length            = input.int(14, '  Length'    , minval=1                          , inline='RSI'        , group='RSI Settings')
RSIi_obThreshold = 70 //input.int(70, 'Overbought', minval=50, maxval=100, inline='Thresh1', group='Threshold Settings')
RSIi_bullZone        = 60 //input.int(60, 'Bull Zone' , minval=50, maxval=65 , inline='Thresh1', group='Threshold Settings')
RSIi_bearZone        = 40 //input.int(40, 'Bear Zone' , minval=35, maxval=50 , inline='Thresh2', group='Threshold Settings')
RSIi_osThreshold = 30 // input.int(30, ' Oversold' , minval=1 , maxval=50 , inline='Thresh2', group='Threshold Settings')

oscillator = ta.rsi(RSIi_source == 'Price (close)' ? close : ta.obv, RSIi_length)

crossover_overbought    = f_getPrice(oscillator, RSIi_obThreshold, 'over' )
crossunder_overbought = f_getPrice(oscillator, RSIi_obThreshold, 'under')
bullZone                            = f_getPrice(oscillator, RSIi_bullZone      , 'both' )
bearZone                            = f_getPrice(oscillator, RSIi_bearZone      , 'both' )
crossover_oversold        = f_getPrice(oscillator, RSIi_osThreshold, 'over' )
crossunder_oversold      = f_getPrice(oscillator, RSIi_osThreshold, 'under')

oscPlacement        = input.string('Bottom', 'Placment', options = ['Top', 'Bottom'], inline='VOL'      , group = group_rsi_osc)
oscHight                = 11 - input.int(10, ' Hight' , minval = 3, maxval = 10                , inline='VOL'    , group = group_rsi_osc)
lookbackLength    = input.int(90, 'Overlay Indicator Display Length', minval = 10, maxval = 495, group = group_rsi_osc) // max lines allowed is 500, where 5 of them to be used for zone definitions 

var a_lines          = array.new_line()
var a_fill            = array.new_linefill()

priceHighest        = ta.highest(high, lookbackLength)
priceLowest          = ta.lowest (low , lookbackLength)

if barstate.islast and rsi_osc and time >= starttime
    if array.size(a_lines) > 0
        for i = 1 to array.size(a_lines)
            line.delete(array.shift(a_lines))

    if array.size(a_fill) > 0
        for i = 1 to array.size(a_fill)
            linefill.delete(array.shift(a_fill))

    priceChangeRate = (priceHighest - priceLowest) / priceHighest / oscHight / 100

    obLevel      = (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? RSIi_obThreshold : -1 * (100 - RSIi_obThreshold))    * priceChangeRate)
    bullLevel = (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? RSIi_bullZone        : -1 * (100 - RSIi_bullZone))          * priceChangeRate)
    midLevel    = (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? 50                              : -1 * (100 - 50))                                * priceChangeRate)
    bearLevel = (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? RSIi_bearZone        : -1 * (100 - RSIi_bearZone))          * priceChangeRate)
    osLevel      = (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? RSIi_osThreshold : -1 * (100 - RSIi_osThreshold))    * priceChangeRate)

    array.push(a_lines, line.new(bar_index[lookbackLength], obLevel    , bar_index, obLevel    , xloc.bar_index, extend.none, color.green, line.style_dotted, 2))
    array.push(a_lines, line.new(bar_index[lookbackLength], bullLevel, bar_index, bullLevel, xloc.bar_index, extend.none, color.green, line.style_dotted, 1))
    array.push(a_fill, linefill.new(array.get(a_lines, 0), array.get(a_lines, 1), color.new(color.green, 90)))

    array.push(a_lines, line.new(bar_index[lookbackLength], bearLevel, bar_index, bearLevel, xloc.bar_index, extend.none, color.red    , line.style_dotted, 1))
    array.push(a_lines, line.new(bar_index[lookbackLength], osLevel    , bar_index, osLevel    , xloc.bar_index, extend.none, color.red    , line.style_dotted, 2))
    array.push(a_fill, linefill.new(array.get(a_lines, 2), array.get(a_lines, 3), color.new(color.red, 90)))

    array.push(a_lines, line.new(bar_index[lookbackLength], midLevel , bar_index, midLevel , xloc.bar_index, extend.none, color.gray , line.style_dotted, 1))

    for barIndex = 0 to lookbackLength - 1
        array.push(a_lines, line.new(bar_index[barIndex]        , (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? oscillator[barIndex]          : -1 * (100 - oscillator[barIndex]        ) ) * priceChangeRate ), 
         bar_index[barIndex + 1], (oscPlacement == 'Top' ? priceHighest : priceLowest) * (1 + (oscPlacement == 'Top' ? oscillator[barIndex + 1] : -1 * (100 - oscillator[barIndex + 1]) ) * priceChangeRate ), xloc.bar_index, extend.none, #7e57c2, line.style_solid, 2))

group_ADX_osc      = '████ ADX Oscillator Overlay Display Settings ████'
ADX_osc                  = input.bool(false, 'Enable ADX Overlay Display'                                                              , group = group_ADX_osc)

ADXi_source            = input.string('Price (close)', 'Source', options=['Price (close)', 'On Balance Volume (OBV)'], inline='ADX', group='ADX Settings')
ADXi_length            = input.int(14, '  Length'    , minval=1                          , inline='ADX'        , group='ADX Settings')
adxSmoothing          = input.int(14, title="ADX Smoothing", minval=1, maxval=50                      , group='ADX Settings')
ADXi_obThreshold = 70 //input.int(70, 'Overbought', minval=50, maxval=100, inline='Thresh1', group='Threshold Settings')
ADXi_bullZone        = 60 //input.int(60, 'Bull Zone' , minval=50, maxval=65 , inline='Thresh1', group='Threshold Settings')
ADXi_bearZone        = 40 //input.int(40, 'Bear Zone' , minval=35, maxval=50 , inline='Thresh2', group='Threshold Settings')
ADXi_osThreshold = 30 //input.int(30, ' Oversold' , minval=1 , maxval=50 , inline='Thresh2', group='Threshold Settings')

[diplus, diminus, adxValue] = ta.dmi(ADXi_length, adxSmoothing)

dmiBull = diplus >= diminus and adxValue >= 40
dmiBear = diplus < diminus and adxValue >= 40
dmiWeak = adxValue < 40 and adxValue > 20

dxValue = normalize(adxValue, 0, 100)
oladxValue = adxValue * 1.7

ADXcrossover_overbought    = f_getPrice(oladxValue, ADXi_obThreshold, 'over' )
ADXcrossunder_overbought = f_getPrice(oladxValue, ADXi_obThreshold, 'under')
ADXbullZone                            = f_getPrice(oladxValue, ADXi_bullZone      , 'both' )
ADXbearZone                            = f_getPrice(oladxValue, ADXi_bearZone      , 'both' )
ADXcrossover_oversold        = f_getPrice(oladxValue, ADXi_osThreshold, 'over' )
ADXcrossunder_oversold      = f_getPrice(oladxValue, ADXi_osThreshold, 'under')

ADXoscPlacement        = input.string('Top', 'Placment', options = ['Top', 'Bottom'], inline='VOL'      , group = group_ADX_osc)
ADXoscHight                = 11 - input.int(10, ' Hight' , minval = 3, maxval = 10                , inline='VOL'    , group = group_ADX_osc)
ADXlookbackLength    = input.int(90, 'Overlay Indicator Display Length', minval = 10, maxval = 495, group = group_ADX_osc) // max lines allowed is 500, where 5 of them to be used for zone definitions 

var ADXa_lines          = array.new_line()
var ADXa_fill            = array.new_linefill()

ADXpriceHighest        = ta.highest(high, ADXlookbackLength)
ADXpriceLowest          = ta.lowest (low , ADXlookbackLength)

if barstate.islast and ADX_osc and time >= starttime
    if array.size(ADXa_lines) > 0
        for i = 1 to array.size(ADXa_lines)
            line.delete(array.shift(ADXa_lines))

    if array.size(ADXa_fill) > 0
        for i = 1 to array.size(ADXa_fill)
            linefill.delete(array.shift(ADXa_fill))

    ADXpriceChangeRate = (ADXpriceHighest - ADXpriceLowest) / ADXpriceHighest / ADXoscHight / 100

    ADXobLevel      = (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? ADXi_obThreshold : -1 * (100 - ADXi_obThreshold))    * ADXpriceChangeRate)
    ADXbullLevel = (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? ADXi_bullZone        : -1 * (100 - ADXi_bullZone))          * ADXpriceChangeRate)
    ADXmidLevel    = (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? 50                        : -1 * (100 - 50))                                      * ADXpriceChangeRate)
    ADXbearLevel = (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? ADXi_bearZone        : -1 * (100 - ADXi_bearZone))          * ADXpriceChangeRate)
    ADXosLevel      = (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? ADXi_osThreshold : -1 * (100 - ADXi_osThreshold))    * ADXpriceChangeRate)

    array.push(ADXa_lines, line.new(bar_index[ADXlookbackLength], ADXobLevel    , bar_index, ADXobLevel    , xloc.bar_index, extend.none, color.green, line.style_dotted, 2))
    array.push(ADXa_lines, line.new(bar_index[ADXlookbackLength], ADXbullLevel, bar_index, ADXbullLevel, xloc.bar_index, extend.none, color.green, line.style_dotted, 1))
    array.push(ADXa_fill, linefill.new(array.get(ADXa_lines, 0), array.get(ADXa_lines, 1), color.new(color.green, 90)))

    array.push(ADXa_lines, line.new(bar_index[ADXlookbackLength], ADXbearLevel, bar_index, ADXbearLevel, xloc.bar_index, extend.none, color.red    , line.style_dotted, 1))
    array.push(ADXa_lines, line.new(bar_index[ADXlookbackLength], ADXosLevel    , bar_index, ADXosLevel    , xloc.bar_index, extend.none, color.red    , line.style_dotted, 2))
    array.push(ADXa_fill, linefill.new(array.get(ADXa_lines, 2), array.get(ADXa_lines, 3), color.new(color.red, 90)))

    array.push(ADXa_lines, line.new(bar_index[ADXlookbackLength], ADXmidLevel , bar_index, ADXmidLevel , xloc.bar_index, extend.none, color.gray , line.style_dotted, 1))

    for barIndex = 0 to ADXlookbackLength - 1
        array.push(ADXa_lines, line.new(bar_index[barIndex]        , (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? oladxValue[barIndex]          : -1 * (100 - oladxValue[barIndex]        ) ) * ADXpriceChangeRate ), 
         bar_index[barIndex + 1], (ADXoscPlacement == 'Top' ? ADXpriceHighest : ADXpriceLowest) * (1 + (ADXoscPlacement == 'Top' ? oladxValue[barIndex + 1] : -1 * (100 - oladxValue[barIndex + 1]) ) * ADXpriceChangeRate ), xloc.bar_index, extend.none, #7e57c2, line.style_solid, 2))

RO_group = "████ Kernel Regression Oscillator ████"
ROpoints = input.bool (true, "Kernel Regression Oscillator", group=RO_group, inline='Switch1')

var string KRS = "KRO OVERLAY - Settings", var string KRU = "KRO OVERLAY - UI"

source        = input.source(close,            "Source",                                                                                                                                                    group = KRS)
bandwidth = input.int      (45,                  "Bandwidth", 1,                                                                                                                                        group = KRS, tooltip = "Length of the Kernel Regression calculation")
bbwidth      = input.float (2,                    "Width", step = 0.2,                                                                                                                              group = KRS, tooltip = "Smoothes the Signal")
sdLook        = input.int      (200,                "Standard Deviation Lookback",                                                                                                          group = KRS, tooltip = "Length of the SD bands lookback period") 
sdMult        = input.float (3,                    "Standard Deviation Extreme for OB/OS Border", step = 0.5,                                                  group = KRS, tooltip = "Defines the outer border of the SD bands. \nThe inner border begins at 50% of the SD Multiplier")
ColMode      = input.string("Modern",      "Color Palette Choice", ["Classic", "Modern", "Robust", "Accented", "Monochrome"], group = KRU, inline    = "drop")
man              = input.bool    (true,              "Custom Palette",                                                                                                                                    group = KRU, inline    = "drop")
manUpC        = input.color (color.new(#00ff00,50),    "Custom Up",                                                                                                                  group = KRU, inline    = "man") 
manDnC        = input.color (color.new(#ff0000,50),    "Custom Down",                                                                                                              group = KRU, inline    = "man")

bbsig          = input.bool    (false,            "Show Trend Signals",                                                                                                                            group = KRU)
BCol            = input.bool    (true,              "Enable Bar Coloring",                                                                                                                          group = KRU)
devS            = input.bool    (true,              "Enable Deviation Band Shading",                                                                                                      group = KRU)
OBOS            = input.bool    (true,              "Enable Overbought/Oversold Shading",                                                                                            group = KRU)      

var color UpC = na
var color DnC = na 
var color BgC = na 

if ColMode == "Classic"          
    UpC := color.lime
    DnC := color.maroon 
    BgC := color.green
if ColMode == "Modern"          
    UpC := #5ffae0
    DnC := #c22ed0
    BgC := #9ef6fb
if ColMode == "Robust"          
    UpC := #ffbb00
    DnC := #770737
    BgC := #a23061    
if ColMode == "Accented"    
    UpC := #9618f7
    DnC := #ff0078
    BgC := #801155
if ColMode == "Monochrome"
    UpC := #dee2e6
    DnC := #495057
    BgC := #212529

[UpCol, DnCol] = switch man
    false => [UpC, DnC]
    true    => [manUpC, manDnC]

kernel(source, bandwidth, kernel_type) =>
    switch kernel_type
        "Epanechnikov" => math.abs(source) <= 1 ? 0.75 * (1 - math.pow(source, 2)) : 0.0
        "Logistic"          => 1/math.exp(source + 2 + math.exp(-source))
        "Wave"                  => math.abs(source) <= 0.5 ? (1 - math.abs(source)) * math.cos(math.pi * source) : 0.

kernelRegression(src, bandwidth, kernel_type) =>
    sumWeightedY = 0.
    sumKernels      = 0.
    for i = 0 to bandwidth - 1
        base                    = i*i/math.pow(bandwidth, 2)
        kernel                = kernel(base, 1, kernel_type)
        sumWeightedY += kernel * src[i]
        sumKernels      += kernel
    (src - sumWeightedY/sumKernels)/src

waveCalculation(source, bandwidth, bbwidth) =>
    sum    = 0.0
    sumw = 0.0
    for i = 0 to bandwidth
        val        = (i * i) / (bandwidth * bandwidth) / bbwidth
        weight = if val <= 0.5
            (1 - val) * math.cos(math.pi * val)
        else
            0.0
        sum    := sum    + source[i] * weight
        sumw := sumw + weight
    kernel_regression = sum / sumw
    kernel_regression

Wave = waveCalculation(source, bandwidth, bbwidth)

Ep = kernelRegression(source, bandwidth, 'Epanechnikov' )
Lo = kernelRegression(source, bandwidth, 'Logistic'          )
Wa = kernelRegression(source, bandwidth, 'Wave'                  )

AV        = math.avg(Ep, Lo, Wa) + close
bbMid      = ta.sma    (AV, sdLook)
arrUp = Wave > Wave[1] and not (Wave[1] > Wave[2])
arrDn = Wave < Wave[1] and not (Wave[1] < Wave[2])

stdv_bands(_src, _length, _mult) =>
    float basis = ta.sma    (_src, _length)
    float dev      = ta.stdev(_src, _length) * _mult
    [basis, basis + dev, basis - dev]

[_, u1, l1] = stdv_bands(AV, sdLook, sdMult/2)
[_, u2, l2] = stdv_bands(AV, sdLook, sdMult)

HL2    = plot(ROpoints ? hl2 : na, color = color(na))
wave = plot(ROpoints ? Wave : na, "???????????????????????? ????????????????", BCol ? color(na) : Wave > Wave[1] ? UpCol : DnCol, 3)
fill(wave, HL2, Wave, hl2, BCol ? color.new(Wave > Wave[1] ? UpCol : DnCol, 50) : na, color.new(chart.bg_color, 75)) 

plotshape(true, style=shape.square, location=location.bottom, size=size.tiny, color=Wave > Wave[1] ? color.rgb(0, 255, 0, 20) : Wave < Wave[1] ? color.rgb(255, 0, 0, 20) : color.rgb(0, 0, 0, 90))

haClose = (open + high + low + close) / 4
haOpen = float(na)
haOpen := na(haOpen[1]) ? (open + close) / 2 : (nz(haOpen[1]) + nz(haClose[1])) / 2
haHigh = math.max(high, math.max(haOpen, haClose))
haLow = math.min(low, math.min(haOpen, haClose))

pptimeframe = my_time //input.timeframe(defval = '240', title = "Time Frame", group = "Setup")
leftBars    = 2 //input.int(defval = 2, title = "Left Bars", minval = 1, group = "Setup")
rightBars = 2 //input.int(defval = 2, title = "Right Bars", minval = 1, group = "Setup")
pivotsBack = 1 //input.int(defval = 1, title = "Pivots Back (High/Low)", minval = 1, group = "Setup")
extendBoxLeft = 6 //input.int(defval = 6, title = "Extend Box", minval = 3, maxval = 100, group = "Setup")
showCB = input.bool(defval = false, title = "Show Consolidation Box", group = "Setup")
showMid = showCB //input.bool(defval = true, title = "Show Box Mid", group = "Setup")
showPivots = false //input.bool(defval = false, title = "Show Pivots", group = "Setup")
showTfLabel = showCB //input.bool(defval = true, title = "Show Labels", group = "Setup")
boxlinestyle = "Solid" //input.string(defval = "Solid", title = "Border Style/Width", options = ["Solid", "Dotted", "Dashed"], inline = "boxbs", group = "Consolidation Box")
boxlinewidth = 1 //input.int(defval = 1, title = "", minval = 1, maxval = 10, inline = "boxbs", group = "Consolidation Box")
boxmidlinestyle = "Dashed" //input.string(defval = "Dashed", title = "Mid Style/Width", options = ["Solid", "Dotted", "Dashed"], inline = "boxmidbs", group = "Consolidation Box")
boxmidlinewidth = 1 //input.int(defval = 1, title = "", minval = 1, maxval = 10, inline = "boxmidbs", group = "Consolidation Box")
boxtheme = 'Three' //input.string(defval = "One", title = "Colors", options = ["One", "Three", "Five"], inline = "self", group = "Consolidation Box")
boxbreakupcol = color.lime //input.color(defval = color.lime, title = "Break Up Color/Fill", inline = "bcup", group = "Consolidation Box")
boxfillbreakupcol = color.new(color.lime, 95) //input.color(defval = color.new(color.lime, 95), title = "", inline = "bcup", group = "Consolidation Box")
boxmidupcol = color.teal //input.color(defval = color.teal, title = "Mid Up Color/Fill", inline = "bcmup", group = "Consolidation Box")
boxfillmidupcol = color.new(color.teal, 95) //input.color(defval = color.new(color.teal, 95), title = "", inline = "bcmup", group = "Consolidation Box")
boxcol = color.silver //input.color(defval = color.silver, title = "Neutral Color/Fill", inline = "bcn", group = "Consolidation Box")
boxfillcol = color.new(color.silver, 95) //input.color(defval = color.new(color.silver, 95), title = "", inline = "bcn", group = "Consolidation Box")
boxmiddncol = color.maroon //input.color(defval = color.maroon, title = "Mid Down Color/Fill", inline = "bcmdn", group = "Consolidation Box")
boxfillmiddncol = color.new(color.maroon, 95) //input.color(defval = color.new(color.maroon, 95), title = "", inline = "bcmdn", group = "Consolidation Box")
boxbreakdncol = color.red //input.color(defval = color.red, title = "Break Down Color/Fill", inline = "bcdn", group = "Consolidation Box")
boxfillbreakdncol = color.new(color.red, 95) //input.color(defval = color.new(color.red, 95), title = "", inline = "bcdn", group = "Consolidation Box")
phlinecol = color.blue //input.color(defval = color.blue, title = "Pivot High/Low Line Colors", inline = "lc", group = "Pivot Points")
pllinecol = color.red //input.color(defval = color.red, title = "", inline = "lc", group = "Pivot Points")
phbgcol = color.new(#131722, 20) //input.color(defval = color.new(#131722, 20), title = "Pivot High BG/Text Colors", inline = "ph", group = "Pivot Points")
phtextcol = color.blue //input.color(defval = color.blue, title = "", inline = "ph", group = "Pivot Points")
plbgcol = color.new(#131722, 20) //input.color(defval = color.new(#131722, 20), title = "Pivot Low BG/Text Colors", inline = "pl", group = "Pivot Points")
pltextcol = color.red //input.color(defval = color.red, title = "", inline = "pl", group = "Pivot Points")
textSizeLabel = "Normal" //input.string("Normal", title = "Label Size", options = ["Normal", "Small", "Tiny"], group = "Labels")

type PPData
    int ppStart
    float ppVal

f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
     timeframe.isseconds ? 1. / 60                          :
     timeframe.isminutes ? 1.                                    :
     timeframe.isdaily      ? 60. * 24                        :
     timeframe.isweekly    ? 60. * 24 * 7                :
     timeframe.ismonthly ? 60. * 24 * 30.4375    : na)

f_timeFrom(_from, _qty, _units, _in = time) =>

    int _timeFrom = na

    _unit = str.replace_all(_units, "s", "")

    _t = switch _from
        "bar" => time
        "close" => time_close
        "now" => timenow
        "base" => _in

    if _units == "chart"

        _timeFrom := int(_t + (f_resInMinutes() * 60 * 1000 * _qty))
    else

        _year      = year(_t)              + (_unit == "year"      ? int(_qty) : 0)
        _month    = month(_t)            + (_unit == "month"    ? int(_qty) : 0)
        _day        = dayofmonth(_t) + (_unit == "day"        ? int(_qty) : 0)
        _hour      = hour(_t)              + (_unit == "hour"      ? int(_qty) : 0)
        _minute = minute(_t)          + (_unit == "minute" ? int(_qty) : 0)
        _second = second(_t)          + (_unit == "econd"    ? int(_qty) : 0)

        _timeFrom := timestamp(_year, _month, _day, _hour, _minute, _second)

f_timeFrameStr(_tf) =>
    tfstr = switch _tf
        "1" => "1m"
        "2" => "2m"
        "3" => "3m"
        "4" => "4m"
        "5" => "5m"
        "6" => "6m"
        "7" => "7m"
        "8" => "8m"
        "9" => "9m"
        "10" => "10m"
        "11" => "11m"
        "12" => "12m"
        "13" => "13m"
        "14" => "14m"
        "15" => "15m"
        "16" => "16m"
        "17" => "17m"
        "18" => "18m"
        "19" => "19m"
        "20" => "20m"
        "21" => "21m"
        "22" => "22m"
        "23" => "23m"
        "24" => "24m"
        "25" => "25m"
        "26" => "26m"
        "27" => "27m"
        "28" => "28m"
        "29" => "29m"
        "30" => "30m"
        "31" => "31m"
        "32" => "32m"
        "33" => "33m"
        "34" => "34m"
        "35" => "35m"
        "36" => "36m"
        "37" => "37m"
        "38" => "38m"
        "39" => "39m"
        "40" => "40m"
        "41" => "41m"
        "42" => "42m"
        "43" => "43m"
        "44" => "44m"
        "45" => "45m"
        "46" => "46m"
        "47" => "47m"
        "48" => "48m"
        "49" => "49m"
        "50" => "50m"
 

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

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

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

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

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

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

Стоимость полного кода
6 167,10₽ ≈ $75.36