Donchian Channels - Generalized version1_v1

Download script
Author: Copyright � 2005, Luis Guilherme Damiani
Donchian Channels - Generalized version1_v1

This script is designed as a visual trading tool for MetaTrader that identifies price volatility and potential trend boundaries by drawing "Donchian Channels" on your currency or asset charts. Instead of showing every single price fluctuation, it simplifies market movement into a readable corridor that helps traders visualize the recent high and low extremes of the market.

How the Logic Works

1. Tracking Market Extremes The core logic of the tool relies on looking back over a specific number of past bars (the "Periods") to determine the highest and lowest points reached during that timeframe. By identifying these peaks and valleys, the script establishes the current boundaries of the market's price action.

2. Customizable Calculation Modes The tool offers different ways to define what constitutes a "high" or "low," allowing it to be adapted to different trading styles:

  • Standard High/Low: It identifies the absolute highest and lowest prices reached.
  • Opening Price Basis: It looks at the opening prices of the candles to establish boundaries based on where price first started relative to its highs and lows.
  • Averaged Extremes: It can calculate a midpoint between the opening prices and the high/low points, providing a more balanced "mean" boundary.

3. Margin and Buffer Adjustments To ensure the lines aren't glued exactly to the price peaks, the script includes a "Margin" calculation. This creates a small, controlled buffer zone above and below the calculated boundaries. This helps smooth out the visual representation and accounts for minor "noise" in the market, making it easier for a trader to see the true trend.

4. Visual Output The result of these calculations is plotted on your chart as two distinct lines:

  • An upper boundary line representing the resistance or "ceiling" of recent price action.
  • A lower boundary line representing the support or "floor" of recent price action.

By observing the space between these two lines, traders can better understand the current range of the market and identify when price is breaking out of established boundaries or returning to previous levels of support and resistance.

Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
Donchian Channels - Generalized version1_v1
//+------------------------------------------------------------------+
//|                      Donchian Channels - Generalized version.mq4 |
//|                         Copyright © 2005, Luis Guilherme Damiani |
//|                                      http://www.damianifx.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Luis Guilherme Damiani"
#property link      "http://www.damianifx.com.br"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 SteelBlue
//---- input parameters
extern int       Periods=24;
extern int       Extremes=3;
extern int       Margins=-2;
extern int       Advance=0;
extern int       max_bars=700;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,1,2);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE,1,2);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   IndicatorShortName("DoC("+Periods+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    fixed_bars=IndicatorCounted();
//---- 
   //int shift=0;//, cnt(0), loopbegin(0);
   double smin=0, smax=0, SsMax=0, SsMin=0;
   //Variables : bar(0), prevbars(0), start(0), cs(0), prevcs(0),commodt(0);
   if(max_bars==0) max_bars=Bars;
//----
   for(int shift=0;shift< max_bars;shift++)
     {
      if (Extremes ==1)
        {
         SsMax=High[Highest(NULL,0,MODE_HIGH,Periods,shift)];
         SsMin=Low[Lowest(NULL,0,MODE_LOW,Periods,shift)];
        }
      else if (Extremes==3)
           {
            SsMax=(Open[Highest(NULL,0,MODE_OPEN,Periods,shift)]+High[Highest(NULL,0,MODE_HIGH,Periods,shift)])/2;
            SsMin=(Open[Lowest(NULL,0,MODE_OPEN,Periods,shift)]+Low[Lowest(NULL,0,MODE_LOW,Periods,shift)])/2;
           }
         else
           {
            SsMax=Open[Highest(NULL,0,MODE_OPEN,Periods,shift)];
            SsMin=Open[Lowest(NULL,0,MODE_OPEN,Periods,shift)];
           }
      smin=SsMin+(SsMax-SsMin)*Margins/100;
      smax=SsMax-(SsMax-SsMin)*Margins/100;
      ExtMapBuffer1[shift-Advance]=smin;
      ExtMapBuffer2[shift-Advance]=smax;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments