Блог им. SerSer

Линейная регрессия в помощь...

Добрый день!

Для всех 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


★21
21 комментарий
 +++Красивая тема с SetValue!
avatar
СыроеШкин, и удобная
Сергей С., спасибо за индикатор! Работает он очень интересно. Пытаюсь понять код. Скажите, пожалуйста, Index — входящий параметр, но что это? Номер текущей свечки?
avatar
Александр, да номер текущей свечки
avatar
Сергей С., Спасибо!
avatar
Как его в QUIK пристроить?
avatar
Igor Yaroshenko, Откройте текстовый редактор, скопируйте текст программы, сохраните с расширением .lua, файл поместите в папку LuaIndicators в корневой папке Квика (если нет такой папки — создайте), после чего кнопка «добавить график» и выберите индикатор
Не
Не удается подключить индикатор — ВЫДАЕТСЯ СИСТЕМНОЕ СООБЩЕНИЕ ОБОШИБКЕ

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)

ЧТО БЫ ЭТО ЗНАЧИЛО
avatar
petrovii, ссылка на мой рабочий файл xLinReg.lua,
свой файл удалите, скопируйте в папку этот, как попробуете — отпишитесь


avatar
Скачал ВАШ, поставил  и получил  тоже сообщение об ошибке.

Подскажите а как расшифровать  сообщение об ошибке, пытаюсь  разобраться с LUA
avatar
petrovii, 
ошибка в 105 строке кода (но надо учитывать что QUIK вырезает пустые строки)
ошибка в строке:
SetValue(index+i-period+1, 3, ZZZ)
к Вам 2 вопроса:
— какая у Вас версия QUIK? (SetValue стал поддерживаться не так давно)
— на какой инструмент вы ставите и есть ли на этом графике другие инструменты?
avatar
версия QUIK старая  от 10.04.14 обновлять не хочется.
— есть ли возможность SetValue заменить на что-то другое, и хоть краткое описание вашей программы

-на графике только один инструмент фьючерс на нефть
avatar
petrovii, нет без SetValue работать не будет
avatar
petrovii, не ленись — обновляйся
avatar
Обновил заработало
avatar
Заработать заработало — ОТЛИЧНО… ОТЛИЧНО...

Очень полезный график

еще бы разобраться как она строится на основании каких данных и откуда они берутся...


avatar
Все работало а потом вдруг появилась ошибка
C:\QUIK\LuaIndicators\xLinReg.lua:83: attempt to perform arithmetic on local 'ZZZ' (a nil value)
avatar
petrovii, какой инструмент, таймфрейм, что еще на графике?
avatar
 фьючерс на нефть, таймфрейм минутный
да мне кажется QUIK как то странно себя ведет — обновился
называется. Удалил я индикатор с графика потом добавил и ошибка исчезла.  

avatar

теги блога Маркин Павел

....все тэги



UPDONW