_2523HeikenAshi

Download script
Author: Copyright 2004, MetaQuotes Software Corp.
_2523HeikenAshi

This tool is designed to transform the standard visual representation of price action on your trading charts into a specialized format known as Heiken Ashi. Unlike traditional candlesticks, which show the raw highs, lows, opens, and closes of a specific timeframe, this script calculates smoothed data points to provide a clearer picture of market momentum and trend direction.

Core Logic and Functionality

The primary objective of this script is to filter out "market noise"—the small, erratic price fluctuations that can often lead to false signals for traders. It achieves this through a unique mathematical averaging process:

  • Trend Smoothing: Instead of plotting the exact price at which a candle opens or closes, the logic calculates a new set of "synthetic" values. It derives the opening and closing prices by blending the data from previous periods with the current price action. This creates a visual flow that highlights whether the market is trending upward or downward more effectively than standard charts.
  • Dynamic Highs and Lows: The script ensures that the high and low points of each plotted candle remain within the boundaries of the actual market extremes while still incorporating the calculated synthetic prices. This maintains the integrity of the price data while ensuring the visual representation remains consistent with the overall trend.
  • Visual Differentiation: The logic automatically assigns colors based on the relationship between the new calculated open and close prices. When the synthetic close is higher than the open, it typically indicates bullish (upward) momentum; conversely, when it is lower, it suggests bearish (downward) momentum.

User Experience

For the end user, this means that instead of reacting to every minor price tick, you are presented with a smoothed visual narrative. The resulting "bars" make it significantly easier to identify:

  1. Trend Persistence: Easily seeing if a trend is continuing or losing steam.
  2. Momentum Shifts: Identifying clear transitions between bullish and bearish phases.
  3. Reduced Visual Clutter: By smoothing out the price movements, the tool allows for a more disciplined approach to technical analysis, making it easier to stay on the right side of the market's primary movement.
Miscellaneous
Implements a curve of type %1
20 Views
0 Downloads
0 Favorites
_2523HeikenAshi
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                  Heiken Ashi.mq4 |
//|                        Copyright 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or   |
//| select on menu 'Charts'->'Properties...'):                       |
//|  - On 'Color' Tab select 'Black' for 'Line Graph'                |
//|  - On 'Common' Tab disable 'Chart on Foreground' checkbox and    |
//|    select 'Line Chart' radiobutton                               |
//+------------------------------------------------------------------+
#property copyright "Copyright 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, Red);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, Blue);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexStyle(2,DRAW_HISTOGRAM, 0, 3, Red);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, Blue);
   SetIndexBuffer(3, ExtMapBuffer4);
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexBuffer(3,ExtMapBuffer4);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
   if (ExtCountedBars>0) ExtCountedBars--;
   int pos=Bars-ExtCountedBars-1;
   while(pos>=0)
     {
      haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
      haClose=(Open[pos]+High[pos]+Low[pos]+Close[pos])/4;
      haHigh=MathMax(High[pos], MathMax(haOpen, haClose));
      haLow=MathMin(Low[pos], MathMin(haOpen, haClose));
      if (haOpen<haClose) 
        {
         ExtMapBuffer1[pos]=haLow;
         ExtMapBuffer2[pos]=haHigh;
        } 
      else
        {
         ExtMapBuffer1[pos]=haHigh;
         ExtMapBuffer2[pos]=haLow;
        } 
      ExtMapBuffer3[pos]=haOpen;
      ExtMapBuffer4[pos]=haClose;
 	   pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments