Bollinger bands breakout Indicator For MT5
Το Bollinger bands breakout Indicator For MT5 λειτουργεί μια πολύ απλή ιδέα. Πρώτα απ 'όλα, οι ζώνες δημιουργούνται με τη βοήθεια υπολογισμών απλού κινούμενου μέσου μαζί με την τυπική απόκλιση. Παρατηρώντας προσεκτικά τον πίνακα τιμών, θα παρατηρήσετε μικρές σημάνσεις στην πάνω και κάτω ζώνη όταν μειώνεται η τιμή.
Η αγορά γίνεται όταν η τιμή κλείσει πάνω από τη ζώνη Bollinger. Αλλά οι έμποροι θα πρέπει να επιλέξουν προσεκτικά το χρονικό πλαίσιο που βασίζεται στην αστάθεια της αγοράς, καθώς εξαρτάται σε μεγάλο βαθμό από αυτό. Για παράδειγμα, εάν η μεταβλητότητα είναι υψηλότερη, είναι επιτακτική ανάγκη να βασιστείτε στο μεγαλύτερο χρονικό πλαίσιο, όπως το D1 ή το εβδομαδιαίο.
Αντίθετα, όταν η αστάθεια τερματιστεί, οι έμποροι πρέπει να εξετάσουν τα μικρότερα χρονικά πλαίσια. Αλλά ο χρήστης του μικρότερου χρονικού πλαισίου θα πρέπει να βασίζεται στα σήματα ενεργειών τιμών. Εάν δεν το κάνουν, πρόκειται να αντιμετωπίσουν πάρα πολλά ψευδή μηνύματα. Και πάντα να είστε ενήμεροι για τα σημαντικά νέα, καθώς το μεγαλύτερο ξεσπάσματα συμβαίνουν σε τόσο κρίσιμα οικονομικά γεγονότα.
Εγκατάσταση του Bollinger bands breakout Indicator For MT5
Αφού κατεβάσετε την ένδειξη μέσω της παραπάνω φόρμας, πρέπει να αποσυνδέσετε το αρχείο zip. Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο Bollinger bands breakout.mq5 στο φάκελο MQL5Indicators της εγκατάστασης MT5 . Στη συνέχεια, κάντε επανεκκίνηση του 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
Buffers του Bollinger bands breakout Indicator For MT5
Το Bollinger bands breakout Indicator For MT5 παρέχει buffers 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);
}
//------------------------------------------------------------------