Heiken Ashi THV

Download script
Author: Copyright � 2004, MetaQuotes Software Corp.
Heiken Ashi THV

This script is designed to transform the standard price chart into a Heiken Ashi visualization. Unlike traditional candlesticks, which show the raw price action of each period, Heiken Ashi candles represent a "smoothed" version of the market's movement. The goal of this logic is to filter out minor market noise and provide a clearer picture of the overall trend.

How the Logic Works

The script calculates four specific values for every candle on your chart: an Open, a High, a Low, and a Close. However, instead of using the raw data directly, it uses a mathematical average to determine these points:

  • Trend Smoothing: The "Open" price of a candle is derived from the average of the previous candle's values. This ensures that the current candle is linked to the history of the market rather than just the immediate price jump.
  • Price Averaging: The "Close" price is calculated by taking the average of the current period's High, Low, Open, and Close prices.
  • Dynamic Range: To determine the highest and lowest points (the "wicks") of the candle, the script compares the actual market highs and lows against the newly calculated smoothed values. This ensures the candles still respect the actual boundaries of price movement while maintaining a smooth visual flow.

Visual Representation

The script uses these calculations to plot four distinct data points, which are then rendered as colored bars on your screen:

  • Color Coding: The logic automatically assigns colors based on market momentum. When the calculated "Close" is higher than the "Open," it typically signals upward momentum (represented in Green). When the "Close" is lower than the "Open," it indicates downward pressure (represented in Red).
  • Visual Weight: The script utilizes different line thicknesses for different components of the data to help you distinguish between the main body of the candle and its outer boundaries.

Summary for Traders

By using this script, you are essentially viewing a "filtered" version of the market. Because the candles are based on averages rather than raw price spikes, it becomes much easier to identify whether the market is in a sustained uptrend or downtrend without being distracted by temporary price fluctuations.

Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
Heiken Ashi THV
//+------------------------------------------------------------------+
//|                                                  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                               |
//| Modified by Cobraforex for the THV system, www.cobraforex.com    |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 MediumVioletRed
#property indicator_color2 Green
#property indicator_color3 MediumVioletRed
#property indicator_color4 Green
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//----
extern color color1 = MediumVioletRed;
extern color color2 = Green;
extern color color3 = MediumVioletRed;
extern color color4 = Green;
//---- 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, 3, color3);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, 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