Heiken Ashi_CL_grÅn-rot
Download scriptThis script is designed to transform the standard way price action appears on your trading chart by converting traditional Japanese candlesticks into Heiken Ashi bars. Instead of showing raw price movements, which can often appear erratic or "noisy," this tool smooths out the data to provide a clearer picture of market trends and momentum.
How the Logic Works
The script processes market data using a specific mathematical formula to recalculate four key components for every candle:
- The Opening Price: Rather than using the exact price at which a candle started, the script calculates an average of the previous candle's high and low points. This helps create a continuous flow between bars.
- The Closing Price: The script determines this by taking a simple average of the current period's four main data points: the Open, High, Low, and Close prices.
- The Highs and Lows: To ensure the visual "wick" of the candle remains accurate to the actual market range, the script compares the real market highs and lows against the newly calculated open and close prices, selecting the outermost values.
Visual Representation and Color Logic
The core strength of this script lies in how it translates these calculations into visual cues for the trader:
- Trend Identification: The script distinguishes between bullish (upward) and bearish (downward) movement based on whether the calculated open price is lower or higher than the close price.
- Dynamic Coloring:
- When the market shows upward momentum, the bars are rendered in a distinct color (Lime).
- When the market shows downward momentum, the bars shift to a contrasting color (Red).
- Visual Emphasis: The script uses different line thicknesses and styles for the "body" of the candle versus the "wicks," allowing you to immediately distinguish between the core price action and the temporary extremes reached during that period.
Summary for the User
By using this script, your chart will shift from a jagged display of raw prices to a streamlined visual representation of momentum. It filters out minor price fluctuations to help highlight the prevailing trend, making it easier to identify when the market is gaining strength or beginning to reverse.
//+------------------------------------------------------------------+
//| Heiken Ashi.mq4 |
//| Copyright c 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 Lime
#property indicator_color3 Red
#property indicator_color4 Lime
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 5
#property indicator_width4 5
//----
extern color color1 = Red;
extern color color2 = Lime;
extern color color3 = Red;
extern color color4 = Lime;
//---- 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, color1);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_HISTOGRAM, 0, 5, color3);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_HISTOGRAM, 0, 5, color4);
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);
}
//+------------------------------------------------------------------+
//| Custom 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