digfiltr_982
Download scriptThis script is a technical analysis tool designed to identify trends in financial markets by calculating four distinct weighted moving averages. Unlike a standard moving average, which treats every price point in a period equally, this logic uses specific "weighting coefficients" for each data point to determine the overall value of a trend.
Core Logic and Components
1. Weighted Data Processing The script processes historical price data (specifically closing prices) through four different mathematical models:
- FATL: Uses 39 periods of history.
- RFTL: Uses 44 periods of history.
- SATL: Uses 65 periods of history.
- RSTL: Uses 91 periods of history.
Each of these models utilizes a unique set of "weights." These weights determine how much influence a specific past price has on the current calculation—some prices are given more importance, while others are slightly discounted or even negatively weighted to smooth out market noise and highlight underlying momentum.
2. Signal Generation (Trend Comparison) The primary purpose of the script is to compare these four models against one another to determine "momentum shifts." It does this by calculating the distance between two different averages at a specific moment and comparing that distance to the distance from the previous moment.
It identifies three specific types of interactions:
- Fast vs. Reference Momentum: Compares the shortest-term data (FATL) against the medium-term data (RFTL).
- Fast vs. Slow Momentum: Compares the shortest-term data (FATL) against the long-term data (SATL).
- Slow vs. Long Momentum: Compares the medium-term data (SATL) against the longest-term data (RSTL).
3. Trend Directional Indicators For each of the three interactions mentioned above, the logic determines a direction:
- UP: If the gap between two averages is widening compared to the previous step, it indicates increasing momentum in that specific trend category.
- DOWN: If the gap is shrinking or narrowing compared to the previous step, it suggests that momentum is decelerating or reversing.
Summary for the User
Essentially, this tool acts as a multi-layered "momentum gauge." By visualizing four different weighted averages and tracking whether the gaps between them are expanding or contracting, it helps traders see not just where the price is going, but how much "force" is behind the current price movement across different timeframes.
//+------------------------------------------------------------------+
//| FATL.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 Lime
#property indicator_color3 Wheat
#property indicator_color4 IndianRed
//---- buffers
double FATLBuffer[];
double RFTLBuffer[];
double SATLBuffer[];
double RSTLBuffer[];
//+------------------------------------------------------------------+
//| FATL weights |
//+------------------------------------------------------------------+
#define FATLPeriods 39
#define RFTLPeriods 44
#define SATLPeriods 65
#define RSTLPeriods 91
double g_FATLKoef[FATLPeriods]=
{ 0.4360409450, 0.3658689069, 0.2460452079, 0.1104506886, -0.0054034585,
-0.0760367731, -0.0933058722, -0.0670110374, -0.0190795053, 0.0259609206,
0.0502044896, 0.0477818607, 0.0249252327, -0.0047706151, -0.0272432537,
-0.0338917071, -0.0244141482, -0.0055774838, 0.0128149838, 0.0226522218,
0.0208778257, 0.0100299086, -0.0036771622, -0.0136744850, -0.0160483392,
-0.0108597376, -0.0016060704, 0.0069480557, 0.0110573605, 0.0095711419,
0.0040444064, -0.0023824623, -0.0067093714, -0.0072003400, -0.0047717710,
0.0005541115, 0.0007860160, 0.0130129076, 0.0040364019 };
double g_RFTLKoef[RFTLPeriods]=
{-0.0025097319, +0.0513007762 , +0.1142800493 , +0.1699342860 , +0.2025269304 ,
+0.2025269304, +0.1699342860 , +0.1142800493 , +0.0513007762 , -0.0025097319 ,
-0.0353166244, -0.0433375629 , -0.0311244617 , -0.0088618137 , +0.0120580088 ,
+0.0233183633, +0.0221931304 , +0.0115769653 , -0.0022157966 , -0.0126536111 ,
-0.0157416029, -0.0113395830 , -0.0025905610 , +0.0059521459 , +0.0105212252 ,
+0.0096970755, +0.0046585685 , -0.0017079230 , -0.0063513565 , -0.0074539350 ,
-0.0050439973, -0.0007459678 , +0.0032271474 , +0.0051357867 , +0.0044454862 ,
+0.0018784961, -0.0011065767 , -0.0031162862 , -0.0033443253 , -0.0022163335 ,
+0.0002573669, +0.0003650790 , +0.0060440751 , +0.0018747783 };
double g_SATLKoef[SATLPeriods]=
{0.0982862174 ,+0.0975682269 ,+0.0961401078 ,+0.0940230544 ,+0.0912437090 ,+0.0878391006 ,
+0.0838544303 ,+0.0793406350 ,+0.0743569346 ,+0.0689666682 ,+0.0632381578 ,+0.0572428925 ,
+0.0510534242 ,+0.0447468229 ,+0.0383959950 ,+0.0320735368 ,+0.0258537721 ,+0.0198005183 ,
+0.0139807863 ,+0.0084512448 ,+0.0032639979 ,-0.0015350359 ,-0.0059060082 ,-0.0098190256 ,
-0.0132507215 ,-0.0161875265 ,-0.0186164872 ,-0.0205446727 ,-0.0219739146 ,-0.0229204861 ,
-0.0234080863 ,-0.0234566315 ,-0.0231017777 ,-0.0223796900 ,-0.0213300463 ,-0.0199924534 ,
-0.0184126992 ,-0.0166377699 ,-0.0147139428 ,-0.0126796776 ,-0.0105938331 ,-0.0084736770 ,
-0.0063841850 ,-0.0043466731 ,-0.0023956944 ,-0.0005535180 ,+0.0011421469 ,+0.0026845693 ,
+0.0040471369 ,+0.0052380201 ,+0.0062194591 ,+0.0070340085 ,+0.0076266453 ,+0.0080376628 ,
+0.0083037666 ,+0.0083694798 ,+0.0082901022 ,+0.0080741359 ,+0.0077543820 ,+0.0073260526 ,
+0.0068163569 ,+0.0062325477 ,+0.0056078229 ,+0.0049516078,+0.0161380976 };
double g_RSTLKoef[RSTLPeriods]=
{-0.0074151919,-0.0060698985,-0.0044979052,-0.0027054278,-0.0007031702,+0.0014951741,
+0.0038713513,+0.0064043271,+0.0090702334,+0.0118431116,+0.0146922652,+0.0175884606,
+0.0204976517,+0.0233865835,+0.0262218588,+0.0289681736,+0.0315922931,+0.0340614696,
+0.0363444061,+0.0384120882,+0.0402373884,+0.0417969735,+0.0430701377,+0.0440399188,
+0.0446941124,+0.0450230100,+0.0450230100,+0.0446941124,+0.0440399188,+0.0430701377,
+0.0417969735,+0.0402373884,+0.0384120882,+0.0363444061,+0.0340614696,+0.0315922931,
+0.0289681736,+0.0262218588,+0.0233865835,+0.0204976517,+0.0175884606,+0.0146922652,
+0.0118431116,+0.0090702334,+0.0064043271,+0.0038713513,+0.0014951741,-0.0007031702,
-0.0027054278,-0.0044979052,-0.0060698985,-0.0074151919,-0.0085278517,-0.0094111161,
-0.0100658241,-0.0104994302,-0.0107227904,-0.0107450280,-0.0105824763,-0.0102517019,
-0.0097708805,-0.0091581551,-0.0084345004,-0.0076214397,-0.0067401718,-0.0058083144,
-0.0048528295,-0.0038816271,-0.0029244713,-0.0019911267,-0.0010974211,-0.0002535559,
+0.0005231953,+0.0012297491,+0.0018539149,+0.0023994354,+0.0028490136,+0.0032221429,
+0.0034936183,+0.0036818974,+0.0038037944,+0.0038338964,+0.0037975350,+0.0036986051,
+0.0035521320,+0.0033559226,+0.0031224409,+0.0028550092,+0.0025688349,+0.0022682355,
+0.0073925495 };
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexBuffer(0, FATLBuffer);
SetIndexDrawBegin(0,39);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(1, RFTLBuffer);
SetIndexDrawBegin(1,44);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,3);
SetIndexBuffer(2, SATLBuffer);
SetIndexDrawBegin(2,65);
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,3);
SetIndexBuffer(3, RSTLBuffer);
SetIndexDrawBegin(3,91);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//---- TODO: add your code here
int j,pos;
double sum1,sum2,sum3,sum4;
//----
if(counted_bars<0) return(-1);
//if (counted_bars>0) counted_bars--;
//---- main calculation loop
for (pos=Bars-counted_bars-1;pos>=0;pos--)
{
sum1=0; // zero summary
for(j=0;j<FATLPeriods;j++) sum1+=g_FATLKoef[j]*Close[pos+j];//Counted FATL[pos]
FATLBuffer[pos]=sum1;
sum2=0; // zero summary
for(j=0;j<RFTLPeriods;j++) sum2+=g_RFTLKoef[j]*Close[pos+j];//Counted RFTL[pos]
RFTLBuffer[pos]=sum2;
sum3=0; // zero summary
for(j=0;j<SATLPeriods;j++) sum3+=g_SATLKoef[j]*Close[pos+j];//Counted SATL[POS]
SATLBuffer[pos]=sum3;
sum4=0; // zero summary
for(j=0;j<RSTLPeriods;j++) sum4+=g_RSTLKoef[j]*Close[pos+j];//Counted RSTL[pos]
RSTLBuffer[pos]=sum4;
int FARF=MathRound((sum1-sum2)/Point);
int FARFPrev=MathRound((FATLBuffer[pos+1]-RFTLBuffer[pos+1])/Point);
if (FARF>FARFPrev) string FAR="UP"; else FAR="DOWN";
int FASA=MathRound((sum1-sum3)/Point);
int FASAPrev=MathRound((FATLBuffer[pos+1]-SATLBuffer[pos+1])/Point);
if (FASA>FASAPrev) string FAS="UP"; else FAS="DOWN";
int SARS=MathRound((sum3-sum4)/Point);
int SARSPrev=MathRound((SATLBuffer[pos+1]-RSTLBuffer[pos+1])/Point);
if (SARS>SARSPrev) string SAS="UP"; else SAS="DOWN";
}
/*Comment(" FARF = ",FARF ," ", FAR, "\n",
" FASA = ",FASA ," ", FAS, "\n",
" SARS = ",SARS ," ", SAS, "\n",
" RSTL= ",sum4 );*/
return(0);
}
//+------------------------------------------------------------------+
Comments