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

  • Если

  • Индекс среднего направленного движения

  • Типовые параметры. Для индикатора обычно используется следующее типовое значение параметра Period = 14 на дневном тайм-фрейме. Сигналы.

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


    Скачать 1.9 Mb.
    НазваниеИнструкция по созданию и импорту пользовательских индикаторов 4 библиотека пользовательских индикаторов 5
    АнкорБиблиотека польльских индикаторовзовате
    Дата24.05.2022
    Размер1.9 Mb.
    Формат файлаdocx
    Имя файлаБИБЛИОТЕКА ПОЛЬЗОВАТЕЛЬСКИХ ИНДИКАТОРОВ АЛЬФА-ДИРЕКТ4.0.docx
    ТипИнструкция
    #546719
    страница24 из 24
    1   ...   16   17   18   19   20   21   22   23   24

    ИНДИКАТОРЫ ОБЪЕМА

    VBA (Volume of Bid / Ask) – Объем по БИД и АСК


    Объем по Бид и Аск – это индикатор, показывающий активность покупателей или продавцов, т.е. кто был инициатором сделок.

    VBA имеет 3 выходных ряда:

    • V – Объем (оборот) общий, отображается всегда

    • Vbid – Объем (оборот) по Бид отображается Если Vbid > Vask

    • Vask – Объем (оборот) по Аск отображается Если Vask > Vbid


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

    function Initialize()

    {

    // Обязательные параметры:

    IndicatorName = "VBA";

    PriceStudy = false;

    AddInput("Input", Inputs.Candle);

    AddSeries("V", DrawAs.Histogram, Color.Gray); // Задаем вид линии индикатора A

    AddSeries("Vbid", DrawAs.Histogram, Color.Red); // Задаем вид линии индикатора A

    AddSeries("Vask", DrawAs.Histogram, Color.Green); // Задаем вид линии индикатора A

    }
    function Evaluate()

    {

    // AlfaDirect. 2014. OX.

    // Volume - Bid - Ask (VBA)

    V = Input.Volume[0];

    if (Input.VolumeAsk[0] > Input.VolumeBid[0])

    {

    Vask = Input.VolumeAsk[0];

    Vbid = 0.0;

    }

    else

    {

    Vask = 0.0;

    Vbid = Input.VolumeBid[0];

    }

    }

    Delta – Дельта


    Индикатор Дельта рассчитывается как разница объемов сделок, совершенных по Bid и Ask и показывает агрессивность покупателей или продавцов. В обычной ситуации при падении рынка больше агрессивных продавцов, а при росте – покупателей.

    Пример отображения индикатора Delta на акциях Сбербанка.

    Delta > 0 ­– больше агрессивных покупателей (зеленый цвет)

    Delta < 0 ­– больше агрессивных покупателей (красный цвет)



    Сигналы

    • Индикатор является вспомогательным. Обращать внимание на свечки с большой дельтой, т.к. на боковом движении они будут разворотными, а на трендовом – импульсами к дальнейшему движению.

    • Обращать внимание на маленькие свечки с большой дельтой, т.к. может говорить о наличии крупного лимитного ордера.


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

    function Initialize()

    {

    // Обязательные параметры:

    IndicatorName = "Delta";

    AddInput("Input", Inputs.Candle);

    PriceStudy = false;

    AddSeries("Delta", DrawAs.Custom, Color.Green, AxisType.ZeroBased);

    }
    function Evaluate()

    {

    // AlfaDirect. 2014. OX

    // Delat (Дельта) - разница между объемом сделок покупателей и продавцов

    Delta = Input.VolumeAsk[0] - Input.VolumeBid[0];

    if (Delta > 0 )

    Delta.DrawHistogram(Color.Green, Color.Green, 100);

    else

    Delta.DrawHistogram(Color.Red, Color.Red, 100);

    }

    DeltaDay – Кумулятивная Дельта за день


    Индикатор кумулятивная Дельта рассчитывается как сумма разниц объемов сделок, совершенных по Bid и Ask и показывает агрессивность покупателей или продавцов. В обычной ситуации при падении рынка больше агрессивных продавцов, а при росте – покупателей.

    Пример отображения индикатора Delta на акциях Сбербанка.

    Delta > 0 ­– больше агрессивных покупателей (зеленый цвет)

    Delta < 0 ­– больше агрессивных покупателей (красный цвет)


    Сигналы

    • Индикатор является вспомогательным. Обращать внимание на переходы через 0 и статистически большие значения при боковом движении.


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

    function Initialize()

    {

    IndicatorName = "DeltaDay";

    AddInput("Input", Inputs.Candle);

    PriceStudy = false;

    AddSeries("DeltaDay", DrawAs.Custom, Color.Gray);

    AddSeries("DeltaOpen", DrawAs.Custom, Color.Gray);

    AddLevel(0, Color.Gray, "DeltaDay");

    }
    function Evaluate()

    {

    // AlfaDirect 2014 (Исправлено 2016).

    // Кумулятивная Дельта Дневная - интеграл разниц между объемами покупателей и продавцов за день

    if ( BarTime() == AsTime(10, 0, 0) || CurrentIndex < 1)

    {

    DeltaDay = Input.VolumeAsk[0] - Input.VolumeBid[0];

    DeltaOpen = 0;

    }

    else

    {

    DeltaDay = DeltaDay[-1] + Input.VolumeAsk[0] - Input.VolumeBid[0];

    DeltaOpen = DeltaDay[-1];

    }
    if (DeltaDay > DeltaOpen )

    DeltaDay.DrawHistogram( DeltaOpen, Color.Green, Line.Solid, 1, Color.Green, 100);

    else

    DeltaDay.DrawHistogram( DeltaOpen, Color.Red, Line.Solid, 1, Color.Red, 100);

    }

    ADL (Accumulation/Distribution Line) – накопление/распределение


    Накопление / распределение – показывает силу движения, которая вычисляется как изменения цены относительно максимального размаха и объема торгов за бар. Приведем формулу:




    Сигналы

    • Дивергенции пиков цены и соответствующего уровня ADL.


    Автор: Ларри Вильямс (Larry Williams).

    Первоисточник: Ноw I made a Million Dollars. 1972. // Совпадает с MQL4 // Совпадает с Акелис

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

    function Initialize()

    {

    IndicatorName = "ADL";

    PriceStudy = false;

    AddInput("Input", Inputs.Candle);

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

    }
    function Evaluate()

    {

    // AlfaDirect. 2014. OX

    // Accumulation/Distribution Line (ADL)

    var CLV = ((Input.Close[0]-Input.Low[0]) - (Input.High[0]-Input.Close[0])) * Input.Volume[0];

    var Delta = (Input.High[0]-Input.Low[0]);

    if (Delta <= 0)

    CLV = 0;

    else

    CLV = CLV / Delta;
    if (CurrentIndex < 1)

    ADL = CLV;

    else

    ADL = ADL[-1] + CLV;

    }


    OBV (On-Balance Volume) – Балансовый объем


    OBV – динамический индикатор, соотносящий объем торгов и изменение цены.


    Сигналы

    • Пробой предыдущего экстремума

    • Дивергенция пиков цены и значения OBV

    • При боковом движении цены индикатор OBV показывает новые экстремумы


    Автор: Джозеф Грэнвиль (Joseph Granville).

    Первоисточник: New strategy of Daily Stock Market Trading. // В.Меладзе. Курс технического анализа.

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

    function Initialize()

    {

    IndicatorName = "OBV";

    AddInput("Input", Inputs.Candle);

    PriceStudy = false;

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

    }
    function Evaluate()

    {

    // AlfaDirect. 2014. OX

    // OBV (On Balance Volume) – балансовый объем

    if (CurrentIndex < 1)

    OBV = Input.Volume[0];

    else

    if (Input.Close[0] > Input.Close[-1])

    OBV = OBV[-1] + Input.Volume[0];

    else

    if (Input.Close[0] < Input.Close[-1])

    OBV = OBV[-1] - Input.Volume[0];

    else

    OBV = OBV[-1];

    }


    OICandle (Open Interest Candle) – свечной открытый интерес


    OICandle – индикатор, отображающий открытый интерес в виде свечки.

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

    function Initialize()

    {

    // Обязательные параметры:

    IndicatorName = "OICandle";

    AddInput("Input", Inputs.Candle);

    PriceStudy = false;

    AddSeries("Close", DrawAs.Custom, Color.Magenta);

    AddSeries("Open", DrawAs.Custom, Color.Blue);

    }
    function Evaluate()

    {

    // AlfaDirect. 2015.

    // Открытый интерес - изменение отображается свечкой.

    if ( CurrentIndex > 0 )

    {

    Open = Input.OpenInterest[-1];

    Close = Input.OpenInterest[0];

    if ( Input.OpenInterest[0] > Input.OpenInterest[-1] )

    Close.DrawHistogram(Open, Color.Lime, Line.Solid, 1, Color.Lime, 100);

    else

    Close.DrawHistogram(Open, Color.Red, Line.Solid, 1, Color.Red, 100);

    }

    }


    ADX (Average Directional Index) – ИНДЕКС СРЕДНЕГО НАПРАВЛЕНОГО ДВИЖЕНИЯ


    Индекс среднего направленного движения – это индикатор, показывающий силу текущего движения на рынке или среднюю величину приращений новых экстремумов.

    Расчет индикатора достаточно громоздкий.

    Шаг 1. Рассчитывается положительное и отрицательное направленное движение +DM и –DM, на основании правил, которые показаны на рис..



    Эти правила могут быть формализованы следующим образом.

    Если Ht > Ht-1, то +DMt = Ht – Ht-1, иначе +DMt = 0

    Если Lt < Lt-1, то –DMt = Lt-1 – Lt, иначе –DMt = 0

    Меньшее из +DMt и –DMt приравнивается к нулю. А если они равны друг другу, то к нулю приравниваются оба.
    Шаг 2. Вычисляется истинный диапазон TR (True Range)

    TRt = max( |LtCt-1|, |HtCt-1|, |HtLt| )

    Шаг 3. Вычисляем сглаженные индикаторы положительного направления +DI и отрицательного направления –DI.

    Если TRt = 0, то +SDIt = 0 и –SDIt = 0,

    Если TRt ≠ 0, то +SDIt = +DMt / TRt и –SDIt = –DMt / TRt.

    Сглаживая +SDI и -SDI экспоненциальным скользящим средним (EMA) с периодом Period, получаем

    +DIt = EMA( +SDI, Period),

    DIt = EMA(–SDI, Period).

    Шаг 4. Вычисляем среднее направленное движение ADX.

    Для этого сначала находим направленное движение DX.

    DXt = (|+DIt – –DIt| / |+DIt + –DIt|) × 100.

    Затем, сглаживая ряд DX, получаем значение ADX:

    ADXt = EMA (DX, Period).

    Индикатор ADX показывает силу тенденции, которая определяется как частота и величина формирования новых экстремумов. При росте индикатора ADX, можно говорить о том, что рыночный тренд становится сильнее. Падающий индикатор ADX сигнализирует, что доминирующая тенденция на рынке ослабевает или меняется. Линии +DI и –DI показывают превалирование новых максимумов или минимумов в текущем движении цены.
    Типовые параметры.

    Для индикатора обычно используется следующее типовое значение параметра Period = 14 на дневном тайм-фрейме.
    Сигналы.

    • ADX растет – показывает силу текущей тенденции.

    • ADX начинает расти из области менее 15 – начало тенденции после консолидации.

    • Пересечение +DIи -DI определяет направление сигнала.



    Автор. Уэллс Уайлдер (Welles Wilder).

    Первоисточник. Welles Wilder. New Concepts in Technical Trading Systems. 1978.

    Код Альфа-Директ. Экспоненциальное сглаживание // В первоисточнике сглаживание Wilder

    function Initialize()

    {

    IndicatorName = "ADX";

    PriceStudy = false;

    AddInput("Input", Inputs.Candle);

    AddParameter("Period", 14);

    AddSeries("ADX", DrawAs.Line, Color.Blue);

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

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

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

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

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

    }
    function Evaluate()

    {

    // AlfaDirect. 2015. OX

    // ADX (Average Directional Index) Сглаживание EMA.

    // Реализация MQL

    double KC = (double)2.0 / (Period + 1.0);

    double KE = 1.0 - KC;

    if (CurrentIndex == 0)

    {

    DIp = 0.0; DIn = 0.0; DIP = 0.0; DIN = 0.0; ADX = 0.0;

    vATR = Input.High[0] - Input.Low[0];

    }

    else

    {

    // Расчет (DX+ DX-) --------------------------

    double dH = Input.High[0] - Input.High[-1];

    double dL = Input.Low[-1] - Input.Low[0];

    double DXp = 0.0;

    double DXn = 0.0;
    if (dH > 0.0)

    DXp = dH;

    else

    DXp = 0.0;
    if (dL > 0)

    DXn = dL;

    else

    DXn = 0.0;
    if (DXp == DXn)

    {

    DXn = 0.0; DXp = 0.0;

    }

    if (DXp > DXn)

    DXn = 0.0;

    if (DXp < DXn)

    DXp = 0.0;

    // Расчет TR --------------------------------------------------

    double TR = Math.Max(Math.Max(Math.Abs(Input.High[0] - Input.Low[0]), Math.Abs(Input.High[0] - Input.Close[-1])), Math.Abs(Input.Low[0] - Input.Close[-1]));
    vATR = KE*vATR + KC*TR;

    // Расчет (DI+ DI-) ----------------------------------------------

    if (vATR < 0.00000000001)

    {

    DIp = KE*DIp;

    DIn = KE*DIn;

    DIP = DIP[-1];

    DIN = DIN[-1];

    }

    else

    {

    DIp = KE*DIp + KC*DXp;

    DIn = KE*DIn + KC*DXn;

    DIP = DIp / vATR * 100.0;

    DIN = DIn / vATR * 100.0;

    }
    // ADX --------------------------------

    double div = ( DIP[0] + DIN[0] );

    double Buffer = 0.0;

    if (div == 0.0)

    Buffer = 0.0;

    else

    Buffer = 100.0 * (Math.Abs(DIP[0]-DIN[0]) / div);
    ADX = KE*ADX[-1] + KC*Buffer;

    }

    }



    Учебный центр
    1   ...   16   17   18   19   20   21   22   23   24


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