Bollinger bands breakout Indicator For MT5
Bollinger bands breakout Indicator For MT5 fungerer på en veldig enkel idé. Først av alt er bandene opprettet ved hjelp av enkel beregning av glidende gjennomsnitt sammen med standardavviket. Ved å merke prisoversikten nøye, vil du merke små markeringer i øvre og nedre bånd når prisen synker.
Markedet gjøres når prisen stenger over Bollinger-bandet. Men de næringsdrivende bør nøye velge tidsramme basert på markedsvolatilitet, ettersom mye avhenger av det. For eksempel, hvis volatiliteten er høyere, er det viktig å stole på den større tidsrammen som D1 eller den ukentlige.
Tvert imot, når volatiliteten opphører, trenger handelsmennene å se på de mindre tidsramme-dataene. Men brukeren av den mindre tidsrammen bør stole på prisaksjonssignalene. Med mindre de gjør det, kommer de til å takle for mange falske signaler. Og vær alltid oppmerksom på de viktigste nyhetsdataene da det store utbruddet oppstår på slike kritiske økonomiske hendelser.
Installere Bollinger bands breakout Indicator For MT5
Etter at du har lastet ned indikatoren via skjemaet over, må du pakke ut zip-filen. Deretter må du kopiere filen Bollinger bands breakout.mq5 til mappen MQL5Indicators for din MT5 installasjon. Etter det kan du starte MT5 på nytt, så vil du kunne se indikatoren i listen over indikatorer.
Parametere for Bollinger bands breakout Indicator For MT5
Bollinger bands breakout Indicator For MT5 har 5 parametere som skal konfigureres.
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
Buffere av Bollinger bands breakout Indicator For MT5
Bollinger bands breakout Indicator For MT5 inneholder 9 buffere.
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);
Hoveddeler av koden
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);
}
//------------------------------------------------------------------