//+------------------------------------------------------------------+ //| 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 ------------------------------------------------+ //+------------------------------------------------------------------+