This tool is designed to identify specific price trends on a trading chart by analyzing the relationship between consecutive candle highs and lows. Instead of relying on complex mathematical formulas, it focuses on the "structure" of price movement to highlight potential momentum shifts.
How it Works
The logic functions by scanning your chart for a specific sequence of price action based on a number you choose (for example, a 3-candle sequence). It looks for two primary conditions:
1. Upward Trend Identification The script checks if there is a consecutive series of candles where:
- Every "High" point is higher than the one before it.
- Every "Low" point is also higher than the one before it. When this specific pattern occurs for the number of candles you defined, the tool recognizes an upward trend and places a visual signal on the chart.
2. Downward Trend Identification Conversely, the script looks for a sequence where:
- Every "High" point is lower than the one before it.
- Every "Low" point is also lower than the one before it. If this pattern is met, it recognizes a downward trend and marks the chart accordingly.
Key Features
- Customizable Sensitivity: You can adjust the "How Many Candles" setting to decide how many consecutive moves are required before a signal is triggered. This allows you to choose between identifying quick momentum shifts or waiting for more established trends.
- Visual Alerts: The tool places distinct arrows on your chart (Green for upward trends and Red for downward trends) so you can easily see where these patterns occurred historically.
- Real-Time Notifications: To ensure you don't miss a potential move, the script provides an instant audio alert and a pop-up notification on your screen the moment the required candle sequence is completed in real-time.
- Contextual Positioning: When a signal is triggered, the tool calculates the position of the icon based on the average "range" of recent candles, ensuring the visual markers are placed clearly relative to the current price action.
//+------------------------------------------------------------------+
//| HighsLowsSignalAlert.mq4 |
//| Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Allows you to enter a number and it will then show you at |
//| which point that many higher highs/higher lows or |
//| lower highs/lower lows candles occur. |
//| It also give an alert if the current bar has the |
//| required number of candles before it. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Robert Hill"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LawnGreen
#property indicator_color2 Red
#property indicator_width1 3
#property indicator_width2 3
//----
extern bool SoundON=true;
extern int HowManyCandles=3;
//----
double TrendUp[];
double TrendDown[];
double alertTag;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
// IndicatorBuffers(4);
SetIndexStyle(0, DRAW_ARROW, EMPTY, 3);
SetIndexArrow(0, 233);
SetIndexBuffer(0, TrendUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY, 3);
SetIndexArrow(1, 234);
SetIndexBuffer(1, TrendDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter;
double Range, AvgRange;
int HigherHighs,HigherLows;
int LowerHighs,LowerLows;
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;
//----
HigherHighs=0;
HigherLows=0;
LowerHighs=0;
LowerLows=0;
for(counter=i;counter<i+HowManyCandles;counter++)
{
if (High[counter] > High[counter+1]) HigherHighs++;
if (Low[counter] > Low[counter+1]) HigherLows++;
if (High[counter] < High[counter+1]) LowerHighs++;
if (Low[counter] < Low[counter+1]) LowerLows++;
}
if (HigherHighs==HowManyCandles && HigherLows==HowManyCandles)
{
TrendUp[i]=Low[i] - Range*0.75;
if(alertTag!=Time[0])
{
PlaySound("news.wav");// buy wav
Alert(Symbol()," M",Period(),HowManyCandles," HigherHighs/HigherLows");
}
alertTag=Time[0];
}
else if (LowerHighs==HowManyCandles && LowerLows==HowManyCandles)
{
TrendDown[i]=High[i] + Range*0.75;
if(alertTag!=Time[0])
{
PlaySound("news.wav"); //sell wav
Alert(Symbol()," M",Period(),HowManyCandles," LowerHighs/LowerLows");
}
alertTag=Time[0];
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments