MTF_4TF_FXSniperErgodicCCI_BarsM6
Download scriptThis script is a multi-timeframe analysis tool designed to help traders identify trend directions and signals by consolidating data from several different time periods simultaneously. Instead of looking at just one chart (like a 15-minute or 1-hour chart), it "looks ahead" into higher timeframes to give the user a broader perspective on market movement.
Core Logic and Functionality
Multi-Timeframe Integration The primary purpose of this script is to track four specific higher timeframes: Hourly (H1), 4-Hour (H4), Daily (D1), and Weekly (W1). It retrieves data from these larger scales and maps them onto your current trading chart. This allows you to see how the "big picture" trends align with the immediate price action.
External Data Processing The script relies on an external technical indicator (specifically a custom ergodic-based CCI trigger) to generate its primary signals. It essentially acts as a bridge, pulling specific values from that external tool across all four timeframes and displaying them in a unified window.
Signal Identification The logic works by comparing two different data points from the external indicator:
- High/Bullish Logic: When the script detects a specific "upward" condition from the source indicator, it triggers an entry point for that timeframe.
- Low/Bearish Logic: Conversely, when the "downward" condition is met, it registers a corresponding signal.
Visual Representation The tool organizes these signals into eight distinct buffers (visual lines or arrows).
- Four of these buffers represent "Up" signals for each of the four timeframes.
- The other four buffers represent "Down" signals for those same timeframes. By observing these, a trader can see at a glance if all timeframes are in agreement (e.g., if all eight signals are showing consistent movement) or if there is a conflict between short-term and long-term trends.
Data Smoothing and Continuity Because higher timeframe data (like a Daily bar) stays the same for many smaller price candles, the script includes a "Refresh" mechanism. This ensures that the signal remains visible and consistent across all the smaller bars until the higher timeframe actually changes. It prevents the visual data from flickering or disappearing between the updates of the larger timeframes, providing a smooth and stable visual experience for the user.
//+------------------------------------------------------------------+
//| MTF_Supertrend2_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 Crimson
#property indicator_color2 Maroon
#property indicator_color3 FireBrick
#property indicator_color4 Maroon
#property indicator_color5 MediumTurquoise
#property indicator_color6 DarkTurquoise
#property indicator_color7 MediumTurquoise
#property indicator_color8 LightSeaGreen
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
extern string CustomIndicator = "FXSnipersErgodic_CCITrigger";
extern int pq =2;
extern int pr = 10;
extern int ps = 5;
extern int trigger =3;
extern int Maxbars = 1000;
//extern int NbPeriods = 10;
//extern int LSMA_Period = 5;
extern int TF4 = PERIOD_H1;
extern int TF3 = PERIOD_H4;
extern int TF2 = PERIOD_D1;
extern int TF1 = PERIOD_W1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,110);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,110);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,110);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,110);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,DRAW_ARROW);
SetIndexArrow(4,110);
SetIndexBuffer(4,ExtMapBuffer5);
SetIndexEmptyValue(4,0.0);
SetIndexStyle(5,DRAW_ARROW);
SetIndexArrow(5,110);
SetIndexBuffer(5,ExtMapBuffer6);
SetIndexEmptyValue(5,0.0);
SetIndexStyle(6,DRAW_ARROW);
SetIndexArrow(6,110);
SetIndexBuffer(6,ExtMapBuffer7);
SetIndexEmptyValue(6,0.0);
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,110);
SetIndexBuffer(7,ExtMapBuffer8);
SetIndexEmptyValue(7,0.0);
//----
SetIndexLabel(0,"MTF_SnErgCCI("+TF4+")");
SetIndexLabel(1,"MTF_SnErgCCI("+TF3+")");
SetIndexLabel(2,"MTF_SnErgCCI("+TF2+")");
SetIndexLabel(3,"MTF_SnErgCCI("+TF1+")");
SetIndexLabel(4,"MTF_SnErgCCI("+TF4+")");
SetIndexLabel(5,"MTF_SnErgCCI("+TF3+")");
SetIndexLabel(6,"MTF_SnErgCCI("+TF2+")");
SetIndexLabel(7,"MTF_SnErgCCI("+TF1+")");
//---
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 = Bars-counted_bars;
limit = MathMax(limit,TF1/Period());
limit = MathMax(limit,TF2/Period());
limit = MathMax(limit,TF3/Period());
limit = MathMax(limit,TF4/Period());
limit = MathMin(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, 2,10,5,3,0, shift);
double l = iCustom(Symbol(), TF, CustomIndicator, 2,10,5,3,1, 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;
}
}
//---- Refresh buffers ++++++++++++++++++++ upgrade by Raff
int TimeFrame,TimeArray[],i; if (TimeFrame>Period()) {
int PerINT=TimeFrame/Period()+1;
datetime TimeArr[]; ArrayResize(TimeArr,PerINT);
ArrayCopySeries(TimeArr,MODE_TIME,Symbol(),Period());
for(i=0;i<PerINT+1;i++) {if (TimeArr[i]>=TimeArray[0]) {
//----
/********************************************************
Refresh buffers: buffer[i] = buffer[0];
********************************************************/
ExtMapBuffer1[i] = ExtMapBuffer1[0];
ExtMapBuffer2[i] = ExtMapBuffer2[0];
ExtMapBuffer3[i] = ExtMapBuffer3[0];
ExtMapBuffer4[i] = ExtMapBuffer4[0];
ExtMapBuffer5[i] = ExtMapBuffer5[0];
ExtMapBuffer6[i] = ExtMapBuffer6[0];
ExtMapBuffer7[i] = ExtMapBuffer7[0];
ExtMapBuffer8[i] = ExtMapBuffer8[0];
//----
} } }
//+++++++++++++++++++++++++++++++++++++++++++++++ Raff
return(0);
}
Comments