Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 06 фев 2017, 15:19

Тема: Re: MACD Divergence

Текст сообщения:

Вот пока получилось вот это.
Если есть идеи по развитию предлагайте.

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

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


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

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];
   }
   
}