LWMA-Crossover_Signal_v3
Download scriptThis tool is designed to simplify your trading analysis by highlighting specific momentum shifts on your price chart. Instead of forcing you to visually track two moving averages—which can become cluttered or difficult to see when zoomed out—this script identifies the exact moments those lines cross each other and marks them with clear visual signals.
How It Works
The logic relies on comparing two "Linearly Weighted Moving Averages" (LWMA). These are mathematical indicators that give more importance to recent price data, making them highly responsive to current market trends. The script looks for two specific types of interactions between a "Faster" moving average and a "Slower" moving average:
- Bullish Signals: When the faster moving average moves from below the slower one to above it, the script identifies this as a potential upward trend shift.
- Bearish Signals: When the faster moving average moves from above the slower one to below it, the script identifies this as a potential downward trend shift.
Key Features for Your Chart
- Automatic Visual Cues: Rather than just drawing the lines, the script places distinct arrows on your chart at the precise point of crossover. This allows you to see historical signals clearly without the visual "noise" of multiple overlapping lines.
- Dynamic Placement: To ensure the markers don't overlap with your price candles, the script calculates the average height (range) of the surrounding bars. It then places the "Up" signal slightly below the candle and the "Down" signal slightly above it, keeping your workspace clean.
- Customizable Sensitivity: You can adjust the periods for both the faster and slower averages. By changing these numbers, you can make the tool more sensitive to quick price fluctuations or keep it tuned to broader, more established trends.
- Cleaner Workspace: Because the script provides clear arrow signals, you have the option to remove the moving average lines from your chart entirely, resulting in a much cleaner and less distracting trading environment.
//+------------------------------------------------------------------+
//| 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