Stochastic Bollinger Bands

Download script
Stochastic Bollinger Bands

This custom indicator is designed to provide traders with a unique visual tool by combining two well-known market analysis techniques into a single unified display. Instead of viewing standard momentum and volatility separately, this script overlays them to create a "Stochastic Bollinger Band" system.

How the Logic Works

1. The Foundation: Momentum Analysis The script begins by calculating a Stochastic oscillator. In trading, this is typically used to determine if a market is "overbought" or "oversold." It tracks the relative position of price movements over a specific period to identify where the market's momentum is heading.

2. The Layering: Volatility Envelopes Rather than applying standard Bollinger Bands directly to the price of the asset (like Gold, Forex pairs, or Stocks), this script applies Bollinger Bands specifically to the Stochastic oscillator values.

By doing this, the indicator creates a "channel" around the momentum line. This allows you to see:

  • The Middle Line: The baseline average of the momentum.
  • The Upper and Lower Bands: The boundaries of normal volatility for that momentum.

What This Means for the User

By merging these two tools, the indicator provides a more nuanced view of market dynamics than either tool could offer on its own. It helps you visualize whether the current momentum is moving aggressively toward an extreme (hitting the outer bands) or if it is stabilizing within a normal range.

In practical terms, it helps filter out "noise." When the Stochastic line pushes outside of these Bollinger Bands, it may indicate an exhausted trend or a significant shift in market energy, providing a clearer signal for potential entries or exits based on both momentum and volatility simultaneously.

Indicators Used
Stochastic oscillator
Miscellaneous
Implements a curve of type %1
18 Views
0 Downloads
0 Favorites
Stochastic Bollinger Bands
#property  copyright "Copyright © 2007, Matt Edmonds."
#property  link      "matt.edmonds@gmail.com"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 4
#property  indicator_color1  Yellow
#property  indicator_color2  White
#property  indicator_color3  White
#property  indicator_color4  White



extern int StochasticPeriod=1;
extern int BollingerPeriod=10;
extern int BollingerDeviation = 2;
extern int BollingerShift = 0;

//---- indicator buffers
double Stochastic[];
double BollingerUpper[];
double BollingerLower[];
double BollingerMiddle[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
   
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
   SetIndexStyle(3,DRAW_LINE,STYLE_DOT,1);
   
   SetIndexBuffer(0,Stochastic);
   SetIndexLabel(0,"Stochastic Bollinger Bands");
   SetIndexBuffer(1,BollingerUpper);
   SetIndexBuffer(2,BollingerLower);
   SetIndexBuffer(3,BollingerMiddle);
   SetIndexLabel(3,"Bollinger Middle");
      
//---- name for DataWindow and indicator subwindow label
 IndicatorShortName("Stochastic Bollinger Bands");
   
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Calculations                                    |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int i;
   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(i=0; i<Bars; i++)
   {
     Stochastic[i]= iStochastic(NULL, 0, StochasticPeriod, 1, 3, MODE_SMA, 0, MODE_MAIN, i);
    }
  
//---- done

   for(i=0; i<Bars; i++)
   {  
     BollingerLower[i] = iBandsOnArray(Stochastic,0,BollingerPeriod,BollingerDeviation,BollingerShift,MODE_LOWER,i); 
     BollingerUpper[i] = iBandsOnArray(Stochastic,0,BollingerPeriod,BollingerDeviation,BollingerShift,MODE_UPPER,i); 
     BollingerMiddle[i] = iBandsOnArray(Stochastic,0,BollingerPeriod,BollingerDeviation,BollingerShift,MODE_MAIN,i); 
   }   
   
   return(0);
  }
//+------------------------------------------------------------------+

Comments