NoName24

This tool is a custom technical analysis indicator designed to help traders visualize momentum and trend direction by combining three different moving average calculations into a single, color-coded visual display.

Core Methodology

The logic functions by layering three distinct mathematical layers to smooth out market noise and identify the "strength" of current price movements:

  1. The Baseline (MACD Logic): First, the script calculates two different Exponential Moving Averages (EMAs)—one fast and one slow. By subtracting the slow average from the fast average, it identifies the raw momentum of the market.
  2. The Signal Line: It then takes that momentum result and applies a Simple Moving Average (SMA) to it. This creates a "signal line" which serves as a smoothed baseline, helping to filter out erratic price spikes that might otherwise lead to false signals.
  3. The Final Calculation: The indicator determines its final position by comparing the raw momentum against this smoothed signal line.

Visual Representation and Logic

Instead of showing just a single line, the script categorizes the difference between the momentum and the signal line into four distinct visual categories based on their magnitude:

  • Strong Positive Momentum: When the momentum is significantly higher than the signal line, it is displayed in one color (representing strong upward pressure).
  • Weak/Neutral Positive Momentum: If the momentum is slightly above the signal line but stays within a very small predefined threshold, it changes color to indicate a weakening move.
  • Strong Negative Momentum: When the momentum falls significantly below the signal line, it is displayed in another color (representing strong downward pressure).
  • Weak/Neutral Negative Momentum: If the momentum is slightly below the signal line but remains within that same small threshold, it shifts to a final color to indicate a weakening bearish move.

Summary for the User

Essentially, this script acts as a "momentum filter." By using different colors to represent varying strengths of price movement, it allows you to see at a glance not just which direction the market is trying to go, but how much "energy" or "strength" is behind that specific move. It helps distinguish between a powerful trend and a momentum move that is beginning to lose steam.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
NoName24
//+------------------------------------------------------------------+
//|                                                         OsMA.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "colour update by thor@gmx.co.uk, Moneytec chat: thorr"

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 4
#property  indicator_color1  Maroon
#property  indicator_color2  DarkGreen
#property  indicator_color3  Lime
#property  indicator_color4  OrangeRed
//---- indicator parameters
extern int FastEMA=8;
extern int SlowEMA=12;
extern int SignalSMA=9;
extern double thresh = 0.0001;
//---- indicator buffers
double     ind_buffer0[];
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_brighthi[];
double     ind_brightlo[];
double     res;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(6);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2);

   SetIndexDrawBegin(0,SignalSMA);
   SetIndexDrawBegin(1,SignalSMA);
   SetIndexDrawBegin(2,SignalSMA);
   SetIndexDrawBegin(3,SignalSMA);

   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//---- 4 indicator buffers mapping
   if(!SetIndexBuffer(0,ind_buffer0) &&
      !SetIndexBuffer(1,ind_buffer1) &&
      !SetIndexBuffer(2,ind_brighthi) &&
      !SetIndexBuffer(3,ind_brightlo) &&
      !SetIndexBuffer(4,ind_buffer2) &&
      !SetIndexBuffer(5,ind_buffer3))
      Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("RainbowOsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
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 additional buffer
   for(int i=0; i<limit; i++)
      ind_buffer3[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 additional buffer
   for(i=0; i<limit; i++)
      ind_buffer2[i]=iMAOnArray(ind_buffer3,Bars,SignalSMA,0,MODE_SMA,i);

//---- main loop
   for(i=limit-1; i>=0; i--)
     {
      res = ind_buffer3[i] - ind_buffer2[i];
      
      // Sort it out now...
      if (res < thresh && res > 0) {
         ind_buffer1[i] = res;
         ind_brighthi[i] = 0;
         continue;
      } else if (res > 0) {
         ind_brighthi[i] = res;
         ind_buffer1[i] = 0;         
      } else if (res > -thresh && res < 0) {
         ind_brightlo[i] = 0;
         ind_buffer0[i] = res;
         continue;
      } else if (res < 0)
         ind_brightlo[i] = res;
         ind_buffer0[i] = 0;
     }

   return(0);
  }

Comments