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

Logarithmic Linear Regression

logarithmic linear regression.pine
Вы автор или правообладатель?

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

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

О программе

Индикатор «Logarithmic Linear Regression» строит линейную регрессию на логарифмически преобразованных данных цены и отображает её в виде линий на графике. Расчёт выполняется за заданный период, при этом исходные значения сначала переводятся в логарифмический масштаб, а результаты обратно — в ценовой, что позволяет учитывать процентное изменение цены.

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

НастройкаОписание
srcinput Источник данных для расчёта регрессии (по умолчанию hlc3).
use1Dev Множитель для первого стандартного отклонения от линии регрессии.
use2Dev Множитель для второго стандартного отклонения от линии регрессии.
lstyle Стиль отображения линий: сплошной, пунктирный или точечный.
wid Толщина отображаемых линий.
extendLines Включает продление линий регрессии и отклонений вправо от текущей свечи.
filldev При активации заливает область между внешними линиями отклонений (1 и 2 стандартных отклонения).
fillin При активации заливает внутренний канал между первыми линиями отклонений.
tr Уровень прозрачности заливки каналов и отклонений.
rcol Цвет верхних линий отклонений (бычья зона).
scol Цвет нижних линий отклонений (медвежья зона).
mcol Цвет средней линии регрессии.
len Количество баров, используемых для расчёта линейной регрессии.

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

indicator('<[Логарифмическая Линейная Регрессия]>', '<{LogLinReg}>', overlay = true, max_bars_back = 4000)

srcinput = input(title = 'Источник', defval = hlc3)                        // Источник данных (по умолчанию 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(color.blue, 'Цвет быков') 
scol = input(color.fuchsia, 'Цвет медведей') 
mcol = input(color.silver, 'Цвет средней линии') 

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
            sumXY
        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)
    baseLine := line.new(bar_index - len + 1, math.exp(startPrice), bar_index, math.exp(endPrice), width = wid, extend = extend, color = mcol, style = linestyle)
    baseLine
else
    line.set_xy1(baseLine, bar_index - len + 1, math.exp(startPrice))
    line.set_xy2(baseLine, bar_index, math.exp(endPrice))

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 =

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