The Vegas indicator is a visual trading tool designed to help market observers identify specific price levels and structural zones based on moving averages and mathematical offsets. It works by creating a dynamic "channel" of support and resistance levels that move in real-time with the market price.
Core Logic and Mechanics
1. Foundation: Moving Averages The script begins by calculating two primary Exponential Moving Averages (EMAs) based on historical price data. These averages act as the "anchor" for the entire system. One is set to a 144-period duration, and the other to a 169-period duration.
2. The Risk Models (Dynamic Channels) The primary purpose of this script is to project a series of price levels above and below the 169 EMA. These levels are organized into four different "Risk Models," which you can choose from depending on your trading style:
- Model 1: Creates a tight channel based on smaller numerical offsets (34, 55, and 89).
- Model 2: Provides a slightly wider range of levels (55, 89, and 144).
- Model 3: Offers a broader perspective for identifying larger swings (89, 144, and 233).
- Model 4: Creates the widest possible channel for major structural movements (144, 233, and 377).
Each model projects three levels "above" (positive) and three levels "below" (negative) of the main moving average, essentially creating a multi-layered zone of significance.
3. Real-Time Visual Feedback The indicator draws these lines directly on your trading chart. Additionally, it provides a text summary in the corner of your screen. This display updates constantly, showing you the exact current value of the moving averages and all eight projected "Fib" levels simultaneously, allowing for quick reference without searching the chart.
4. Automated Alerts To ensure you don't miss key movements, the script includes an automated notification system. The logic monitors the current closing price of the asset. If the price touches or crosses any of the projected lines (the moving averages or any of the eight Risk Model levels), the script will trigger:
- An audible sound alert.
- A pop-up notification on your screen.
Summary for Traders
Essentially, this tool transforms standard moving averages into a complex "map" of potential reaction zones. By choosing a specific Risk Model, you define how wide your price channels are; the script then handles the heavy lifting by projecting those levels automatically and alerting you the moment the market price interacts with them.
//+------------------------------------------------------------------+
//| 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
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_color8 Red
//---- input parameters
extern bool Alerts=true;
extern int RiskModel=1;
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);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,ExtMapBuffer5);
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,ExtMapBuffer6);
SetIndexStyle(6,DRAW_LINE);
SetIndexBuffer(6,ExtMapBuffer7);
SetIndexStyle(7,DRAW_LINE);
SetIndexBuffer(7,ExtMapBuffer8);
//----
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,144,0,MODE_EMA,PRICE_CLOSE,i);
ExtMapBuffer2[i]=iMA(NULL,0,169,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]);
}
//+--------------------------------------------------------------------------+
//- ALERTS PlaySound("alert.wav"); -
//+--------------------------------------------------------------------------+
if(Alerts)
{
if(Close[i]==ExtMapBuffer1[i] || Close[i]==ExtMapBuffer2[i])
{
PlaySound("alert.wav");
Alert("Fib or Channel signal triggered for "+Symbol()+" on the "+Period()+" minute chart.");
}
if(Close[i]==ExtMapBuffer3[i] || Close[i]==ExtMapBuffer4[i] || Close[i]==ExtMapBuffer5[i])
{
PlaySound("alert.wav");
Alert("Fib or Channel signal triggered for "+Symbol()+" on the "+Period()+" minute chart.");
}
if(Close[i]==ExtMapBuffer6[i] || Close[i]==ExtMapBuffer7[i] || Close[i]==ExtMapBuffer8[i])
{
PlaySound("alert.wav");
Alert("Fib or Channel signal triggered for "+Symbol()+" on the "+Period()+" minute chart.");
}
}
//---- done
//----
//----
return(0);
}
//+------------------------------------------------------------------+
Comments