Filter_AO_001

Download script
Filter_AO_001

This tool is designed to provide traders with a visual representation of market momentum by filtering and highlighting specific price trends. Instead of showing every minor fluctuation in the data, it focuses on identifying the direction of "strength" to help users see the underlying trend more clearly.

Core Logic Overview

The script functions by analyzing the relationship between two different moving averages. By calculating the distance between a short-term average and a long-term average, the tool creates a base value that represents the current speed and direction of the market.

How It Processes Information

To make this data actionable for a trader, the logic follows three specific steps:

  1. Momentum Calculation: The script first identifies the gap between two different sets of price data (specifically a 15-period and a 102-period average). This gap tells the system whether the market is currently accelerating or decelerating.
  2. Trend Detection: It then compares the current momentum value against the value from the previous moment. If the value is increasing, the script registers an upward trend; if it is decreasing, it registers a downward trend.
  3. Visual Filtering: This is where the "filter" happens. Rather than displaying both trends at once, the script separates them into two distinct colors:
    • Positive Momentum: When the trend is moving upward, it highlights the data in Lime.
    • Negative Momentum: When the trend is moving downward, it highlights the data in Red.

Visual Experience

For the user, this means the indicator appears as a histogram in a separate window below the main price chart. It provides a clean, color-coded summary of market behavior: Lime bars indicate bullish momentum, while Red bars indicate bearish momentum. By neutralizing the "noise" of smaller price movements and focusing only on these shifts in direction, it allows for a quicker visual assessment of whether the market is gaining strength or losing steam.

12 Views
0 Downloads
0 Favorites
Filter_AO_001
//+------------------------------------------------------------------+
//|                                                    Filter_AO.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_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Lime
#property  indicator_color2  Red
//---- indicator buffers
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 1 additional buffer used for counting.
   IndicatorBuffers(3);
   //---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
//---- 3 indicator buffers mapping
   if(!SetIndexBuffer(0,ind_buffer1) &&
      !SetIndexBuffer(1,ind_buffer2) &&
      !SetIndexBuffer(2,ind_buffer3))
      Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Filter_AO");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- 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,15,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,102,0,MODE_EMA,PRICE_CLOSE,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ind_buffer3[i];
      prev=ind_buffer3[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ind_buffer2[i]=current;
         ind_buffer1[i]=0.0;
        }
      else
        {
         ind_buffer1[i]=current;
         ind_buffer2[i]=0.0;
        }
     }
//---- done
   return(0);
  }

Comments