rvmGann_sv2_v1

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

This script functions as a dynamic trend-tracking indicator designed to identify and visualize market movements based on structural highs and lows. Rather than using standard lagging averages, it analyzes the relationship between consecutive price bars to determine the prevailing momentum of the market.

Core Logic Overview

The primary objective of the script is to detect whether the market is currently in an "Up Trend" or a "Down Trend" by monitoring specific price actions. It accomplishes this through the following logic:

1. High and Low Tracking The script scans each historical bar to identify "Maximums" (Highs) and "Minimums" (Lows). It keeps a running tally of these occurrences. Instead of simply looking at the last price, it evaluates whether a new high or low is actually breaking out beyond the previous boundaries.

2. Trend Validation via Counting The script uses a user-defined threshold (the GSv_tend parameter) to validate a trend. A trend change is not triggered by a single erratic movement; instead, the script waits until a specific number of consecutive high or low movements occur. This helps filter out "market noise" and ensures that only sustained movements are recognized as significant trends.

3. Dynamic Trend Switching

  • Upward Movement: If the price consistently establishes new highs reaching the required threshold, the indicator identifies an upward trend.
  • Downward Movement: If the price consistently establishes new lows reaching the required threshold, the indicator identifies a downward trend.
  • Internal Bars: The logic intelligently ignores "internal" bars—those that do not break the previous high or low—ensuring that the trend stays stable unless a clear structural change occurs.

4. Visual Mapping Once a trend is confirmed, the script maps these movements onto your chart. It identifies specific starting and ending points for the trend lines:

  • When an Up Trend is confirmed, it marks the transition from a significant low to a new high.
  • When a Down Trend is confirmed, it marks the transition from a significant high to a new low.

Summary for the User

Essentially, this tool acts as a structural "map" of price action. It watches the market's "peaks" and "valleys," ignores small fluctuations that don't break those peaks/valleys, and only draws a trend line once the market has proven its direction by hitting a specific amount of consecutive structural milestones. This allows traders to see the "bones" of the market movement clearly.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
11 Views
0 Downloads
0 Favorites
rvmGann_sv2_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                  rvmGann_sv2.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                      rvm_fam íà fromru òî÷êà êîì |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "rvm_fam íà fromru òî÷êà êîì"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 DodgerBlue
//---- input parameters
extern int       GSv_tend=2;
//---- buffers
double GSv_sl[];
double GSv_Up[];
bool initfl,draw_up,draw_dn;
bool curH,curL;
int sH,sL,lb,lhi,lli,fpoint,spoint;
int idFile;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_SECTION,STYLE_DOT);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
   SetIndexBuffer(0,GSv_sl);
   SetIndexBuffer(1,GSv_Up);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"Dawn trend");
   SetIndexLabel(1,"Up trend");

   //FileDelete("GSv.txt");
   //idFile=FileOpen("GSv.txt",FILE_WRITE);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int cb,ai,i,limit,index;
//---- 
   if( initfl!=1 )
   {
      myInit();
      if( initfl!=1 )
      {
         Alert("Ñáîé èíèöèàëèçàöèè èíäèêàòîðà!");
         return(-1);
      }
   }
   index=Bars-1;
   if( counted_bars>=0 )
   {
      if( index-counted_bars<=0 )
      {
         limit=0;
      }
      else
      {
         limit=index-counted_bars;
         if( limit>index-GSv_tend )
         {
            limit=index-GSv_tend;
         }
      }
   }
   else
   {
      Alert("Ñáîé ðàñ÷åòà èíäèêàòîðà!");
      return(-1);
   }
//FileWrite(idFile,"  Bars="+Bars+" index="+index+" limit="+limit+" counted_bars="+counted_bars);
//-------------------->> íà÷àëî öèêëà ïî áàðàì -------------------------------
for( cb=limit;cb>=0;cb-- )
{
   ai=index-cb;
//-------------------->> äåéñòâèÿ ïðèçâîäèìûå åñëè ïîÿâèëñÿ íîâûé áàð --------
if( lb!=ai )
{
   //FileWrite(idFile,"**Íîâûé áàð, ai="+ai+" "+TimeToStr(Time[cb]));
   lb=ai;
   //åñëè ïðåäûäóùèé áàð âíóòðåíèèé - îáíóëÿåì ñ÷åò÷èêè
   if( High[cb+1]<=High[cb+2] && Low[cb+1]>=Low[cb+2] )
   {
      sH=0;
      sL=0;
      //FileWrite(idFile,"  Ïðåäûäóùèé áàð âíóòðåííèé, ñ÷åò÷èêè îáíóëåíû "+sH+"  "+sL);
   }
   else
   {
      //åñëè ïðåäûäóùèé òîëüêî ìàêñèìóì
      if( High[cb+1]>High[cb+2] && Low[cb+1]>=Low[cb+2] )
      {
         sL=0;
         //FileWrite(idFile,"  Ïðåäûäóùèé-òîëüêî ìàêñèìóì, ñ÷åò÷èê ìèíèìóìîâ îáíóëåí "+sL);
      }
      else
      {
         //åñëè ïðåäûäóùèé òîëüêî ìèíèìóì
         if( High[cb+1]<=High[cb+2] && Low[cb+1]<Low[cb+2] )
         {
            sH=0;
            //FileWrite(idFile,"  Ïðåäûäóùèé-òîëüêî ìèíèìóì, ñ÷åò÷èê ìàêñèìóìîâ îáíóëåí "+sH);
         }
      }
   }
   //åñëè èíäèêàòîð ðèñîâàëñÿ ââåðõ
   if( draw_up==1 )
   {
      //FileWrite(idFile,"  èíäèêàòîð ðèñîâàëñÿ ââåðõ");
      //åñëè ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ
      if( sL==GSv_tend )
      {
         //FileWrite(idFile,"  ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ");
         // è ïîñëåäíèé ìèíèìóì èëè ñ÷åò÷èê ìàêñèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ
         if( curL==1 || sH!=GSv_tend )
         {
            draw_up=0;
            draw_dn=1;
            fpoint=spoint;
            spoint=ai-1;
            //FileWrite(idFile,"  ïîñëåäíèì áûë ìèíèìóì, draw_up="+draw_up+" draw_dn="+draw_dn+" fpoint="+fpoint+" spoint="+spoint+" èëè ñ÷åò÷èê ìàêñèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ");
         }
      }
      else
      {
         //èíà÷å åñëè ñ÷åò÷èê ìèíèìóìîâ íå äîñòèã íóæíîãî çíà÷åíèÿ
         //åñëè íà ïðåäûäóùåé ñâå÷êå áûë ìàêñèìóì è îí âûøå ïðåäûäóùåãî îòðèñîâàííîãî
         if( High[cb+1]>High[cb+2] && High[cb+1]>High[index-spoint] )
         {
            spoint=ai-1;
            //FileWrite(idFile,"  ìàêñèìóì íà ïðåä.ñâå÷êå âûøå ïðåäûäóùåãî îòðèñîâàííîãî, ìåíÿåì spoint="+spoint);
         }
      }
   }
   else
   {
      //èíà÷å åñëè èíäèêàòîð ðèñîâàëñÿ âíèç
      if( draw_dn==1 )
      {
         //FileWrite(idFile,"  èíäèêàòîð ðèñîâàëñÿ âíèç");
         //åñëè ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ
         if( sH==GSv_tend )
         {
            //FileWrite(idFile,"  ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ");
            //è ïîñëåäíèé - ìàêñèìóì èëè ñ÷åò÷èê ìèíèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ
            if( curH==1 || sL!=GSv_tend )
            {
               draw_up=1;
               draw_dn=0;
               fpoint=spoint;
               spoint=ai-1;
               //FileWrite(idFile,"  ïîñëåäíèì áûë ìàêñèìóì, draw_up="+draw_up+" draw_dn="+draw_dn+" fpoint="+fpoint+" spoint="+spoint+" èëè ñ÷åò÷èê ìèíèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ");
            }
         }
         else
         {
            //èíà÷å åñëè ñ÷åò÷èê ìàêñèìóìîâ íå äîñòèã íóæíîãî çíà÷åíèÿ
            //åñëè íà ïðåäûäóùåé ñâå÷êå áûë ìèíèìóì è îí íèæå ïðåäûäóùåãî îòðèñîâàííîãî
            if( Low[cb+1]<Low[cb+2] && Low[cb+1]<Low[index-spoint] )
            {
               spoint=ai-1;
               //FileWrite(idFile,"  ìèíèìóì íà ïðåä.ñâå÷êå íèæå ïðåäûäóùåãî îòðèñîâàííîãî, ìåíÿåì spoint="+spoint);
            }
         }
      }
   }
   //FileWrite(idFile,"  íîâàÿ ñâå÷à, îáíóëÿåì íàëè÷èå ìàêñèìóìà, ìèíèìóìà");
   curH=0;
   curL=0;
}
//--------------------<< êîíåö äåéñòâèé ïðèçâîäèìûå åñëè ïîÿâèëñÿ íîâûé áàð --
//åñëè òåêóùèé áàð "âíóòðåííèé" ïåðåõîäèì ê ñëåäóþùåìó öèêëó
if( High[cb]<=High[cb+1] && Low[cb]>=Low[cb+1] )
{
   //FileWrite(idFile,"  áàð âíóòðåííèé, ïåðåõîäèì ê ñëåäóþùåé ñâå÷å");
   continue;
}
//-------------------->> âûÿñíåíèå òåêóùåãî ñîñòîÿíèÿ áàðà -------------------
//åñëè ýòî èñòîðèÿ
if( cb!=0 || counted_bars==0 )
{
   //FileWrite(idFile,"  ïî èñòîðèè...");
   if( High[cb]>High[cb+1] )
   {
      if( sH<GSv_tend ) sH++;
      curH=1;
      //FileWrite(idFile,"  ñ÷åò÷èê ìàêñèìóìîâ óâåëè÷åí, ïîñëåäíèé ìàêñèìóì "+sH);
   }
   if( Low[cb]<Low[cb+1] )
   {
      if( sH<GSv_tend ) sL++;
      curL=1;
      //FileWrite(idFile,"  ñ÷åò÷èê ìèíèìóìîâ óâåëè÷åí, ïîñëåäíèé ìèíèìóì "+sL);
   }
   if( curH==curL && curH==1 )
   {
      if( Close[cb]>=(High[cb]+Low[cb])/2 )
      {
         curL=0;
         //FileWrite(idFile,"  âíåøíèé áàð, óòî÷íåíèå, ïîñëåäíèé ìàêñèìóì");
      }
      else
      {
         curH=0;
         //FileWrite(idFile,"  âíåøíèé áàð, óòî÷íåíèå, ïîñëåäíèé ìèíèìóì");
      }
   }
}
else
{
   //FileWrite(idFile,"  ðåàë-òàéì...");
   if( Close[cb]==High[cb] )
   {
      if( sH<GSv_tend && lhi!=ai )
      {
         lhi=ai;
         sH++;
      }
      curH=1;
      curL=0;
      //FileWrite(idFile,"  ïîñëåäíèé ìàêñèìóì");
   }
   else
   {
      if( Close[cb]==Low[cb] )
      {
         if( sL<GSv_tend && lli!=ai )
         {
            lli=ai;
            sL++;
         }
         curH=0;
         curL=1;
         //FileWrite(idFile,"  ïîñëåäíèé ìèíèìóì");
      }
   }
}
//--------------------<< êîíåö âûÿñíåíèÿ òåêóùåãî ñîñòîÿíèÿ áàðà -------------
//FileWrite(idFile,"  îòðèñîâêà èíäèêàòîðà...");
//åñëè èíäèêàòîð óæå ðèñóåòñÿ
if( draw_up!=draw_dn )
{
   //FileWrite(idFile,"  èíäèêàòîð óæå ðèñóåòñÿ "+draw_up+"  "+draw_dn);
   //åñëè èíäèêàòîð îòðèñîâûâàåòñÿ ââåðõ
   if( draw_dn!=1 )
   {
      //åñëè ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ è ïîñëåäíèé ìèíèìóì èëè ñ÷åò÷èê ìàêñèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ
      if( (sL==GSv_tend && curL==1) || (sL==GSv_tend && sH!=GSv_tend) )
      {
         //FileWrite(idFile,"  ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ è ïîñëåäíèé ìèíèìóì èëè ñ÷åò÷èê ìàêñèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ");
         GSv_sl[cb]=Low[cb];
      }
      else
      {
         //åñëè ïîñëåäíèé ìàêñèìóì âûøå ïîñëåäíåãî îòðèñîâàííîãî
         if( High[cb]>High[index-spoint] )
         {
            GSv_sl[cb]=High[cb];
            for( i=cb+1;i<index-fpoint;i++ )
            {
               GSv_sl[i]=0;
            }
         }
      }
   }
   else
   {
      //èíà÷å åñëè îòðèñîâûâàåòñÿ âíèç
      //åñëè ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ è ìàêñèìóì ïîñëåäíèé èëè ñ÷åò÷èê ìèíèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ
      if( (sH==GSv_tend && curH==1) || (sH==GSv_tend && sL!=GSv_tend) )
      {
         //FileWrite(idFile,"  ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ è ïîñëåäíèé ìàêñèìóì èëè ñ÷åò÷èê ìèíèìóìîâ íå èìååò íóæíîãî çíà÷åíèÿ");
         GSv_sl[cb]=High[cb];
      }
      else
      {
         //åñëè ïîñëåäíèé ìèíèìóì íèæå ïîñëåäíåãî îòðèñîâàííîãî
         if( Low[cb]<Low[index-spoint] )
         {
            GSv_sl[cb]=Low[cb];
            for( i=cb+1;i<index-fpoint;i++ )
            {
               GSv_sl[i]=0;
            }
         }
      }
   }
}
else
{
   //FileWrite(idFile,"  èíäèêàòîð ïîêà íå îòðèñîâûâàëñÿ "+draw_up+"  "+draw_dn);
   //èíà÷å åñëè èíäèêàòîð åùå íå ðèñóåòñÿ
   //åñëè ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ
   if( sH==GSv_tend )
   {
      //FileWrite(idFile,"  ñ÷åò÷èê ìàêñèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ");
      if( sL!=GSv_tend || curH==1 )
      {
         //FileWrite(idFile,"  ïîñëåäíèé ìàêñèìóì èëè ñ÷åò÷èê ìèíèìóìîâ ìåíüøå íóæíîãî");
         GSv_sl[index-fpoint]=Low[index-fpoint];
         GSv_sl[cb]=High[cb];
         draw_up=1;
         draw_dn=0;
         //FileWrite(idFile,"  íà÷àëüíàÿ òî÷êà "+fpoint+" "+GSv_sl[index-fpoint]+" êîíå÷íàÿ òî÷êà "+ai+" "+GSv_sl[cb]);
      }
   }
   //åñëè ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ
   if( sL==GSv_tend )
   {
      //FileWrite(idFile,"  ñ÷åò÷èê ìèíèìóìîâ äîñòèã íóæíîãî çíà÷åíèÿ");
      if( sH!=GSv_tend || curL==1 )
      {
         //FileWrite(idFile,"  ïîñëåäíèé ìèíèìóì èëè ñ÷åò÷èê ìàêñèìóìîâ ìåíüøå íóæíîãî");
         GSv_sl[index-fpoint]=High[index-fpoint];
         GSv_sl[cb]=Low[cb];
         draw_up=0;
         draw_dn=1;
         //FileWrite(idFile,"  íà÷àëüíàÿ òî÷êà "+fpoint+" "+GSv_sl[index-fpoint]+" êîíå÷íàÿ òî÷êà "+ai+" "+GSv_sl[cb]);
      }
   }
}
//--------------------<< êîíåö öèêëà ïî áàðàì --------------------------------
}
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   //FileClose(idFile);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Ôóíêöèÿ íà÷àëüíîé èíèöèàëèçàöèè èíäèêàòîðà                       |
//+------------------------------------------------------------------+
int myInit()
  {
//---- 
   //åñëè íåäîñòàòî÷íî äàííûõ
   if( Bars<GSv_tend+1 )
   {
      Alert("Íåäîñòàòî÷íî äàííûõ íà ãðàôèêå!");
      return(-1);
   }
   if( GSv_tend<1 )
   {
      Alert("Íåâåðíûé ïàðàìåòð èíäèêàòîðà!");
      return(-1);
   }
   if( High[Bars-2]>High[Bars-1] ) sH++;
   if( Low[Bars-2]<Low[Bars-1] ) sL++;
   initfl=1;
   //FileWrite(idFile,TimeToStr(CurTime())+" èíäèêàòîð èíèöèàëèçèðîâàí");
   //FileWrite(idFile,"  áàðîâ íà ãðàôèêå = "+Bars+", âðåìÿ ïåðâîãî áàðà = "+TimeToStr(Time[Bars-1]));
   //FileWrite(idFile,"  ñ÷åò÷èê ìàêñèìóìîâ = "+sH+", ñ÷åò÷èê ìèíèìóìîâ = "+sL);
//----
   return(0);
  }
//+------------------------------------------------------------------+


Comments