Moving Averages_onTF_v1

Download script
Author: Copyright � 2006, Metatrader Yahoo group!
Moving Averages_onTF_v1

This tool is designed to help traders visualize market trends by calculating a specialized moving average on their charts. While standard indicators typically only look at the data from the current timeframe you are viewing, this script adds a layer of sophistication by allowing you to view price averages from a different, higher timeframe simultaneously.

How the Logic Works

Multi-Timeframe Integration The core logic of this script is its ability to "look ahead" into other timeframes. For example, if you are currently looking at a fast-paced 1-minute chart, you can use this tool to display a moving average calculated from a 60-minute (hourly) chart. This helps traders see the "big picture" trend without having to switch back and forth between different windows.

Customizable Smoothing Methods The script provides users with four distinct ways to calculate the average price, depending on how reactive or smooth they want the line to appear:

  • Simple Moving Average (SMA): A standard average that treats all data points equally.
  • Exponential Moving Average (EMA): Places more importance on recent price action, making it react faster to sudden changes.
  • Smoothed Moving Average (SMMA): A calculation that filters out "noise" to create a much smoother line.
  • Linear Weighted Moving Average (LWMA): A method that gives progressively more weight to the most recent data points.

Dynamic Positioning and Scaling The script automatically adjusts its visual presence based on your preferences. It allows you to set the number of periods (how much historical data to include) and the "shift" (moving the line forward or backward on the chart). It also ensures that the decimal precision of the indicator perfectly matches the current asset's price, ensuring the line sits accurately on the candles.

Automated Data Mapping Behind the scenes, the script performs a constant synchronization task. Every time the market moves, it identifies the exact moment in time corresponding to your current chart and finds the matching data point on the target timeframe. It then maps that specific value onto your current screen, creating a seamless visual bridge between different trading horizons.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
Moving Averages_onTF_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                        Custom Moving Average.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|  Modified 2006, Matt Kennel, Metatrader Yahoo group              |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Metatrader Yahoo group!"
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int MA_Period=13;
extern int MA_Shift=0;
extern int MA_Method=0;
extern int MA_time_frame=60; //  The time frame you want in minutes
// M5 = 5
// M15 = 15
// M30 = 30
// H1  = 60
// H4  = 240
// D1  = 1440, etc

//---- indicator buffers
double ExtMapBuffer[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   int    draw_begin;
   string short_name;
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexShift(0,MA_Shift);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   if(MA_Period<2) MA_Period=13;
   draw_begin=MA_Period-1;
//---- indicator short name
   switch(MA_Method)
     {
      case 1 : short_name="EMA(";  draw_begin=0; break;
      case 2 : short_name="SMMA("; break;
      case 3 : short_name="LWMA("; break;
      default :
         MA_Method=0;
         short_name="SMA(";
     }
   IndicatorShortName(short_name+MA_Period+"); TF="+MA_time_frame);
   SetIndexDrawBegin(0,draw_begin);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(Bars<=MA_Period) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
   if (ExtCountedBars>0) ExtCountedBars--;
//----

   for (int i=Bars-ExtCountedBars-1; i >= 0; i--) {
      datetime tofnow = Time[i]; 
      
      int ibar_on_tf = iBarShift(Symbol(),MA_time_frame,tofnow,false);
      ExtMapBuffer[i] = iMA(Symbol(),MA_time_frame,MA_Period,MA_Shift,MA_Method,PRICE_CLOSE,ibar_on_tf); 
   
   }
//---- done
   return(0);
  }

Comments