Страница 1 из 1

MACD ALERT

Добавлено: 09 дек 2016, 00:23
Vorobey
Доброго времени суток!

Кто может написать простой индикатор
MACD ALERT чтобы при пересечении macd линии через ноль он рисовал стрелку на главном графике

может уже есть такой индикатор для Альфа 4,0 поделитесь пожалуйста

или посоветуйте где почитать или у кого поинтересоваться

Спасибо!

Re: MACD ALERT

Добавлено: 09 дек 2016, 07:46
evge
именно macd линии через ноль?

может лучше пересечение macd линии и сигнальной?

наверное имелось ввиду именно то что написал я, Вы macd линией называете гистограмму macd (разницу между сигнальной и линией macd)?
Пересечение гистограммы через ноль это и есть пересечение линии macd с сигнальной линией.

Re: MACD ALERT

Добавлено: 09 дек 2016, 07:59
evge
В настройках индикатора после добавления на график желательно увеличить размер до 5 для Buy и Sell, т.к. невелики размеры стрелок на графике. На скриншоте ниже размер 5 у Buy/Sell.

Код: Выделить всё

function Initialize()
{   
IndicatorName = "MACDSignal";
PriceStudy = false;         
AddInput("Input", Inputs.Price);               
AddParameter("PFast", 12);                       
AddParameter("PSlow", 26, 2);
AddParameter("PSig", 9);                       
AddSeries("Line", DrawAs.Custom, Color.Gray);   
AddSeries("Signal", DrawAs.Custom, Color.Red);   
AddSeries("Buy", DrawAs.Custom, Color.Green, true, Axes.Parent);   
AddSeries("Sell", DrawAs.Custom, Color.Red, true, Axes.Parent);   
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).
//
// evge 09.12.2016 http://alfadirect4.ru
// Добавлены сигналы на графике Buy, Sell

   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);

if (Line[1] < Signal[1] && Line[0] >= Signal[0]) { Buy = Input[0]; Buy.DrawArrowUp(); }
if (Line[1] > Signal[1] && Line[0] <= Signal[0]) { Sell = Input[0]; Sell.DrawArrowDown(); }

}


MACDSignal-01.png
MACDSignal-01.png (44.63 КБ) 16789 просмотров

Re: MACD ALERT

Добавлено: 11 дек 2016, 18:13
Vorobey
почему у меня при стандартных настройках
вот такая дискотека
а у вас такого на графике нету
Изображение

Re: MACD ALERT

Добавлено: 11 дек 2016, 18:27
Vorobey
например
стандартный индикатор для мт4 macd cross zero
сигнал появляется на на втором гистограмме после нуля

при параметрах macd 34/144/1 даёт много хорошие сигналов

Изображение

Re: MACD ALERT

Добавлено: 11 дек 2016, 19:56
evge
Vorobey писал(а):почему у меня при стандартных настройках
вот такая дискотека
а у вас такого на графике нету


я выбрал такой пример и большую роль играют параметры MACD.

Ваш пример ниже тоже дискотеку устраивает. :)
Поменять логику на пересечение MACD линии 0 очень просто.

Замените в коде

Код: Выделить всё

if (Line[1] < Signal[1] && Line[0] >= Signal[0]) { Buy = Input[0]; Buy.DrawArrowUp(); }
if (Line[1] > Signal[1] && Line[0] <= Signal[0]) { Sell = Input[0]; Sell.DrawArrowDown(); }

на

Код: Выделить всё

if (Line[1] < 0 && Line[0] >= 0) { Buy = Input[0]; Buy.DrawArrowUp(); }
if (Line[1] > 0 && Line[0] <= 0) { Sell = Input[0]; Sell.DrawArrowDown(); }

Re: MACD ALERT

Добавлено: 12 дек 2016, 00:08
Vorobey
всё получилось
спасибо вам огромное