Здравствуйте!
Вопрос, наверное, к Sergey Gorokhov, так как он вроде писал индикаторы.
По ряду причин решил проверить значения индикатора CCI в Quik.
Написал свой простейший для проверки, отобразил в одном окне, значения не совпали.
Свой вариант программировал по классическим формулам, смотри, например, на википедии CCI, вот здесь:
Обратите внимание на формулу Среднего абсолютного отклонения (MAD), она рассчитывается через значения своего MA на каждой точке расчёта.
Посмотрел формулу Среднего абсолютного отклонения в индикаторе CCI из Quik: MD = MD + math.abs(b_ma - Value(i, VT, ds)), здесь вроде используется значение MA не на каждой точке, а просто берётся MA последней точки. Думаю, это неправильно.
Привожу код своего индикатора CCI:
Settings = {
Name = "*CCI_My_v1",
period_CCI = 13,
line =
{
{Name = "CCI_My", Type = TYPE_LINE, Color = #00fafa, Width = 1}
}
}
function Init()
return 1
end
function OnCalculate(index)
local periodCCI = Settings.period_CCI
if index < periodCCI*2 then return nil
else
local myCCI = 0
local meanDeviation = 0
for i = index-periodCCI+1, index do
--Вычисление SMA для каждого i
local smaMD = 0
for j = i-periodCCI+1, i do
smaMD = smaMD + C(j)
end--for j
smaMD = smaMD / periodCCI
--Суммирование отклонения для i
meanDeviation = meanDeviation + math.abs(smaMD - C(i))
end--for i
--Вычисление среднего отклонения для index
meanDeviation = meanDeviation / periodCCI
--Вычисление SMA для index
local sma = 0
for i = index-periodCCI+1, index do
sma = sma + C(i)
end--for i
sma = sma / periodCCI
--Вычисление CCI
myCCI = (C(index) - sma)/(0.015*meanDeviation)
return myCCI
end--else
end