Heiken_Ashi_Ma lines

Download script
Author: Copyright � 2006, Forex-TSD.com
Heiken_Ashi_Ma lines

This script is designed to create a specialized visual overlay for your trading charts, specifically blending two popular technical analysis concepts: Heiken Ashi price action and Moving Averages.

The primary goal of this tool is to smooth out market "noise"—those small, erratic price fluctuations that can often make it difficult to see the true direction of a trend. It achieves this by calculating a modified set of price points rather than showing you the raw, live market prices.

How the Logic Works

The script operates through a three-step calculation process for every candle on your chart:

1. Data Gathering (The Moving Average Component) Instead of looking at just one single price point, the script looks back at a specific number of previous candles (defined by the "Period" setting). It calculates four distinct averages based on the Moving Average method you choose:

  • The average Opening price
  • The average Closing price
  • The average High
  • The average Low

2. Price Smoothing (The Heiken Ashi Component) Once it has these averages, the script applies a specific mathematical formula used in Heiken Ashi charting. It determines a new "Average Open" and a new "Average Close."

  • The Average Open is derived by taking the midpoint of the previous calculated values.
  • The Average Close is calculated by finding the mean of all four averages (Open, High, Low, and Close) gathered in the first step.

3. Visual Output Finally, the script plots these calculated values onto your chart as two distinct lines (colored Yellow and Blue). Because these lines are based on smoothed averages rather than raw price spikes, they provide a much clearer picture of the underlying market momentum.

Key Takeaways for Traders

  • Trend Clarity: By using Moving Averages as the foundation for the Heiken Ashi calculation, the indicator is less likely to be "tricked" by sudden, one-time price spikes.
  • Customizable Sensitivity: You can adjust how many candles the script looks at (the Period) and how it calculates those averages (the Method) to make the lines react faster or slower to market changes.
  • Simplified Analysis: The resulting lines act as a filtered version of price action, helping you identify whether the current trend is bullish, bearish, or consolidating with greater ease.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
5 Views
0 Downloads
0 Favorites
Heiken_Ashi_Ma lines
//+------------------------------------------------------------------+
//|                                               Heiken Ashi Ma.mq4 |
//+------------------------------------------------------------------+
//|                                                      mod by Raff |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link      "http://www.forex-tsd.com/"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color3 Yellow
#property indicator_color4 Blue
//---- parameters
extern int MaMetod  = 1;
extern int MaPeriod = 3;
//---- buffers
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   SetIndexStyle(2,DRAW_LINE, 1, 2, Blue);
   SetIndexBuffer(3, ExtMapBuffer3);
   SetIndexStyle(2,DRAW_LINE, 1, 2, Yellow);
   SetIndexBuffer(3, ExtMapBuffer4);
//----
   SetIndexDrawBegin(0,5);
//---- indicator buffers mapping
   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 maOpen, maClose, maLow, maHigh;
   double haOpen, 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)
     {
      maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);
      maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);
      maLow=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_LOW,pos);
      maHigh=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_HIGH,pos);

      haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
      haClose=(maOpen+maHigh+maLow+maClose)/4;
      
      ExtMapBuffer3[pos]=haOpen;
      ExtMapBuffer4[pos]=haClose;
 	   pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments