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

Channel LogReg + Forecast Zones + BB/KC

channel_logreg + forecast zones + bb_kc.pine
Вы автор или правообладатель?

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

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

О программе

Индикатор «Channel LogReg + Forecast Zones + BB/KC» для TradingView объединяет три визуальных компонента на одном графике: канал логарифмической регрессии, прогнозные зоны на основе ATR и стандартные каналы Боллинджера и Кельтнера. Он рассчитывает регрессионную линию и отклонения по логарифму цены, отображает динамические уровни сопротивления и поддержки, а также накладывает классические BB и KC с возможностью заливки между ними. Все элементы можно включать и отключать независимо через соответствующие параметры настроек.

В основе канала регрессии лежит расчёт наклона, среднего и стандартного отклонения на логарифмических данных цены за заданный период. Верхние и нижние границы канала строятся с коэффициентами отклонения, настраиваемыми пользователем. Прогнозные зоны используют адаптивное среднее с шагом на основе кратного ATR, формируя уровни, которые корректируются при движении цены и фиксируются при отсутствии пробоя.

Индикатор рисует линии и графические заливки средствами Pine Script, получает данные текущего инструмента и таймфрейма через request.security. Полностью настраиваются цвета, толщина и стиль линий, прозрачность заливок, длины и множители расчётов. Предназначен для визуального анализа графика, не содержит встроенной симуляции сделок.

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

НастройкаОписание
showLogReg Отображать или скрывать канал логарифмической регрессии и его отклонения.
showForecast Отображать или скрывать прогнозные зоны сопротивления и поддержки.
showBBKC Отображать или скрывать каналы Боллинджера и Кельтнера на графике.
srcinput Источник данных для расчёта логарифмической регрессии.
use1Dev Коэффициент отклонения для первого уровня верхней и нижней границ канала.
use2Dev Коэффициент отклонения для второго уровня верхней и нижней границ канала.
lstyle Стиль отображения линий канала: сплошная, пунктирная или точечная.
wid Толщина линий канала регрессии и отклонений.
extendLines Продлевать линии регрессии и отклонений вправо за последний бар.
filldev Включить заливку области между верхней и нижней границами отклонений 2-го уровня.
fillin Включить заливку внутренней области между верхней и нижней границами отклонений 1-го уровня.
tr Прозрачность заливок канала отклонений и внутреннего канала в процентах.
rcol Цвет линий верхних отклонений (бычья сторона).
scol Цвет линий нижних отклонений (медвежья сторона).
mcol Цвет средней линии регрессионного канала.
len Длина периода для расчёта регрессии и отклонений.
length Период усреднения для расчёта ATR в прогнозных зонах.
mult Множитель ATR для определения шага адаптивного среднего в прогнозных зонах.
src2 Источник цены для расчёта прогнозных зон.
resColor Цвет заливки зон сопротивления.
supColor Цвет заливки зон поддержки.
zoneTransp Базовая прозрачность заливок прогнозных зон в процентах.
bbLen Период усреднения для расчёта канала Боллинджера.
bbMult Множитель стандартного отклонения для ширины канала Боллинджера.
bbColor Цвет линий канала Боллинджера.
kcLen Период усреднения для расчёта канала Кельтнера.
kcATRmult Множитель ATR для расчёта ширины канала Кельтнера.
kcColor Цвет линий канала Кельтнера.
Получить полный код

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

indicator('<[Канал_ЛогРег + Прогнозные Зоны + BB/KC]>', '<[Канал_ЛогРег+ПЗ+ BB/KC]>', overlay = true, precision = 2, max_bars_back = 4000)

showLogReg = input.bool(true, title = "Показать Лог. Регрессию", group = "Отключение индикаторов")
showForecast = input.bool(true, title = "Показать Прогн. Диапазоны", group = "Отключение индикаторов")
showBBKC = input.bool(true, "Показать BB/KC", group = "Отключение индикаторов")

srcinput = input(title = 'Источник', defval = hlc3)
use1Dev = input.float(1, title = 'Коэффициент отклонения 1', minval = 0.1)
use2Dev = input.float(2, title = 'Коэффициент отклонения 2', minval = 0.1)

lstyle = input.string('Сплошная', title = 'Стиль линии', options = ['Сплошная', 'Пунктирная', 'Точечная']) 
wid = input(defval = 1, title = 'Толщина линии') 
extendLines = input(title = 'Продлевать линии', defval = false) 
filldev = input(false, title = 'Заливка отклонений') 
fillin = input(false, title = 'Заливка внутреннего канала') 
tr = input(89, title = 'Прозрачность заливки') 
rcol = input(#2196f3, 'Цвет быков') 
scol = input(#e040fb, 'Цвет медведей') 
mcol = input(#b2b5be, 'Цвет средней линии') 

linestyle = lstyle == 'Сплошная' ? line.style_solid : lstyle == 'Пунктирная' ? line.style_dashed : line.style_dotted

len = input.int(100, title = 'Длина', minval = 1)

src = request.security(syminfo.tickerid, timeframe.period, math.log(srcinput))
extend = extendLines ? extend.right : extend.none

calcSlope(src, len) =>
    max_bars_back(src, 300)
    if not barstate.islast or len <= 1
        [float(na), float(na), float(na)]
    else
        sumX = 0.0
        sumY = 0.0
        sumXSqr = 0.0
        sumXY = 0.0
        for j = 0 to len - 1 by 1
            val = src[j]
            per = j + 1.0
            sumX := sumX + per
            sumY := sumY + val
            sumXSqr := sumXSqr + per * per
            sumXY := sumXY + val * per
        slope = (len * sumXY - sumX * sumY) / (len * sumXSqr - sumX * sumX)
        average = sumY / len
        intercept = average - slope * sumX / len + slope
        [slope, average, intercept]

[s, a, i] = calcSlope(src, len)
startPrice = i + s * (len - 1)
endPrice = i

var line baseLine = na
if na(baseLine) and not na(startPrice) and showLogReg
    baseLine := line.new(bar_index - len + 1, math.exp(startPrice), bar_index, math.exp(endPrice), width = wid, extend = extend, color = mcol, style = linestyle)
else if showLogReg and not na(baseLine)
    line.set_xy1(baseLine, bar_index - len + 1, math.exp(startPrice))
    line.set_xy2(baseLine, bar_index, math.exp(endPrice))
else if not na(baseLine)
    line.delete(baseLine)
    baseLine := na

calcDev(src, len, slope, average, intercept) =>
    upDev = 0.0
    dnDev = 0.0
    stdDevAcc = 0.0
    dsxx = 0.0
    dsyy = 0.0
    dsxy = 0.0
    periods = len - 1
    daY = intercept + slope * periods / 2
    val = intercept
    for k = 0 to periods by 1
        price = high[k] - val
        if price > upDev
            upDev := price
        price := val - low[k]
        if price > dnDev
            dnDev := price
        price := src[k]
        dxt = price - average
        dyt = val - daY
        price := price - val
        stdDevAcc := stdDevAcc + price * price
        dsxx := dsxx + dxt * dxt
        dsyy := dsyy + dyt * dyt
        dsxy := dsxy + dxt * dyt
        val := val + slope
    stdDev = math.sqrt(stdDevAcc / (periods == 0 ? 1 : periods))
    pearsonR = dsxx == 0 or dsyy == 0 ? 0 : dsxy / math.sqrt(dsxx * dsyy)
    [stdDev, pearsonR, upDev, dnDev]

[stdDev, pearsonR, upDev, dnDev] = calcDev(src, len, s, a, i)

upperStartPrice1 = startPrice + use1Dev * stdDev
upperStartPrice2 = startPrice + use2Dev * stdDev
upperEndPrice1 = endPrice + use1Dev * stdDev
upperEndPrice2 = endPrice + use2Dev * stdDev

var line upper1 = na
var line upper2 = na

lowerStartPrice1 = startPrice + use1Dev * -stdDev
lowerStartPrice2 = startPrice + use2Dev * -stdDev
lowerEndPrice1 = endPrice + use1Dev * -stdDev
lowerEndPrice2 = endPrice + use2Dev * -stdDev

var line lower1 = na
var line lower2 = na

if na(upper2) and not na(upperStartPrice2) and showLogReg
    upper1 := line.new(bar_index - len + 1, math.exp(upperStartPrice1), bar_index, math.exp(upperEndPrice1), width = wid, extend = extend, color = rcol, style = linestyle)
    upper2 := line.new(bar_index - len + 1, math.exp(upperStartPrice2), bar_index, math.exp(upperEndPrice2), width = wid, extend = extend, color = rcol, style = linestyle)
else if showLogReg and not na(upper1)
    line.set_xy1(upper1, bar_index - len + 1, math.exp(upperStartPrice1))
    line.set_xy2(upper1, bar_index, math.e

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

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

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

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

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

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

Стоимость полного кода
732,50₽ ≈ $9.11