Author: Vegas
VWB

This tool is designed to provide traders with a visual and auditory mapping of price levels based on specific mathematical models. It functions by calculating moving averages and extending them into various "Risk Models" to help identify potential zones of interest or support and resistance.

Core Logic and Functionality

Trend Analysis via Moving Averages The script begins by tracking two primary Exponential Moving Averages (EMA) based on the closing prices of the market. These serve as the foundation for all other calculations. By observing these averages, the tool helps establish the general direction of the current market trend.

Dynamic Risk Modeling The core strength of this script is its ability to switch between four distinct "Risk Models." Depending on which model you select, the script calculates specific price levels (labeled as F+ and F-) relative to the secondary moving average.

  • Model Variation: Each model uses different mathematical offsets. For example, Model 1 provides much tighter, more sensitive price levels, while Model 4 provides much wider, broader price zones.
  • Upper and Lower Boundaries: For every model, the script projects three upward levels (representing potential targets or upper limits) and three downward levels (representing potential support or lower limits).

Visual and Real-Time Data The script handles several automated tasks to keep the user informed:

  • Chart Visualization: It draws these calculated lines directly on your trading chart, allowing you to see the mathematical "boundaries" in real-time.
  • On-Screen Dashboard: It provides a live text summary on the chart display. This dashboard shows the current values of all active moving averages and every specific price level for your chosen Risk Model, giving you an immediate data snapshot without having to hover over lines.

Automated Alerts To ensure you don't miss critical price actions, the script includes an integrated alert system. If the current market price touches or crosses any of the calculated moving averages or the specific risk model levels, the software will trigger an audio notification. This allows traders to monitor multiple price points simultaneously without needing to watch the screen constantly.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It plays sound alerts
14 Views
0 Downloads
0 Favorites
VWB
//+------------------------------------------------------------------+
//|                                           VegasCurrencyDaily.mq4 |
//|                                                          "Vegas" |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Vegas"
#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





//---- input parameters
extern bool      Alerts=true;
extern int       RiskModel=1;
extern int       MA1=24;
extern int       MA2=28;
//---- 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,24,0,MODE_EMA,PRICE_CLOSE,i);
         ExtMapBuffer2[i]=iMA(NULL,0,28,0,MODE_EMA,PRICE_CLOSE,i);
         
         //Model #1 89,144,233
         if(RiskModel==1)
         {
            ExtMapBuffer5[i]=ExtMapBuffer2[i]+34*Point;
            ExtMapBuffer5[i]=ExtMapBuffer2[i]+21*Point;
            ExtMapBuffer5[i]=ExtMapBuffer2[i]+12*Point;
            
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-12*Point;   
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-21*Point;   
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-34*Point;     
         }
         
         //Model #2 144,233,377
         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]-89*Point;
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-144*Point;    
         }
         
          //Model #3 233,377,610
         if(RiskModel==3)
         {
            ExtMapBuffer3[i]=ExtMapBuffer2[i]+233*Point;
            ExtMapBuffer4[i]=ExtMapBuffer2[i]+377*Point;
            ExtMapBuffer5[i]=ExtMapBuffer2[i]+610*Point;
            
            ExtMapBuffer6[i]=ExtMapBuffer2[i]-233*Point;
            ExtMapBuffer7[i]=ExtMapBuffer2[i]-377*Point;
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-610*Point;    
         }
         
          //Model #4 377,610,987
         if(RiskModel==4)
         {
            ExtMapBuffer3[i]=ExtMapBuffer2[i]+987*Point;
            ExtMapBuffer4[i]=ExtMapBuffer2[i]+1597*Point;
            ExtMapBuffer5[i]=ExtMapBuffer2[i]+2584*Point;
            
            ExtMapBuffer6[i]=ExtMapBuffer2[i]-987*Point;
            ExtMapBuffer7[i]=ExtMapBuffer2[i]-1597*Point;
            ExtMapBuffer8[i]=ExtMapBuffer2[i]-2584*Point;    
         }
         
         Comment("\nRISK MODEL #",RiskModel," (1-4)\n\nEMA24 - ",ExtMapBuffer1[limit],"\nEMA28 - ",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