_MTF_Fractal
Download scriptThis script is designed to enhance your trading charts by identifying specific price patterns known as "Fractals" across multiple timeframes simultaneously. While standard indicators usually only show data for the specific chart you are currently viewing, this tool allows you to visualize key market turning points from higher timeframes on your current screen.
Core Functionality
The primary purpose of this indicator is to provide a "Multi-Timeframe" (MTF) view. It enables you to see significant price結構 (structures) from different periods—such as Daily, Weekly, or Hourly charts—without having to constantly switch between different windows. It essentially "projects" the significant highs and lows of a larger timeframe onto your smaller, more active trading chart.
How the Logic Works
The script operates through three main processes:
1. Timeframe Synchronization The tool begins by looking at a specific higher timeframe that you define in the settings (for example, if you are trading on a 1-minute chart, you can set the indicator to look at the 60-minute/Hourly chart). It creates a bridge between these two different scales of time.
2. Pattern Identification The logic specifically scans for "Fractals." In technical analysis, a Fractal represents a peak or a valley where the price has reached a high or low point relative to the surrounding candles. The script identifies two distinct types of these points:
- Upper Fractals: Representing potential resistance levels (marked in red).
- Lower Fractals: Representing potential support levels (marked in blue).
3. Dynamic Mapping Instead of just showing you where a fractal happened in the past, the script uses a smart calculation to map those high and low points accurately onto your current view. It ensures that as time progresses, the symbols remain correctly aligned with the historical price data of the higher timeframe you selected.
Visual Output
Once active, the indicator will place visual arrows directly on your chart:
- Blue Arrows highlight the identified lower fractal points (support).
- Red Arrows highlight the identified upper fractal points (resistance).
By using this logic, traders can better understand the "big picture" of market trends while focusing on short-term execution, helping to identify major zones where the price may stall or reverse based on higher-level market behavior.
//+------------------------------------------------------------------+
//| MTF_Fractals.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link "http://www.forex-tsd.com"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- 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.
---------------------------------------
**************************************************************************/
extern int TimeFrame=60;
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,119);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,119);
//---- name for DataWindow and indicator subwindow label
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("Fractals "+TimeFrameStr);
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF Fractals |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined timeframe on to current timeframe
if(ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame)<=0)
return(0);
//----
limit=Bars-counted_bars;
if(counted_bars==0)
{
ArrayInitialize(ExtMapBuffer1,0);
ArrayInitialize(ExtMapBuffer2,0);
limit--;
}
for(i=0,y=0;i<limit;i++)
{
if(y<ArraySize(TimeArray) && Time[i]<TimeArray[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]=iFractals(NULL,TimeFrame,1,y);
ExtMapBuffer2[i]=iFractals(NULL,TimeFrame,2,y);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments