Особенности
В текущем дне нижестоящего таймфрейма отрисовываются значения MACD для вчерашнего дня.
Описание MACD
Основная линия индикатора MACD представляет собой разницу между двумя экспоненциальными скользящими средними с периодами Nfast и Nslow, которая показывает схождение и расхождение средних
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_DAY";
PriceStudy = false;
AddInput("Input", Inputs.Price);
AddParameter("PFast", 10);
AddParameter("PSlow", 20, 30);
AddParameter("PSig", 10);
AddSeries("Line", DrawAs.Custom, Color.Gray);
AddSeries("Signal", DrawAs.Custom, Color.Red);
AddSeries("Histogram", DrawAs.Custom, Color.Black, AxisType.ZeroBased);
AddSeries("HistogramUp", DrawAs.Histogram, Color.Green, AxisType.ZeroBased);
AddSeries("HistogramDown", DrawAs.Histogram, Color.Red, AxisType.ZeroBased);
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);
AddGlobalVariable("Dir", Types.Boolean, true);
}
function Evaluate()
{
// evge 12.10.2016 http://alfadirect4.ru
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
{
if (BarDate(0) != BarDate(1))
{
EMA1 = (1.0 - KC1)*EMA1 + KC1*Input[1];
EMA2 = (1.0 - KC2)*EMA2 + KC2*Input[1];
Line = EMA1 - EMA2;
Signal = (1.0 - KC)*Signal[1] + KC*Line;
}
else
{
Line[0] = Line[1];
Signal[0] = Signal[1];
}
}
if (Line > Signal)
Line.DrawChannel(Signal, Color.Blue, 50);
else
Line.DrawChannel(Signal, Color.Red, 50);
Histogram = Line - Signal;
if (Histogram[0] > Histogram[1]) Dir = true; else
if (Histogram[0] < Histogram[1]) Dir = false;
if (Dir)
{
HistogramUp[0] = Histogram[0];
} else
{
HistogramDown[0] = Histogram[0];
}
}
Скачать исходный текст