Добрый день. Помогите исправить код. Ошибок нет, но в списке индикаторов отсутствует,
— Название индикатора 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