Z-Z1 LA Best Alert Next Bar-m15
Download scriptThis script functions as a sophisticated visual and audible trend-tracking tool designed to identify significant price turning points on a trading chart. By filtering out minor market noise, it highlights the "peaks" and "valleys" of price action, allowing traders to see the underlying structure of the market more clearly.
Core Functionality
The script employs a multi-layered logic system to determine when the market has reached a true high or low:
- Dynamic Range Detection: Instead of marking every small price movement, the tool looks at a specific window of previous data (the "Depth"). It only acknowledges a new peak or valley if the price movement exceeds a predefined threshold (Deviation). This ensures that minor fluctuations do not trigger false signals.
- Point Filtering: The logic includes a "Backstep" mechanism. This acts as a verification layer that checks nearby candles to ensure that the identified high or low is indeed the absolute most extreme point in that specific area. It effectively "cleans" the data so that only the most significant points remain.
- Peak & Valley Coordination: The script maintains two separate tracking systems—one for highs and one for lows. It ensures these points alternate correctly (e.g., a high must be followed by a low), providing a continuous, zigzag-like path of market momentum.
Automated Analysis & Alerts
Beyond just drawing shapes on the chart, the script performs active monitoring:
- Trend Verification: The tool automatically calculates the direction between the two most recent identified points. It determines whether the market is moving upward or downward by comparing these coordinates.
- Real-Time Notifications: When a new significant turning point is confirmed, the script triggers an immediate alert system. This includes a visual pop-up notification on the platform and an audible sound alert to capture the trader's attention instantly.
- Contextual Awareness: The alerts are designed to provide specific context, identifying exactly which time frame and currency pair triggered the signal, helping the trader stay informed even when they are not staring directly at the screen.
Summary of User Experience
For a trader, this script serves as an automated "market map." It automatically ignores the "noise" of constant small price changes and only alerts the user when the market makes a meaningful move in a specific direction. By highlighting these structural shifts with visual markers and sound cues, it helps in identifying potential entry or exit zones based on established trend reversals.
//+------------------------------------------------------------------+
//| Z1.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
//---- input parameters
extern bool AlarmWithBox = false;
extern string SoundWAV = "Yehaw.wav";
//---- indicator parameters
extern int ExtDepth=33; //Best on 15M chart.
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int barn=1500;
extern int from=0;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2);
//---- drawing settings
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,108);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
ArraySetAsSeries(ExtMapBuffer,true);
ArraySetAsSeries(ExtMapBuffer2,true);
//---- indicator short name
IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
return(0);
}
datetime last_time = 0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int shift=barn, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
for(shift=barn-ExtDepth; shift>from; shift--){
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow)
val=0.0;
else {
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point))
val=0.0;
else{
for(back=1; back<=ExtBackstep; back++){
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- high
val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh)
val=0.0;
else{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point))
val=0.0;
else{
for(back=1; back<=ExtBackstep; back++){
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=barn-ExtDepth; shift>from; shift--){
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continue;
//---
if(curhigh!=0){
if(lasthigh>0){
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
else ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0){
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0){
if(lastlow>0){
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
else ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)||(lastlow<0)){
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=barn-1; shift>from; shift--){
if(shift>=barn-ExtDepth) ExtMapBuffer[shift]=0.0;
else{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer[shift]=res;
}
}
int last_found[2],f = 0;
for(shift=from+1; f<2 && shift<barn; shift++){
if(ExtMapBuffer[shift]!=0){
last_found[f] = shift;
f++;
}
}
if(f>0){
if(last_time != Time[last_found[0]]){
last_time = Time[last_found[0]];
double dir = ExtMapBuffer[last_found[0]]-ExtMapBuffer[last_found[1]];
if(dir>0){
Alert("Green Dot["+Period()+"] at "+Symbol()+",bar = "+last_found[0]);
// Alert("Line 1 Message here :", " SELL " ,Symbol() ," at ", Close[0] ; //, " \nStop Loss: " , val5 , " Exit Target: " , val3 , " | TIME FRAME : " ,Period(),"2nd message here?? !");
PlaySound(SoundWAV);
}
else if(dir<0)
{
Alert("Green Dot ["+Period()+"] at "+Symbol()+",bar = "+last_found[0]);
//Alert("Line 2 Message here :", " SELL " ,Symbol() ," at ", Close[0] ; //, " \nStop Loss: " , val5 , " Exit Target: " , val3 , " | TIME FRAME : " ,Period(),"2nd message here?? !");
PlaySound(SoundWAV);
}
else if(f==1)
{
Alert("Found Green Dot Z-Z1["+Period()+"] at "+Symbol()+",bar = "+last_found[0]);
//Alert("Line 3 Message here :", " SELL " ,Symbol() ," at ", Close[0] ; //, " \nStop Loss: " , val5 , " Exit Target: " , val3 , " | TIME FRAME : " ,Period(),"2nd message here?? !");
PlaySound(SoundWAV);
}
}
}
}
Comments