_2523MTF_4_CoeffoLine

Download script
Author: Copyright � 2005, MetaQuotes Software Corp.
_2523MTF_4_CoeffoLine

This script is designed to function as a multi-timeframe visual indicator for the MetaTrader trading platform. Its primary purpose is to monitor and display trend data from four different time intervals simultaneously: 5-minute, 15-minute, 30-minute, and 1-hour charts.

Core Functionality

The logic operates by pulling information from a specific external calculation (referred to as a "CoeffoLine"). Instead of showing you complex lines or numbers, the script simplifies this data into clear visual signals—specifically arrows—to help traders identify whether the momentum is moving upward or downward across various timeframes at once.

How it Works

  • Multi-Timeframe Synchronization: The script automatically tracks the history of four different time periods. It aligns these different speeds so that you can see what is happening on a 5-minute scale alongside what is happening on an hourly scale.
  • Data Retrieval: For every bar on your current chart, the script "looks into" the 5-minute, 15-minute, 30-minute, and 1-hour charts to fetch the corresponding trend value from the secondary indicator.
  • Visual Signaling:
    • Upward Momentum: When the data indicates a positive movement for a specific timeframe, the script places an upward-pointing arrow on your chart.
    • Downward Momentum: When the data indicates a negative movement, it places a downward-pointing arrow.
  • Color Coding: The indicators are organized by color (Medium Sea Green for upward signals and Indian Red for downward signals), allowing you to distinguish between different types of movements at a glance.

Key Features for the User

  • Consolidated View: You do not need to switch between four different charts to see the trend. All timeframe data is projected onto your primary viewing window.
  • Automated Tracking: The script handles the complex math of matching time stamps between different charts (e.g., ensuring the "15-minute" arrow accurately represents the current moment on your "5-minute" chart).
  • Simplified Interpretation: By converting raw data into arrows, it removes the noise of fluctuating lines and provides a direct visual "buy/sell" sentiment for each timeframe.
Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
_2523MTF_4_CoeffoLine
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                            #MTF_4_CoeffoLine.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"





#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum 6
#property indicator_buffers 8
#property indicator_color1 MediumSeaGreen
#property indicator_color2 MediumSeaGreen
#property indicator_color3 MediumSeaGreen
#property indicator_color4 MediumSeaGreen
#property indicator_color5 IndianRed
#property indicator_color6 IndianRed
#property indicator_color7 IndianRed
#property indicator_color8 IndianRed
//---- input parameters

//---- buffers
double UpBuffer_M5[];
double UpBuffer_M15[];
double UpBuffer_M30[];
double UpBuffer_H1[];
double DownBuffer_M5[];
double DownBuffer_M15[];
double DownBuffer_M30[];
double DownBuffer_H1[];


datetime dt5[200], dt15[200], dt30[200], dth1[200];   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,254);
   SetIndexBuffer(0,UpBuffer_M5);
   SetIndexEmptyValue(0,-40.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,254);
   SetIndexBuffer(1,UpBuffer_M15);
   SetIndexEmptyValue(1,-40.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,254);
   SetIndexBuffer(2,UpBuffer_M30);
   SetIndexEmptyValue(2,-40.0);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,254);
   SetIndexBuffer(3,UpBuffer_H1);
   SetIndexEmptyValue(3,-40.0);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,253);
   SetIndexBuffer(4,DownBuffer_M5);
   SetIndexEmptyValue(4,-40.0);
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexArrow(5,253);
   SetIndexBuffer(5,DownBuffer_M15);
   SetIndexEmptyValue(5,-40.0);
   SetIndexStyle(6,DRAW_ARROW);
   SetIndexArrow(6,253);
   SetIndexBuffer(6,DownBuffer_M30);
   SetIndexEmptyValue(6,-40.0);
   SetIndexStyle(7,DRAW_ARROW);
   SetIndexArrow(7,253);
   SetIndexBuffer(7,DownBuffer_H1);
   SetIndexEmptyValue(7,-40.0);
   
   IndicatorShortName("MTF_4_CoeffofLine M5,M15,M30,M60");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, shift;
   if(counted_bars<0) return(-1);
   if (counted_bars==0) limit=Bars-1;  // limit = Bars-MinBars-1;
//---- last counted bar will be recounted
   if(counted_bars>0) limit=Bars-counted_bars;
   limit--;

   int i5 = 0, i15 = 0, i30 = 0, ih1 = 0;

   static bool fft = true;
   
   //if (NewBar()) // Update array every 15 minutes
   {
      ArrayCopySeries(dt5,MODE_TIME,Symbol(),PERIOD_M5); 
      ArrayCopySeries(dt15,MODE_TIME,Symbol(),PERIOD_M15); 
      ArrayCopySeries(dt30,MODE_TIME,Symbol(),PERIOD_M30); 
      ArrayCopySeries(dth1,MODE_TIME,Symbol(),PERIOD_H1); 
   }   
   
   if ((fft) && (Symbol() == "EURUSD"))
   {
      fft = false;
      datetime d = iTime(NULL, PERIOD_D1, 0);
      for (int j=0; j<80; j++)
      {
         Print(j,") ",dt5[j]-d," ",dt15[j]-d, " ", dt30[j]-d," ", dth1[j]-d);
      }
   }
   for(int i=0; i<limit; i++)
   {   
      datetime ddt = iTime(NULL, 0, i);
      if (ddt<dt5[i5]) i5++;
      if (ddt<dt15[i15]) i15++;
      if (ddt<dt30[i30]) i30++;
      if (ddt<dth1[ih1])  ih1++;
      
      
       double COG5=iCustom(NULL,PERIOD_M5,"CoeffoLine_Hist",0,i5);
       double COG5S=0;
      
      
      double  COG15=iCustom(NULL,PERIOD_M15,"CoeffoLine_Hist",0,i15);
      double  COG15S=0;
      
      
     double   COG30=iCustom(NULL,PERIOD_M30,"CoeffoLine_Hist",0,i30);
     double  COG30S=0;
      
      
      double COGH1=iCustom(NULL,PERIOD_H1,"CoeffoLine_Hist",0,ih1);
      double COGH1S=0;
      
      
      UpBuffer_M5[i] = -40;    DownBuffer_M5[i] = -40; 
      UpBuffer_M15[i] = -40;    DownBuffer_M15[i] = -40; 
      UpBuffer_M30[i]  = -40;    DownBuffer_M30[i]  = -40; 
      UpBuffer_H1[i]  = -40;    DownBuffer_H1[i]  = -40; 

      if (COG5 >COG5S) UpBuffer_M5[i] = 1; if (COG5 <COG5S) DownBuffer_M5[i] = 1;
      if (COG15 >COG15S) UpBuffer_M15[i] = 2; if (COG15 <COG15S) DownBuffer_M15[i] = 2;
      if (COG30 >COG30S) UpBuffer_M30[i]   = 3; if (COG30 <COG30S) DownBuffer_M30[i]  = 3;
      if (COGH1 >COGH1S) UpBuffer_H1[i]   = 4; if (COGH1 <COGH1S) DownBuffer_H1[i]  = 4;
   }

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

/*
bool NewBar()
{
   static datetime dt = 0;
   if (dt != iTime(NULL, PERIOD_M15, 0))
   {
      dt = iTime(NULL, PERIOD_M15, 0);
   }
   return(false);
}
*/

Comments