rvmGann_sv8

Download script
Author: Copyright � 2005, MetaQuotes Software Corp.
rvmGann_sv8

This script functions as a sophisticated technical analysis tool designed to identify key structural points in financial price action. It focuses on mapping out significant high and low peaks (swings) while analyzing the "momentum" or "tendency" of price movements using a multi-layered logic system.

Core Functionality

1. Structural Peak Detection The script scans historical price data to identify significant highs and lows. Rather than marking every minor fluctuation, it establishes a framework of "active" maximums and minimums. It tracks these points to help traders visualize the overall skeletal structure of the market trend.

2. Trend and Momentum Tracking A primary feature of this script is its ability to count consecutive price behaviors. It maintains internal counters that track sequences of price action. This allows it to recognize when a market is consistently pushing in one direction versus when it is showing signs of exhaustion or reversal.

3. Intelligent Sequence Analysis The logic includes a specialized routine for determining how new peaks are formed. It doesn't just look at whether a price is higher than the previous high; it evaluates the relationship between opening prices, closing prices, and the extremes of the current candle. It uses these relationships to categorize "breakouts" or "breakdowns," providing a clearer picture of market intent.

4. Dynamic Drawing Logic The script manages how visual information is presented on your chart. It uses a state-based system (switching between upward and downward trends) to ensure that the markings remain clean and relevant. When certain conditions are met—such as a specific number of consecutive moves in one direction being reached—the script can automatically switch its focus, highlighting potential trend shifts or price reversals.

Summary for the User

In simple terms, this tool acts as an automated "trend mapper." It filters out the market noise to highlight significant structural highs and lows, while simultaneously keeping a tally of how many consecutive moves the market has made in a single direction. By identifying these key structural points and momentum counts, it helps traders see the broader "flow" of the market more clearly.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
14 Views
0 Downloads
0 Favorites
rvmGann_sv8
//+------------------------------------------------------------------+
//|                                                  rvmGann_sv8.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
//#property indicator_color3 DeepSkyBlue
//#property indicator_color4 DeepSkyBlue
//#property indicator_color5 DeepSkyBlue
//#property indicator_color6 DeepSkyBlue
//#property indicator_color7 DeepSkyBlue
//#property indicator_color8 DeepSkyBlue
//---- input parameters
extern int GSv_tend=2;
//---- buffers
double Upz[];
double Dnz[];
double sH[];
double sL[];
double aH[];
double aL[];
double fB[];
double lB[];
//----------
double CurH,CurL;
int lb,sp,lbars;
bool draw_up,draw_dn;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(8);
   SetIndexStyle(0,DRAW_ZIGZAG,STYLE_SOLID);
   SetIndexStyle(1,DRAW_ZIGZAG,STYLE_SOLID);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexStyle(5,DRAW_NONE);
   SetIndexStyle(6,DRAW_NONE);
   SetIndexStyle(7,DRAW_NONE);
   SetIndexBuffer(0,Upz);
   SetIndexBuffer(1,Dnz);
   SetIndexBuffer(2,sH);
   SetIndexBuffer(3,sL);
   SetIndexBuffer(4,aH);
   SetIndexBuffer(5,aL);
   SetIndexBuffer(6,fB);
   SetIndexBuffer(7,lB);
   SetIndexEmptyValue(0,0);
   SetIndexEmptyValue(1,0);
   SetIndexEmptyValue(2,0);
   SetIndexEmptyValue(3,0);
   SetIndexEmptyValue(4,-1);
   SetIndexEmptyValue(5,-1);
   SetIndexEmptyValue(6,-1);
   SetIndexEmptyValue(7,-1);
   SetIndexLabel(0,"z1");
   SetIndexLabel(1,"z2");
   SetIndexLabel(2,"sH");
   SetIndexLabel(3,"sL");
   SetIndexLabel(4,"aH");
   SetIndexLabel(5,"aL");
   SetIndexLabel(6,"fB");
   SetIndexLabel(7,"lB");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int cb,index,limit,ai,i;
//---- 
   if(!counted_bars<0 )
     {
      index=Bars-1;
      if(index-counted_bars<2 )
        {
         limit=0;
        }
      else
        {
         limit=index-counted_bars-1;
        }
     }
   else
     {
      Alert("Ñáîé ðàñ÷åòà èíäèêàòîðà rvmGSv_mt");
      return(-1);
     }
//----
   for( cb=limit; cb>=0; cb-- )
     {
      ai=index-cb;
      if(lbars!=Bars && lb==ai )
        {
         lbars=Bars;
         continue;
        }
      if(lb!=ai )
        {
         lb=ai;
         if(Upz[cb+1]>0 || Dnz[cb+1]>0 )
           {
            aH[cb]=High[cb+1];
            aL[cb]=Low[cb+1];
           }
         else
           {
            if(High[cb+1]<=aH[cb+1] && Low[cb+1]>=aL[cb+1] )
              {
               aH[cb]=aH[cb+1];
               aL[cb]=aL[cb+1];
               sH[cb]=sH[cb+1];
               sL[cb]=sL[cb+1];
              }
            else
              {
               if(High[cb+1]>aH[cb+1] )
                 {
                  aH[cb]=High[cb+1];
                 }
               else
                 {
                  aH[cb]=aH[cb+1];
                 }
               if(aL[cb+1]>0 )
                 {
                  if(Low[cb+1]<aL[cb+1] )
                    {
                     aL[cb]=Low[cb+1];
                    }
                  else
                    {
                     aL[cb]=aL[cb+1];
                    }
                 }
               else
                 {
                  aL[cb]=Low[cb+1];
                 }
              }
           }
         if(draw_up!=0 )
           {
            if(fB[cb+1]==1 )
              {
               sH[cb]=sH[cb+1]+1;
               if(lB[cb+1]==0 )
                 {
                  sH[cb]=0;
                  sL[cb]=1;
                 }
              }
            else
              {
               if(fB[cb+1]==0 )
                 {
                  sL[cb]=sL[cb+1]+1;
                  if(lB[cb+1]==1 )
                    {
                     sH[cb]=1;
                     sL[cb]=0;
                    }
                 }
              }
           }
         else
           {
            if(draw_dn!=0 )
              {
               if(fB[cb+1]==0 )
                 {
                  sL[cb]=sL[cb+1]+1;
                  if(lB[cb+1]==1 )
                    {
                     sH[cb]=1;
                     sL[cb]=0;
                    }
                 }
               else
                 {
                  if(fB[cb+1]==1 )
                    {
                     sH[cb]=sH[cb+1]+1;
                     if(lB[cb+1]==0 )
                       {
                        sH[cb]=0;
                        sL[cb]=1;
                       }
                    }
                 }
              }
            else
              {
               if(fB[cb+1]==1 )
                 {
                  sH[cb]=sH[cb+1]+1;
                  sL[cb]=sL[cb+1];
                  if(lB[cb+1]==0 )
                    {
                     sL[cb]++;
                    }
                 }
               else
                 {
                  if(fB[cb+1]==0 )
                    {
                     sH[cb]=sH[cb+1];
                     sL[cb]=sL[cb+1]+1;
                     if(lB[cb+1]==1 )
                       {
                        sH[cb]++;
                       }
                    }
                 }
              }
           }
         if(GSv_tend>1 )
           {
            //åñëè íà ïðåäûäóùåé ñâå÷å áûëî ïðåëîìëåíèå ââåðõ è îíà âíåøíÿÿ ïî îòíîøåíèþ ê ïðåäûäóùåé + ïîñëåäíèé ìèíèìóì
            if(sH[cb]==GSv_tend && Upz[cb+1]>0 && High[cb+1]>High[cb+2] && Low[cb+1]<Low[cb+2] && fB[cb+1]==1 )
              {
               sL[cb]=1;
              }
            else //èíà÷å åñëè íà ïðåäûäóùåé ñâå÷å ñ÷åò÷èê áûëî ïðåëîìëåíèå ââåðõ
              {
               //åñëè íà ïðåäûäóùåé ñâå÷å áûëî ïðåëîìëåíèå âíèç è îíà âíåøíÿÿ ïî îòíîøåíèþ ê ïðåäûäóùåé + ïîñëåäíèé ìàêñèìóì
               if(sL[cb]==GSv_tend && Dnz[cb+1]>0 && High[cb+1]>High[cb+2] && Low[cb+1]<Low[cb+2] && fB[cb+1]==0 )
                 {
                  sH[cb]=1;
                 }
              }
           }
         //îáíóëÿåì
         CurH=0;
         CurL=Low[cb];
        }
      if(High[cb]<=aH[cb] && Low[cb]>=aL[cb] )
        {
         continue;
        }
      if(High[cb]<=CurH && Low[cb]>=CurL )
        {
         continue;
        }
      if(High[cb]>CurH)CurH=High[cb];
      if(Low[cb] <CurL)CurL=Low[cb];
      Extr_seq(cb);
      //åñëè ñâèíã äâóõ è áîëåå áàðîâûé, òî åñëè ïåðâûé õàé-îáíóëÿåì ñ÷åò÷èê ìèíìóìîâ, à åñëè ïåðâûé-ëîó, îáíóëÿåì ñ÷åò÷èê ìàêñèìóìîâ
      if(GSv_tend>1 )
        {
         if(fB[cb]>0 && sH[cb]==GSv_tend-1 && sL[cb]>0 )
           {
            sL[cb]=0;
           }
         else
           {
            if(fB[cb]>-1 && sL[cb]==GSv_tend-1 && sH[cb]>0 )
              {
               sH[cb]=0;
              }
           }
        }
      if(draw_up!=0 )
        {
         if(fB[cb]==1 )
           {
            if(sp!=ai )
              {
               Upz[index-sp]=0;
               sp=ai;
              }
            Upz[cb]=High[cb];
            if(lB[cb]==0 && (sL[cb]+1)>=GSv_tend && GSv_tend<2 )
              {
               Dnz[cb]=Low[cb];
               draw_up=0;
               draw_dn=1;
              }
           }
         else
           {
            if(fB[cb]==0 )
              {
               if((sL[cb]+1)>=GSv_tend )
                 {
                  Dnz[cb]=Low[cb];
                  sp=ai;
                  draw_up=0;
                  draw_dn=1;
                  if(lB[cb]==1 && (sH[cb]+1)>=GSv_tend )
                    {
                     Upz[cb]=High[cb];
                     draw_up=1;
                     draw_dn=0;
                    }
                 }
               else
                 {
                  if(lB[cb]==1 )
                    {
                     Upz[index-sp]=0;
                     sp=ai;
                     Upz[cb]=High[cb];
                    }
                 }
              }
           }
        }
      else
        {
         if(draw_dn!=0 )
           {
            if(fB[cb]==1 )
              {
               if((sH[cb]+1)>=GSv_tend )
                 {
                  Upz[cb]=High[cb];
                  sp=ai;
                  draw_up=1;
                  draw_dn=0;
                  if(lB[cb]==0 && (sL[cb]+1)>=GSv_tend )
                    {
                     Dnz[cb]=Low[cb];
                     draw_up=0;
                     draw_dn=1;
                    }
                 }
               else
                 {
                  if(lB[cb]==0 )
                    {
                     Dnz[index-sp]=0;
                     sp=ai;
                     Dnz[cb]=Low[cb];
                    }
                 }
              }
            else
              {
               if(fB[cb]==0 )
                 {
                  if(sp!=ai )
                    {
                     Dnz[index-sp]=0;
                     sp=ai;
                    }
                  Dnz[cb]=Low[cb];
                  if(lB[cb]==1 && (sH[cb]+1)>=GSv_tend && GSv_tend<2 )
                    {
                     Upz[cb]=High[cb];
                     draw_up=1;
                     draw_dn=0;
                    }
                 }
              }
           }
         else
           {
            if(fB[cb]==1 && (sH[cb]+1)>=GSv_tend )
              {
               Dnz[index]=Low[index];
               Upz[cb]=High[cb];
               draw_up=1;
               sp=ai;
               if(lB[cb]==0 && (sL[cb]+1)>=GSv_tend )
                 {
                  Dnz[cb]=Low[cb];
                  draw_up=0;
                  draw_dn=1;
                 }
              }
            else
              {
               if(fB[cb]==0 && (sL[cb]+1)>=GSv_tend )
                 {
                  Upz[index]=High[index];
                  Dnz[cb]=Low[cb];
                  draw_dn=1;
                  sp=ai;
                  if(lB[cb]==1 && (sH[cb]+1)>=GSv_tend )
                    {
                     Upz[cb]=High[cb];
                     draw_up=1;
                     draw_dn=0;
                    }
                 }
              }
           }
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îïðåäåëÿåò ïîñëåäîâàòåëüíîñòü ïîÿâëåíèÿ ýêñòðåìóìîâ      |
//+------------------------------------------------------------------+
void Extr_seq(int curb)
  {
//---- 
   if(fB[curb]<0 )
     {
      //åñëè áàð ïðîñ÷èòûâàåòñÿ ïî èñòîðèè è îí ñðàçó âíåøíèé
      if(High[curb]>aH[curb] && Low[curb]<aL[curb] )
        {
         //åñëè îòêðûòèå íà íîâîì ìàêñèìóìå
         if(Open[curb]>aH[curb] )
           {
            fB[curb]=1;
            lB[curb]=0;
           }
         else //èíà÷å åñëè îòêðûòèå íà íîâîì ìàêñèìóìå
           {
            //åñëè îòêðûòèå íà íîâîì ìèíèìóìå
            if(Open[curb]<aL[curb] )
              {
               fB[curb]=0;
               lB[curb]=1;
              }
            else
              {
               //åñëè çàêðûòèå íà íîâîì ìàêñèìóìå è îíî âûøå èëè ðàâíî îòêðûòèÿ
               if(Close[curb]>aH[curb] && Close[curb]>=Open[curb] )
                 {
                  fB[curb]=0;
                  lB[curb]=1;
                 }
               else //èíà÷å åñëè çàêðûòèå íà íîâîì ìàêñèìóìå è îíî âûøå èëè ðàâíî îòêðûòèÿ
                 {
                  //åñëè çàêðûòèå íà íîâîì ìèíèìóìå è íèæå èëè ðàâíî îòêðûòèþ
                  if(Close[curb]>aL[curb] && Close[curb]<=Open[curb] )
                    {
                     fB[curb]=1;
                     lB[curb]=0;
                    }
                  else //èíà÷å åñëè çàêðûòèå íà íîâîì ìèíèìóìå è íèæå èëè ðàâíî îòêðûòèþ
                    {
                     //åñëè êëîç âûøå îïåíà
                     if(Close[curb]>Open[curb] )
                       {
                        fB[curb]=0;
                        lB[curb]=1;
                       }
                     else //èíà÷å åñëè êëîç âûøå îïåíà
                       {
                        //åñëè êëîç íèæå îïåíà
                        if(Close[curb]<Open[curb] )
                          {
                           fB[curb]=1;
                           lB[curb]=0;
                          }
                        else //èíà÷å åñëè êëîç íèæå îïåíà
                          {
                           //åñëè îïåí áëèæå ê àêòèâíîìó ìèíèìóìó
                           if(MathAbs(Open[curb]-aL[curb])<MathAbs(Open[curb]-aH[curb]) )
                             {
                              fB[curb]=0;
                              lB[curb]=1;
                             }
                           else //èíà÷å åñëè îïåí áëèæå ê àêòèâíîìó ìèíèìóìó
                             {
                              //åñëè îïåí áëèæå ê àêòèâíîìó ìàêñèìóìó
                              if(MathAbs(Open[curb]-aL[curb])>MathAbs(Open[curb]-aH[curb]) )
                                {
                                 fB[curb]=1;
                                 lB[curb]=0;
                                }
                              else //èíà÷å èíà÷å åñëè îïåí áëèæå ê àêòèâíîìó ìàêñèìóìó
                                {
                                 //åñëè îïåí áëèæå èëè ðàâíîóäàëåí îò ìèíèìóìà
                                 if(MathAbs(Open[curb]-Low[curb])>=MathAbs(Open[curb]-High[curb]) )
                                   {
                                    fB[curb]=0;
                                    lB[curb]=1;
                                   }
                                 else
                                   {
                                    fB[curb]=1;
                                    lB[curb]=0;
                                   }
                                }
                             }
                          }
                       }
                    }
                 }
              }
           }
        }
      else
        {
         if(High[curb]>aH[curb] )
           {
            fB[curb]=1;
           }
         else
           {
            fB[curb]=0;
           }
        }
     }
   else
     {
      //åñëè òåêóùàÿ öåíà ðàâíà ìàêñèìóìó íà áàðå èëè íåò ìèíèìóìà è ïðè ýòîì ìàêñèìóì-íîâûé
      if((Low[curb]>=aL[curb] || Close[curb]==High[curb])&& High[curb]>aH[curb] )
        {
         lB[curb]=1;
        }
      else //èíà÷å åñëè öåíà ðàâíà ìàêñèìóìó íà áàðå
        {
         //åñëè öåíà ðàâíà ìèíèìóìó íà áàðå èëè íåò íîâîãî ìàêñèìóìà è ïðè ýòîì ìèíèìóì - íîâûé
         if((High[curb]<=aH[curb] || Close[curb]==Low[curb]) && Low[curb]<aL[curb] )
           {
            lB[curb]=0;
           }
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments