Маркин Павел
Маркин Павел личный блог
08 июля 2016, 14:11

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

Добрый день!

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


23 Комментария
  • СыроеШкин
    08 июля 2016, 15:39
     +++Красивая тема с SetValue!
      • Александр
        04 августа 2016, 16:45
        Сергей С., спасибо за индикатор! Работает он очень интересно. Пытаюсь понять код. Скажите, пожалуйста, Index — входящий параметр, но что это? Номер текущей свечки?
  • Igor Yaroshenko
    10 июля 2016, 22:43
    Как его в QUIK пристроить?
  • petrovii
    03 августа 2016, 14:12
    Не
    Не удается подключить индикатор — ВЫДАЕТСЯ СИСТЕМНОЕ СООБЩЕНИЕ ОБОШИБКЕ

    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)

    ЧТО БЫ ЭТО ЗНАЧИЛО
  • petrovii
    03 августа 2016, 18:15
    Скачал ВАШ, поставил  и получил  тоже сообщение об ошибке.

    Подскажите а как расшифровать  сообщение об ошибке, пытаюсь  разобраться с LUA
  • petrovii
    04 августа 2016, 01:18
    версия QUIK старая  от 10.04.14 обновлять не хочется.
    — есть ли возможность SetValue заменить на что-то другое, и хоть краткое описание вашей программы

    -на графике только один инструмент фьючерс на нефть
  • petrovii
    04 августа 2016, 11:35
    Обновил заработало
  • petrovii
    04 августа 2016, 11:42
    Заработать заработало — ОТЛИЧНО… ОТЛИЧНО...

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

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


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

  • Юрий Емельянов
    25 января 2024, 17:04
    Уважаемый Павел!
    Как можно приобрести xLinReg.lua для установки на QUIK версии 11.1?
  • Юрий Емельянов
    25 января 2024, 17:12
    Уважаемый Павел!
    Как можно приобрести скрипт xLinReg для установки на QUIK версии 11.1?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн