Asctrend3times_MBK_001

Download script
Author: MBKAsctrend3times matt kennel
Asctrend3times_MBK_001

This tool is designed to identify market trends by analyzing price momentum across three different time horizons simultaneously. Instead of looking at just one short-term movement, it combines multiple perspectives to create a more balanced and reliable signal for identifying whether the market is moving upward or downward.

How the Logic Works

1. Multi-Timeframe Momentum Analysis The script uses a technical calculation called the Williams %R (WPR). It monitors this momentum across three distinct "lengths" or timeframes:

  • Short-term: To capture immediate price action.
  • Medium-term: To identify the primary current wave.
  • Long-term: To establish the overarching trend of the market.

By combining these three, the tool ensures that a small, temporary price spike doesn't trick the system into giving a false signal; the momentum must be consistent across different scales to trigger an action.

2. Weighted Averaging Not all timeframes are treated equally. The logic applies specific "weights" to each of the three momentum values. This allows the tool to prioritize certain timeframes (such as the medium-term) more heavily than others, creating a smoothed and more stable trend reading.

3. Trend Confirmation Rules The script looks for two specific conditions to be met before it confirms a change in trend:

  • Primary Momentum: The weighted average of all three timeframes must cross specific high or low thresholds.
  • Long-Term Filter: The long-term momentum component must also confirm the direction (e.g., ensuring that a short-term "buy" signal is actually supported by the broader market trend).

4. Visual Signals and Alerts Once the logic confirms a shift in the trend, the script identifies the specific point of change:

  • Buy Signals: When the trend flips to "Up," the tool marks a point below the current price (represented as a blue arrow).
  • Sell Signals: When the trend flips to "Down," the tool marks a point above the current price (represented as a red arrow).

Essentially, this script acts as a filter that ignores market "noise" by demanding that short-term momentum, medium-term strength, and long-term direction all agree before providing a visual signal on your chart.

Indicators Used
Larry William percent range indicator
Miscellaneous
Implements a curve of type %1
21 Views
0 Downloads
0 Favorites
Asctrend3times_MBK_001
//+------------------------------------------------------------------+
//| MBKAsctrend3times.mq4                                            |
//+------------------------------------------------------------------+
#property copyright "MBKAsctrend3times matt kennel"
#property link      "http://www.metatrader.org"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
// Modified by MBK:  now have three different timescales (bar lengths)
// to combine for final WPR indicator, with further long-term trend indicator.
// try on H1 chart with these parameters. 
extern int RISK=3;
//extern int CountBars=2000;
extern int NumberofAlerts=1;
extern int WPRLength1=9,WPRLength2=33, WPRLength3=77;
extern int LToffset=-5;
extern double w1=1.0, w2=3.0, w3=1.0; // relative weights
int counter=0;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,234);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| SilverTrend_Signal                                               |
//+------------------------------------------------------------------+
  int start() 
  {
   //if (CountBars>=Bars) CountBars=Bars;
   //SetIndexDrawBegin(0,Bars-CountBars+SSP);
   //SetIndexDrawBegin(1,Bars-CountBars+SSP);
   int i1,i2,K;
   double Range,AvgRange,smin,smax,SsMax,SsMin,price;
   double wprvalue;
   static bool uptrend,old;
   bool flag1, flag2;
   int i,shift,counted_bars=IndicatorCounted();
   //if(Bars<=SSP+1) return(0);
//---- initial zero
   //if(counted_bars<SSP+1)
   // {
   //      for(i=1;i<=SSP;i++) val2[CountBars-i]=0.0;
   //  }
   ////----
   K=33-RISK;
   // wprlength = 3+RISK*2; 
   uptrend=false;
   old=false;
   double sumweights=w1+w2+w3;
   w1/=sumweights;
   w2/=sumweights;
   w3/=sumweights;
   int SSP=10;
     for(shift=Bars-SSP; shift>=0; shift--) 
     {
      Range=0;
      AvgRange=0;
      for(i1=shift; i1<=shift+SSP; i1++)
        {AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]);
        }
      Range=AvgRange/(SSP+1);
      double wprval1=(100-MathAbs(iWPR(Symbol(),Period(),WPRLength1,shift)));
      double wprval2=(100-MathAbs(iWPR(Symbol(),Period(),WPRLength2,shift)));
      double wprval3=(100-MathAbs(iWPR(Symbol(),Period(),WPRLength3,shift)));
      wprvalue=w1*wprval1 + w2*wprval2 + w3*wprval3;
      //  MathPow(wprval1*wprval2*wprval3,1.0/3.0); 
      double wprlong=wprval3;
        if ((wprvalue < 33-RISK) && (wprlong < 50-LToffset)) 
        {
         uptrend=false;
        }
        if ((wprvalue > 67+RISK) && (wprlong>=50+LToffset)) 
        {
         uptrend=true;
        }
        if (uptrend!=old && uptrend==true) 
        {
         val1[shift]=Low[shift]-Range*0.8; // lower range
         counter=0;
           if (shift==0 && counter<=NumberofAlerts) 
           {
            // Alert("MBKAsctrend M",Period()," ",Symbol()," BUY");
            counter=counter+1;
           }
        }
        if (uptrend!=old && uptrend==false) 
        {
         counter=0;
         val2[shift]=High[shift]+Range*0.8;
           if (shift==0 && counter<=NumberofAlerts) 
           {
            // Alert("Silver Trend ",Period()," ",Symbol()," SELL");
            counter=counter+1;
           }
        }
      Comment(shift);
      old=uptrend;
     }
   return(0);
  }
//+------------------------------------------------------------------+

Comments