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

MACD Divergence

Добавлено: 30 янв 2017, 13:20
Den98
Подскажите, пожалуйста, можно ли в Альфа-Директ реализовать индикатор,
отслеживающий дивергенцию?

Пример на картинке

Изображение

Спасибо!

Re: MACD Divergence

Добавлено: 30 янв 2017, 13:32
evge
можно, если Вам удастся четко формализовать данные события без субъективного составляющего :)

Re: MACD Divergence

Добавлено: 30 янв 2017, 13:55
Den98
evge писал(а):можно, если Вам удастся четко формализовать данные события без субъективного составляющего :)


А если, например, использовать логику из аналогичного индикатора для МТ4? (в атаче).
MACD_Divergence.7z
(2.03 КБ) 936 скачиваний


Можно сделать аналог для Альфа-Директ?

Re: MACD Divergence

Добавлено: 30 янв 2017, 16:36
evge
Den98 писал(а):Можно сделать аналог для Альфа-Директ?


Можно, но у меня пока нет возможности посмотреть даже как в mt4 реализовано.
В ближайшие дни посмотрю и отпишу тут.

Re: MACD Divergence

Добавлено: 30 янв 2017, 16:46
Den98
evge писал(а):
Den98 писал(а):Можно сделать аналог для Альфа-Директ?


Можно, но у меня пока нет возможности посмотреть даже как в mt4 реализовано.
В ближайшие дни посмотрю и отпишу тут.



Спасибо! Буду ждать.

Re: MACD Divergence

Добавлено: 05 фев 2017, 18:38
evge
Den98 писал(а):Спасибо! Буду ждать.


Извиняюсь, но возможности нет пока. посмотрю по возможности, болею :(

Re: MACD Divergence

Добавлено: 06 фев 2017, 12:30
Den98
evge писал(а):
Den98 писал(а):Спасибо! Буду ждать.


Извиняюсь, но возможности нет пока. посмотрю по возможности, болею :(



Ок. Поправляйтесь!

Re: MACD Divergence

Добавлено: 06 фев 2017, 12:33
evge
Код в МТ4 изучил.
Алгоритм не сложный, но АД4 не позволяется рисовать произвольные линии в истории на графике в индикаторах в раках одной серии (он соединяет все точки указанные в серии между собой, образуя ломаную).
Отметить участок дивергенции конечно можно, но не с помощью трендовых линий. Либо отметить трендовой линией одну, последнюю дивергенцию бычью и медвежью.

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

Re: MACD Divergence

Добавлено: 06 фев 2017, 15:20
evge
Вот пока получилось вот это.
Если есть идеи по развитию предлагайте.

MACDDivergence-00.png
MACDDivergence-00.png (39.32 КБ) 22650 просмотров

MACDDivergence-01.png
MACDDivergence-01.png (33.74 КБ) 22650 просмотров


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

function Initialize()
{
IndicatorName = "MACDDivergence";
PriceStudy = true;
AddInput("I", Inputs.Candle);
AddParameter("pFast", 12);
AddParameter("pSlow", 26);
AddParameter("signal", 9);

AddParameter("Bars", 300, 1);

AddSeries("Histogram", DrawAs.Histogram, Color.Blue, AxisType.ZeroBased, true, Axes.New);
AddSeries("Line", DrawAs.Line, Color.Green, AxisType.ZeroBased, true, Axes.New);
AddSeries("SignalLine", DrawAs.Line, Color.Silver, AxisType.ZeroBased, true, Axes.New);

AddSeries("NTLBull", DrawAs.Custom, Color.Green, AxisType.ZeroBased, true, Axes.New);
AddSeries("NTLBear", DrawAs.Custom, Color.Red, AxisType.ZeroBased, true, Axes.New);

}

function Evaluate()
{

// evge 06.02.2017 http://alfadirect4.ru

NTLBull.DrawCircle();
NTLBear.DrawCircle();

var M = MACD(I.Close, pFast, pSlow, signal);

Histogram = M["Histogram"][0];
Line = M["Line"][0];
SignalLine = M["SignalLine"][0];

int shift = 0;

// Bullish \ Bearish Divergence

int current = shift;
int lastTrough = -1;
int lastPeak = -1;

for(int i = shift+2; i < Bars; i++)
   {
   if(SignalLine[i] <= SignalLine[i+1] && SignalLine[i] <= SignalLine[i+2] &&
      SignalLine[i] <= SignalLine[i-1] && SignalLine[i] <= SignalLine[i-2])
     {
       for (int j = i; j < Bars; j++)
         {
           if(Line[j] <= Line[j+1] && Line[j] < Line[j+2] &&
              Line[j] <= Line[j-1] && Line[j] < Line[j-2])
              {
              lastTrough = j;
              break;
              }
         }
     }
   if(SignalLine[i] >= SignalLine[i+1] && SignalLine[i] >= SignalLine[i+2] &&
      SignalLine[i] >= SignalLine[i-1] && SignalLine[i] >= SignalLine[i-2])
     {
       for (int j = i; j < Bars; j++)
         {
           if(Line[j] >= Line[j+1] && Line[j] > Line[j+2] &&
              Line[j] >= Line[j-1] && Line[j] > Line[j-2])
              {
              lastPeak = j;
              break;
              }
         }
     }
   if (lastTrough != -1 || lastPeak != -1) break;
   }
   
if ((lastTrough != -1) &&
   (
   (Line[current] > Line[lastTrough] &&
    I.Low[current] < I.Low[lastTrough])
    ||
   (Line[current] < Line[lastTrough] &&
    I.Low[current] > I.Low[lastTrough])
    )
   )
   {
   NTLBull[current] = Line[current];
   }

if ((lastPeak != -1) &&
   (
   (Line[current] > Line[lastPeak] &&
    I.High[current] < I.High[lastPeak])
    ||
   (Line[current] < Line[lastPeak] &&
    I.High[current] > I.High[lastPeak])
    )
   )
   {
   NTLBear[current] = Line[current];
   }
   
}

Re: MACD Divergence

Добавлено: 08 фев 2017, 18:59
Den98
evge писал(а):Вот пока получилось вот это.
Если есть идеи по развитию предлагайте.
[/code]


Спасибо! Буду смотреть.