MACDt = EMA(C, Nfast) – EMA(C, Nslow).
Для определения направления MACD используется сигнальная линия, которая вычисляется как
Signalt = EMA(MACD, Nsignal).
Типовые параметры
Для данного индикатора исторически типовыми являются следующие значения параметров Nfast = 12, Nslow = 26, Nsignal = 9. Индивидуально параметры выбираются на основании карты доходности.
Сигналы
- Пересечение основной линии индикатора MACD с нулевым уровнем – трендовый сигнал, который соответствует пересечению базовых скользящих средних (EMA).
- Пересечение основной линии индикатора MACD со своей сигнальной линией – соответствует упреждающему сигналу, который возникает при развороте направления движения или при его замедлении.
- Анализ дивергенций между экстремумами индикатора MACD и ценой.
Автор: Джеральд Аппель (Gerald Appel)
Источник: Джеральд Аппель, Технический анализ. Эффективные инструменты для активного инвестора.
Пример:
Исходный текст:
Код: Выделить всё
function Initialize()
{   
IndicatorName = "MACD";
PriceStudy = false;         
AddInput("Input", Inputs.Price);               
AddParameter("PFast", 10);                        
AddParameter("PSlow", 20, 2);
AddParameter("PSig", 10);                        
AddSeries("Line", DrawAs.Custom, Color.Gray);   
AddSeries("Signal", DrawAs.Custom, Color.Red);   
AddLevel(0, Color.Gray, "Line");
AddGlobalVariable("EMA1", Types.Double,  0.0);
AddGlobalVariable("EMA2", Types.Double,  0.0);
AddGlobalVariable("KC1", Types.Double, 0.0);
AddGlobalVariable("KC2", Types.Double, 0.0);
AddGlobalVariable("KC", Types.Double, 0.0);
}
function Evaluate()
{
// AlfaDirect. 2015.  
// Схождение и расхождение скользящих средних 
// (MACD - Moving Average convergence & divergence). 
// Автор -  Джеральд Аппель (Gerald Appel).
   if( CurrentIndex < 1 )
   {   
      EMA1 = Input[0];                                      
      EMA2 = Input[0];                                      
     Line = 0.0;
     Signal = 0.0;
       KC1 = 2.0 /  ((double) PFast + 1.0);
       KC2 = 2.0 / ((double) PSlow + 1.0);
       KC  = 2.0 / ((double) PSig  + 1.0);
   }
   else
   {
       EMA1 = (1.0 - KC1)*EMA1 + KC1*Input[0];
       EMA2 = (1.0 - KC2)*EMA2 + KC2*Input[0];
      Line  = EMA1 - EMA2;
      Signal  = (1.0 - KC)*Signal[-1] + KC*Line;
   }
  if (Line > Signal)
       Line.DrawChannel(Signal, Color.Blue, 50);
  else
      Line.DrawChannel(Signal, Color.Red, 50);
}
Индикатор является встроенным индикатором, поэтому создавать пользовательский индикатор не имеет смысла.
 Изображения (1057)
 Изображения (1057) Архивы (82)
 Архивы (82) Текстовые файлы (9)
 Текстовые файлы (9) Документы (7)
 Документы (7) Скрипты Альфа-Директ 4 (30)
 Скрипты Альфа-Директ 4 (30)