High_Low v2 (ZigZag)_001

Download script
Author: rewritten by CrazyChart
High_Low v2 (ZigZag)_001

This script is designed to identify and map significant structural points in price movement, specifically focusing on historical highs and lows. It acts as a visual tool that clarifies the "skeleton" of a market's price action by filtering out minor fluctuations to highlight major turning points.

Core Logic Overview

The tool works by scanning through a specific historical period of price data (defined by the user) to determine whether the market is currently making new highs, new lows, or alternating between both. Instead of just plotting every single price movement, it looks for "swing" behaviors—moments where the price reverses its trend.

How the Analysis Works

The script processes the market data through several logical layers:

  • Neighborhood Scanning: For every point in time, the tool looks at a small window of nearby candles (determined by the "Length" setting). It compares the current price against these neighbors to see if it qualifies as a local peak or a local valley.
  • Trend Tracking: The script maintains a continuous memory of the current price direction. It identifies if the market is in an "Upward Swing," a "Downward Swing," or a state of transition.
  • Significant Point Capture: When the logic detects a reversal (for example, moving from an upward move to a downward move), it captures the exact coordinates of that peak. Conversely, when it detects a move from downward to upward, it captures the valley.
  • Data Storage and Mapping: Once these key highs and lows are identified, the script stores them in a dedicated memory list. It then maps these specific prices back onto your chart window.

Visual Output

The final result is a series of yellow lines or markers that represent significant price levels. By isolating these specific "Highs" and "Lows," the tool allows you to see the broader structure of the market clearly, helping to distinguish major price peaks and valleys from everyday market noise.

Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
High_Low v2 (ZigZag)_001
//+------------------------------------------------------------------+
//|                                         High_Low v2 (ZigZag).mq4 |
//|                                          rewritten by CrazyChart |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "rewritten by CrazyChart"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int       barn=300;
extern int       Length=2;
//---- buffers
double ExtMapBuffer1[];
//double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexEmptyValue(0,0.0);
  //SetIndexDrawBegin(0, barn);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int shift,Swing,Swing_n,uzl,i,zu,zd,mv;
   double LL,HH,BH,BL,NH,NL; 
   double Uzel[10000][3]; 
   string text;
// loop from first bar to current bar (with shift=0) 
      Swing_n=0;Swing=0;uzl=0; 
      BH =High[barn];BL=Low[barn];zu=barn;zd=barn; 

for (shift=barn;shift>=0;shift--) { 
      LL=10000000;HH=-100000000; 
   for (i=shift+Length;i>=shift+1;i--) { 
         if (Low[i]< LL) {LL=Low[i];}; 
         if (High[i]>HH) {HH=High[i];}; 
   }; 


   if (Low[shift]<LL && High[shift]>HH){ 
      Swing=2; 
      if (Swing_n==1) {zu=shift+1;}; 
      if (Swing_n==-1) {zd=shift+1;}; 
   } else { 
      if (Low[shift]<LL) {Swing=-1;}; 
      if (High[shift]>HH) {Swing=1;}; 
   }; 

   if (Swing!=Swing_n && Swing_n!=0) { 
   if (Swing==2) {
      Swing=-Swing_n;BH = High[shift];BL = Low[shift]; 
   }; 
      uzl=uzl+1; 
   if (Swing==1) {
      Uzel[uzl][1]=zd;
      Uzel[uzl][2]=BL;
   }; 
   if (Swing==-1) {
      Uzel[uzl][1]=zu;
      Uzel[uzl][2]=BH; 
   }; 
      BH = High[shift];
      BL = Low[shift]; 
   }; 

   if (Swing==1) { 
      if (High[shift]>=BH) {BH=High[shift];zu=shift;};}; 
      if (Swing==-1) {
          if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;};}; 
      Swing_n=Swing; 
   }; 
   for (i=1;i<=uzl;i++) { 
      //text=DoubleToStr(Uzel[i][1],0);
      //text=;
         mv=StrToInteger(DoubleToStr(Uzel[i][1],0));
      ExtMapBuffer1[mv]=Uzel[i][2];
   }; 





   return(0);
  }
//+------------------------------------------------------------------+

Comments