FATL_v1
Download scriptThis script is a custom technical indicator designed for the MetaTrader 4 platform. It functions by analyzing price action history to identify specific trend shifts and visualizes them on the trading chart using directional arrows and a reference line.
Core Analytical Logic
The primary engine of this script relies on a sophisticated weighted calculation. Rather than looking at just the most recent price, it examines a specific window of 39 historical data points (price "closes"). Each of these 39 points is assigned a unique mathematical weight—some positive and some negative.
By multiplying these prices by their respective weights and summing them up, the script calculates a smoothed value for two consecutive moments in time. It then compares these two values to determine the direction of the market movement:
- If the current calculated value is higher than the previous one, it identifies an upward momentum.
- If it is lower, it identifies a downward momentum.
Visual Signals and Notifications
The script translates these mathematical transitions into visual cues on your chart:
- Trend Reversals: The tool monitors for the exact moment the trend flips (e.g., moving from down to up). When this "cross-over" occurs, it places a specific marker on the chart.
- Upward Signals: When a shift to an upward trend is detected, a blue arrow appears slightly below the price candle.
- Downward Signals: When a shift to a downward trend is detected, a red arrow appears slightly above the price candle.
- Dynamic Reference Line: The script also generates a white line. This line is constructed by taking the weighted price data and adjusting it against the current "Bid" price of the market. It serves as a visual guide for the underlying calculation being performed by the indicator.
Summary for the Trader
In plain terms, this is a trend-following tool. It filters out "market noise" by using a complex weighted average of historical prices to find the true direction of the move. Instead of showing you constant data points, it only alerts you visually when the underlying math suggests that the market momentum has officially changed direction.
//+------------------------------------------------------------------+
//| FATLs.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 White
extern int CountBars=300;
//---- buffers
double UPBuffer[];
double DownBuffer[];
double LineBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,241);
SetIndexBuffer(0,UPBuffer);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,242);
SetIndexBuffer(1,DownBuffer);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LineBuffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| FATLs |
//+------------------------------------------------------------------+
int start()
{
SetIndexDrawBegin(0,Bars-CountBars+38);
SetIndexDrawBegin(1,Bars-CountBars+38);
int i,counted_bars=IndicatorCounted();
double val1, val2, i1;
bool trend,old;
//----
if(Bars<=38) return(0);
//---- initial zero
if(counted_bars<38)
{
for(i=1;i<=0;i++) UPBuffer[CountBars-i]=0.0;
for(i=1;i<=0;i++) DownBuffer[CountBars-i]=0.0;
}
//----
i=CountBars-38-1;
// if(counted_bars>=38) i=Bars-counted_bars-1;
while(i>=0)
{
val1=
0.4360409450*Close[i+0]
+0.3658689069*Close[i+1]
+0.2460452079*Close[i+2]
+0.1104506886*Close[i+3]
-0.0054034585*Close[i+4]
-0.0760367731*Close[i+5]
-0.0933058722*Close[i+6]
-0.0670110374*Close[i+7]
-0.0190795053*Close[i+8]
+0.0259609206*Close[i+9]
+0.0502044896*Close[i+10]
+0.0477818607*Close[i+11]
+0.0249252327*Close[i+12]
-0.0047706151*Close[i+13]
-0.0272432537*Close[i+14]
-0.0338917071*Close[i+15]
-0.0244141482*Close[i+16]
-0.0055774838*Close[i+17]
+0.0128149838*Close[i+18]
+0.0226522218*Close[i+19]
+0.0208778257*Close[i+20]
+0.0100299086*Close[i+21]
-0.0036771622*Close[i+22]
-0.0136744850*Close[i+23]
-0.0160483392*Close[i+24]
-0.0108597376*Close[i+25]
-0.0016060704*Close[i+26]
+0.0069480557*Close[i+27]
+0.0110573605*Close[i+28]
+0.0095711419*Close[i+29]
+0.0040444064*Close[i+30]
-0.0023824623*Close[i+31]
-0.0067093714*Close[i+32]
-0.0072003400*Close[i+33]
-0.0047717710*Close[i+34]
+0.0005541115*Close[i+35]
+0.0007860160*Close[i+36]
+0.0130129076*Close[i+37]
+0.0040364019*Close[i+38];
val2=
0.4360409450*Close[i+0+1]
+0.3658689069*Close[i+1+1]
+0.2460452079*Close[i+2+1]
+0.1104506886*Close[i+3+1]
-0.0054034585*Close[i+4+1]
-0.0760367731*Close[i+5+1]
-0.0933058722*Close[i+6+1]
-0.0670110374*Close[i+7+1]
-0.0190795053*Close[i+8+1]
+0.0259609206*Close[i+9+1]
+0.0502044896*Close[i+10+1]
+0.0477818607*Close[i+11+1]
+0.0249252327*Close[i+12+1]
-0.0047706151*Close[i+13+1]
-0.0272432537*Close[i+14+1]
-0.0338917071*Close[i+15+1]
-0.0244141482*Close[i+16+1]
-0.0055774838*Close[i+17+1]
+0.0128149838*Close[i+18+1]
+0.0226522218*Close[i+19+1]
+0.0208778257*Close[i+20+1]
+0.0100299086*Close[i+21+1]
-0.0036771622*Close[i+22+1]
-0.0136744850*Close[i+23+1]
-0.0160483392*Close[i+24+1]
-0.0108597376*Close[i+25+1]
-0.0016060704*Close[i+26+1]
+0.0069480557*Close[i+27+1]
+0.0110573605*Close[i+28+1]
+0.0095711419*Close[i+29+1]
+0.0040444064*Close[i+30+1]
-0.0023824623*Close[i+31+1]
-0.0067093714*Close[i+32+1]
-0.0072003400*Close[i+33+1]
-0.0047717710*Close[i+34+1]
+0.0005541115*Close[i+35+1]
+0.0007860160*Close[i+36+1]
+0.0130129076*Close[i+37+1]
+0.0040364019*Close[i+38+1];
i1=val1-val2;
UPBuffer[i]=0.0; DownBuffer[i]=0.0;
if (i1>0) trend=true;
if (i1<0) trend=false;
if ((! trend==old) && trend==true) UPBuffer[i]=Low[i]-5*Point;
if ((! trend==old) && trend==false) DownBuffer[i]=High[i]+5*Point;
old=trend;
i--;
}
//clear buffer
for(i=0;i<=100;i++) LineBuffer[i]=0.0;
LineBuffer[00]=(( 0.4360409450 *Close[0])/200)+Bid;
LineBuffer[01]=(( 0.3658689069 *Close[1])/200)+Bid;
LineBuffer[02]=(( 0.2460452079 *Close[2])/200)+Bid;
LineBuffer[03]=(( 0.1104506886 *Close[3])/200)+Bid;
LineBuffer[04]=(((-0.0054034585)*Close[4])/200)+Bid;
LineBuffer[05]=(((-0.0760367731)*Close[5])/200)+Bid;
LineBuffer[06]=(((-0.0933058722)*Close[6])/200)+Bid;
LineBuffer[07]=(((-0.0670110374)*Close[7])/200)+Bid;
LineBuffer[08]=(((-0.0190795053)*Close[8])/200)+Bid;
LineBuffer[09]=(( 0.0259609206 *Close[9])/200)+Bid;
LineBuffer[10]=(( 0.0502044896 *Close[10])/200)+Bid;
LineBuffer[11]=(( 0.0477818607 *Close[11])/200)+Bid;
LineBuffer[12]=(( 0.0249252327 *Close[12])/200)+Bid;
LineBuffer[13]=(((-0.0047706151)*Close[13])/200)+Bid;
LineBuffer[14]=(((-0.0272432537)*Close[14])/200)+Bid;
LineBuffer[15]=(((-0.0338917071)*Close[15])/200)+Bid;
LineBuffer[16]=(((-0.0244141482)*Close[16])/200)+Bid;
LineBuffer[17]=(((-0.0055774838)*Close[17])/200)+Bid;
LineBuffer[18]=(( 0.0128149838 *Close[18])/200)+Bid;
LineBuffer[19]=(( 0.0226522218 *Close[19])/200)+Bid;
LineBuffer[20]=(( 0.0208778257 *Close[20])/200)+Bid;
LineBuffer[21]=(( 0.0100299086 *Close[21])/200)+Bid;
LineBuffer[22]=(((-0.0036771622)*Close[22])/200)+Bid;
LineBuffer[23]=(((-0.0136744850)*Close[23])/200)+Bid;
LineBuffer[24]=(((-0.0160483392)*Close[24])/200)+Bid;
LineBuffer[25]=(((-0.0108597376)*Close[25])/200)+Bid;
LineBuffer[26]=(((-0.0016060704)*Close[26])/200)+Bid;
LineBuffer[27]=(( 0.0069480557 *Close[27])/200)+Bid;
LineBuffer[28]=(( 0.0110573605 *Close[28])/200)+Bid;
LineBuffer[29]=(( 0.0095711419 *Close[29])/200)+Bid;
LineBuffer[30]=(( 0.0040444064 *Close[30])/200)+Bid;
LineBuffer[31]=(((-0.0023824623)*Close[31])/200)+Bid;
LineBuffer[32]=(((-0.0067093714)*Close[32])/200)+Bid;
LineBuffer[33]=(((-0.0072003400)*Close[33])/200)+Bid;
LineBuffer[34]=(((-0.0047717710)*Close[34])/200)+Bid;
LineBuffer[35]=(( 0.0005541115 *Close[35])/200)+Bid;
LineBuffer[36]=(( 0.0007860160 *Close[36])/200)+Bid;
LineBuffer[37]=(( 0.0130129076 *Close[37])/200)+Bid;
LineBuffer[38]=(( 0.0040364019 *Close[38])/200)+Bid;
return(0);
}
//+------------------------------------------------------------------+
Comments