Bollinger bands breakout Indicator For MT5

Bollinger bands breakout Indicator For MT5

Bollinger bands breakout Indicator For MT5Bollinger bands breakout Indicator For MT5基于一个非常简单的想法。首先,借助简单的移动平均值计算以及标准偏差来创建波段。密切注意价格图表,当价格下降时,您会注意到上下带上的小标记。

当价格收于布林带上方时,市场即告完成。但是,交易者应根据市场波动谨慎选择时间范围,因为很大程度上取决于时间波动。例如,如果波动性较高,则必须依赖较大的时间范围,例如D1或每周。

相反,当波动停止时,交易者需要查看较小的时间范围数据。但是,时间范围较小的用户应该依赖价格行为信号。除非他们这样做,否则它们将处理过多的错误信号。当重大突破发生在此类重大财务事件上时,请始终注意主要新闻数据。

FREE Bollinger bands breakout Indicator

Download the FREE Bollinger bands breakout Indicator for MT5.

To receive my email 100% sure: 
Put my email on your whitelist!

 

Partially Automated Trading Besides Your Day Job

Alerts In Real-Time When Divergences Occur

 

安装Bollinger bands breakout Indicator For MT5

通过上面的表格下载指标后,您需要解压缩zip文件。然后,您需要将文件Bollinger bands breakout.mq5复制到MT5安装的文件夹MQL5Indicators中。之后,请重启MT5,然后您将能够在指标列表中看到该指标。

Bollinger bands breakout Indicator For MT5参数

Bollinger bands breakout Indicator For MT5具有要配置的5 参数。

input int                 inpPeriod       = 20;          // Bollinger bands period
input ENUM_APPLIED_PRICE  inpPrice        = PRICE_CLOSE; // Price
input double              inpDeviations   = 2.5;         // Bollinger bands deviations
input double              inpZonesPercent = 20;          // Zones percent
input enDevType           inpDevType      = dev_regular; // Standard deviations type

Bollinger bands breakout Indicator For MT5缓冲区

Bollinger bands breakout Indicator For MT5提供9 缓冲区。

SetIndexBuffer(0,fupu    ,INDICATOR_DATA);
SetIndexBuffer(1,fupd    ,INDICATOR_DATA);
SetIndexBuffer(2,fdnu    ,INDICATOR_DATA);
SetIndexBuffer(3,fdnd    ,INDICATOR_DATA);
SetIndexBuffer(4,bufferUp,INDICATOR_DATA);
SetIndexBuffer(5,bufferDn,INDICATOR_DATA);
SetIndexBuffer(6,bufferMe,INDICATOR_DATA);
SetIndexBuffer(7,breakup ,INDICATOR_DATA); PlotIndexSetInteger(5,PLOT_ARROW,217); PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-10);
SetIndexBuffer(8,breakdn ,INDICATOR_DATA); PlotIndexSetInteger(6,PLOT_ARROW,218); PlotIndexSetInteger(6,PLOT_ARROW_SHIFT, 10);

守则主要部分

int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
{
   int _copyCount = rates_total-prev_calculated+1; if (_copyCount gt rates_total) _copyCount=rates_total;
         if (CopyBuffer(_maHandle,0,0,_copyCount,bufferMe)!=_copyCount) return(prev_calculated);

   //
   //---
   //

   int i= prev_calculated-1; if (i lt 0) i=0; for (; i lt rates_total && !_StopFlag; i++)
   {
      double price; _setPrice(inpPrice,price,i);
      double deviation = iStdDeviation.calculate(price,i,rates_total);
      
      //
      //---
      //

      bufferUp[i] = bufferMe[i]+deviation*inpDeviations;
      bufferDn[i] = bufferMe[i]-deviation*inpDeviations;
      fupd[i]     = bufferMe[i]+deviation*inpDeviations*_bandsFillZone; fupu[i] = bufferUp[i]; 
      fdnu[i]     = bufferMe[i]-deviation*inpDeviations*_bandsFillZone; fdnd[i] = bufferDn[i]; 
      breakup[i]  = (close[i] gt bufferUp[i]) ? high[i] : EMPTY_VALUE;
      breakdn[i]  = (close[i] lt bufferDn[i]) ? low[i]  : EMPTY_VALUE;
   }         
   return(i);         
}

//------------------------------------------------------------------
// Custom function(s)
//------------------------------------------------------------------
//
//---
//

class cStdDeviation
{
   private :
      int    m_period;
      double m_periodDiv;
      int    m_arraySize;
      bool   m_isSample;
         struct sStdStruct
         {
            double price;
            double price2;
            double sum;
            double sum2;
         };
      sStdStruct m_array[];
   public:
      cStdDeviation() : m_arraySize(-1) {  }
     ~cStdDeviation()                   { ArrayFree(m_array); }

      ///
      ///
      ///

      void init(int period, bool isSample)
      {
         m_period    = (period gt 1) ? period : 1;
         m_isSample  = isSample;
         m_periodDiv = MathMax(m_period-m_isSample,1);
      }
      
      double calculate(double price, int i, int bars)
      {
         if (m_arraySize lt bars) {m_arraySize=ArrayResize(m_array,bars+500); if (m_arraySize lt bars) return(0); }

            //
            //
            //
            
            m_array[i].price =price;
            m_array[i].price2=price*price;
            
            //
            //---
            //
            
            if (i gt m_period)
            {
               m_array[i].sum  = m_array[i-1].sum +m_array[i].price -m_array[i-m_period].price;
               m_array[i].sum2 = m_array[i-1].sum2+m_array[i].price2-m_array[i-m_period].price2;
            }
            else  
            {
               m_array[i].sum  = m_array[i].price;
               m_array[i].sum2 = m_array[i].price2; 
               for(int k=1; k lt m_period && i gt =k; k++) 
               {
                  m_array[i].sum  += m_array[i-k].price; 
                  m_array[i].sum2 += m_array[i-k].price2; 
               }                  
            }         
            return (MathSqrt((m_array[i].sum2-m_array[i].sum*m_array[i].sum/(double)m_period)/m_periodDiv));
      }
};
cStdDeviation iStdDeviation;

//
//---
//

bool _checkHandle(int _handle, string _description)
{
   static int  _chandles[];
          int  _size   = ArraySize(_chandles);
          bool _answer = (_handle!=INVALID_HANDLE);
          if  (_answer)
               { ArrayResize(_chandles,_size+1); _chandles[_size]=_handle; }
          else { for (int i=_size-1; i gt =0; i--) IndicatorRelease(_chandles[i]); ArrayResize(_chandles,0); Alert(_description+" initialization failed"); }
   return(_answer);
}  
//------------------------------------------------------------------

 

About Me

I'm Mike Semlitsch the owner of PerfectTrendSystem.com. My trading career started in 2007. Since 2013 I have helped thousands of traders to take their trading to the next level. Many of them are now constantly profitable traders. 

The following performance was achieved by me while trading live in front of hundreds of my clients:

Connect With Me:  

Results From 5 Months!
This service starts soon! Be the first who get's notified when it begins!

This FREE Indicator Can Transform
Your Trading!

FREE Indicator + Telegram Group


Request the Ultimate Double Top/Bottom Indicator which is used by 10,000+ traders.