Bollinger bands breakout Indicator For MT5
Bollinger bands breakout Indicator For MT5のBollinger bands breakout Indicator For MT5は、非常にシンプルなアイデアで機能します。まず、標準偏差とともに単純な移動平均計算を使用してバンドが作成されます。価格チャートに注意することで、価格が下がったときに上下のバンドに小さなマークが表示されます。
市場は、価格がボリンジャーバンドを上回ったときに行われます。しかし、トレーダーは市場のボラティリティに大きく依存するため、慎重に時間枠を選択する必要があります。たとえば、ボラティリティが高い場合、D1や毎週などのより大きな時間枠に依存することが不可欠です。
それどころか、ボラティリティが低下すると、トレーダーはより小さな時間枠データを調べる必要があります。しかし、より小さな時間枠のユーザーは、価格アクション信号に依存する必要があります。そうしない限り、彼らはあまりにも多くの誤ったシグナルに対処しようとしています。また、このような重大な金融イベントで大規模なブレイクアウトが発生するため、常に主要なニュースデータに注意してください。
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);
}
//------------------------------------------------------------------