William36HistogramWallerTest_v1

Download script
William36HistogramWallerTest_v1

This custom trading indicator, "William%R36 With Alert," is designed to help traders visualize momentum and identify potential reversal points in the market by analyzing price action over a specific timeframe. It functions by calculating where the current closing price sits relative to the highest highs and lowest lows of the past 40 periods.

Core Logic and Visualization

The tool operates by converting the relative position of the price into a numerical scale ranging from -50 to +50. To make this data easier for traders to interpret at a glance, it uses a dual-histogram display:

  • Green Histograms: These appear when the momentum value is positive (above zero), suggesting upward pressure or "bullish" territory.
  • Red Histograms: These appear when the momentum value is negative (below zero), suggesting downward pressure or "bearish" territory.
  • Zero Line: A central gray line acts as the equilibrium point, separating the two different market sentiments.

Signal Detection and Alerts

Beyond just visualizing the trend, the script contains internal logic to detect specific transitions in market sentiment. It monitors the "crossover" points where the momentum shifts from positive to negative (or vice versa).

The indicator is programmed to look for significant moves beyond a specific threshold:

  • Buy Signals: If the momentum shifts and then crosses above the 15 level, the system triggers a "BUY" alert.
  • Sell Signals: If the momentum shifts and then drops below the -15 level, the system triggers a "SELL" alert.

User Experience Features

The script provides real-time feedback through several interactive elements:

  1. Pop-up Alerts: When the specific buy or sell conditions are met, the platform generates a text alert notifying the user of the signal along with the current currency pair and timeframe.
  2. On-Screen Comments: The indicator constantly updates a text comment on the chart to show the current "Switch" status (e.g., "BUY SWITCH ON," "SELL SWITCH ON," or "NO SWITCH ON"), helping the trader keep track of the current trend state without having to guess.
Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
William36HistogramWallerTest_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

/* 
original formula)
WH:=HHV(HIGH,5);
WL:=LLV(LOW,5);

//WRD:=(( HHV( WH,36 )-c ) /( HHV(WH,36 ) - LLV( WL,36) ) ) *- 100,

//WDo:=WRD+50;

//WU:=IF(WDo>0,WDo,0);
//WD:=IF(WDo<0,WDo,0);
//{- this will give you the william's when it is below zero and it is plotted red}
//LN:=0;

*/

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Red
#property indicator_color3 Gray
#property indicator_maximum 50
#property indicator_minimum -50
#property indicator_level1 0
#property indicator_level2 15
#property indicator_level3 -15
//---- input parameters


//---- buffers

double WU[],WD[],W[],Zero[];
int Ssw=0,Bsw=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(4);
   SetIndexBuffer(3,W);
//---- indicator lines
   SetIndexStyle(0,DRAW_HISTOGRAM,0,3);
   SetIndexBuffer(0,WU);
   SetIndexStyle(1,DRAW_HISTOGRAM,0,3);
   SetIndexBuffer(1,WD);
      SetIndexStyle(2,DRAW_LINE,0,2);
   SetIndexBuffer(2,Zero);
//---- name for DataWindow and indicator subwindow label
   short_name="William%R36 With Alert";
   IndicatorShortName(short_name);


//---- indicator lines
  

//----
   SetIndexDrawBegin(0,40);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| BSPVolume                                       
//+------------------------------------------------------------------+
int start()
 {
   int    i,k,counted_bars=IndicatorCounted();
   
   if(Bars<=40) return(0);
//---- initial zero
/* 
  if(counted_bars<1)
     {
      for(i=1;i<=CCIPeriod;i++) CCIBuffer[Bars-i]=0.0;
      for(i=1;i<=CCIPeriod;i++) DevBuffer[Bars-i]=0.0;
      for(i=1;i<=CCIPeriod;i++) MovBuffer[Bars-i]=0.0;
     }
*/
//---- last counted bar will be recounted
   int limit=Bars-counted_bars;
   if (counted_bars>0) limit++; else if (limit>300) limit=300;

   
   
   for(i=0; i<limit; i++)
      W[i]=50+(-100)*(High[Highest(NULL,0,MODE_HIGH,40,i)]-Close[i])/(High[Highest(NULL,0,MODE_HIGH,40,i)]-Low[Lowest(NULL,0,MODE_LOW,40,i)]);

   for(i=0; i<limit; i++) Zero[i]=0;
   
   for(i=0; i<limit; i++)
  {
  
  
        
     if (W[i]<0 && W[i+1]>0 && i<2) 
     {
     Ssw=1;
     Bsw=0;
     }
        
     if (W[i]>0 && W[i+1]<0 && i<2) 
     {
     Ssw=0;
     Bsw=1;
     }
     
      
     if (Bsw==1 && i<2 && W[i]>=15 )
         {
     Ssw=0;
     Bsw=0;
       Alert (Symbol()," ",Period()," Willy Says B U Y");
         }
       if (Ssw==1 && i<2 && W[i]<=-15 )
         {
     Ssw=0;
     Bsw=0;
       Alert (Symbol()," ",Period()," Willy Says S E L L");
     }
 if (Ssw==1) Comment ("SELL SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]);
 if (Bsw==1) Comment ("BUY SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]);
 if (Bsw==0 && Ssw==0) Comment ("NO SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]);
 
 
   if (W[i]>0)
      {WU[i]=W[i];WD[i]=0;}
      
      else if (W[i]<0)
          {WU[i]=0;WD[i]=W[i];}
          
            else {WU[i]=0;WD[i]=0;}
        }    
            return(0);
   
}

Comments