Добрый день!
Для всех QUIKеров в свободное пользование индикатор линейной регрессии (LUA).
Settings =
{
Name = "xLinReg",
period = 128,
deviation=2,
line=
{
{
Name = "xLinReg",
Color = RGB(0, 0, 255),
Type = TYPE_LINE,
Width = 3
},
{
Name = "xLinReg",
Color = RGB(192, 0, 0),
Type = TYPE_LINE,
Width = 3
},
{
Name = "xLinReg",
Color = RGB(0, 128, 0),
Type = TYPE_LINE,
Width = 3
}
}
}
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
function c_FF()
local AMA={}
local CC={}
return function(ind, _p,_ddd)
local period = _p
local index = ind
local vol = 0
local sigma = 0
local sigma2 = 0
local aav = 0
local bb = 0
local ZZZ = 0
if index == 1 then
AMA={}
CC={}
CC[index]=(C(index)+H(index)+L(index))/3
AMA[index]=(C(index)+O(index))/2
return nil
end
------------------------------
AMA[index]=AMA[index-1]
CC[index]=(C(index)+H(index)+L(index))/3
---------------------
if index < (_p) then return nil end
----------------------------------------------------
period =_p
if index < period then period = index end
---------------
sigma=0
sigma2=0
aav=0
ZZZ=0
for i = 0, period-1 do
ZZZ=CC[index+i-period+1]
aav=aav+ZZZ
sigma=sigma+ZZZ*(-(period-1)/2+i)
sigma2=sigma2+(-(period-1)/2+i)^2
end
------------------------
bb=sigma/sigma2
aav=aav/period
AMA[index]=aav+bb*((period-1)/2) ---------линейная регрессия
-------------------------------
sigma=0
sigma2=0
sigma3 = 0
for i = 0, period-1 do
ZZZ=CC[index+i-period+1]
sigma2=aav+bb*(-(period-1)/2+i)
sigma=sigma+(ZZZ-sigma2)^2
end
sigma=(sigma/period)^(1/2)
for i = 1, period-1 do
ZZZ=aav+bb*(-(period-1)/2+i)
SetValue(index+i-period+1, 3, ZZZ)
SetValue(index+i-period+1, 2, ZZZ+sigma*_ddd)
SetValue(index+i-period+1, 1, ZZZ-sigma*_ddd)
end
SetValue(index+0-period+1, 3, nil)
SetValue(index+0-period+1, 2, nil)
SetValue(index+0-period+1, 1, nil)
----------------------------------
return AMA[index]-sigma*_ddd,AMA[index]+sigma*_ddd, AMA[index]
end
end
---------------------------- ---------------------------- ----------------------------
---------------------------- ---------------------------- ----------------------------
---------------------------- ---------------------------- ----------------------------
function Init()
myFF = c_FF()
return 3
end
function OnCalculate(index)
return myFF(index, Settings.period,Settings.deviation)
end
Продолжение: http://smart-lab.ru/blog/337978.php
Не удается подключить индикатор — ВЫДАЕТСЯ СИСТЕМНОЕ СООБЩЕНИЕ ОБОШИБКЕ
C:\QUIK\LuaIndicators\LeneaRegressii.lua:105: attempt to call global 'SetValue' (a nil value) 3,000000 0,000000 20160803,000000 150729,000000 C:\QUIK\LuaIndicators\LeneaRegressii.lua:105: attempt to call global 'SetValue' (a nil value)
ЧТО БЫ ЭТО ЗНАЧИЛОсвой файл удалите, скопируйте в папку этот, как попробуете — отпишитесь
Подскажите а как расшифровать сообщение об ошибке, пытаюсь разобраться с LUA
ошибка в 105 строке кода (но надо учитывать что QUIK вырезает пустые строки)
ошибка в строке:
SetValue(index+i-period+1, 3, ZZZ)
к Вам 2 вопроса:
— какая у Вас версия QUIK? (SetValue стал поддерживаться не так давно)
— на какой инструмент вы ставите и есть ли на этом графике другие инструменты?
— есть ли возможность SetValue заменить на что-то другое, и хоть краткое описание вашей программы
-на графике только один инструмент фьючерс на нефть
Очень полезный график
еще бы разобраться как она строится на основании каких данных и откуда они берутся...
C:\QUIK\LuaIndicators\xLinReg.lua:83: attempt to perform arithmetic on local 'ZZZ' (a nil value)
да мне кажется QUIK как то странно себя ведет — обновился
называется. Удалил я индикатор с графика потом добавил и ошибка исчезла.
Как можно приобрести xLinReg.lua для установки на QUIK версии 11.1?
Как можно приобрести скрипт xLinReg для установки на QUIK версии 11.1?