Вернулся к попыткам написать скользящую среднюю LaguerreMA. Не могу найти ошибку в коде(в программировании полный новичок) - индикатор постепенно улетает куда-то в космос после нескольких первых значений. По аналогичной схеме написал уже код для других 5-6 индикаторов, там все четко отображает.
Часть кода:
function Init()
local index_1 = 0
myEMA = cached_LMA()
return 1
end
function OnCalculate(index)
if index == 0 then
return nil
end
if index ~= index_1 then
index_1 = index
return myLMA(index, Settings.value_type, Settings.gamma)
end
end
function cached_LMA()
local cache={}
local L0 = {}
local L1 = {}
local L2 = {}
local L3 = {}
return function(ind, v_t, kk)
local v_type = v_t
local index = ind
local k = kk
if index == 1 then
L0[index] = dValue(index, v_type)
L1[index] = dValue(index, v_type)
L2[index] = dValue(index, v_type)
L3[index] = dValue(index, v_type)
cache[index] = dValue(index, v_type)
else
L0[index] = (1 - k)* dValue(index-1, v_type) + L0[index-1]
L1[index] = L0[index-1] + k * L1[index-1] - k * L0[index]
L2[index] = L1[index-1] + k * L2[index-1] - k * L1[index]
L3[index] = L2[index-1] + k * L3[index-1] - k * L2[index]
cache[index] = (L0[index]+2*L1[index]+2*L2[index]+L3[index])/6
end
return cache[index]
end
end
Функция dValue просто определяет значение цены в зависимости от индекса и типа цены. Можете подсказать, в чем ошибка?