BB_OutsideCandle_Alert Indicator For MT5
BB_OutsideCandle_Alert Indicator For MT5 - это сигнальный индикатор, который размещает сигнальные метки и рисует сигнальные свечи, когда цена пробивает полосы Боллинджера. Индикатор предоставляет трейдерам возможность выбрать один из двух методов пробоя полосы Боллинджера:
1. Цена открытия внутри полос Боллинджера и закрытия снаружи;
2. Цена открытия и закрытия вне полос Боллинджера.
Если для параметра индикатора «Показать сигнальные свечи» установлено значение «Да», бычья свеча за пределами нижней полосы Боллинджера окрашивается в зеленый цвет, а медвежья свеча за пределами верхней полосы Боллинджера окрашивается в оранжевый цвет.
Торговые сигналы, генерируемые индикатором BB_OutsideCandle_Alert, для MT5 выглядят относительно лучше, если они соответствуют доминирующему рыночному тренду.
Установка BB_OutsideCandle_Alert Indicator For MT5
После того, как вы загрузили индикатор через форму выше, вам необходимо распаковать zip-файл. Затем вам нужно скопировать файл BB_OutsideCandle_Alert.mq5 в папку MQL5Indicators вашей установки MT5 . После этого перезапустите MT5, и вы сможете увидеть индикатор в списке индикаторов.
Параметры BB_OutsideCandle_Alert Indicator For MT5
BB_OutsideCandle_Alert Indicator For MT5 имеет параметры 6 для настройки.
input uint InpPeriodBB = 12; // BB period
input double InpDeviation = 2.2; // BB deviation
input ENUM_MODE_OP_CL InpModeCandle = MODE_CANDLE_OUTSIDE; // BB line breakdown method
input ENUM_INPUT_YES_NO InpShowBands = INPUT_YES; // Show bands
input ENUM_INPUT_YES_NO InpShowCandles = INPUT_YES; // Show signal candles
input ENUM_INPUT_YES_NO InpShowAlerts = INPUT_YES; // Use alerts
Буферы BB_OutsideCandle_Alert Indicator For MT5
BB_OutsideCandle_Alert Indicator For MT5 предоставляет буферы 10 .
SetIndexBuffer(0,BufferSigB,INDICATOR_DATA);
SetIndexBuffer(1,BufferSigS,INDICATOR_DATA);
SetIndexBuffer(2,BufferBandUP,INDICATOR_DATA);
SetIndexBuffer(3,BufferBandDN,INDICATOR_DATA);
SetIndexBuffer(4,BufferCandleO,INDICATOR_DATA);
SetIndexBuffer(5,BufferCandleH,INDICATOR_DATA);
SetIndexBuffer(6,BufferCandleL,INDICATOR_DATA);
SetIndexBuffer(7,BufferCandleC,INDICATOR_DATA);
SetIndexBuffer(8,BufferColors,INDICATOR_COLOR_INDEX);
SetIndexBuffer(9,BufferBB,INDICATOR_CALCULATIONS);
Основные части кодекса
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[])
{
//--- #AB0= gt 2:0 lt 0AA82 gt 2 1CD5@ gt 2 :0: B09 lt A5@89
ArraySetAsSeries(open,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
ArraySetAsSeries(time,true);
//--- @ gt 25@:0 : gt ;8G5AB20 4 gt ABC?=KE 10@ gt 2
if(rates_total lt 4) return 0;
//--- @ gt 25@:0 8 @0AGQB : gt ;8G5AB20 ?@ gt AG8BK205 lt KE 10@ gt 2
int limit=rates_total-prev_calculated;
if(limit gt 1)
{
limit=rates_total-2;
ArrayInitialize(BufferSigB,EMPTY_VALUE);
ArrayInitialize(BufferSigS,EMPTY_VALUE);
ArrayInitialize(BufferBandUP,EMPTY_VALUE);
ArrayInitialize(BufferBandDN,EMPTY_VALUE);
ArrayInitialize(BufferCandleO,EMPTY_VALUE);
ArrayInitialize(BufferCandleH,EMPTY_VALUE);
ArrayInitialize(BufferCandleL,EMPTY_VALUE);
ArrayInitialize(BufferCandleC,EMPTY_VALUE);
ArrayInitialize(BufferColors,2);
ArrayInitialize(BufferBB,0);
}
//--- gt 43 gt B gt 2:0 40==KE
int count=(limit gt 1 ? rates_total : 1),copied=0;
copied=CopyBuffer(handle_bb,UPPER_BAND,0,count,BufferBandUP);
if(copied!=count) return 0;
copied=CopyBuffer(handle_bb,LOWER_BAND,0,count,BufferBandDN);
if(copied!=count) return 0;
//--- 0AGQB 8=48:0B gt @0
static datetime last_time=0;
string alert="";
for(int i=limit; i gt =0 && !IsStopped(); i--)
{
BufferCandleO[i]=BufferCandleH[i]=BufferCandleL[i]=BufferCandleC[i]=EMPTY_VALUE;
if(InpModeCandle==MODE_CANDLE_INSIDE_OUT)
{
//--- Bearish. Candle opening inside the bands and closing above the upper bollinger band
if(open[i+1] lt BufferBandUP[i+1] && close[i+1] gt BufferBandUP[i+1])
{
BufferSigS[i]=high[i];//fmax(open[i+1],fmax(open[i],BufferBandUP[i]));
if(InpShowCandles)
DrawColorCandle(i+1,open,high,low,close);
//--- Alert after the last Close of a candle
if(i==0 && InpShowAlerts && time[0] gt last_time)
{
Alert(Symbol()+" "+TimeframeToString(Period())+": Bollinger Bands Outside Candle SHORT Signal");
last_time=TimeCurrent();
}
}
//--- Bullish. Candle opening inside the bands and closing below the lower bollinger band
if(open[i+1] gt BufferBandDN[i+1] && close[i+1] lt BufferBandDN[i+1])
{
BufferSigB[i]=low[i];//fmin(open[i+1],fmin(open[i],BufferBandDN[i]));
if(InpShowCandles)
DrawColorCandle(i+1,open,high,low,close);
//--- Alert after the last Close of a candle
if(i==0 && InpShowAlerts && time[0] gt last_time)
{
Alert(Symbol()+" "+TimeframeToString(Period())+": Bollinger Bands Outside Candle LONG Signal");
last_time=TimeCurrent();
}
}
}
else
{
//--- Bearish. Candle opening and closing above the upper bollinger band
if(open[i+1] gt close[i+1] && close[i+1] gt BufferBandUP[i+1])
{
BufferSigS[i]=high[i];//fmax(open[i+1],fmax(open[i],BufferBandUP[i]));
if(InpShowCandles)
DrawColorCandle(i+1,open,high,low,close);
//--- Alert after the last Close of a candle
if(i==0 && InpShowAlerts && time[0] gt last_time)
{
Alert(Symbol()+" "+TimeframeToString(Period())+": Bollinger Bands Outside Candle SHORT Signal");
last_time=TimeCurrent();
}
}
//--- Bullish. Candle opening and closing below the lower bollinger band
if(open[i+1] lt close[i+1] && close[i+1] lt BufferBandDN[i+1])
{
BufferSigB[i]=low[i];//fmin(open[i+1],fmin(open[i],BufferBandDN[i]));
if(InpShowCandles)
DrawColorCandle(i+1,open,high,low,close);
//--- Alert after the last Close of a candle
if(i==0 && InpShowAlerts && time[0] gt last_time)
{
Alert(Symbol()+" "+TimeframeToString(Period())+": Bollinger Bands Outside Candle LONG Signal");
last_time=TimeCurrent();
}
}
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Timeframe to string |
//+------------------------------------------------------------------+
string TimeframeToString(const ENUM_TIMEFRAMES timeframe)
{
return StringSubstr(EnumToString(timeframe),7);
}
//+------------------------------------------------------------------+
//| Draw Color Candle |
//+------------------------------------------------------------------+
void DrawColorCandle(const int shift,const double &open[],const double &high[],const double &low[],const double &close[])
{
BufferCandleO[shift]=open[shift];
BufferCandleH[shift]=high[shift];
BufferCandleL[shift]=low[shift];
BufferCandleC[shift]=close[shift];
BufferColors[shift]=(open[shift] lt close[shift] ? 0 : open[shift] gt close[shift] ? 1 : 2);
}
//+------------------------------------------------------------------+