Vegas1HR_v3
Download scriptThe Vegas indicator is designed to provide traders with a structured visual framework for identifying price trends and potential entry or exit zones based on moving averages. By utilizing mathematical constants and specific trend-following logic, it helps clarify market structure for users who prefer a systematic approach to technical analysis.
Core Mechanics
The indicator operates primarily on two Exponential Moving Averages (EMA). These are used as the "backbone" of the chart, smoothing out price fluctuations to show the general direction of the market. While the EMAs provide the primary trend, the core of this script lies in its dynamic expansion system.
The Risk Models
A key feature of this tool is the ability to switch between four distinct Risk Models. Depending on which model you select, the indicator calculates a series of specific price levels (boundaries) that fan out above and below a secondary moving average. These models are based on varying numerical scales:
- Model 1: Uses smaller increments (34, 55, 89).
- Model 2: Uses medium increments (55, 89, 144).
- Model 3: Uses larger increments (89, 144, 233).
- Model 4: Uses the largest increments (144, 233, 377).
Visual Logic and Layout
The script projects these values as "zones" or "bands." For every point on the secondary moving average:
- It calculates three levels above the average based on the chosen model's numbers.
- It calculates three levels below the average using those same numbers.
This creates a symmetrical "map" of price targets and support/resistance areas. As the moving average moves, these lines move with it, creating a dynamic corridor that expands or contracts to reflect the market's current volatility and momentum.
Alert System
For traders who cannot watch the charts constantly, the script includes an optional notification system. If enabled, the tool monitors the relationship between the current price and all the calculated levels (both the primary EMAs and the expanded Risk Model zones). If the price touches any of these specific calculated boundaries, the indicator triggers an audible alert, notifying the user of a potential interaction with the trend framework.
//+------------------------------------------------------------------+
//| Vegas.mq4 |
//| Mr.Bah |
//| |
//+------------------------------------------------------------------+
#property copyright "Mr.Bah"
#property link ""
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Green
#property indicator_color2 Blue
//---- input parameters
extern bool Alerts=false;
extern int RiskModel=2;
extern int MA1=144;
extern int MA2=169;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0, MA1);
SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1, MA2);
SetIndexStyle(2,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(3,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(4,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(4,ExtMapBuffer5);
SetIndexStyle(5,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(5,ExtMapBuffer6);
SetIndexStyle(6,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(6,ExtMapBuffer7);
SetIndexStyle(7,DRAW_LINE, STYLE_DOT, 1, Gray); SetIndexBuffer(7,ExtMapBuffer8);
if(RiskModel==1)
{
SetIndexLabel(2, "Ëèíèÿ 34"); SetIndexLabel(3, "Ëèíèÿ 55"); SetIndexLabel(4, "Ëèíèÿ 89");
SetIndexLabel(5, "Ëèíèÿ 34"); SetIndexLabel(6, "Ëèíèÿ 55"); SetIndexLabel(7, "Ëèíèÿ 89");
}
if(RiskModel==2)
{
SetIndexLabel(2, "Ëèíèÿ 55"); SetIndexLabel(3, "Ëèíèÿ 89"); SetIndexLabel(4, "Ëèíèÿ 144");
SetIndexLabel(5, "Ëèíèÿ 55"); SetIndexLabel(6, "Ëèíèÿ 89"); SetIndexLabel(7, "Ëèíèÿ 144");
}
if(RiskModel==3)
{
SetIndexLabel(2, "Ëèíèÿ 89"); SetIndexLabel(3, "Ëèíèÿ 144"); SetIndexLabel(4, "Ëèíèÿ 233");
SetIndexLabel(5, "Ëèíèÿ 89"); SetIndexLabel(6, "Ëèíèÿ 144"); SetIndexLabel(7, "Ëèíèÿ 233");
}
if(RiskModel==4)
{
SetIndexLabel(2, "Ëèíèÿ 144"); SetIndexLabel(3, "Ëèíèÿ 233"); SetIndexLabel(4, "Ëèíèÿ 377");
SetIndexLabel(5, "Ëèíèÿ 144"); SetIndexLabel(6, "Ëèíèÿ 233"); SetIndexLabel(7, "Ëèíèÿ 377");
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit;
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;
//---- main loop
for(int i=0; i<limit; i++)
{
//---- ma_shift set to 0 because SetIndexShift called abowe
ExtMapBuffer1[i]=iMA(NULL,0,MA1,0,MODE_EMA,PRICE_CLOSE,i);
ExtMapBuffer2[i]=iMA(NULL,0,MA2,0,MODE_EMA,PRICE_CLOSE,i);
//Model #1 34,55,89
if(RiskModel==1)
{
ExtMapBuffer3[i]=ExtMapBuffer2[i]+34*Point;
ExtMapBuffer4[i]=ExtMapBuffer2[i]+55*Point;
ExtMapBuffer5[i]=ExtMapBuffer2[i]+89*Point;
ExtMapBuffer6[i]=ExtMapBuffer2[i]-34*Point;
ExtMapBuffer7[i]=ExtMapBuffer2[i]-55*Point;
ExtMapBuffer8[i]=ExtMapBuffer2[i]-89*Point;
}
//Model #2 55,89,144
if(RiskModel==2)
{
ExtMapBuffer3[i]=ExtMapBuffer2[i]+55*Point;
ExtMapBuffer4[i]=ExtMapBuffer2[i]+89*Point;
ExtMapBuffer5[i]=ExtMapBuffer2[i]+144*Point;
ExtMapBuffer6[i]=ExtMapBuffer2[i]-55*Point;
ExtMapBuffer7[i]=ExtMapBuffer2[i]-88*Point;
ExtMapBuffer8[i]=ExtMapBuffer2[i]-144*Point;
}
//Model #3 89,144,233
if(RiskModel==3)
{
ExtMapBuffer3[i]=ExtMapBuffer2[i]+89*Point;
ExtMapBuffer4[i]=ExtMapBuffer2[i]+144*Point;
ExtMapBuffer5[i]=ExtMapBuffer2[i]+233*Point;
ExtMapBuffer6[i]=ExtMapBuffer2[i]-89*Point;
ExtMapBuffer7[i]=ExtMapBuffer2[i]-144*Point;
ExtMapBuffer8[i]=ExtMapBuffer2[i]-233*Point;
}
//Model #4 144,233,377
if(RiskModel==4)
{
ExtMapBuffer3[i]=ExtMapBuffer2[i]+144*Point;
ExtMapBuffer4[i]=ExtMapBuffer2[i]+233*Point;
ExtMapBuffer5[i]=ExtMapBuffer2[i]+377*Point;
ExtMapBuffer6[i]=ExtMapBuffer2[i]-144*Point;
ExtMapBuffer7[i]=ExtMapBuffer2[i]-233*Point;
ExtMapBuffer8[i]=ExtMapBuffer2[i]-377*Point;
}
/*
Comment("\nRISK MODEL #",RiskModel," (1-4)\n\nEMA144 - ",ExtMapBuffer1[limit],"\nEMA169 - ",ExtMapBuffer2[limit],
"\n\nF+1 - ",ExtMapBuffer3[limit],"\nF+2 - ",ExtMapBuffer4[limit],
"\nF+3 - ",ExtMapBuffer5[limit],"\n\nF-1 - ",ExtMapBuffer6[limit],
"\nF-2 - ",ExtMapBuffer7[limit],"\nF-3 - ",ExtMapBuffer8[limit]);
*/
}
if(Alerts)
{
if(Close[i]==ExtMapBuffer1[i] || Close[i]==ExtMapBuffer2[i])
PlaySound("alert.wav");
if(Close[i]==ExtMapBuffer3[i] || Close[i]==ExtMapBuffer4[i] || Close[i]==ExtMapBuffer5[i])
PlaySound("alert.wav");
if(Close[i]==ExtMapBuffer6[i] || Close[i]==ExtMapBuffer7[i] || Close[i]==ExtMapBuffer8[i])
PlaySound("alert.wav");
}
return(0);
}
//+------------------------------------------------------------------+
Comments