#MTF_MovingAverage_v1.1

Author: Copyright � 2006, Keris2112
#MTF_MovingAverage_v1.1

This script is a specialized technical analysis tool designed for the MetaTrader platform. Its primary purpose is to allow traders to visualize "Multi-Timeframe" (MTF) moving averages directly on their current trading chart without needing to switch back and forth between different time intervals.

Core Functionality

In standard trading, a moving average usually reflects the price action of the specific timeframe you are currently viewing (for example, a 5-minute chart showing a 5-minute average). This script changes that behavior by allowing you to overlay data from a higher timeframe onto your lower timeframe view. For instance, you can stay on a fast-paced 1-minute chart while viewing a moving average calculated from the 1-hour or daily charts.

Key Features and Customization

The tool provides several layers of customization to ensure it meets specific trading strategies:

  • Timeframe Selection: Users can choose which higher timeframe to pull data from (ranging from small increments like 5 minutes up to monthly intervals).
  • Moving Average Types: The script supports four different mathematical methods for calculating the average:
    • Simple Moving Average (SMA)
    • Exponential Moving Average (EMA)
    • Smoothed Moving Average (SMMA)
    • Linear Weighted Moving Average (LWMA)
  • Price Source Flexibility: Instead of just looking at closing prices, the indicator can be configured to calculate averages based on various price points, including opening prices, highs, lows, or even custom "Median" and "Typical" price calculations.
  • Visual Shifting: It includes a "shift" parameter, which allows users to move the line forward or backward on the chart to better align with their visual analysis.

How it Works Internally

Technically, the script performs a synchronization task. Because higher timeframe data points occur less frequently than lower timeframe data points, the script intelligently maps the correct historical data point from the chosen "big" timeframe onto the specific candles of your "small" timeframe. It calculates the position of each bar to ensure that the moving average line remains accurate and continuous as it flows across your screen.

User Benefit

For a trader, this tool provides a "big picture" perspective. It helps in identifying long-term trends and major support or resistance levels from higher timeframes while still allowing for precise entry and exit observations on shorter, faster charts.

Price Data Components
Series array that contains open time of each bar
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
#MTF_MovingAverage_v1.1
//+------------------------------------------------------------------+
//|                                            MTF_MovingAverage.mq4 |
//|                                      Copyright © 2006, Keris2112 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Keris2112"
#property link      "http://www.forex-tsd.com"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2

//---- input parameters
/*************************************************************************
PERIOD_M1   1
PERIOD_M5   5
PERIOD_M15  15
PERIOD_M30  30 
PERIOD_H1   60
PERIOD_H4   240
PERIOD_D1   1440
PERIOD_W1   10080
PERIOD_MN1  43200
You must use the numeric value of the timeframe that you want to use
when you set the TimeFrame' value with the indicator inputs.
---------------------------------------
PRICE_CLOSE    0 Close price. 
PRICE_OPEN     1 Open price. 
PRICE_HIGH     2 High price. 
PRICE_LOW      3 Low price. 
PRICE_MEDIAN   4 Median price, (high+low)/2. 
PRICE_TYPICAL  5 Typical price, (high+low+close)/3. 
PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4. 
You must use the numeric value of the Applied Price that you want to use
when you set the 'applied_price' value with the indicator inputs.
---------------------------------------
MODE_SMA    0 Simple moving average, 
MODE_EMA    1 Exponential moving average, 
MODE_SMMA   2 Smoothed moving average, 
MODE_LWMA   3 Linear weighted moving average. 
You must use the numeric value of the MA Method that you want to use
when you set the 'ma_method' value with the indicator inputs.

**************************************************************************/
extern int TimeFrame=60;
extern int MAPeriod=45;
extern int ma_shift=1;
extern int ma_method=1;
extern int applied_price=0;

double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_LINE);
   if(TimeFrame==0) TimeFrame = Period();
   SetIndexShift(0,ma_shift*TimeFrame/Period());
//---- name for DataWindow and indicator subwindow label   
   switch(ma_method)
     {
      case 1 : short_name="MTF_EMA("; break;
      case 2 : short_name="MTF_SMMA("; break;
      case 3 : short_name="MTF_LWMA("; break;
      default : short_name="MTF_SMA(";
     }
   switch(TimeFrame)
   {
      case 1 : string TimeFrameStr="Period_M1"; break;
      case 5 : TimeFrameStr="Period_M5"; break;
      case 15 : TimeFrameStr="Period_M15"; break;
      case 30 : TimeFrameStr="Period_M30"; break;
      case 60 : TimeFrameStr="Period_H1"; break;
      case 240 : TimeFrameStr="Period_H4"; break;
      case 1440 : TimeFrameStr="Period_D1"; break;
      case 10080 : TimeFrameStr="Period_W1"; break;
      case 43200 : TimeFrameStr="Period_MN1"; break;
      default : TimeFrameStr="Current Timeframe";
   } 
   IndicatorShortName(short_name+MAPeriod+") "+TimeFrameStr);  
  
  return(0);
  }
//----
  
 
//+------------------------------------------------------------------+
//| MTF Moving Average                                   |
//+------------------------------------------------------------------+
int start()
  {
   datetime TimeArray[];
   int    i,shift,limit,y,counted_bars=IndicatorCounted();
    
// Plot defined timeframe on to current timeframe   
   ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); 
   
   limit=Bars-counted_bars+TimeFrame/Period();
   //limit=Bars-counted_bars;  bad
   for(i=0,y=0;i<limit;i++)
   {
   if (Time[i]<iTime(NULL,TimeFrame,y)) y++; 
   
 /***********************************************************   
   Add your main indicator loop below.  You can reference an existing
      indicator with its iName  or iCustom.
   Rule 1:  Add extern inputs above for all neccesary values   
   Rule 2:  Use 'TimeFrame' for the indicator timeframe
   Rule 3:  Use 'y' for the indicator's shift value
 **********************************************************/  
    
   ExtMapBuffer1[i]=iMA(NULL,TimeFrame,MAPeriod,0,ma_method,applied_price,y) ; 
   
   }  
     
//
   
  
  
   return(0);
  }
//+------------------------------------------------------------------+

Comments