[i]BollTrade_Ron_MT4_v05b





//
//
//+--------------------------+
//| BollTrade Indicator v05a
//+--------------------------+
//
//
#property copyright "Ron Thompson"
#property link      "http://www.ForexMT4.com/"

// This INDICATOR is NEVER TO BE SOLD individually 
// This INDICATOR is NEVER TO BE INCLUDED as part of a collection that is SOLD

/*

===== Theory =====

This is designed for EURUSD M15

You should place BUY and SELL MARKET ORDERS depending on how far outside the 
Bollinger Bands the current price falls. This is a counter-trade system, that
is, you should SELL when the UPPER bands are exceeded by BDistance pips and
BUY when the LOWER Band is exceeded. 

BDistance, BPeriod and Deviation control the Bollinger Bands

It depends on retracement and exhaustion to make profit.

You should only places one trade per bar, and one trade at a time.



===== Operation =====

The Gray lines are BDistance from the Bollinger bands

White square is where the price exceeds the upper/lower BDistance value
and where you would place your market order (Sell if upper, Buy if lower)

Red is LossLimit from the white marker, Green is ProfitMade

If you set UseATR true then the chart markers will reflect ATR-derived
bands, and use the ATR_* properties for LossLimit and ProfitMade.


*/
 

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 White
#property indicator_color2 White
#property indicator_color3 White
#property indicator_color4 Gray
#property indicator_color5 Gray
#property indicator_color6 White
#property indicator_color7 LimeGreen
#property indicator_color8 Red


extern int    BPeriod      =      15;    // Bollinger period
extern double Deviation    =       1.8;  // Bollinger deviation
extern double BDistance    =      14;    // plus how much
extern double ProfitMade   =       8;
extern double LossLimit    =       9;

extern bool   UseATR            =   false;
extern int    ATR_Period        =       4;
extern double ATR_BDistanceMult =       1.4;
extern double ATR_LossLimitMult =       3.6;
extern double ATR_ProfitMadeMult=       0.8;

//---- buffers
int       mybars=1000;
double    BollMA[1000];
double BollUpper[1000];
double BollLower[1000];
double UpperPlus[1000];
double LowerPlus[1000];
double   BuySell[1000];
double        TP[1000];
double        SL[1000];


//+----------------+
//| Custom init    |
//+----------------+
int init()
  {
   // 233 up arrow
   // 234 down arrow
   // 159 big dot
   // 158 little dot
   // 168 open square
   // 120 box with X
     
   IndicatorBuffers(8);
   
   SetIndexStyle(0,DRAW_LINE); //bollinger ma
   SetIndexArrow(0,158);
   SetIndexBuffer(0,BollMA);
   
   SetIndexStyle(1,DRAW_LINE); //bollinger upper
   SetIndexArrow(1,158);
   SetIndexBuffer(1,BollUpper);

   SetIndexStyle(2,DRAW_LINE); //bollinger lower
   SetIndexArrow(2,158);
   SetIndexBuffer(2,BollLower);

   SetIndexStyle(3,DRAW_LINE); //upperplus
   SetIndexArrow(3,158);
   SetIndexBuffer(3,UpperPlus);

   SetIndexStyle(4,DRAW_LINE); //lowerplus
   SetIndexArrow(4,168);
   SetIndexBuffer(4,LowerPlus);

   SetIndexStyle(5,DRAW_ARROW); //buysell
   SetIndexArrow(5,168);
   SetIndexBuffer(5,BuySell);

   SetIndexStyle(6,DRAW_ARROW); //TP
   SetIndexArrow(6,120);
   SetIndexBuffer(6,TP);

   SetIndexStyle(7,DRAW_ARROW); //SL
   SetIndexArrow(7,120);
   SetIndexBuffer(7,SL);

  }

  
//+----------------+
//| Custom DE-init |
//+----------------+
int deinit()
  {
   Print("DE-Init happened ",CurTime());
   Comment(" ");
  }

  
//+-----+
//| TPB |
//+-----+
int start()
  {   
   
   int i;

	double stddev;
   double bup0;
   double bdn0;

   double myBDistance;
   double myATR;
   double myProfitMade;
   double myLossLimit;
   
   for (i=mybars; i>=0; i--) 
     { 
      // Bollinger moving average
      BollMA[i] = iMA(Symbol(),0,BPeriod,0,MODE_SMA,PRICE_OPEN,i);
      
      // upper & lower bands
      stddev = iStdDev(Symbol(),0,BPeriod,0,MODE_SMA,PRICE_OPEN,i);   
      BollUpper[i] = BollMA[i] + (Deviation*stddev); //upper
      BollLower[i] = BollMA[i] - (Deviation*stddev); //lower

      // buy/sell limit cross
      if(UseATR)
        {
         myATR=iATR(Symbol(),0,ATR_Period,i);       // expressed as .xxxx
         myBDistance = (ATR_BDistanceMult * myATR); // so doesn't need Point 
         UpperPlus[i] = BollUpper[i]+(myBDistance); //upperplus
         LowerPlus[i] = BollLower[i]-(myBDistance); //lowerplus
        }
        else
        {
         myBDistance=BDistance;
         UpperPlus[i] = BollUpper[i]+(myBDistance*Point); //upperplus
         LowerPlus[i] = BollLower[i]-(myBDistance*Point); //lowerplus
        }


      if( High[i]>=UpperPlus[i])
        {
         BuySell[i]=UpperPlus[i]; //SELL
         if(UseATR)
           {
            TP[i]=UpperPlus[i]-(myATR*ATR_ProfitMadeMult);
            SL[i]=UpperPlus[i]+(myATR*ATR_LossLimitMult);
           }
           else
           {
            TP[i]=UpperPlus[i]-(ProfitMade*Point);
            SL[i]=UpperPlus[i]+(LossLimit*Point);
           }
        }


      if( Low[i]<=LowerPlus[i])
        {
         BuySell[i]=LowerPlus[i]; //BUY
         if(UseATR)
           {
            TP[i]=LowerPlus[i]+(myATR*ATR_ProfitMadeMult);
            SL[i]=LowerPlus[i]-(myATR*ATR_LossLimitMult);
           }
           else
           {
            TP[i]=LowerPlus[i]+(ProfitMade*Point);
            SL[i]=LowerPlus[i]-(LossLimit*Point);
           }

        }

     }//for
 
  }//start
  





Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE

Implements a curve of type DRAW_ARROW

Indicators Used:

Moving average indicator
Standard Deviation indicator
Indicator of the average true range


Custom Indicators Used:

Order Management characteristics:

Other Features: