macd-dot_001

Download script
macd-dot_001

This custom trading tool is designed to analyze price momentum and provide visual cues to help identify potential entry or exit points in the market. It operates by calculating two specific moving averages and comparing their relationship to determine trend shifts.

Core Logic and Calculations

The script functions through a three-step mathematical process:

  1. Trend Momentum Calculation: The tool first looks at the price history to calculate two different types of Exponential Moving Averages (EMAs)—one fast-reacting and one slower-moving. By subtracting the slow average from the fast average, the script creates a "MACD" line. This line represents the momentum: when it moves upward, the short-term price is gaining strength; when it moves downward, the short-term price is losing strength.

  2. Signal Smoothing: To filter out market "noise," the script takes that momentum line and applies a secondary smoothing process (a Simple Moving Average). This creates a "Signal Line." By comparing the momentum line against this signal line, the tool can more accurately identify where a trend is genuinely changing rather than just fluctuating momentarily.

  3. Crossover Identification: The primary goal of this script is to detect "crossovers." The logic continuously monitors the relationship between the momentum line and the signal line:

    • Buy Signal: If the momentum line moves from below the signal line to above it, the tool identifies a bullish shift.
    • Sell Signal: If the momentum line moves from above the signal line to below it, the tool identifies a bearish shift.

Visual Representation

Instead of drawing complex lines that might clutter your chart, this script is designed to be clean and actionable. It automatically places visual markers (arrows) at specific price points whenever a crossover occurs:

  • Bullish Markers: When a positive momentum crossover is detected, an arrow appears below the current price candle.
  • Bearish Markers: When a negative momentum crossover is detected, an arrow appears above the current price candle.

By automating these calculations, the script allows you to see at a glance where the trend momentum has shifted without having to manually monitor the moving average values yourself.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
macd-dot_001
//+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2004, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Yellow
#property  indicator_color3  Blue
#property  indicator_color4  Yellow
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     ind_buffer1[2];
double     ind_buffer2[2];

double     ind_buffer3[2];
double     ind_buffer4[2];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexDrawBegin(1,SignalSMA);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2))
      Print("cannot set indicator buffers!");

   SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 0);
   SetIndexArrow(2, 108);
   SetIndexBuffer(2, ind_buffer3);

   SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 0);
   SetIndexArrow(3, 108);
   SetIndexBuffer(3, ind_buffer4);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      ind_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_SMA,i);
      
   for (i=0; i<limit; i++)
   {
      ind_buffer3[i] = EMPTY_VALUE; ind_buffer4[i] = EMPTY_VALUE; 
      if (ind_buffer1[i] > ind_buffer2[i] && ind_buffer1[i+1] < ind_buffer2[i+1])
         ind_buffer3[i] = Low[i] - 1 * Point;
         
      if (ind_buffer1[i] < ind_buffer2[i] && ind_buffer1[i+1] > ind_buffer2[i+1])
         ind_buffer4[i] = High[i] + 1 * Point;
   }    
//---- done
   return(0);
  }

Comments