MTF_FXSErgoCCITrig[L]_4TF_Bars
Download scriptThis script is designed to function as a multi-timeframe trend analysis tool for MetaTrader. Its primary purpose is to aggregate and visualize market sentiment from several different timeframes simultaneously, allowing a trader to see the "big picture" without having to switch between charts manually.
Core Logic and Functionality
1. Multi-Timeframe Synchronization The script is built to monitor four specific timeframes at once (specifically H1, H4, D1, and W1). Instead of looking at the current chart in isolation, the logic scans these higher timeframes to determine the prevailing market direction. This helps in identifying whether the short-term movement is aligned with or contradicting the long-term trend.
2. Data Retrieval and Analysis The script acts as a "bridge" that pulls data from a secondary custom indicator (referred to in the code as a CCITr indicator). It looks at specific parameters—such as moving averages and price types—to evaluate the market state. Specifically, it checks for conditions where the market is showing strength or weakness across those different periods.
3. Visual Signaling The tool translates this complex data into visual markers (arrows) on your current chart:
- Trend Detection: The logic distinguishes between "Up" movements and "Down" movements.
- Buffer Mapping: It uses eight distinct "buffers" to store these results. This allows the script to display different signals for each timeframe separately. For example, it can show you where the H1 trend is bullish while simultaneously showing where the D1 trend is bearish.
4. Smooth Data Projection (The "Refresh" Logic) One of the sophisticated features of this script is its ability to handle the transition between timeframes. Because a "Day" or a "Week" covers many smaller "Minutes" or "Hours," the script includes logic to "fill in the gaps." It ensures that the trend signal remains consistent across all bars on your current chart until the higher timeframe actually changes, preventing flickering or "jumping" signals during the day.
Summary for the User
In simple terms, this script acts like a radar. While you are trading on a small timeframe, it constantly checks the weather on the larger timeframes (Hours, Days, and Weeks). It then plots arrows on your screen to tell you if those larger trends are moving in your favor, helping you stay aligned with the dominant market flow while providing a smooth, continuous visual experience.
//+------------------------------------------------------------------+
//| 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 6
#property indicator_buffers 8
#property indicator_color1 Crimson
#property indicator_color2 Maroon
#property indicator_color3 FireBrick
#property indicator_color4 Maroon
#property indicator_color5 SpringGreen
#property indicator_color6 MediumSpringGreen
#property indicator_color7 MediumSeaGreen
#property indicator_color8 SeaGreen
// IndicatorDigits(2);
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
extern string CustomIndicator = "FXSErgoCCITrig[L]";
extern int pq =2;
extern int pr = 10;
extern int ps = 5;
extern int trigger =3;
extern int ModeMA =2;
extern string note_TF = "M30,60H1,240H4,1440D1,10080W1,43200MN1";
extern string MA_Method = "ModeMa(SMA0,EMA1,SmmMA2,LWMA3)";
extern string MA_Price = "Price(OCHLMdTpWg)";
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,"FXSErgoCCITr("+TF4+")");
SetIndexLabel(1,"FXSErgoCCITr("+TF3+")");
SetIndexLabel(2,"FXSErgoCCITr("+TF2+")");
SetIndexLabel(3,"FXSErgoCCITr("+TF1+")");
SetIndexLabel(4,"FXSErgoCCITr("+TF4+")");
SetIndexLabel(5,"FXSErgoCCITr("+TF3+")");
SetIndexLabel(6,"FXSErgoCCITr("+TF2+")");
SetIndexLabel(7,"FXSErgoCCITr("+TF1+")");
IndicatorDigits(1);
//---
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, 2,10,5,3,2,0, shift);
double l = iCustom(Symbol(), TF, CustomIndicator, 2,10,5,3,2,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