wave6MACD_FZRt

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
wave6MACD_FZRt
//+------------------------------------------------------------------+
//|                                                wave analysis.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2004, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
//#property  indicator_separate_window
#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Red
#property  indicator_color2  Green
#property  indicator_color3  Blue
#property  indicator_color4  Yellow
#property  indicator_width1  4
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     wave_baza[];//ïåðâûé ÇÇ
double     wave_fzr[];//âòîðîé 
double     wave_fzrQ[];//òðåòèé
double     wave_fzrQfzr[];//÷åòâåðòûé
//---- buffers
int v01=10;
double     ExCen[10];
datetime   ExTime[10];

double     ExCenF[10];
datetime   ExTimeF[10];

double     ExCenQ[10];
datetime   ExTimeQ[10];

double     ExCenQfzr[10];
datetime   ExTimeQfzr[10];
//---
double macd[10000];
double signal[10000];
//---
int pusk,shift,InD,tip,tip01;
double EXC,predExCenF,High_or_Bid,Low_or_Bid;
datetime MomenTus,EXT,perMA;
static int prevtime,prevtime02,prevtime03;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION,EMPTY,4);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,3);
   SetIndexStyle(2,DRAW_SECTION,EMPTY,2);
   SetIndexStyle(3,DRAW_SECTION,EMPTY,1);
   IndicatorDigits(Digits+1);
//---- indicator buffers mapping
   SetIndexBuffer(0,wave_baza);
   SetIndexBuffer(1,wave_fzr);
   SetIndexBuffer(2,wave_fzrQ);
   SetIndexBuffer(3,wave_fzrQfzr);
//SetIndexDrawBegin(0,Bars-1000);
//SetIndexDrawBegin(1,Bars-1000);
//---- name for DataWindow and indicator subwindow label
//IndicatorShortName("wave_02("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//SetIndexLabel(0,"MACD");
//SetIndexLabel(1,"Signal");
//---- initialization done
   return(0);
  }
//+-------------------------------------------------------------------------------------------+
//| Îïðåäåëåíèå âîëíîâîé ñòðóêòóðû ðûíêà, è ïîñëåäóþùèé åãî àíàëèç íà îñíîâå ïîëó÷åííûõ äàííûõ|
//+-------------------------------------------------------------------------------------------+
int start()
  {
   int i,limit;
   ArraySetAsSeries(macd,true);
   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)  return(-1);
   if(counted_bars > 0)   counted_bars--;
   limit = Bars - counted_bars;
   if(counted_bars==0) limit-=1+1+v01;
      
//--01-- çàïîëíåíèå ìàññèâîâ ýêñòðåìóìàìè
   if(Time[0]!=prevtime)
     {
      prevtime = Time[0];
      if(pusk==0)
        {
         //limit=ArraySize(macd);
         for(i=0; i<limit; i++)
            macd[i]=(iMA(NULL,0,FastEMA,0,MODE_SMA,PRICE_OPEN,i)-iMA(NULL,0,SlowEMA,0,MODE_SMA,PRICE_OPEN,i))*1000;
         for(i=0; i<limit; i++)
            signal[i]=iMAOnArray(macd,limit,SignalSMA,0,MODE_SMA,i);
         //ArraySetAsSeries(macd,false);
        }
      else
        {
         //limit=SignalSMA;
         for(i=0; i<limit; i++)
            macd[i]=(iMA(NULL,0,FastEMA,0,MODE_SMA,PRICE_OPEN,i)-iMA(NULL,0,SlowEMA,0,MODE_SMA,PRICE_OPEN,i))*1000;
         signal[1]=signal[0];
         double sumsig=0;
         for(i=0;i<limit; i++)
           {
            sumsig=sumsig+macd[i];
           }
         signal[0]=sumsig/SignalSMA;
        }
     }
//----wave_baza/wave_fzr counted in the 1-st buffer
   //if(pusk==1)limit=0;
   
   for(i=limit; i>=0; i--)//
     {
      if(false)
        {//limit==0
         High_or_Bid=NormalizeDouble(Close[0],Digits);
         Low_or_Bid=NormalizeDouble(Close[0],Digits);
        }
      else
        {
         High_or_Bid=NormalizeDouble(High[i+1],Digits);
         Low_or_Bid=NormalizeDouble(Low[i+1],Digits);
        }
      //pusk=1;
      if(Time[i]!=prevtime02)
        {
         prevtime02=Time[i];
         //ðàñ÷åò wave_baza
         EXC=0;
         EXT=0;
         if(macd[i+1]>0)
           {
            if(macd[i]<=0)
              {
               //if(perMA==Time[i])continue;
               //perMA=Time[i];
               //Alert("âðåìÿ1=",TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
               //Alert("i=",i,"[i+1]",MacdBuffer[i+1],"[i]",MacdBuffer[i]);
               if(MomenTus==0){MomenTus=Time[i];continue;}//ïåðâîå ïåðåñå÷åíèå
               if(ExCen[0]==0)shift=iBarShift(NULL,0,MomenTus,FALSE)-i;//èñïîëüçóåì äî ïîÿâëåíèÿ ïåðâîãî ýêñò.
               else shift=iBarShift(NULL,0,ExTime[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
               if(shift<=0)Alert("shift"," ",shift);
               else
                 {
                  //--
                  InD=iHighest(NULL,0,MODE_HIGH,shift,i+1);
                  EXC=nd(High[InD]);
                  EXT=Time[InD];
                 }
              }
           }
         if(macd[i+1]<0)
           {
            if(macd[i]>=0)
              {
               //if(perMA==Time[i])continue;
               //perMA=Time[i];
               //Alert("âðåìÿ2=",TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
               //Alert("i=",i,"[i+1]",MacdBuffer[i+1],"[i]",MacdBuffer[i]);
               if(MomenTus==0){MomenTus=Time[i];continue;}//ïåðâîå ïåðåñå÷åíèå
               if(ExCen[0]==0)shift=iBarShift(NULL,0,MomenTus,FALSE)-i;//èñïîëüçóåì äî ïîÿâëåíèÿ ïåðâîãî ýêñò.
               else shift=iBarShift(NULL,0,ExTime[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
               if(shift<=0)Alert("shift"," ",shift);
               else
                 {
                  //--
                  InD=iLowest(NULL,0,MODE_LOW,shift,i+1);
                  EXC=nd(Low[InD]);
                  EXT=Time[InD];
                 }
              }
           }
         if(EXC!=0)
           {
            for(int im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
              {
               if(im==0){ExCen[0]=EXC;ExTime[0]=EXT;break;}
               ExCen[im]=ExCen[im-1];
               ExTime[im]=ExTime[im-1];
              }
            wave_baza[InD]=EXC;
            EXC=0;
            EXT=0;
            //ðàñ÷åò wave_fzr
            if(ExCenF[1]==0)
              {
               ExCenF[0]=ExCen[0];
               ExCenF[1]=ExCen[1];
               ExTimeF[0]=ExTime[0];
               ExTimeF[1]=ExTime[1];
               wave_fzr[InD]=ExCenF[0];
               tip=1;
               continue;
              }
            if(tip==1)
              {
               if(ExCenF[1]<ExCenF[0])
                 {
                  if(macd[i]>0)
                    {
                     shift=iBarShift(NULL,0,ExTimeF[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                     if(shift<=0)Alert("shift"," ",shift);
                     else
                       {
                        InD=iLowest(NULL,0,MODE_LOW,shift,i+1);
                        EXC=nd(Low[InD]);
                        EXT=Time[InD];
                       }
                    }
                 }
               if(ExCenF[1]>ExCenF[0])
                 {
                  if(macd[i]<0)
                    {
                     shift=iBarShift(NULL,0,ExTimeF[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                     if(shift<=0)Alert("shift"," ",shift);
                     else
                       {
                        InD=iHighest(NULL,0,MODE_HIGH,shift,i+1);
                        EXC=nd(High[InD]);
                        EXT=Time[InD];
                       }
                    }
                 }
               if(EXC!=0)
                 {
                  if(EXC!=ExCenF[0])
                    {
                     for(im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
                       {
                        if(im==0){ExCenF[0]=EXC;ExTimeF[0]=EXT;break;}
                        ExCenF[im]=ExCenF[im-1];
                        ExTimeF[im]=ExTimeF[im-1];
                       }
                     wave_fzr[InD]=EXC;
                     EXC=0;
                     EXT=0;
                     tip=2;
                     //continue;
                    }
                 }
              }
           }
        }
      if(tip==2)
        {
         EXC=0;
         EXT=0;
         if(ExCenF[1]<ExCenF[0])
           {
            if(ExCenF[1]>Low_or_Bid)tip=1;
            else
              {
               if(ExCenF[0]<High_or_Bid)
                 {
                  shift=iBarShift(NULL,0,ExTimeF[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                  if(shift<=0)Alert("shift"," ",shift);
                  else
                    {
                     InD=iLowest(NULL,0,MODE_LOW,shift,i+1);
                     EXC=nd(Low[InD]);
                     EXT=Time[InD];
                    }
                 }
              }
           }
         if(ExCenF[1]>ExCenF[0])
           {
            if(ExCenF[1]<High_or_Bid)tip=1;
            else
              {
               if(ExCenF[0]>Low_or_Bid)
                 {
                  shift=iBarShift(NULL,0,ExTimeF[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                  if(shift<=0)Alert("shift"," ",shift);
                  else
                    {
                     InD=iHighest(NULL,0,MODE_HIGH,shift,i+1);
                     EXC=nd(High[InD]);
                     EXT=Time[InD];
                    }
                 }
              }
           }
         if(EXC!=0)
           {
            if(EXC!=ExCenF[0])
              {
               for(im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
                 {
                  if(im==0){ExCenF[0]=EXC;ExTimeF[0]=EXT;break;}
                  ExCenF[im]=ExCenF[im-1];
                  ExTimeF[im]=ExTimeF[im-1];
                 }
               wave_fzr[InD]=EXC;
               EXC=0;
               EXT=0;
               tip=1;
              }
           }
        }
      //ðàñ÷åò wave_fzrQ
      if(predExCenF!=ExCenF[0])
        {
         EXC=0;
         EXT=0;
         if(MathAbs(ExCenF[2]-ExCenF[1])<MathAbs(ExCenF[1]-ExCenF[0]))
           {
            if(ExCenF[1]<ExCenF[0])
              {
               if(ExCenF[1]>Low_or_Bid)
                 {
                  EXC=ExCenF[0];
                  EXT=ExTimeF[0];
                 }
              }
            else
              {
               if(ExCenF[1]<High_or_Bid)
                 {
                  EXC=ExCenF[0];
                  EXT=ExTimeF[0];
                 }
              }
            if(EXC!=0)
              {
               if(EXC!=ExCenQ[0])
                 {
                  for(im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
                    {
                     if(im==0){ExCenQ[0]=EXC;ExTimeQ[0]=EXT;break;}
                     ExCenQ[im]=ExCenQ[im-1];
                     ExTimeQ[im]=ExTimeQ[im-1];
                    }
                  shift=iBarShift(NULL,0,ExTimeF[0],FALSE);
                  wave_fzrQ[shift]=EXC;
                  EXC=0;
                  EXT=0;
                  predExCenF=ExCenF[0];
                 }
              }
           }
        }
      //ðàñ÷åò wave_fzrQfzr
      if(true)
        {//ðàñ÷åò wave_fzrQfzr
         EXC=0;
         EXT=0;
         if(ExCenQfzr[1]==0)
           {
            ExCenQfzr[0]=ExCenQ[0];
            ExCenQfzr[1]=ExCenQ[1];
            ExTimeQfzr[0]=ExTimeQ[0];
            ExTimeQfzr[1]=ExTimeQ[1];
            shift=iBarShift(NULL,0,ExTimeQ[0],FALSE);
            wave_fzrQfzr[shift]=ExCenQfzr[0];
            continue;
           }
         if(tip01==1)
           {
            if(ExCenQfzr[1]>ExCenQfzr[0])
              {
               if(ExCenQfzr[1]<ExCenQ[0])
                 {
                  EXC=ExCenQ[0];
                  EXT=ExTimeQ[0];
                 }
              }
            else
              {
               if(ExCenQfzr[1]>ExCenQ[0])
                 {
                  EXC=ExCenQ[0];
                  EXT=ExTimeQ[0];
                 }
              }
            if(EXC!=0)
              {
               if(EXC!=ExCenQfzr[0])
                 {
                  for(im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
                    {
                     if(im==0){ExCenQfzr[0]=EXC;ExTimeQfzr[0]=EXT;break;}
                     ExCenQfzr[im]=ExCenQfzr[im-1];
                     ExTimeQfzr[im]=ExTimeQfzr[im-1];
                    }
                  shift=iBarShift(NULL,0,ExTimeQ[0],FALSE);
                  wave_fzrQfzr[shift]=EXC;
                  EXC=0;
                  EXT=0;
                  tip01=0;
                 }
              }
           }
         if(tip01==0)
           {
            EXC=0;
            EXT=0;
            if(ExCenQfzr[1]<ExCenQfzr[0])
              {
               if(ExCenQfzr[1]>Low_or_Bid)tip01=1;
               else
                 {
                  if(ExCenQfzr[0]<High_or_Bid)
                    {
                     shift=iBarShift(NULL,0,ExTimeQfzr[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                     if(shift<=0)Alert("shift"," ",shift);
                     else
                       {
                        InD=iLowest(NULL,0,MODE_LOW,shift,i+1);
                        EXC=nd(Low[InD]);
                        EXT=Time[InD];
                       }
                    }
                 }
              }
            else
              {
               if(ExCenQfzr[1]<High_or_Bid)tip01=1;
               else
                 {
                  if(ExCenQfzr[0]>Low_or_Bid)
                    {
                     shift=iBarShift(NULL,0,ExTimeQfzr[0],FALSE)-i-1;//èùåì î÷åðåäíîé ýêñò. îò ïðåäûäóùåãî ýêñò.
                     if(shift<=0)Alert("shift"," ",shift);
                     else
                       {
                        InD=iHighest(NULL,0,MODE_HIGH,shift,i+1);
                        EXC=nd(High[InD]);
                        EXT=Time[InD];
                       }
                    }
                 }
              }
            if(EXC!=0)
              {
               if(EXC!=ExCenQfzr[0])
                 {
                  for(im=v01-1;im>=0;im--)//çàïîëíåíèå ìàññèâîâ íîâûìè äàííûìè
                    {
                     if(im==0){ExCenQfzr[0]=EXC;ExTimeQfzr[0]=EXT;break;}
                     ExCenQfzr[im]=ExCenQfzr[im-1];
                     ExTimeQfzr[im]=ExTimeQfzr[im-1];
                    }
                  wave_fzrQfzr[InD]=EXC;
                  EXC=0;
                  EXT=0;
                  tip01=1;
                 }
              }
           }
        }
      //---
     }
   pusk=1;
//Comment("0=",TimeToStr(ExTimeF[0],TIME_DATE|TIME_MINUTES),"1=",TimeToStr(ExTimeF[1],TIME_DATE|TIME_MINUTES),"2=",TimeToStr(ExTimeF[2],TIME_DATE|TIME_MINUTES));
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
double nd(double in_002f,string sy="")
  {
   if(sy=="")sy=Symbol();
   return(NormalizeDouble(in_002f,MarketInfo(sy,MODE_DIGITS)));
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---