Alex5757000 - Multi Moving Average v2

Author: Copyright � 2010, Alex5757000, Alexander S. Sovpel'
Alex5757000 - Multi Moving Average v2
Price Data Components
Series array that contains open time of each bar
Indicators Used
Moving average indicator
Miscellaneous
It issuies visual alerts to the screenIt plays sound alerts
2 Views
0 Downloads
0 Favorites
Alex5757000 - Multi Moving Average v2
//+------------------------------------------------------------------+
//|                        Alex5757000 - Multi Moving Average v2.mq4 |
//|              Copyright © 2010, Alex5757000, Alexander S. Sovpel' |
//|                                   E-mail : Alex5757000@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Alex5757000, Alexander S. Sovpel'"
#property link      "E-mail: Alex5757000@ya.ru"

#property indicator_separate_window
#property indicator_minimum 1.0
#property indicator_maximum 4.0
#property indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Magenta
#property indicator_color3 DeepSkyBlue
#property indicator_color4 Magenta
#property indicator_color5 DeepSkyBlue
#property indicator_color6 Magenta
#property indicator_color7 DeepSkyBlue
#property indicator_color8 Magenta

extern string MA_1 = "The input parameters of the 1st moving average";

extern int MA_1_TF = 1; // Âðåìåííîé èíòåðâàë (Time Frame). 1 = M1; 5 = M5; 15 = M15; 30 = M30; 60 = H1; 240 = H4; 1440 = D1; 
extern int MA_1_Period = 89; // Ïåðèîä óñðåäíåíèÿ (Averaging period). 
extern int MA_1_Mode = MODE_LWMA; // Ìåòîä âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî (Averaging method). 0 = SMA; 1 = EMA; 2 = SSMA; 3 = LWMA;
extern int MA_1_Price = PRICE_WEIGHTED; /* Èñïîëüçóåìàÿ öåíà äëÿ ðàñ÷¸òà ñêîëüçÿùåãî ñðåäíåãî (The type of the price used for calculaton of Moving Average).
0 = CLOSE, 1 = OPEN, 2 = HIGH, 3 = LOW, 4 = MEDIAN, 5 = TYPICAL, 6 = WEIGHTED */

extern string MA_2 = "The input parameters of the 2nd moving average";

extern int MA_2_TF = 5; // Âðåìåííîé èíòåðâàë (Time Frame). 1 = M1; 5 = M5; 15 = M15; 30 = M30; 60 = H1; 240 = H4; 1440 = D1; 
extern int MA_2_Period = 55; // Ïåðèîä óñðåäíåíèÿ (Averaging period). 
extern int MA_2_Mode = MODE_LWMA; // Ìåòîä âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî (Averaging method). 0 = SMA; 1 = EMA; 2 = SSMA; 3 = LWMA;
extern int MA_2_Price = PRICE_WEIGHTED; /* Èñïîëüçóåìàÿ öåíà äëÿ ðàñ÷¸òà ñêîëüçÿùåãî ñðåäíåãî (The type of the price used for calculaton of Moving Average).
0 = CLOSE, 1 = OPEN, 2 = HIGH, 3 = LOW, 4 = MEDIAN, 5 = TYPICAL, 6 = WEIGHTED */

extern string MA_3 = "The input parameters of the 3rd moving average";

extern int MA_3_TF = 15; // Âðåìåííîé èíòåðâàë (Time Frame). 1 = M1; 5 = M5; 15 = M15; 30 = M30; 60 = H1; 240 = H4; 1440 = D1; 
extern int MA_3_Period = 34; // Ïåðèîä óñðåäíåíèÿ (Averaging period). 
extern int MA_3_Mode = MODE_LWMA; // Ìåòîä âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî (Averaging method). 0 = SMA; 1 = EMA; 2 = SSMA; 3 = LWMA;
extern int MA_3_Price = PRICE_WEIGHTED; /* Èñïîëüçóåìàÿ öåíà äëÿ ðàñ÷¸òà ñêîëüçÿùåãî ñðåäíåãî (The type of the price used for calculaton of Moving Average).
0 = CLOSE, 1 = OPEN, 2 = HIGH, 3 = LOW, 4 = MEDIAN, 5 = TYPICAL, 6 = WEIGHTED */

extern string MA_4 = "The input parameters of the 4th moving average";

extern int MA_4_TF = 60; // Âðåìåííîé èíòåðâàë (Time Frame). 1 = M1; 5 = M5; 15 = M15; 30 = M30; 60 = H1; 240 = H4; 1440 = D1; 
extern int MA_4_Period = 21; // Ïåðèîä óñðåäíåíèÿ (Averaging period). 
extern int MA_4_Mode = MODE_LWMA; // Ìåòîä âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî (Averaging method). 0 = SMA; 1 = EMA; 2 = SSMA; 3 = LWMA;
extern int MA_4_Price = PRICE_WEIGHTED; /* Èñïîëüçóåìàÿ öåíà äëÿ ðàñ÷¸òà ñêîëüçÿùåãî ñðåäíåãî (The type of the price used for calculaton of Moving Average).
0 = CLOSE, 1 = OPEN, 2 = HIGH, 3 = LOW, 4 = MEDIAN, 5 = TYPICAL, 6 = WEIGHTED */

extern bool RangeGraphic = TRUE; // Âûäåëÿòü îáëàñòü èíäèêàòîðà ïðè ñîâïàäåíèÿ íàïðàâëåíèÿ äâèæåíèÿ ÷åòûðåõ ÌÀ.

extern color RangeColorUp = DarkBlue;
extern color RangeColorDown = Maroon;

extern bool RangeAlert = TRUE; // Àëåðò ïðè ñîâïàäåíèè íàïðàâëåíèÿ äâèæåíèÿ ÷åòûðåõ ÌÀ.

extern string Visual = "Display parameters";

extern string Wingdings = "0 || 1 || 2";

extern int BarWingdings = 0; // Òèï âèçóàëèçàöèè: 0 = êâàäðàò, 1 = ïðÿìîóãîëüíèê, 2 = òî÷êà.
extern int BarWidth = 0; // Òîëùèíà.
extern color BarColorUp = indicator_color1;
extern color BarColorDown = indicator_color2;

int P1_Position = 4;
int P2_Position = 3;
int P3_Position = 2;
int P4_Position = 1;

extern double Gap = 0.6;

extern string SetLabel = "Labels setting";

extern bool ShowLabel = TRUE;

extern string V_Label= "Vertical shift for text labels";

extern double V_Shift = 0.5; // Âåðòèêàëüíûé ñäâèã òåêñòîâîé ìåòêè.

extern string H_Label = "Horizontal shift for text labels";

extern int H_Shift = 30; // Ãîðèçîíòàëüíûé ñäâèã òåêñòîâîé ìåòêè.

extern string UP_DN = "Moving average direction relative to the price: above/below";

extern color TextColorUp = indicator_color1;
extern color TextColorDown = indicator_color2;

//+------------------------------------------------------------------+

string Label = "", ShortName;

double MA1_Up_Buffer[];
double MA2_Up_Buffer[];
double MA3_Up_Buffer[];
double MA4_Up_Buffer[];

double MA1_Down_Buffer[];
double MA2_Down_Buffer[];
double MA3_Down_Buffer[];
double MA4_Down_Buffer[];

double MA1_0 = 0.0;
double MA2_0 = 0.0;
double MA3_0 = 0.0;
double MA4_0 = 0.0;

double MA1_1 = 0.0;
double MA1_2 = 0.0;
double MA1_3 = 0.0;

double MA2_1 = 0.0;
double MA2_2 = 0.0;
double MA2_3 = 0.0;

double MA3_1 = 0.0;
double MA3_2 = 0.0;
double MA3_3 = 0.0;

double MA4_1 = 0.0;
double MA4_2 = 0.0;
double MA4_3 = 0.0;

bool HavePlayedUp = FALSE;
bool HavePlayedDown = FALSE;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
   int WingdingsUp, WingdingsDown;

   switch(BarWingdings)
     {
      case 0 : WingdingsUp = 167; WingdingsDown = 167; break;
      case 1 : WingdingsUp = 250; WingdingsDown = 250; break;
      case 2 : WingdingsUp = 158; WingdingsDown = 158; break;

      default : Alert(WindowExpertName()+" ERROR : Please enter the correct value for BarWingdings !"); return(0);
     }
     
   SetIndexStyle (0, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorDown);
   SetIndexArrow (0, WingdingsUp);
   SetIndexBuffer(0, MA1_Up_Buffer);
   SetIndexEmptyValue(0, EMPTY_VALUE);

   SetIndexStyle (1, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorUp);
   SetIndexArrow (1, WingdingsDown);
   SetIndexBuffer(1, MA1_Down_Buffer);
   SetIndexEmptyValue(1, EMPTY_VALUE);

   SetIndexStyle (2, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorDown);
   SetIndexArrow (2, WingdingsUp);
   SetIndexBuffer(2, MA2_Up_Buffer);
   SetIndexEmptyValue(2, EMPTY_VALUE);

   SetIndexStyle (3, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorUp);
   SetIndexArrow (3, WingdingsDown);
   SetIndexBuffer(3, MA2_Down_Buffer);
   SetIndexEmptyValue(3, EMPTY_VALUE);

   SetIndexStyle (4, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorDown);
   SetIndexArrow (4, WingdingsUp);
   SetIndexBuffer(4, MA3_Up_Buffer);
   SetIndexEmptyValue(4, EMPTY_VALUE);

   SetIndexStyle (5, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorUp);
   SetIndexArrow (5, WingdingsDown);
   SetIndexBuffer(5, MA3_Down_Buffer);
   SetIndexEmptyValue(5, EMPTY_VALUE);

   SetIndexStyle (6, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorDown);
   SetIndexArrow (6, WingdingsUp);
   SetIndexBuffer(6, MA4_Up_Buffer);
   SetIndexEmptyValue(6, EMPTY_VALUE);

   SetIndexStyle (7, DRAW_ARROW, STYLE_SOLID, BarWidth, BarColorUp);
   SetIndexArrow (7, WingdingsDown);
   SetIndexBuffer(7, MA4_Down_Buffer);
   SetIndexEmptyValue(7, EMPTY_VALUE);

   SetIndexLabel(0, "1st Up Buffer");
   SetIndexLabel(1, "1st Down Buffer");
   SetIndexLabel(2, "2nd Up Buffer");
   SetIndexLabel(3, "2nd Down Buffer");
   SetIndexLabel(4, "3rd Up Buffer");
   SetIndexLabel(5, "3rd Down Buffer");
   SetIndexLabel(6, "4th Up Buffer");
   SetIndexLabel(7, "4th Down Buffer");

   IndicatorDigits(0);

   ShortName = "Alex5757000 - Multi Moving Average v2";
   IndicatorShortName(ShortName);

   return(0);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

int deinit()
  {
   int i;
   string Name = WindowFind(ShortName);

   for(i=1; i<=4; i++)
     {
      if(ObjectFind("Text_1 " + Name + i)!=-1) ObjectDelete("Text_1 " + Name + i);
      if(ObjectFind("Text_2 " + Name + i)!=-1) ObjectDelete("Text_2 " + Name + i);
      if(ObjectFind("Text_3 " + Name + i)!=-1) ObjectDelete("Text_3 " + Name + i);
     }

   for(i=1; i<=10; i++)
     {
      if(ObjectFind("Intro_" + i)!=-1) ObjectDelete("Intro_" + i);
     }
     
   if(ObjectFind("RectangleUp")==WindowFind(WindowExpertName())) ObjectDelete("RectangleUp");
   if(ObjectFind("RectangleDown")==WindowFind(WindowExpertName())) ObjectDelete("RectangleDown");

   GlobalVariableDel("INTRO");

   return(0);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {

   datetime TimeArray_1[], TimeArray_2[], TimeArray_3[], TimeArray_4[];

   int CountedBars = IndicatorCounted(), i, y;
   // ïðîâåðêà íà âîçìîæíûå îøèáêè.
   if(CountedBars<0) return(-1);
   // ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí.
   if(CountedBars>0) CountedBars--;

   int Limit = Bars - CountedBars;

   color TextColor_1, TextColor_2, TextColor_3, TextColor_4;
     
//+------------------------------------------------------------------+

   if(MA_1_TF < Period()) MA_1_TF = Period();

   ArrayCopySeries(TimeArray_1,MODE_TIME,Symbol(),MA_1_TF); 

   for(i=0, y=0; y<=Limit; y++)
     {
      while(Time[y] < TimeArray_1[i]) i++; 

      MA1_1 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i);
      MA1_2 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i+1);
      MA1_3 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i+2);
      
      MA1_1 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i);
      MA1_2 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i+1);
      MA1_3 = iMA(NULL, MA_1_TF, MA_1_Period, 0, MA_1_Mode, MA_1_Price, i+2);

      MA1_0 = iMA(NULL, MA_1_TF, 1, 0, MA_1_Mode, MA_1_Price, i);

      MA1_Up_Buffer[y] = EMPTY_VALUE;
      MA1_Down_Buffer[y] = EMPTY_VALUE;

      if(MA1_1 < MA1_2) MA1_Up_Buffer[y] = Gap * P1_Position + 1.0;
      else MA1_Down_Buffer[y] = Gap * P1_Position + 1.0;

      if(MA1_1 < MA1_0) TextColor_1 = TextColorUp;
      else TextColor_1 = TextColorDown;
     }
     
//+------------------------------------------------------------------+

   if(MA_2_TF < Period()) MA_2_TF = Period();

   ArrayCopySeries(TimeArray_2,MODE_TIME,Symbol(),MA_2_TF); 

   for(i=0, y=0; y<=Limit; y++)
     {
      while(Time[y] < TimeArray_2[i]) i++; 

      MA2_1 = iMA(NULL, MA_2_TF, MA_2_Period, 0, MA_2_Mode, MA_2_Price, i);
      MA2_2 = iMA(NULL, MA_2_TF, MA_2_Period, 0, MA_2_Mode, MA_2_Price, i+1);
      MA2_3 = iMA(NULL, MA_2_TF, MA_2_Period, 0, MA_2_Mode, MA_2_Price, i+2);

      MA2_0 = iMA(NULL, MA_2_TF, 1, 0, MA_2_Mode, MA_2_Price, i);

      MA2_Up_Buffer[y] = EMPTY_VALUE;
      MA2_Down_Buffer[y] = EMPTY_VALUE;

      if(MA2_1 < MA2_2) MA2_Up_Buffer[y] = Gap * P2_Position + 1.0;
      else MA2_Down_Buffer[y] = Gap * P2_Position + 1.0;

      if(MA2_1 < MA2_0) TextColor_2 = TextColorUp;
      else TextColor_2 = TextColorDown;
     }
     
//+------------------------------------------------------------------+

   if(MA_3_TF < Period()) MA_3_TF = Period();

   ArrayCopySeries(TimeArray_3,MODE_TIME,Symbol(),MA_3_TF); 

   for(i=0, y=0; y<=Limit; y++)
     {
      while(Time[y] < TimeArray_3[i]) i++; 

      MA3_1 = iMA(NULL, MA_3_TF, MA_3_Period, 0, MA_3_Mode, MA_3_Price, i);
      MA3_2 = iMA(NULL, MA_3_TF, MA_3_Period, 0, MA_3_Mode, MA_3_Price, i+1);
      MA3_3 = iMA(NULL, MA_3_TF, MA_3_Period, 0, MA_3_Mode, MA_3_Price, i+2);

      MA3_0 = iMA(NULL, MA_3_TF, 1, 0, MA_3_Mode, MA_3_Price, i);

      MA3_Up_Buffer[y] = EMPTY_VALUE;
      MA3_Down_Buffer[y] = EMPTY_VALUE;

      if(MA3_1 < MA3_2) MA3_Up_Buffer[y] = Gap * P3_Position + 1.0;
      else MA3_Down_Buffer[y] = Gap * P3_Position + 1.0;

      if(MA3_1 < MA3_0) TextColor_3 = TextColorUp;
      else TextColor_3 = TextColorDown;
     }
     
//+------------------------------------------------------------------+

   if(MA_4_TF < Period()) MA_4_TF = Period();

   ArrayCopySeries(TimeArray_4,MODE_TIME,Symbol(),MA_4_TF); 
   
   for(i=0, y=0; y<=Limit; y++)
     {
      while(Time[y] < TimeArray_4[i]) i++; 

      MA4_1 = iMA(NULL, MA_4_TF, MA_4_Period, 0, MA_4_Mode, MA_4_Price, i);
      MA4_2 = iMA(NULL, MA_4_TF, MA_4_Period, 0, MA_4_Mode, MA_4_Price, i+1);
      MA4_3 = iMA(NULL, MA_4_TF, MA_4_Period, 0, MA_4_Mode, MA_4_Price, i+2);

      MA4_0 = iMA(NULL, MA_4_TF, 1, 0, MA_4_Mode, MA_4_Price, i);

      MA4_Up_Buffer[y] = EMPTY_VALUE;
      MA4_Down_Buffer[y] = EMPTY_VALUE;

      if(MA4_1 < MA4_2) MA4_Up_Buffer[y] = Gap * P4_Position + 1.0;
      else MA4_Down_Buffer[y] = Gap * P4_Position + 1.0;

      if(MA4_1 < MA1_0) TextColor_4 = TextColorUp;
      else TextColor_4 = TextColorDown;
     }
     
   if(MA1_Up_Buffer[0]!=EMPTY_VALUE && MA2_Up_Buffer[0]!=EMPTY_VALUE && MA3_Up_Buffer[0]!=EMPTY_VALUE && MA4_Up_Buffer[0]!=EMPTY_VALUE && RangeAlert==TRUE)
     {
      if(!HavePlayedUp) { PlaySound("wait.wav"); HavePlayedUp = TRUE; }
     }
   else HavePlayedUp = FALSE;
   
   if(MA1_Down_Buffer[0]!=EMPTY_VALUE && MA2_Down_Buffer[0]!=EMPTY_VALUE && MA3_Down_Buffer[0]!=EMPTY_VALUE && MA4_Down_Buffer[0]!=EMPTY_VALUE && RangeAlert==TRUE)
     {
      if(!HavePlayedDown) { PlaySound("wait.wav"); HavePlayedDown = TRUE; }
     }
   else HavePlayedDown = FALSE;
   
//+------------------------------------------------------------------+

   if(ShowLabel) LabelSet(TextColor_1, TextColor_2, TextColor_3, TextColor_4);
   
//+------------------------------------------------------------------+

   if(RangeGraphic)
     {
      if(MA1_Up_Buffer[0]!=EMPTY_VALUE && MA2_Up_Buffer[0]!=EMPTY_VALUE && MA3_Up_Buffer[0]!=EMPTY_VALUE && MA4_Up_Buffer[0]!=EMPTY_VALUE) RangeGraphic("RectangleUp", RangeColorDown);
      else
        {
         if(ObjectFind("RectangleUp")==WindowFind(WindowExpertName())) ObjectDelete("RectangleUp");
        }
        
      if(MA1_Down_Buffer[0]!=EMPTY_VALUE && MA2_Down_Buffer[0]!=EMPTY_VALUE && MA3_Down_Buffer[0]!=EMPTY_VALUE && MA4_Down_Buffer[0]!=EMPTY_VALUE) RangeGraphic("RectangleDown", RangeColorUp);
      else
        {
         if(ObjectFind("RectangleDown")==WindowFind(WindowExpertName())) ObjectDelete("RectangleDown");
        }
        
     }
   else
     {
      if(ObjectFind("RectangleUp")==WindowFind(WindowExpertName())) ObjectDelete("RectangleUp");
      if(ObjectFind("RectangleDown")==WindowFind(WindowExpertName())) ObjectDelete("RectangleDown");
     }
     
//+------------------------------------------------------------------+

   return(0);
  }
  
//+------------------------------------------------------------------+

int LabelSet(color TextColor_1, color TextColor_2, color TextColor_3, color TextColor_4)
  {
   int i;
   double Price, ID = Time[0] - Time[1];
   string Name, Text_1, Text_2, Text_3;
   color TextColor;

   if(ShowLabel==TRUE)
     {
      for(i=1; i<=4; i++)
        {
         switch(i)
           {
            case 1: Text_1 = TimeFrame(MA_1_TF); Text_2 = Mode(MA_1_Mode); Text_3 = MA_1_Period;
                    Price = Gap * P1_Position + 1.0 + V_Shift;
                    TextColor = TextColor_1;
                    break;
                    
            case 2: Text_1 = TimeFrame(MA_2_TF); Text_2 = Mode(MA_2_Mode); Text_3 = MA_2_Period;
                    Price = Gap * P2_Position + 1.0 + V_Shift;
                    TextColor = TextColor_2;
                    break;
                    
            case 3: Text_1 = TimeFrame(MA_3_TF); Text_2 = Mode(MA_3_Mode); Text_3 = MA_3_Period;
                    Price = Gap * P3_Position + 1.0 + V_Shift;
                    TextColor = TextColor_3;
                    break;
                    
            case 4: Text_1 = TimeFrame(MA_4_TF); Text_2 = Mode(MA_4_Mode); Text_3 = MA_4_Period;
                    Price = Gap * P4_Position + 1.0 + V_Shift;
                    TextColor = TextColor_4;
           }
           
         Name = WindowFind(ShortName);

         NewBar(Name);

         if(ObjectFind("Text_1 " + Name + i)==-1) ObjectCreate("Text_1 " + Name + i, OBJ_TEXT, WindowFind(ShortName), iTime(NULL, 0, 0) + ID * H_Shift, Price);
         ObjectSetText("Text_1 " + Name + i, Text_1, 8, "Arial Bold", TextColor);

         if(ObjectFind("Text_2 " + Name + i)==-1) ObjectCreate("Text_2 " + Name + i, OBJ_TEXT, WindowFind(ShortName), iTime(NULL, 0, 0) + 1.5 * ID * H_Shift, Price);
         ObjectSetText("Text_2 " + Name + i, Text_2, 8, "Arial Bold", TextColor);

         if(ObjectFind("Text_3 " + Name + i)==-1) ObjectCreate("Text_3 " + Name + i, OBJ_TEXT, WindowFind(ShortName), iTime(NULL, 0, 0) + 2.0 * ID * H_Shift, Price);
         ObjectSetText("Text_3 " + Name + i, Text_3, 8, "Arial Bold", TextColor);
        }
     }
   return(0);
  }
  
//+------------------------------------------------------------------+

string TimeFrame(int TF)
  {
   if(TF == 1     || (TF == 0 && Period() == PERIOD_M1 )) return ("M1" );
   if(TF == 5     || (TF == 0 && Period() == PERIOD_M5 )) return ("M5" );
   if(TF == 15    || (TF == 0 && Period() == PERIOD_M15)) return ("M15");
   if(TF == 30    || (TF == 0 && Period() == PERIOD_M30)) return ("M30");
   if(TF == 60    || (TF == 0 && Period() == PERIOD_H1 )) return ("H1" );
   if(TF == 240   || (TF == 0 && Period() == PERIOD_H4 )) return ("H4" );
   if(TF == 1440  || (TF == 0 && Period() == PERIOD_D1 )) return ("D1" );
   if(TF == 10080 || (TF == 0 && Period() == PERIOD_W1 )) return ("W1" );
   if(TF == 43200 || (TF == 0 && Period() == PERIOD_MN1)) return ("MN" );
  }
  
//+------------------------------------------------------------------+

string Mode(int MA_Mode)
  {
   switch(MA_Mode)
     {
      case 0 : return("SMA");
               break;
     
      case 1 : return("EMA");
               break;
               
      case 2 : return("SSMA");
               break;
               
      case 3 : return("LWMA");
      //----
      default : Alert(WindowExpertName()+" ERROR : Please enter the correct value for MA_Mode !"); return(0);
     }
  }
  
//+------------------------------------------------------------------+

bool NewBar(string Name)
  {
   static int PrevTime =0;
   if(PrevTime==iTime(NULL,0,0)) return(FALSE);
   PrevTime=iTime(NULL,0,0);
   for(int i=1; i<=4; i++)
     {
      ObjectDelete("Text_1 " + Name + i);
      ObjectDelete("Text_2 " + Name + i);
      ObjectDelete("Text_3 " + Name + i);
     }
   return(TRUE);
  }
  
//+------------------------------------------------------------------+

void RangeGraphic(string Name, color Color)
  {
   datetime Time_1 = iTime(Symbol(), Period(), Bars);
   datetime Time_2 = iTime(Symbol(), Period(), 0) + TimeCurrent();
   double Price_1 = 1;
   double Price_2 = 4;
   
   ObjectCreate(Name, OBJ_RECTANGLE, WindowFind(WindowExpertName()), Time_1, Price_1, Time_2, Price_2);
   
   ObjectSet(Name, OBJPROP_COLOR, Color);
  }
  
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---