mql5/Indicators/Downloads/2_Averages_with_BollingerBands.mq5
Princeec13 ecd22e8ddd
2025-08-10 17:43:21 -04:00

223 lines
7.1 KiB
MQL5

//+------------------------------------------------------------------+
//| 2_Averages_with_BollingerBands.mq5 |
//| Copyright 2025, Mir Mostof Kamal |
//| https://www.mql5.com/en/users/bokul |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Mir Mostof Kamal"
#property link "https://www.mql5.com/en/users/bokul"
#property version "1.00"
#property description "mkbokul@gmail.com"
#property description "2 Moving Averages With Bollinger Bands"
#property description "This Indicator will be work in all time frame"
#property description "WARNING: Use this software at your own risk."
#property description "The creator of this script cannot be held responsible for any damage or loss. "
#property strict
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots 7
#property indicator_label1 "MA1"
#property indicator_type1 DRAW_LINE
#property indicator_color1 Blue
#property indicator_label2 "MA2"
#property indicator_type2 DRAW_LINE
#property indicator_color2 Red
#property indicator_label3 "Buy Signal"
#property indicator_type3 DRAW_ARROW
#property indicator_color3 Lime
#property indicator_width3 2
#property indicator_label4 "Sell Signal"
#property indicator_type4 DRAW_ARROW
#property indicator_color4 OrangeRed
#property indicator_width4 2
#property indicator_label5 "BB Upper"
#property indicator_type5 DRAW_LINE
#property indicator_color5 Yellow
#property indicator_label6 "BB Middle"
#property indicator_type6 DRAW_LINE
#property indicator_color6 Yellow
#property indicator_label7 "BB Lower"
#property indicator_type7 DRAW_LINE
#property indicator_color7 Yellow
//--- input parameters
input string MA1_Settings = "=== MA1 Settings ===";
input int MA1_Period = 7; //1st MA Period:
input ENUM_MA_METHOD MA1_Method = MODE_EMA; //1st MA Method:
input ENUM_APPLIED_PRICE MA1_Price = PRICE_CLOSE; //1st MA Price:
input string MA2_Settings = "=== MA2 Settings ===";
input int MA2_Period = 21; //2nd MA Period:
input ENUM_MA_METHOD MA2_Method = MODE_SMA; //2nd MA Method:
input ENUM_APPLIED_PRICE MA2_Price = PRICE_CLOSE; //2nd MA Price:
input string Alerts_Settings = "=== Alerts Settings ===";
input bool EnableAlerts = true; //Alerts On/Off:
input bool EnableSound = true; //Email Alerts On/Off:
input bool EnableEmail = false; //Alerts Sound On/Off:
input string BB_Settings = "--- Bollinger Bands Settings ---";
input bool Enable_BB = true; // Enable/Disable BB :
input int BB_Period = 60; // BB Period :
input double BB_Deviation = 2.0; // BB Deviation:
input int BB_Shift = 0; // BB Shift :
input ENUM_APPLIED_PRICE BB_Price = PRICE_CLOSE; // BB Applied Price :
//--- buffers
double MA1_Buffer[];
double MA2_Buffer[];
double BuyArrow[];
double SellArrow[];
double BB_Upper[];
double BB_Middle[];
double BB_Lower[];
int handle_ma1, handle_ma2, handle_bb;
datetime lastAlertTime = 0;
//+-----------On In in-------------------------------------------------------+
int OnInit()
{
SetIndexBuffer(0, MA1_Buffer, INDICATOR_DATA);
SetIndexBuffer(1, MA2_Buffer, INDICATOR_DATA);
SetIndexBuffer(2, BuyArrow, INDICATOR_DATA);
PlotIndexSetInteger(2, PLOT_ARROW, 233); // Wingdings arrow code
SetIndexBuffer(3, SellArrow, INDICATOR_DATA);
PlotIndexSetInteger(3, PLOT_ARROW, 234); // Wingdings arrow code
SetIndexBuffer(4, BB_Upper, INDICATOR_DATA);
SetIndexBuffer(5, BB_Middle, INDICATOR_DATA);
SetIndexBuffer(6, BB_Lower, INDICATOR_DATA);
handle_ma1 = iMA(_Symbol, _Period, MA1_Period, 0, MA1_Method, MA1_Price);
handle_ma2 = iMA(_Symbol, _Period, MA2_Period, 0, MA2_Method, MA2_Price);
if(Enable_BB)
handle_bb = iBands(_Symbol, _Period, BB_Period, BB_Shift, BB_Deviation, BB_Price);
return(INIT_SUCCEEDED);
}
//+------------ On Calculate ------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
if(rates_total < MathMax(MA1_Period, MA2_Period) + 2)
return 0;
//--- price arrays
double close[], high[], low[];
ArraySetAsSeries(close, true);
ArraySetAsSeries(high, true);
ArraySetAsSeries(low, true);
CopyClose(_Symbol, _Period, 0, rates_total, close);
CopyHigh(_Symbol, _Period, 0, rates_total, high);
CopyLow(_Symbol, _Period, 0, rates_total, low);
//--- MA buffers
CopyBuffer(handle_ma1, 0, 0, rates_total, MA1_Buffer);
CopyBuffer(handle_ma2, 0, 0, rates_total, MA2_Buffer);
//--- BB buffers
if(Enable_BB)
{
CopyBuffer(handle_bb, 1, 0, rates_total, BB_Upper); // upper
CopyBuffer(handle_bb, 0, 0, rates_total, BB_Middle); // middle
CopyBuffer(handle_bb, 2, 0, rates_total, BB_Lower); // lower
}
for(int i = rates_total - 2; i >= 1; i--)
{
BuyArrow[i] = EMPTY_VALUE;
SellArrow[i] = EMPTY_VALUE;
if(MA1_Buffer[i] > MA2_Buffer[i] && MA1_Buffer[i+1] <= MA2_Buffer[i+1])
{
BuyArrow[i] = low[i] - 5 * _Point;
if(i == 1 && TimeCurrent() != lastAlertTime)
{
TriggerAlert("BUY");
lastAlertTime = TimeCurrent();
}
}
else
if(MA1_Buffer[i] < MA2_Buffer[i] && MA1_Buffer[i+1] >= MA2_Buffer[i+1])
{
SellArrow[i] = high[i] + 5 * _Point;
if(i == 1 && TimeCurrent() != lastAlertTime)
{
TriggerAlert("SELL");
lastAlertTime = TimeCurrent();
}
}
}
return(rates_total);
}
//+-------------Alert system -----------------------------------------------------+
void TriggerAlert(string type)
{
string msg = StringFormat("2MA_BB: %s signal on %s %s at %s",
type, _Symbol,
PeriodToStr(_Period),
TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES));
if(EnableAlerts)
Alert(msg);
if(EnableSound)
PlaySound("alert.wav");
if(EnableEmail)
SendMail("DoubleMA Signal", msg);
}
//+----------Period --------------------------------------------------------+
string PeriodToStr(ENUM_TIMEFRAMES tf)
{
switch(tf)
{
case PERIOD_M1:
return "M1";
case PERIOD_M5:
return "M5";
case PERIOD_M15:
return "M15";
case PERIOD_M30:
return "M30";
case PERIOD_H1:
return "H1";
case PERIOD_H4:
return "H4";
case PERIOD_D1:
return "D1";
case PERIOD_W1:
return "W1";
case PERIOD_MN1:
return "MN1";
default:
return IntegerToString(tf);
}
}
//+------------------Code finish by Mir Mostofa Kamal ------------------------------------------------+
//+------------------------------------------------------------------+