Добрый день!
Столкнулся с такой проблемой, которую не могу обойти никакими условиями.
Скорее всего каких-то нюансов не учитываю.
Имеется индикатор, используемый поставляемый вами CMO()
Отрабатывает без ошибок, но при увеличении таймфрейма выдает следующую ошибку:attempt to perform arithmetic on a nil value
на строке 55:
Аналогично и с другими используемыми индиктаорами.
В чем может быть проблема и как от неё уйти?
Столкнулся с такой проблемой, которую не могу обойти никакими условиями.
Скорее всего каких-то нюансов не учитываю.
Имеется индикатор, используемый поставляемый вами CMO()
| Код |
|---|
Settings = {
Name = "*Kaavan Signals TEST",
CMO_Period = 14,
line = {
{
Name = "CMO",
Color = RGB(0, 255, 0),
Type = TYPE_POINT,
Width = 3
}
}
}
function Init()
func = GetSignals()
return #Settings.line
end
function OnCalculate(Index)
return func(Index, Settings)
end
function GetSignals()
local FCMO = CMO() --Chande Momentum Oscillator ("CMO")
local dsCMO = {Val = {}, Min = {}, Max = {}}
return function (I, Fsettings, ds)
if I < Fsettings.CMO_Period then
return nil
else
dsCMO.Val[I] = FCMO(I, Fsettings, ds) -- считаем CMO
end
end
end
------------------------------
function CMO() --Chande Momentum Oscillator ("CMO")
local sum={}
local sum2={}
local it = {pp=0, p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.CMO_Period or 14)
local VT = (Fsettings.CMO_VType or CLOSE)
if (P>0) then
if I == 1 then
sum={}
sum2={}
it = {pp=0, p=0, l=0}
end
if CandleExist(I,ds) then
if I~=it.p then it={pp=it.p, p=I, l=it.l+1} end
local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)
if it.l > 1 then
local diff = GetValueEX(it.p,VT,ds) - GetValueEX(it.pp,VT,ds)
if diff > 0 then
sum[Ip] = (sum[Ipp] or 0) + diff
sum2[Ip] = (sum2[Ipp] or 0)
elseif diff < 0 then
sum[Ip] = (sum[Ipp] or 0)
sum2[Ip] = (sum2[Ipp] or 0) - diff
elseif diff == 0 then
sum[Ip] = (sum[Ipp] or 0)
sum2[Ip] = (sum2[Ipp] or 0)
end
end
if it.l > P then
local CMO1 = sum[Ip]-(sum[Ippp] or 0)
local CMO2 = sum2[Ip]-(sum2[Ippp] or 0)
return (CMO1 - CMO2) / (CMO1 + CMO2) * 100
end
end
end
return nil
end
end
|
на строке 55:
| Код |
|---|
local diff = GetValueEX(it.p,VT,ds) - GetValueEX(it.pp,VT,ds) |
В чем может быть проблема и как от неё уйти?