Author: Copyright � 2006, HomeSoft Tartan Corp.
1_v3

The logic of this script is designed to analyze market price movements by calculating a specific type of smoothed trend data. Instead of looking at just one set of numbers, it processes the market history through four distinct layers of calculation simultaneously.

Here is a breakdown of how the logic functions:

Core Mathematical Approach

The script uses a weighted smoothing technique. It takes the closing prices of the market and applies a specific mathematical formula (based on configurable periods and coefficients) to "smooth out" the noise. By doing this, it attempts to identify the underlying momentum of the price rather than reacting to every small tick or fluctuation.

The Four-Layer Analysis

The script performs this smoothing process four times independently. Each layer is unique because it uses different user-defined settings:

  • Different Periods: Each layer looks at a different amount of historical data (e.g., a short timeframe vs. a longer timeframe).
  • Different Smoothing Weights: Each layer applies a different intensity of "smoothing," allowing the script to see various levels of trend sensitivity.

Trend Detection and Visualization

For every one of these four layers, the logic performs a "comparison check":

  1. Directional Logic: It compares the current calculated value against the previous value.
  2. Movement Identification:
    • If the value is currently higher than it was in the previous step, it identifies this as an Upward movement.
    • If the value is lower than it was in the previous step, it identifies this as a Downward movement.
  3. Visual Feedback: The script translates these findings into visual lines on your chart. It specifically distinguishes between different trend types by using different colors and line styles, allowing you to see multiple layers of market momentum at once.

Real-Time Status Reporting

In addition to the visual lines, the script provides a live text summary on the chart. This summary displays:

  • The specific settings currently being used for each of the four layers.
  • A clear text label (such as "UP" or "DOWN") for the direction of each layer based on the most recent price movement.

In summary, this script acts as a multi-layered trend filter. It smooths out market noise through four different lenses to help you visualize whether the current price momentum is leaning upwards or downwards across various time horizons and sensitivities.

Price Data Components
Series array that contains open time of each bar
10 Views
0 Downloads
0 Favorites
1_v3
//+------------------------------------------------------------------+
//|                                            i-RoundPrice-T01m.mq4 |
//|          25.07.2006  Translated on MT4 by Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//+------------------------------------------------------------------+
/*[[
	Name := RoundPrice
	Author := Copyright © 2006, HomeSoft Tartan Corp.
	Link := spiky@transkeino.ru
	Separate Window := No
	First Color := Lime
	First Draw Type := Line
	First Symbol := 217
	Use Second Data := Yes
	Second Color := Red
	Second Draw Type := Line
	Second Symbol := 218
]]*/
#property copyright "Copyright © 2006, HomeSoft Tartan Corp."
#property link      "spiky@transkeino.ru"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_color3 MediumTurquoise
#property indicator_color4 DarkOrange
#property indicator_color5 DodgerBlue
#property indicator_color6 Chocolate
#property indicator_color7 Blue
#property indicator_color8 Gold
//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà -------------------------------
extern int t3_period1=5;
extern double b1=0.2;
extern int t3_period2=5;
extern double b2=0.3;
extern int t3_period3=5;
extern double b3=0.4;
extern int t3_period4=5;
extern double b4=0.5;
extern int mBar=300;
//------- Ãëîáàëüíûå ïåðåìåííûå èíäèêàòîðà ---------------------------
double dBuf0[], dBuf1[];
double dBuf2[], dBuf3[];
double dBuf4[], dBuf5[];
double dBuf6[], dBuf7[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
  void init()
  {
   SetIndexBuffer    (0, dBuf0);
   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexStyle     (0, DRAW_LINE,1);
   SetIndexBuffer    (1, dBuf1);
   SetIndexEmptyValue(1, EMPTY_VALUE);
   SetIndexStyle     (1, DRAW_LINE,1);
   SetIndexBuffer    (2, dBuf2);
   SetIndexEmptyValue(2, EMPTY_VALUE);
   SetIndexStyle     (2, DRAW_LINE,2);
   SetIndexBuffer    (3, dBuf3);
   SetIndexEmptyValue(3, EMPTY_VALUE);
   SetIndexStyle     (3, DRAW_LINE,2);
   SetIndexBuffer    (4, dBuf4);
   SetIndexEmptyValue(4, EMPTY_VALUE);
   SetIndexStyle     (4, DRAW_LINE,3);
   SetIndexBuffer    (5, dBuf5);
   SetIndexEmptyValue(5, EMPTY_VALUE);
   SetIndexStyle     (5, DRAW_LINE,3);
   SetIndexBuffer    (6, dBuf6);
   SetIndexEmptyValue(6, EMPTY_VALUE);
   SetIndexStyle     (6, DRAW_LINE,4);
   SetIndexBuffer    (7, dBuf7);
   SetIndexEmptyValue(7, EMPTY_VALUE);
   SetIndexStyle     (7, DRAW_LINE,4);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
  void start()
  {
   bool   ft1=True;
   double e11, e21, e31, e41, e51, e61, c11, c21, c31, c41, n1, w11, w21, b21, b31;
   double t31[];
   int    LoopBegin1, shift1;
   bool   ft2=True;
   double e12, e22, e32, e42, e52, e62, c12, c22, c32, c42, n2, w12, w22, b22, b32;
   double t32[];
   int    LoopBegin2, shift2;
   bool   ft3=True;
   double e13, e23, e33, e43, e53, e63, c13, c23, c33, c43, n3, w13, w23, b23, b33;
   double t33[];
   int    LoopBegin3, shift3;
   bool   ft4=True;
   double e14, e24, e34, e44, e54, e64, c14, c24, c34, c44, n4, w14, w24, b24, b34;
   double t34[];
   int    LoopBegin4, shift4;
   if (mBar==0) LoopBegin1=Bars-t3_period1-1;
   else LoopBegin1=mBar;
   LoopBegin1=MathMin(LoopBegin1, Bars-t3_period1-1);
   ArrayResize(t31, LoopBegin1);
   if (ft1)
     {
      b21=b1*b1;
      b31=b21*b1;
      c11=-b31;
      c21=(3*(b21+b31));
      c31=-3*(2*b21+b1+b31);
      c41=(1+3*b1+b31+3*b21);
      n1=t3_period1;
      if (n1<1) n1=1;
      n1=1+0.5*(n1-1);
      w11=2/(n1+1);
      w21=1-w11;
      ft1=False;
     }
   for(shift1=LoopBegin1; shift1>=0; shift1--)
     {
      e11=w11*Close[shift1]+w21*e11;
      e21=w11*e11+w21*e21;
      e31=w11*e21+w21*e31;
      e41=w11*e31+w21*e41;
      e51=w11*e41+w21*e51;
      e61=w11*e51+w21*e61;
      t31[shift1]=c11*e61+c21*e51+c31*e41+c41*e31;
      if (t31[shift1+1]<=t31[shift1]) dBuf0[shift1]=t31[shift1]; else dBuf0[shift1]=0;
      if (t31[shift1+1]>t31[shift1]) dBuf1[shift1]=t31[shift1]; else dBuf1[shift1]=0;
     }
   if (mBar==0) LoopBegin2=Bars-t3_period2-1;
   else LoopBegin2=mBar;
   LoopBegin2=MathMin(LoopBegin2, Bars-t3_period2-1);
   ArrayResize(t32, LoopBegin2);
     if (ft2) {
      b22=b2*b2;
      b32=b22*b2;
      c12=-b32;
      c22=(3*(b22+b32));
      c32=-3*(2*b22+b2+b32);
      c42=(1+3*b2+b32+3*b22);
      n2=t3_period2;
      if (n2<1) n2=1;
      n2=1+0.5*(n2-1);
      w12=2/(n2+1);
      w22=1-w12;
      ft2=False;
     }
   for(shift2=LoopBegin2; shift2>=0; shift2--)
     {
      e12=w12*Close[shift2]+w22*e12;
      e22=w12*e12+w22*e22;
      e32=w12*e22+w22*e32;
      e42=w12*e32+w22*e42;
      e52=w12*e42+w22*e52;
      e62=w12*e52+w22*e62;
      t32[shift2]=c12*e62+c22*e52+c32*e42+c42*e32;
      if (t32[shift2+1]<=t32[shift2]) dBuf2[shift2]=t32[shift2]; else dBuf2[shift2]=0;
      if (t32[shift2+1]>t32[shift2]) dBuf3[shift2]=t32[shift2]; else dBuf3[shift2]=0;
     }
   if (mBar==0) LoopBegin3=Bars-t3_period3-1;
   else LoopBegin3=mBar;
   LoopBegin3=MathMin(LoopBegin3, Bars-t3_period3-1);
   ArrayResize(t33, LoopBegin3);
   if (ft3)
     {
      b23=b3*b3;
      b33=b23*b3;
      c13=-b33;
      c23=(3*(b23+b33));
      c33=-3*(2*b23+b3+b33);
      c43=(1+3*b3+b33+3*b23);
      n3=t3_period3;
      if (n3<1) n3=1;
      n3=1+0.5*(n3-1);
      w13=2/(n3+1);
      w23=1-w13;
      ft3=False;
     }
   for(shift3=LoopBegin3; shift3>=0; shift3--)
     {
      e13=w13*Close[shift3]+w23*e13;
      e23=w13*e13+w23*e23;
      e33=w13*e23+w23*e33;
      e43=w13*e33+w23*e43;
      e53=w13*e43+w23*e53;
      e63=w13*e53+w23*e63;
      t33[shift3]=c13*e63+c23*e53+c33*e43+c43*e33;
      if (t33[shift3+1]<=t33[shift3]) dBuf4[shift3]=t33[shift3]; else dBuf4[shift3]=0;
      if (t33[shift3+1]>t33[shift3]) dBuf5[shift3]=t33[shift3]; else dBuf5[shift3]=0;
     }
   if (mBar==0) LoopBegin4=Bars-t3_period4-1;
   else LoopBegin4=mBar;
   LoopBegin4=MathMin(LoopBegin4, Bars-t3_period4-1);
   ArrayResize(t34, LoopBegin4);
   if (ft4)
     {
      b24=b4*b4;
      b34=b24*b4;
      c14=-b34;
      c24=(3*(b24+b34));
      c34=-3*(2*b24+b4+b34);
      c44=(1+3*b4+b34+3*b24);
      n4=t3_period4;
      if (n4<1) n4=1;
      n4=1+0.5*(n4-1);
      w14=2/(n4+1);
      w24=1-w14;
      ft4=False;
     }
   for(shift4=LoopBegin4; shift4>=0; shift4--)
     {
      e14=w14*Close[shift4]+w24*e14;
      e24=w14*e14+w24*e24;
      e34=w14*e24+w24*e34;
      e44=w14*e34+w24*e44;
      e54=w14*e44+w24*e54;
      e64=w14*e54+w24*e64;
      t34[shift4]=c14*e64+c24*e54+c34*e44+c44*e34;
      if (t34[shift4+1]<=t34[shift4]) dBuf6[shift4]=t34[shift4]; else dBuf6[shift4]=0;
      if (t34[shift4+1]>t34[shift4]) dBuf7[shift4]=t34[shift4]; else dBuf7[shift4]=0;
     }
   if (dBuf0[0]!=0) string z1="UP";
   if (dBuf1[0]!=0) z1="DOWN";
   if (dBuf2[0]!=0) string z2="UP";
   if (dBuf3[0]!=0) z2="DOWN";
   if (dBuf4[0]!=0) string z3="UP";
   if (dBuf5[0]!=0) z3="DOWN";
   if (dBuf6[0]!=0) string z4="UP";
   if (dBuf7[0]!=0) z4="DOWN";
   Comment(TimeToStr(iTime(NULL,0,0),TIME_MINUTES),
           "\nÏåðâûé t3=",t3_period1," b=",b1, " íàïðàâëåíèå ",z1,
           "\nÏåðâûé t3=",t3_period2," b=",b2, " íàïðàâëåíèå ",z2,
           "\nÏåðâûé t3=",t3_period3," b=",b3, " íàïðàâëåíèå ",z3,
           "\nÏåðâûé t3=",t3_period4," b=",b4, " íàïðàâëåíèå ",z4);
  }
//+------------------------------------------------------------------+

Comments