Bollinger bands breakout Indicator For MT5
L' Bollinger bands breakout Indicator For MT5 fonctionne sur une idée très simple. Tout d'abord, les bandes sont créées à l'aide d'un simple calcul de la moyenne mobile avec l'écart-type. En observant attentivement le tableau des prix, vous remarquerez de petites marques sur la bande supérieure et inférieure lorsque le prix baisse.
Le marché se fait lorsque le prix se ferme au-dessus de la bande de Bollinger. Mais les commerçants doivent sélectionner soigneusement le délai en fonction de la volatilité du marché car beaucoup en dépend. Par exemple, si la volatilité est plus élevée, il est impératif de s'appuyer sur une période plus longue comme le D1 ou l'hebdomadaire.
Au contraire, lorsque la volatilité cesse de baisser, les traders doivent regarder les données de la plus petite période. Mais l'utilisateur de la plus petite période doit se fier aux signaux d'action des prix. S'ils ne le font pas, ils vont traiter trop de faux signaux. Et soyez toujours au courant des principales données d'actualités, car la percée majeure se produit sur de tels événements financiers critiques.
Installation du Bollinger bands breakout Indicator For MT5
Après avoir téléchargé l'indicateur via le formulaire ci-dessus, vous devez décompresser le fichier zip. Ensuite, vous devez copier le fichier Bollinger bands breakout.mq5 dans le dossier MQL5Indicators de votre installation MT5 . Ensuite, redémarrez MT5 et vous pourrez voir l’indicateur dans la liste des indicateurs.
Paramètres du Bollinger bands breakout Indicator For MT5
Bollinger bands breakout Indicator For MT5 a des paramètres 5 à configurer.
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
Tampons du Bollinger bands breakout Indicator For MT5
Le Bollinger bands breakout Indicator For MT5 9 Bollinger bands breakout Indicator For MT5 fournit des tampons 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);
Parties principales du code
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);
}
//------------------------------------------------------------------