Author: Mr.Bah
tunnel

The Vegas indicator is a technical analysis tool designed for the MetaTrader 4 platform to help traders visualize price dynamics and identify specific zones of interest on a currency chart. Its primary objective is to provide a structured framework for identifying potential support and resistance levels based on moving averages and predefined "Risk Models."

Core Logic and Functionality

1. Dynamic Baseline Calculation The script begins by calculating two primary Exponential Moving Averages (EMA). These serve as the fundamental "baselines" of the indicator:

  • EMA 144: Represents a long-term trend perspective.
  • EMA 169: Acts as the central anchor point for the risk model calculations.

2. Risk Model Framework The unique feature of this script is its "Risk Model" system. Depending on which mode the user selects (from 1 to 4), the indicator projects a series of symmetrical zones above and below the EMA 169 baseline. These models utilize different mathematical offsets (based on Fibonacci-style sequences) to create specific "Price Channels."

  • Model #1: Uses smaller, tighter offsets (34, 55, and 89 points).
  • Model #2: Uses moderate offsets (55, 89, and 144 points).
  • Model #3: Uses larger offsets (89, 144, and 233 points).
  • Model #4: Uses the widest offsets (144, 233, and 377 points).

By selecting a model, the user can adjust the "sensitivity" of the indicator—wider models are suited for higher volatility or longer timeframes, while tighter models focus on more immediate price fluctuations.

3. Visual Data Representation The script tracks eight distinct data streams (buffers) simultaneously:

  • Two lines represent the primary EMAs.
  • Six lines represent the projected "Risk Zones" (three positive offsets and three negative offsets). These are displayed as colored lines on your chart, allowing you to see exactly where these theoretical price boundaries sit in real-time.

4. Real-Time Information Display To keep the trader informed without cluttering the screen, the script includes a dynamic comment box on the chart. This display automatically updates to show:

  • The currently active Risk Model number.
  • The current live values of the EMA 144 and EMA 169.
  • The exact price coordinates for all six projected risk boundaries (labeled as F+1 through F-3).

5. Automated Alert System The script includes an optional audio notification system. If the current market price touches or intersects any of the primary EMAs or any of the specific Risk Model boundaries, the software will trigger a sound alert. This allows traders to react instantly to price interactions with these key levels without needing to watch the screen constantly.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It plays sound alerts
13 Views
0 Downloads
0 Favorites
tunnel
//+------------------------------------------------------------------+
//|                                                        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");
         }
         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");
         }
      }
         
  //---- done

//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

Comments