комментарии Amexx на форуме

  1. Логотип Quik Lua
    Добрый день. Помогите исправить код. Ошибок нет, но в списке индикаторов отсутствует,
    — Название индикатора local IndicatorName = «L1m»


    — Параметры индикатора
    local Price = 0
    — Тип цены (0 — Close)
    local Length = 0
    — Период
    local barscount = 50
    — Количество баров для расчета


    --Коэффициенты для разных таймфреймов
    local k1, k2, k3, k4 = 0, 0, 0, 0


    — Буферы для хранения данных
    local Buf0 = {}
    — Основной буфер 1
    local Buf4 = {}
    — Основной буфер 2
    local Buf1 = {}
    — Буфер для невязки 1
    local Buf2 = {}
    — Буфер для abs невязки 1
    local Buf3 = {}
    — Буфер для цены 1
    local Buf5 = {}
    — Буфер для невязки 2
    local Buf6 = {}
    — Буфер для abs невязки 2
    local Buf7 = {}
    — Буфер для цены 2


    — Функция для получения текущего таймфрейма
    function getInterval()

    — Получаем текущий таймфрейм графика

    local interval = getParamEx(«TQBR», «SBER», «INTERVAL»).param_value
    return interval

    end


    — Функция инициализации индикатора
    function OnInit()

    — Установка параметров в зависимости от таймфрейма

    local interval = getInterval()
    if interval == «M1» then
    Length = 11; k1 = 0.1; k2 = 0.9; k3 = 0.05; k4 = 0.5

    elseif interval == «M5» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «M15» then
    Length = 5; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.7

    elseif interval == «M30» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «H1» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «H4» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «D1» then
    Length = 6; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «W1» then
    Length = 4; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «MN1» then
    Length = 3; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.9
    else

    — Если таймфрейм не распознан, используем значения по умолчанию

    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    end


    — Инициализация буферов
    for i = 1, barscount do

    Buf0[i] = 0
    Buf4[i] = 0

    Buf1[i] = 0
    Buf2[i] = 0

    Buf3[i] = 0
    Buf5[i] = 0

    Buf6[i] = 0
    Buf7[i] = 0

    end


    — Логирование для отладки
    message(«Индикатор инициализирован. Таймфрейм: »… interval)


    return true
    end


    — Функция расчета индикатора
    function OnCalculate(index)

    if index <= 3 then return end


    — Получение цены закрытия

    local close_price = getPrice(index)


    — Расчет скользящей средней

    local ma = calculateMA(index)


    — Расчет невязки

    local def = ma — (Buf0[index + 1] or 0)

    local prog = (Buf1[index + 1] or 0) + 0.5 * ((Buf1[index + 1] or 0) — (Buf1[index + 2] or 0))

    Buf1[index] = prog + (def — prog) / Length

    local def1 = ma — (Buf4[index + 1] or 0)

    local prog1 = (Buf5[index + 1] or 0) + 0.5 * ((Buf5[index + 1] or 0) — (Buf5[index + 2] or 0))

    Buf5[index] = prog1 + (def1 — prog1) / Length


    — Расчет абсолютной невязки

    local adef = math.abs(def)

    local adef1 = math.abs(def1)

    Buf2[index] = (Buf2[index + 1] or 0) + 0.5 * ((Buf2[index + 1] or 0) — (Buf2[index + 2] or 0))

    Buf6[index] = (Buf6[index + 1] or 0) + 0.5 * ((Buf6[index + 1] or 0) — (Buf6[index + 2] or 0))


    — Адаптивные параметры

    local k5, k6, k7, k8 = 0, 0, 0, 0
    if Buf2[index] ~= 0 then

    k6 = math.abs((Buf1[index] or 0) / Buf2[index])

    k5 = k1 * k6

    k6 = k2 * k6
    end

    if Buf6[index] ~= 0 then

    k8 = math.abs((Buf5[index] or 0) / Buf6[index])

    k7 = k3 * k8
    k8 = k4 * k8
    end


    — Расчет значений индикатора

    local del = ma — (Buf3[index + 1] or 0)

    Buf0[index] = (Buf3[index + 1] or 0) + del * k5

    Buf3[index] = Buf0[index] + k6 * (Buf0[index] — (Buf0[index + 1] or 0))


    local del1 = ma — (Buf7[index + 1] or 0)
    Buf4[index] = (Buf7[index + 1] or 0) + del1 * k7

    Buf7[index] = Buf4[index] + k8 * (Buf4[index] — (Buf4[index + 1] or 0))


    — Отображение индикатора

    AddLine(Buf0[index], «Buf0», RGB(255, 255, 255), 1, 1)
    — Белая линия

    AddLine(Buf4[index], «Buf4», RGB(0, 191, 255), 1, 1)
    — Голубая линия

    end


    — Функция расчета скользящей средней

    function calculateMA(index)

    local sum = 0
    for i = index — Length + 1, index do
    sum = sum + getPrice(i)
    end
    return sum / Length
    end


    — Функция получения цены

    function getPrice(index)
    if Price == 0 then
    return getClose(index)
    — Цена закрытия
    else
    return (getHigh(index) + getLow(index)) / 2 — Средняя цена
    end
    end
Чтобы купить акции, выберите надежного брокера: