|  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( |Lt – C t-1|, |Ht – Ct-1|, |Ht – Lt| )
 
 Шаг 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;
 
 }
 
 }
 
 
 
 
            Учебный центр
 
 |