Главная страница
Навигация по странице:

  • Линейная регрессия (

  • Канал линейной регрессии (

  • LinRegChannel

  • Библиотека польльских индикаторовзовате. БИБЛИОТЕКА ПОЛЬЗОВАТЕЛЬСКИХ ИНДИКАТОРОВ АЛЬФА-ДИРЕКТ4.0. Инструкция по созданию и импорту пользовательских индикаторов 4 библиотека пользовательских индикаторов 5


    Скачать 1.9 Mb.
    НазваниеИнструкция по созданию и импорту пользовательских индикаторов 4 библиотека пользовательских индикаторов 5
    АнкорБиблиотека польльских индикаторовзовате
    Дата24.05.2022
    Размер1.9 Mb.
    Формат файлаdocx
    Имя файлаБИБЛИОТЕКА ПОЛЬЗОВАТЕЛЬСКИХ ИНДИКАТОРОВ АЛЬФА-ДИРЕКТ4.0.docx
    ТипИнструкция
    #546719
    страница7 из 24
    1   2   3   4   5   6   7   8   9   10   ...   24

    DEMA (DOUBLE EXPONENTIAL MOVING AVERAGE) – ДВОЙНАЯ ЭКСПОНЕНЦИАЛЬНАЯ СКОЛЬЗЯЩАЯ СРЕДНЯЯ


    Двойная экспоненциальная скользящая средняя – индикатор, в котором осуществлена попытка минимизировать запаздывание приусреднении цен. Для этого считается ошибка (т.е. разница между входным рядом и EMA)



    Полученное значение еще раз сглаживается и добавляется к EMA.



    После преобразования получаем окончательную формулу



    Код Альфа-Директ

    function Initialize()

    {

    IndicatorName = "DEMA";

    AddInput("Input", Inputs.Price);

    AddSeries("DEMA", DrawAs.Line, Color.Green);

    PriceStudy = true;

    AddParameter("Period", 20, 1);

    AddGlobalVariable("K", Types.Double, 0.0);

    AddGlobalVariable("EMAi", Types.Double, 0.0);

    AddGlobalVariable("EMAe", Types.Double, 0.0);

    }
    function Evaluate()

    {

    // AlfaDirect. 2015. OX

    // EMA - экспоненциальная скользящая средняя.

    if (CurrentIndex > 0)

    {

    EMAi = (1.0 - K)*EMAi + K*Input[0];

    EMAe = (1.0 - K)*EMAe + K*EMAi;

    DEMA = 2.0*EMAi - EMAe;

    }

    else

    {

    EMAi = Input[0];

    EMAe = Input[0];

    DEMA = Input[0];

    K = 2.0/(Period + 1.0);

    }

    }


    МОДЕЛИ РЯДОВ

    LinReg (Linear Regression) – ЛИНЕЙНАЯ РЕГРЕССИЯ


    Линейная регрессия (LinReg) – это индикатор, который отображает в каждый момент последнюю точку текущей линейной модели ценового движения за указанный период, посчитанную на основании метода наименьших квадратов. Формула расчета следующая:





    где N – период линейной модели, Extr – период экстраполяции линейной модели (значение может быть положительным или отрицательным).
    Пример отображения индикатора LinReg с периодом 30 и экстраполяцией 5


    Код Альфа-Директ

    function Initialize()

    {

    IndicatorName = "LinReg";

    PriceStudy = true;

    AddInput("Input", Inputs.Price);

    AddSeries("LinReg", DrawAs.Line, Color.Red);

    AddParameter("Period", 20);

    AddParameter("Extr", 10);

    AddGlobalVariable("ZN", Types.Double, 0.0);

    AddGlobalVariable("t2", Types.Double, 0.0);

    AddGlobalVariable("t4", Types.Double, 0.0);

    }
    function Evaluate()

    {

    // AlfaDirect. 2015. OX

    // LinReg (Linear Regression) - Линейная регрессия

    if (CurrentIndex == 0 )

    {

    // Расчет неизменных коэффициентов по времени

    for (int i = 0; i < Period; i++)

    {

    t2 = t2 + i;

    t4 = t4 + i * i;

    }

    ZN = ((double)Period * t4 - t2 * t2);

    }
    if (CurrentIndex < Period + Extr )

    LinReg = Input[0];

    else

    {

    // Вариант t = [0...N-1]

    double a1 = 0.0;

    double a3 = 0.0;

    for (int i = 0; i < Period; i++)

    {

    a1 = a1 + i * Input[-(int)Period + 1 + i];

    a3 = a3 + Input[-i];

    }

    var alfa = (Period * a1 - t2 * a3) / ZN;

    var beta = (a3 - alfa * t2) / Period;

    LinReg = alfa * ((double)Period-1.0 + Extr) + beta ;

    }

    }

    LinRegChannel (Linear Regression Channel) – КАНАЛ ЛИНЕЙНОЙ РЕГРЕССИИ


    Канал линейной регрессии (LinRegChannel) – это канал с наклоном a, который вычислен для ценового ряда со смещением в прошлое на величину Delay.



    Смещение b вычисляется с учетом смещения Delay



    Отклонение Sigma1 и Sigma2 вычисляется как максимальная положительная и отрицательная разница между ценой и моделью линейной регрессии .

    Индикатор строит четыре линии









    где t – время построения модели (строится на интервале [-N-Delay, -Delay] от конца графика), Delay – параметр запаздывания построения модели,

    Пример отображения индикатора LinRegChannelс периодом 125 и задержкой 5



    Код Альфа-Директ

    function Initialize()

    {

    IndicatorName = "LinRegChannel";

    PriceStudy = true;

    AddInput("Input", Inputs.Price);

    AddSeries("LineUp", DrawAs.Line, Color.Red);

    AddSeries("LineDn", DrawAs.Line, Color.Red);

    AddSeries("LineU2", DrawAs.Line, Color.Gray);

    AddSeries("LineD2", DrawAs.Line, Color.Gray);

    AddParameter("Period", 100, 1);

    AddParameter("Delay", 5);

    }

    function Evaluate()

    {

    // AlfaDirect 2016. OX

    // Канал линейной регрессии за период (Period) с запаздыванием (Delay)

    // Отклоенение считается как максимальное разница цен и базовой регрессии, строится по ценам закрытия.
    if (CurrentIndex == MaxIndex)

    {

    double a1 = 0.0;

    double a2 = 0.0;

    double a3 = 0.0;

    double a4 = 0.0;

    if (CurrentIndex >= Period+Delay )

    {

    double N = Period;

    for (var i = 0; i < N; i++)

    {

    a1 = a1 + i * Input[-(int)N + 1 + i -Delay];

    a2 = a2 + i;

    a3 = a3 + Input[-i -Delay];

    a4 = a4 + i * i;

    }

    var alfa = (Period * a1 - a2 * a3) / (N * a4 - a2 * a2);

    var beta = (a3 - alfa * a2) / N;

    double Sigma1 = 0.0;

    double Sigma2 = 0.0;

    for (var i = 0; i < N; i++)

    {

    // Расчет отклонения 1

    double a = ((alfa * (i) + beta) - Input[-Period+i+1 -Delay]);

    if ( a > Sigma1 )

    Sigma1 = a;

    // Расчет отклонения 2

    a = -((alfa * (i) + beta) - Input[-Period+i+1 -Delay]);

    if ( a > Sigma2 )

    Sigma2 = a;

    }

    for (var i = 0; i < N+Delay; i++)

    {

    LineUp[-Period+i+1 -Delay] = alfa * (i) + beta + Sigma1;

    LineU2[-Period+i+1 -Delay] = alfa * (i) + beta + Sigma2;

    LineDn[-Period+i+1 -Delay] = alfa * (i) + beta - Sigma1;

    LineD2[-Period+i+1 -Delay] = alfa * (i) + beta - Sigma2;

    }

    }

    }

    }
    1   2   3   4   5   6   7   8   9   10   ...   24


    написать администратору сайта