Author: Ron T
3MA01IND

This tool is designed as a visual trading assistant for the MetaTrader platform, specifically tailored to identify momentum shifts and trend reversals based on moving average crossovers. It automates the detection of price dynamics to provide traders with clear, actionable signals directly on their charts.

Core Logic Overview

The script functions by monitoring two different types of Linear Weighted Moving Averages (LWMA). These averages act as smoothed representations of price data, helping to filter out market "noise" and reveal the underlying trend:

  • Fast Moving Average: Calculated over a short period (5 units) to capture immediate price movements.
  • Slow Moving Average: Calculated over a longer period (20 units) to represent the broader market direction.

How It Works

The indicator continuously scans historical and real-time price data to identify specific "crossover" events. These events occur when the fast moving average interacts with the slow moving average:

  • Bullish Signals: The script looks for moments where the fast average moves from below the slow average to above it. This is interpreted as upward momentum, and the script places a visual marker on the chart to indicate a potential "buy" or rising trend.
  • Bearish Signals: Conversely, the script monitors for moments where the fast average moves from above the slow average to below it. This indicates downward pressure, and the script marks these points as potential "sell" or falling trend signals.

Visual Representation

Instead of forcing a trader to manually calculate these averages and identify intersections, the script handles all the mathematics in the background. It then translates these technical interactions into distinct visual symbols (arrows and shapes) directly on the price candles. This allows for a cleaner charting experience where the most relevant trading opportunities are highlighted automatically, helping to simplify decision-making in fast-moving markets.

Price Data Components
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
3MA01IND
//+------------------------------------------------------------------+
//| 5 Min RSI 12-period qual INDICATOR                               |
//+------------------------------------------------------------------+
#property copyright "Ron T"
#property link      "http://www.lightpatch.com"

#property indicator_chart_window
#property indicator_buffers 8

#property indicator_color1 Red
#property indicator_color2 HotPink
#property indicator_color3 DarkGray
#property indicator_color4 Red

#property indicator_color5 White
#property indicator_color6 LightGray
#property indicator_color7 DarkGray
#property indicator_color8 White


//---- buffers
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];


// User Input


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|

int init()
  {

   // 233 up arrow
   // 234 down arrow
   // 159 big dot
   // 158 little dot
   // 168 open square
   // 120 box with X
   
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexBuffer(0, Buffer1);
   SetIndexArrow(0,159);  //up
   
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexBuffer(1, Buffer2);
   SetIndexArrow(1,159);  //down

   SetIndexStyle(2,DRAW_ARROW);
   SetIndexBuffer(2, Buffer3);
   SetIndexArrow(2,112);

   SetIndexStyle(3,DRAW_ARROW);
   SetIndexBuffer(3, Buffer4);
   SetIndexArrow(3,120);

   SetIndexStyle(4,DRAW_ARROW);
   SetIndexBuffer(4, Buffer5);
   SetIndexArrow(4,159);

   SetIndexStyle(5,DRAW_ARROW);
   SetIndexBuffer(5, Buffer6);
   SetIndexArrow(5,159);

   SetIndexStyle(6,DRAW_ARROW);
   SetIndexBuffer(6, Buffer7);
   SetIndexArrow(6,112);

   SetIndexStyle(7,DRAW_ARROW);
   SetIndexBuffer(7, Buffer8);
   SetIndexArrow(7,120);

   return(0);
  }


//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   int i;
   
   for( i=0; i<Bars; i++ ) Buffer1[i]=0;
   for( i=0; i<Bars; i++ ) Buffer2[i]=0;
   for( i=0; i<Bars; i++ ) Buffer3[i]=0;
   for( i=0; i<Bars; i++ ) Buffer4[i]=0;
   for( i=0; i<Bars; i++ ) Buffer5[i]=0;
   for( i=0; i<Bars; i++ ) Buffer6[i]=0;
   for( i=0; i<Bars; i++ ) Buffer7[i]=0;
   for( i=0; i<Bars; i++ ) Buffer8[i]=0;

   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

// Current position if 55/45 or over/under. Does any of 
// the previous 'qual' period ever fall below55/above45? (last11)
//
// If qual*2 periods have been above55/below45
// then lets not try to transact any more (last22)
         

int start()
  {
   int      pos=Bars-100; // leave room for moving average periods

   double   cMAfst=0, pMAfst=0;
   double   cMAslo=0, pMAslo=0;
   double   MA100=0;
   
   double p=Point();
   
   while(pos>=0)
     {

      cMAfst=iMA(Symbol(),0,5,0,MODE_LWMA,PRICE_CLOSE, pos);
      pMAfst=iMA(Symbol(),0,5,0,MODE_LWMA,PRICE_CLOSE, pos+1);
      
      cMAslo=iMA(Symbol(),0,20,0,MODE_LWMA,PRICE_CLOSE, pos);
      pMAslo=iMA(Symbol(),0,20,0,MODE_LWMA,PRICE_CLOSE, pos+1);

      // rising
      if (pMAfst<=cMAslo && cMAfst>=cMAslo)
        {
         Buffer8[pos]=cMAfst;
        }

      //falling
      if (pMAfst>=cMAslo && cMAfst<=cMAslo)
        {
         Buffer4[pos]=cMAfst;
        }

 	   pos--;
     }

   return(0);
  }
//+------------------------------------------------------------------+

Comments