LWMA-Crossover_Signal_v1

Download script
Author: Copyright � 2005, Jason Robinson (jnrtrading)
LWMA-Crossover_Signal_v1

This tool is designed to simplify chart analysis by identifying specific trend reversal points without cluttering your visual workspace. Instead of forcing you to constantly monitor two moving averages that might overlap or become difficult to see when zoomed out, this script translates those movements into clear, actionable visual markers.

How the Logic Works

The script functions by monitoring the relationship between two different "Linear Weighted Moving Averages" (LWMAs). These averages are used to smooth out price action and identify the current momentum of the market. By comparing a "Faster" average against a "Slower" average, the tool detects the exact moments when one trend begins to overtake the other.

The Core Identification Process:

  1. Trend Tracking: The script constantly calculates the values of both moving averages based on your preferred settings (defaulting to 5 and 6 periods).
  2. Crossover Detection: It looks for specific "crosses" in the data:
    • Bullish Signal: When the Faster average moves from being below the Slower average to above it, a signal is triggered.
    • Bearish Signal: When the Faster average moves from being above the Slower average to below it, a signal is triggered.
  3. Precise Placement: To ensure the signals are easy to see, the script calculates the "Average Range" of recent price bars (the distance between highs and lows). It then places a visual arrow exactly half that distance away from the price candle. This ensures that the markers stay clearly separated from the bars themselves.

Key Benefits for the User

  • Visual Clarity: Because the script identifies the crossover points automatically, you can actually remove the moving average lines from your chart entirely. This leads to a much cleaner, less "noisy" trading environment.
  • Zoom Independence: On some charts, fast-moving averages can get hidden behind candlesticks when you zoom out. This tool captures those specific mathematical crossovers and displays them as distinct icons, making them visible regardless of your screen settings.
  • Customizable Sensitivity: You have the flexibility to adjust the periods for both the Faster and Slower moving averages, allowing you to fine-tune how sensitive or reactive the signal markers are to market changes.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
LWMA-Crossover_Signal_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                         LWMA-Crossover_Signal.mq4 |
//|         Copyright © 2005, Jason Robinson (jnrtrading)            |
//|                   http://www.jnrtading.co.uk                     |
//+------------------------------------------------------------------+

/*
  +-------------------------------------------------------------------+
  | Allows you to enter two lwma periods and it will then show you at |
  | Which point they crossed over. It is more usful on the shorter    |
  | periods that get obscured by the bars / candlesticks and when     |
  | the zoom level is out. Also allows you then to remove the emas    |
  | from the chart. (lwmas are initially set at 5 and 6)              |
  +-------------------------------------------------------------------+
*/   
#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)"
#property link      "http://www.jnrtrading.co.uk"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 SpringGreen
#property indicator_color2 Red

double CrossUp[];
double CrossDown[];
extern int FasterLWMA = 5;
extern int SlowerLWMA = 6;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   double fasterLWMAnow, slowerLWMAnow, fasterLWMAprevious, slowerLWMAprevious, fasterLWMAafter, slowerLWMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++) {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
       
      fasterLWMAnow = iMA(NULL, 0, FasterLWMA, 0, MODE_LWMA, PRICE_CLOSE, i);
      fasterLWMAprevious = iMA(NULL, 0, FasterLWMA, 0, MODE_LWMA, PRICE_CLOSE, i+1);
      fasterLWMAafter = iMA(NULL, 0, FasterLWMA, 0, MODE_LWMA, PRICE_CLOSE, i-1);

      slowerLWMAnow = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, i);
      slowerLWMAprevious = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, i+1);
      slowerLWMAafter = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, i-1);
      
      if ((fasterLWMAnow > slowerLWMAnow) && (fasterLWMAprevious < slowerLWMAprevious) && (fasterLWMAafter > slowerLWMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
      }
      else if ((fasterLWMAnow < slowerLWMAnow) && (fasterLWMAprevious > slowerLWMAprevious) && (fasterLWMAafter < slowerLWMAafter)) {
         CrossDown[i] = High[i] + Range*0.5;
      }
   }
   return(0);
}

Comments