Heiken Ashi BG_v1
Download scriptThis tool is designed to transform the way you view price movements on your trading charts by implementing the Heiken Ashi charting method. Unlike standard candlesticks, which can often be "noisy" and provide distracting information about rapid price fluctuations, this script smooths out the data to reveal the underlying trend more clearly.
How the Logic Works
The core functionality of this script is to recalculate each price bar based on a specific mathematical formula rather than simply showing the raw high, low, open, and close prices of a time period. Here is a breakdown of how it processes that information:
- Trend Smoothing: The script takes the previous data points to calculate the new "Open" and "Close" values. By averaging these figures, it filters out minor price spikes, making it easier for you to see if the market is moving in a sustained direction (bullish or bearish).
- Dynamic Range Calculation: Instead of simply plotting the highest and lowest prices reached, the script compares the newly calculated open and close values against the actual market highs and lows. It then automatically determines which boundaries to display based on whether the current price action is moving up or down.
- Visual Feedback: The logic organizes this data into four distinct layers. This allows the platform to render visual elements (like histograms) that change dynamically. When the trend shifts, these values update to reflect the new direction, providing a clearer "flow" of the market.
Key Benefits for the User
Because this script prioritizes the momentum of the price over individual fluctuations:
- Reduced Noise: It helps traders ignore insignificant price "wiggles" that might trigger false signals on standard charts.
- Clearer Trend Identification: By smoothing the transition between price points, it becomes much easier to identify when a trend is beginning to accelerate or lose steam.
- Consistent Visual Language: It provides a more cohesive visual experience, where the length and position of the bars represent the strength and direction of the market movement more intuitively.
In short, this script acts as a sophisticated filter—processing raw market data into a refined visual format that highlights the "big picture" of price action.
/*-----------------------------+
| |
| 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 White
#property indicator_color3 Red
#property indicator_color4 White
//---- 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, LightSkyBlue);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, LightPink);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_HISTOGRAM, 0, 1, LightSkyBlue);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_HISTOGRAM, 0, 1, LightPink);
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