#MTF Triggerlines Bars_002

Author: Copyright � 2006, Eli hayun.
#MTF Triggerlines Bars_002

This script is designed to provide traders with a high-level overview of market trends by aggregating data from multiple timeframes simultaneously. Instead of forcing you to switch back and forth between different charts (like the 5-minute, 15-minute, 30-minute, and 1-hour views), it consolidates this information into a single visual indicator.

Core Logic Overview

The primary purpose of this tool is Multi-Timeframe (MTF) Analysis. It looks at four different time periods at once to determine if the overall market momentum is bullish (upward) or bearish (downward).

By checking multiple timeframes, the script helps filter out "market noise"—those small, insignificant price movements that might look like a trend on a 5-minute chart but are actually just minor fluctuations in the context of a larger hourly trend.

How It Works

  1. Data Collection: The script monitors four specific timeframes (M5, M15, M30, and H1) concurrently.
  2. Trend Identification: For each of these timeframes, it references an external "Triggerlines" calculation. It looks specifically for a crossover or a specific relationship between two trend lines (High and Low).
  3. Directional Filtering:
    • If the data from a timeframe indicates an upward movement, the script prepares to display a corresponding visual signal.
    • If the data indicates a downward movement, it prepares a different visual signal.
  4. Visual Output: The result is displayed as a series of arrows or markers in a separate window on your chart. These markers act as "confirmation" signals:
    • When multiple timeframes align in the same direction, the indicators provide a stronger visual cue that the trend is consistent across the board.
    • If the timeframes are conflicting, the visual distribution of the markers will show you that the market is currently in a state of transition or indecision.

Key Benefits for the User

  • Efficiency: You can see the "big picture" without having to open multiple windows.
  • Confluence: It allows you to identify "confluence"—when the 5-minute, 15-minute, 30-minute, and hourly trends all agree, providing a higher probability signal for your trading strategy.
  • Clarity: By separating the data into specific visual buffers, it keeps the chart clean while still providing all the necessary multi-timeframe information at a glance.
Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
#MTF Triggerlines Bars_002
//+------------------------------------------------------------------+
//|                                         #MTF Hull Trend Bars.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Eli hayun."
#property link      "http://www.elihayun.com"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 5
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Blue
#property indicator_color6 Blue
#property indicator_color7 Blue
#property indicator_color8 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];


extern string  CustomIndicator = "Triggerlines";

extern int Maxbars   = 1000;



extern int Rperiod = 15;
extern int LSMA_Period = 5;

extern int    TF1  = PERIOD_M5;
extern int    TF2  = PERIOD_M15;
extern int    TF3  = PERIOD_M30;
extern int    TF4  = PERIOD_H1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,117);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,117);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,117);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexEmptyValue(2,0.0);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,117);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexEmptyValue(3,0.0);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,117);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexEmptyValue(4,0.0);
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexArrow(5,117);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexEmptyValue(5,0.0);
   SetIndexStyle(6,DRAW_ARROW);
   SetIndexArrow(6,117);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexEmptyValue(6,0.0);
   SetIndexStyle(7,DRAW_ARROW);
   SetIndexArrow(7,117);
   SetIndexBuffer(7,ExtMapBuffer8);
   SetIndexEmptyValue(7,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int limit;
   int TF[] = {0,0,0,0};
   
   TF[0] = TF1;
   TF[1] = TF2;
   TF[2] = TF3;
   TF[3] = TF4;
   
   limit = MathMin(counted_bars,Maxbars);
   if (limit ==0)
      limit = Maxbars;
   
   for (int ii=0; ii<limit; ii++)
   {
      ExtMapBuffer1[ii] = 0;
      ExtMapBuffer2[ii] = 0;
      ExtMapBuffer3[ii] = 0;
      ExtMapBuffer4[ii] = 0;
      ExtMapBuffer5[ii] = 0;
      ExtMapBuffer6[ii] = 0;
      ExtMapBuffer7[ii] = 0;
      ExtMapBuffer8[ii] = 0;
      for (int jj=0; jj<4; jj++)
      {
         int y = iBarShift(NULL, TF[jj], Time[ii]);
         SetIndicator(GetCustomBars(TF[jj], y), jj, ii);
      }
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

bool GetCustomBars(int TF, int shift)
{

   double h = iCustom(Symbol(), TF, CustomIndicator, Rperiod, LSMA_Period, 5, shift);
   double l = iCustom(Symbol(), TF, CustomIndicator, Rperiod, LSMA_Period, 6, shift);
   
   
   return(h<l);
}

void SetIndicator(bool isUP, int ind, int shift)
{
   if (isUP)
   {
      switch (ind) 
      {
         case 3:  ExtMapBuffer1[shift] = ind+1; break;
         case 2:  ExtMapBuffer2[shift] = ind+1; break;
         case 1:  ExtMapBuffer3[shift] = ind+1; break;
         case 0:  ExtMapBuffer4[shift] = ind+1; break;
      }
   } else {
         switch (ind)
         { 
            case 3:  ExtMapBuffer5[shift] = ind+1; break;
            case 2:  ExtMapBuffer6[shift] = ind+1; break;
            case 1:  ExtMapBuffer7[shift] = ind+1; break;
            case 0:  ExtMapBuffer8[shift] = ind+1; break;
         }
   }
}

Comments