Z-Z1 LA Best Alert Next Bar 2
Download scriptThis script functions as a specialized technical analysis tool designed to identify and visualize significant structural turning points in price movement. By scanning historical data, it simplifies complex market noise into clear visual markers that highlight the most prominent "peaks" and "valleys" on a trading chart.
Core Logic and Functionality
1. Pattern Recognition (The ZigZag Mechanism) The primary logic of the script is based on identifying structural reversals. It looks for significant price movements over a specific depth (the number of bars it scans) while accounting for minor fluctuations (deviations). Instead of reacting to every small price tick, the script filters out "noise" to ensure that only meaningful changes in direction are recorded.
2. Peak and Valley Filtering The tool maintains two distinct tracking layers:
- Highs: It identifies the highest points reached during a trend.
- Lows: It identifies the lowest points reached during a trend.
To ensure accuracy, the script employs a "refining" process. If a new high is discovered that is higher than the previous one identified in a specific sequence, it automatically replaces the old peak with the new one. This prevents the tool from marking minor "bumps" and ensures that only the absolute turning points are displayed on your chart.
3. Visual Presentation The logic converts these mathematical calculations into visual elements (dots) on the chart. By identifying these specific reversal points, traders can more easily see the "skeleton" of the market trend—the core path price is taking between major moves.
4. Automated Alerts and Notifications Beyond just providing a visual aid, the script contains an active monitoring system. It constantly checks the most recent confirmed turning point against the previous one. When a new structural shift is finalized, the logic triggers several actions:
- Visual/Audio Alerts: It can play a specific sound file to notify the trader of a change in real-time.
- Pop-up Notifications: It generates an on-screen alert providing the current price and asset information at the moment the new point is detected.
Summary for the User
Essentially, this script acts as an automated "trend mapper." It cleans up the chart by removing distractions and highlighting only the major structural highs and lows. When the market makes a definitive turn that meets your specific settings, the tool notifies you immediately via sound and alert messages, helping you stay informed of significant price shifts without having to constantly watch every small movement.
//+------------------------------------------------------------------+
//| 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! " ,Symbol()," ",Period()," @ ",Bid);
// 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! " ,Symbol()," ",Period()," @ ",Bid);
//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! " ,Symbol()," ",Period()," @ ",Bid);
//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