Better_H1_diff_1

Download script
Author: Copyright � 2007, MetaQuotes Software Corp.
Better_H1_diff_1

Technical Overview: Better_MA Logic

The Better_MA script is a specialized technical analysis tool designed to provide traders with a deeper look at price trends by analyzing the relationships between different Moving Averages (MAs). Instead of simply showing a single moving average line, this tool focuses on the "spread" or the distance between multiple averages to highlight momentum and structural shifts.

Core Functional Logic

The script operates by performing a multi-timeframe analysis. It looks at price data across various time intervals simultaneously to determine how different trend lengths are interacting with one another. Specifically, it follows this logical flow:

1. Data Synchronization The tool identifies the current timeframe on your chart and maps it against higher timeframes (specifically the 60-minute/1-hour and 4-hour intervals). This allows the script to provide context about how long-term trends are influencing shorter-term price movements.

2. Multi-Moving Average Calculation For each relevant timeframe, the logic calculates three distinct Simple Moving Averages (SMA) based on different periods: 5, 10, and 15. By using these three specific lengths, the script creates a "cluster" of data points that represent short-term momentum.

3. Spread Analysis (The "Difference" Logic) This is the core innovation of the script. Rather than plotting the price of the averages, the logic calculates the mathematical difference between them:

  • The difference between the 5-period and 10-period averages.
  • The difference between the 10-period and 15-period averages.
  • The total difference between the 5-period and 15-period averages.

By isolating these differences, the tool filters out the "noise" of the raw price and highlights the expansion or contraction of the trend.

4. Dynamic Options (User Selection) The script includes a selection system (Option) that allows you to choose which specific set of timeframe data you want to visualize in your indicator window. This enables you to toggle between different layers of market sentiment:

  • Option 0: Focuses on the primary trend differences.
  • Option 1: Displays a secondary layer of movement logic.
  • Option 2: Provides a tertiary perspective on the trend dynamics.

Summary for the Trader

Essentially, this script acts as a "momentum expander." While a standard moving average tells you the direction of the market, the Better_MA logic helps you visualize the strength and velocity of that direction. When the gaps between these calculated averages widen, it indicates accelerating momentum; when they narrow or converge, it suggests a potential cooling off or a trend reversal.

Price Data Components
Series array that contains close prices for each bar
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
6 Views
0 Downloads
0 Favorites
Better_H1_diff_1
//+------------------------------------------------------------------+
//|                                                   Better_MA.mq4  |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Aqua
#property indicator_color3 White



extern int NrBars=1000;
extern int Option=1;//0,1,2

string SymbolName;
int PeriodMinutes1=0;
int PeriodMinutes5=PERIOD_M5;
int PeriodMinutes60=PERIOD_H1;
int PeriodMinutes240=PERIOD_H4;


//---- buffers
double VolBuffer1[];
double VolBuffer2[];
double VolBuffer3[];
double x0,x1,x2,x3,x4,x5,x6,x7,x8,x9;
double y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
double z0,z1,z2,z3,z4,z5,z6,z7,z8,z9;

double at0,at1,at2,at3,at4,at5,at6,at7,at8;
double at9,at10,at11,at12,at13,at14,at15,at16,at17;
double at18,at19,at20,at21,at22,at23,at24,at25,at26;

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

int init()
  {


    SymbolName = Symbol();


   IndicatorBuffers(3);
   
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0, VolBuffer1);

   SetIndexEmptyValue(0,EMPTY_VALUE);
   
   SetIndexStyle(1,DRAW_LINE,0,1);
   SetIndexBuffer(1, VolBuffer2);

   SetIndexEmptyValue(1,EMPTY_VALUE);
   
   SetIndexStyle(2,DRAW_LINE,0,1);
   SetIndexBuffer(2, VolBuffer3);

   SetIndexEmptyValue(2,EMPTY_VALUE);

   return(0);
  }


//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

   for (int i=NrBars-1;i>=0;i--)
      {
      datetime time1=iTime(SymbolName,PeriodMinutes1,i);
      
//      int b5=iBarShift(SymbolName,PeriodMinutes5,time1,true);
      int b60=iBarShift(SymbolName,PeriodMinutes60,time1,true);
//      int b240=iBarShift(SymbolName,PeriodMinutes240,time1,true);
    
/*
      if(b5>=0)
      {
        x0=iClose(SymbolName,PeriodMinutes5,b5);   
           
        x1=iMA(SymbolName,PeriodMinutes5,5,0,MODE_SMA,PRICE_CLOSE,b5);
        x2=iMA(SymbolName,PeriodMinutes5,10,0,MODE_SMA,PRICE_CLOSE,b5);
        x3=iMA(SymbolName,PeriodMinutes5,15,0,MODE_SMA,PRICE_CLOSE,b5);
        
        at0=x1-x2;
        at1=x2-x3;
        at2=x1-x3;

        y1=iMA(SymbolName,PeriodMinutes5,5,0,MODE_SMA,PRICE_CLOSE,b5+1);
        y2=iMA(SymbolName,PeriodMinutes5,10,0,MODE_SMA,PRICE_CLOSE,b5+1);
        y3=iMA(SymbolName,PeriodMinutes5,15,0,MODE_SMA,PRICE_CLOSE,b5+1);

        at9=y1-y2;
        at10=y2-y3;
        at11=y1-y3;

        z1=iMA(SymbolName,PeriodMinutes5,5,0,MODE_SMA,PRICE_CLOSE,b5+2);
        z2=iMA(SymbolName,PeriodMinutes5,10,0,MODE_SMA,PRICE_CLOSE,b5+2);
        z3=iMA(SymbolName,PeriodMinutes5,15,0,MODE_SMA,PRICE_CLOSE,b5+2);

        at18=z1-z2;
        at19=z2-z3;
        at20=z1-z3;        
      }
*/
      
      
      if(b60>=0)
      {        
        x4=iMA(SymbolName,PeriodMinutes60,5,0,MODE_SMA,PRICE_CLOSE,b60);
        x5=iMA(SymbolName,PeriodMinutes60,10,0,MODE_SMA,PRICE_CLOSE,b60);
        x6=iMA(SymbolName,PeriodMinutes60,15,0,MODE_SMA,PRICE_CLOSE,b60);

        at3=x4-x5;
        at4=x5-x6;
        at5=x4-x6;
        
        y4=iMA(SymbolName,PeriodMinutes60,5,0,MODE_SMA,PRICE_CLOSE,b60+1);
        y5=iMA(SymbolName,PeriodMinutes60,10,0,MODE_SMA,PRICE_CLOSE,b60+1);
        y6=iMA(SymbolName,PeriodMinutes60,15,0,MODE_SMA,PRICE_CLOSE,b60+1);

        at12=y4-y5;
        at13=y5-y6;
        at14=y4-y6;
        
        z4=iMA(SymbolName,PeriodMinutes60,5,0,MODE_SMA,PRICE_CLOSE,b60+2);
        z5=iMA(SymbolName,PeriodMinutes60,10,0,MODE_SMA,PRICE_CLOSE,b60+2);
        z6=iMA(SymbolName,PeriodMinutes60,15,0,MODE_SMA,PRICE_CLOSE,b60+2);

        at21=z4-z5;
        at22=z5-z6;
        at23=z4-z6;        
      }       
/*      
      if(b240>=0)
      {             
        x7=iMA(SymbolName,PeriodMinutes240,5,0,MODE_SMA,PRICE_CLOSE,b240);
        x8=iMA(SymbolName,PeriodMinutes240,10,0,MODE_SMA,PRICE_CLOSE,b240);
        x9=iMA(SymbolName,PeriodMinutes240,15,0,MODE_SMA,PRICE_CLOSE,b240);
        at6=x7-x8;
        at7=x8-x9;
        at8=x7-x9;
        y7=iMA(SymbolName,PeriodMinutes240,5,0,MODE_SMA,PRICE_CLOSE,b240+1);
        y8=iMA(SymbolName,PeriodMinutes240,10,0,MODE_SMA,PRICE_CLOSE,b240+1);
        y9=iMA(SymbolName,PeriodMinutes240,15,0,MODE_SMA,PRICE_CLOSE,b240+1);

        at15=y7-y8;
        at16=y8-y9;
        at17=y7-y9;
        z7=iMA(SymbolName,PeriodMinutes240,5,0,MODE_SMA,PRICE_CLOSE,b240+2);
        z8=iMA(SymbolName,PeriodMinutes240,10,0,MODE_SMA,PRICE_CLOSE,b240+2);
        z9=iMA(SymbolName,PeriodMinutes240,15,0,MODE_SMA,PRICE_CLOSE,b240+2);
        at24=z7-z8;
        at25=z8-z9;
        at26=z7-z9;
      }
*/  
   if(Option==0)
   {  
	  VolBuffer1[i]=at3; 
 	  VolBuffer2[i]=at4;   
 	  VolBuffer3[i]=at5;      
 	}
 	else if(Option==1)
   {   
	  VolBuffer1[i]=at12; 
 	  VolBuffer2[i]=at13;   
 	  VolBuffer3[i]=at14;      
 	}
 	else if(Option==2)
   {    
	  VolBuffer1[i]=at21; 
 	  VolBuffer2[i]=at22;   
 	  VolBuffer3[i]=at23; 
 	}
 	  
  
  }
  
 
   
		

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

Comments