Author: Copyright � 2010, �������� �������
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
EMMA
//+------------------------------------------------------------------+
//|                                                         EMMA.mq4 |
//|                                  Extremums Market Moving Average |
//|                               Copyright © 2010, Àíàòîëèé Ñåðãååâ |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Àíàòîëèé Ñåðãååâ"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
extern double EMMA_Deviation_in_Percent = 0.1;       //Ôèëüòðàöèÿ èçãèáîâ ñêîëüçÿùåãî ñðåäíåãî, îòêëîíåíèå â ïðîöåíòàõ.
//+------------------------------------------------------------------+
extern int EMMA_Mode = 0;     //Ðåæèì ðàáîòû èíäèêàòîðà
                              //PRICE_CLOSE    0   Ïî öåíàì çàêðûòèÿ
                              //PRICE_HIGH/LOW 1   Ïî öåíàì ìàêñ./ìèí.
//+------------------------------------------------------------------+
extern bool EMMA_Redraw = true;    //ÂÊË./ÂÛÊË. ïåðåðèñîâêè
//+------------------------------------------------------------------+
extern int MA_Period = 18;    //Ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî.
//+------------------------------------------------------------------+
extern int MA_Method = 0;     //Ìåòîä óñðåäíåíèÿ ñêîëüçÿùåãî ñðåäíåãî. Ìîæåò áûòü ëþáûì èç çíà÷åíèé ìåòîäîâ ñêîëüçÿùåãî ñðåäíåãî (Moving Average):
                              /*MODE_SMA       0   Ïðîñòîå ñêîëüçÿùåå ñðåäíåå 
                                MODE_EMA       1   Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå 
                                MODE_SMMA      2   Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå 
                                MODE_LWMA      3   Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå */           
//+------------------------------------------------------------------+
extern int MA_Applied_Price = 0; //Èñïîëüçóåìàÿ öåíà ñêîëüçÿùåãî ñðåäíåãî. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò:
                              /*PRICE_CLOSE    0   Öåíà çàêðûòèÿ 
                                PRICE_OPEN     1   Öåíà îòêðûòèÿ 
                                PRICE_HIGH     2   Ìàêñèìàëüíàÿ öåíà 
                                PRICE_LOW      3   Ìèíèìàëüíàÿ öåíà 
                                PRICE_MEDIAN   4   Ñðåäíÿÿ öåíà, (high+low)/2 
                                PRICE_TYPICAL  5   Òèïè÷íàÿ öåíà, (high+low+close)/3 
                                PRICE_WEIGHTED 6   Âçâåøåííàÿ öåíà çàêðûòèÿ, (high+low+close+close)/4 */
//+------------------------------------------------------------------+
extern int Maximum_History = 500;         //Îãðàíè÷åíèå èñòîðèè äëÿ ðàñ÷åòîâ, åñëè 0 òî ðàñ÷åò âñåé èñòîðèè
//+------------------------------------------------------------------+
extern bool Manager_Murrey = false;       //Ìåíåäæåð èíäèêàòîðà Murrey_Math_Line v2
//+------------------------------------------------------------------+
extern bool Signal = false;               //ÂÊË./ÂÛÊË. îïîâåùåíèÿ àëåðò
//+------------------------------------------------------------------+
extern bool Fibo = false;                 //ÂÊË./ÂÛÊË. Óðîâíè Ôèáîíà÷÷è.
//+------------------------------------------------------------------+
extern bool Fibo_Fan = false;             //ÂÊË./ÂÛÊË. Âååð Ôèáîíà÷÷è.
//+------------------------------------------------------------------+
extern bool Regression_Channel = false;   //ÂÊË./ÂÛÊË. Êàíàë ëèíåéíîé ðåãðåññèè.
//+------------------------------------------------------------------+
extern bool StdDevChennel = false;        //ÂÊË./ÂÛÊË. Êàíàë ñòàíäàðòíûõ îòêëîíåíèé.
//+------------------------------------------------------------------+
extern bool TrafficLight = false;
//+------------------------------------------------------------------+
extern string TrafficLight_initialization = "|0/3-Red|1/3-Yellow|2/3-LawnGreen|";
//+------------------------------------------------------------------+
extern int TrafficLight_width_line = 2;
//+------------------------------------------------------------------+
double EMMABuffer[];                      //Èíäèêàòîðíèé ìàññèâ
double ima;
double save_Price;
datetime home_Time;
int position;
int shift;
int ctrl = -1;
bool flag;
bool flag_history;
string TLDate [][2];
//+------------------------------------------------------------------+
//| EMMA initialization function                                     |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(1);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,EMMABuffer);
   SetIndexEmptyValue(0,0.0);
   IndicatorShortName("EMMA("+DoubleToStr(EMMA_Deviation_in_Percent, 4)+","+MA_Period+")");
   if(MA_Applied_Price > 6 || MA_Applied_Price < 0)MA_Applied_Price = 0;      //
   if(EMMA_Mode > 1 || EMMA_Mode < 0)EMMA_Mode = 0;                           // Áëîê ïðîâåðêè êîððåêòíîñòè ââåäåííûõ ïàðàìåòðîâ
   if(MA_Method > 3 || MA_Method < 0)MA_Method = 0;                           //
   if(MA_Period < 2)MA_Period = 18;                                           //
   EMMA_Deviation_in_Percent /= 100;
   if(TrafficLight && EMMA_Redraw)initTrafficLight();
}
//+------------------------------------------------------------------+
//| EMMA                                                             |
//+------------------------------------------------------------------+
int start(){
   if(Bars-IndicatorCounted()-1 > 1)recount();  //Ïðè "îáíîâëåíèè" èñòîðèè, î÷èñòèòü âñå, è íà÷àòü ïîñòðîåíèå çàíîâî
   if(Maximum_History == 0){                    //Åñëè èñòîðèÿ íå îãðàíè÷åíà 
      shift = Bars-IndicatorCounted()-1;        //Îäíîêðàòíûé ïåðåñ÷åò âñåé | Äàëåå òîëüêî 0 áàð
   }else{                                       //Åñëè îãðàíè÷åíà
      if(!flag_history){
         shift = Maximum_History;               //Îäíîêðàòíûé ïåðåñ÷åò âñåé (îãðàíè÷åííîé)
         home_Time = Time[Maximum_History + 1]; //Åñëè èñòîðèÿ îãðàíè÷åíà, òî çàäàåòñÿ íà÷àëüíàÿ äàòà ïîèñêà
         flag_history = true;
      }else{
         shift = Bars-IndicatorCounted()-1;     //Äàëåå òîëüêî 0 áàð
      }
   }
   for(; shift >= 1; shift--){                  //Öèêë ïî íåïîñ÷èòàííûì áàðàì
      ima = iMA(NULL, 0, MA_Period, 0, MA_Method, MA_Applied_Price, shift);
//+-------------------------------------------------------------------------------------------+
      if(ctrl != 0 && !flag && getTop() != -1){                      //Ïîèñê òî÷êè ïåðåëîìà ïèêà
         save_Price = getTop();
         flag = true;
         ctrl = 0;
      }
      if(ctrl == 0 && flag && ima <= save_Price - save_Price * EMMA_Deviation_in_Percent){ //Ôèëüòðàöèÿ òî÷êè ïåðåëîìà ïèêà
         search(0);                                                  //Ïîèñê ýêñòðåìóìà ïèêà
         flag = false;
         position = 1;           //top
      }
      if(ctrl == 0 && flag && ima >= save_Price){                    //Ñáðîñ ôèëüòðà
         flag = false;
         ctrl = 1;
      }
//+-------------------------------------------------------------------------------------------+
      if(ctrl != 1 && !flag && getBottom() != -1){                   //Ïîèñê òî÷êè ïåðåëîìà âïàäèíû
         save_Price = getBottom();
         flag = true;
         ctrl = 1;
      }
      if(ctrl == 1 && flag && ima >= save_Price + save_Price * EMMA_Deviation_in_Percent){ //Ôèëüòðàöèÿ òî÷êè ïåðåëîìà âïàäèíû
         search(1);                                                  //Ïîèñê ýêñòðåìóìà âïàäèíû
         flag = false;
         position = 2;           //bottom
      }
      if(ctrl == 1 && flag && ima <= save_Price){                    //Ñáðîñ ôèëüòðà
         flag = false;
         ctrl = 0;
      }
//+-------------------------------------------------------------------------------------------+
      reDraw();                  //redraw
   }
      manageMurrey();            //manager
      signal();                  //alert
      fibo();                    //fibonacci
      fiboFan();                 //fibonacci fan
      regressionChannel();       //regression channal
      stdDevChennel();           //standart deviation channal
      trafficLight();            //color indication
}
//+------------------------------------------------------------------+
//| Search extremums                                                 |
//+------------------------------------------------------------------+
void search(int type, bool write = true){
   int searchShift;
   if(type == 0){
      switch(EMMA_Mode){
         case 0:
            searchShift = iHighest(NULL, 0, MODE_CLOSE, iBarShift(NULL, 0, home_Time)-shift, shift);
            EMMABuffer[searchShift] = Close[searchShift];
         break;
         case 1:
            searchShift = iHighest(NULL, 0, MODE_HIGH, iBarShift(NULL, 0, home_Time)-shift, shift);
            EMMABuffer[searchShift] = High[searchShift];
         break;
      }
   }else{
      switch(EMMA_Mode){
         case 0:
            searchShift = iLowest(NULL, 0, MODE_CLOSE, iBarShift(NULL, 0, home_Time)-shift, shift);
            EMMABuffer[searchShift] = Close[searchShift];
         break;
         case 1:
            searchShift = iLowest(NULL, 0, MODE_LOW, iBarShift(NULL, 0, home_Time)-shift, shift);
            EMMABuffer[searchShift] = Low[searchShift];
         break;
      }
   }
   if(write)home_Time = Time[searchShift];
}
//+------------------------------------------------------------------+
//| Search top                                                       |
//+------------------------------------------------------------------+
double getTop(){
   double previous = iMA(NULL, 0, MA_Period, 0, MA_Method, MA_Applied_Price, shift + 1);
   if(ima < previous)return(previous);
   return(-1);
}
//+------------------------------------------------------------------+
//| Search bottom                                                    |
//+------------------------------------------------------------------+
double getBottom(){
   double previous = iMA(NULL, 0, MA_Period, 0, MA_Method, MA_Applied_Price, shift + 1);
   if(ima > previous)return(previous);
   return(-1);
}
//+------------------------------------------------------------------+
//| Manager Murrey                                                   |
//+------------------------------------------------------------------+
void manageMurrey(){
   if(ObjectFind("MML_StartBar") != -1 && Manager_Murrey){
      ObjectSet("MML_StartBar", OBJPROP_TIME1, getTime());
      ObjectSet("MML_StartBar", OBJPROP_PRICE1, getDate());
      WindowRedraw();
   }
}
//+------------------------------------------------------------------+
//| Alert                                                            |
//+------------------------------------------------------------------+
void signal(){
   static double price;
   if(!Signal)return;
   if(position == 1 && price != getDate()){
      if(EMMA_Redraw)Alert(Symbol()," Íîâàÿ âïàäèíà.");else Alert(Symbol()," Íîâûé ïèê.");
   }
   if(position == 2 && price != getDate()){
      if(EMMA_Redraw)Alert(Symbol()," Íîâûé ïèê.");else Alert(Symbol()," Íîâàÿ âïàäèíà.");
   }
   price = getDate();
}
//+------------------------------------------------------------------+
//| Redraw                                                           |
//+------------------------------------------------------------------+
void reDraw(){
   if(!EMMA_Redraw)return;
   if(!iBarShift(NULL, 0, home_Time)-1 > shift)return;
   for(int loop = iBarShift(NULL, 0, home_Time)-1; loop > shift; loop--)EMMABuffer[loop] = 0.0;
   if(position == 2)search(0, false);
   if(position == 1)search(1, false);
}
//+------------------------------------------------------------------+
//| getDate                                                          |
//+------------------------------------------------------------------+
double getDate(bool next = false){
   for(int loop = shift;loop < Bars;loop++){
      if(EMMABuffer[loop] != 0){
         if(next){
            next = false;
            continue;
         }
         return(EMMABuffer[loop]);
      }
   }
}
//+------------------------------------------------------------------+
//| getTime                                                          |
//+------------------------------------------------------------------+
datetime getTime(bool next = false){
   for(int loop = shift;loop < Bars;loop++){
      if(EMMABuffer[loop] != 0){
         if(next){
            next = false;
            continue;
         }
         return(Time[loop]);
      }
   }
}
//+------------------------------------------------------------------+
//| Fibo                                                             |
//+------------------------------------------------------------------+
void fibo(){
   if(!Fibo)return;
   if(ObjectFind("EMMA_FIBO") != -1){
      ObjectSet("EMMA_FIBO", OBJPROP_TIME1, getTime(true));
      ObjectSet("EMMA_FIBO", OBJPROP_PRICE1, getDate(true));
      ObjectSet("EMMA_FIBO", OBJPROP_TIME2, getTime());
      ObjectSet("EMMA_FIBO", OBJPROP_PRICE2, getDate());
      WindowRedraw();
   }else{      
      ObjectCreate("EMMA_FIBO", OBJ_FIBO, 0, getTime(true), getDate(true), getTime(), getDate());
      ObjectSet("EMMA_FIBO", OBJPROP_COLOR, Black);
      ObjectSet("EMMA_FIBO", OBJPROP_LEVELCOLOR, Black);
   }
}
//+------------------------------------------------------------------+
//| Fibo Fan                                                         |
//+------------------------------------------------------------------+
void fiboFan(){
   if(!Fibo_Fan)return;
   if(ObjectFind("EMMA_FIBO_FAN") != -1){
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_TIME1, getTime(true));
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_PRICE1, getDate(true));
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_TIME2, getTime());
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_PRICE2, getDate());
      WindowRedraw();
   }else{      
      ObjectCreate("EMMA_FIBO_FAN", OBJ_FIBOFAN, 0, getTime(true), getDate(true), getTime(), getDate());
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_COLOR, Black);
      ObjectSet("EMMA_FIBO_FAN", OBJPROP_LEVELCOLOR, Black);
   }
}
//+------------------------------------------------------------------+
//| Regression Channel                                               |
//+------------------------------------------------------------------+
void regressionChannel(){
   if(!Regression_Channel)return;
   if(ObjectFind("EMMA_Regression_Channel") != -1){
      ObjectSet("EMMA_Regression_Channel", OBJPROP_TIME1, getTime(true));
      ObjectSet("EMMA_Regression_Channel", OBJPROP_PRICE1, getDate(true));
      ObjectSet("EMMA_Regression_Channel", OBJPROP_TIME2, getTime());
      ObjectSet("EMMA_Regression_Channel", OBJPROP_PRICE2, getDate());
      WindowRedraw();
   }else{      
      ObjectCreate("EMMA_Regression_Channel", OBJ_REGRESSION, 0, getTime(true), getDate(true), getTime(), getDate());
      ObjectSet("EMMA_Regression_Channel", OBJPROP_COLOR, Black);
   }
}
//+------------------------------------------------------------------+
//| Standart Deviation Chennel                                       |
//+------------------------------------------------------------------+
void stdDevChennel(){
   if(!StdDevChennel)return;
   if(ObjectFind("EMMA_StdDevChennel") != -1){
      ObjectSet("EMMA_StdDevChennel", OBJPROP_TIME1, getTime(true));
      ObjectSet("EMMA_StdDevChennel", OBJPROP_PRICE1, getDate(true));
      ObjectSet("EMMA_StdDevChennel", OBJPROP_TIME2, getTime());
      ObjectSet("EMMA_StdDevChennel", OBJPROP_PRICE2, getDate());
      WindowRedraw();
   }else{      
      ObjectCreate("EMMA_StdDevChennel", OBJ_STDDEVCHANNEL, 0, getTime(true), getDate(true), getTime(), getDate());
      ObjectSet("EMMA_StdDevChennel", OBJPROP_COLOR, Black);
   }
}
//+------------------------------------------------------------------+
//| TrafficLight                                                     |
//+------------------------------------------------------------------+
void trafficLight(){
   if(!(TrafficLight && EMMA_Redraw))return;
   if(ObjectFind("EMMA_TrafficLight") != -1){
      ObjectSet("EMMA_TrafficLight", OBJPROP_TIME1, getTime(true));
      ObjectSet("EMMA_TrafficLight", OBJPROP_PRICE1, getDate(true));
      ObjectSet("EMMA_TrafficLight", OBJPROP_TIME2, getTime());
      ObjectSet("EMMA_TrafficLight", OBJPROP_PRICE2, getDate());
      ObjectSet("EMMA_TrafficLight", OBJPROP_COLOR, getTrafficLightColor());
      WindowRedraw();
   }else{
      ObjectCreate("EMMA_TrafficLight", OBJ_TREND, 0, getTime(true), getDate(true), getTime(), getDate());
      ObjectSet("EMMA_TrafficLight", OBJPROP_WIDTH, TrafficLight_width_line);
      ObjectSet("EMMA_TrafficLight", OBJPROP_RAY, false);
   }
}
//+------------------------------------------------------------------+
//| initTrafficLight                                                 |
//+------------------------------------------------------------------+
color initTrafficLight(){
   int start, a, b, c;   
   for(int l = 0; l < StringLen(TrafficLight_initialization); l++){    
      a = StringFind(TrafficLight_initialization, "|", start);
      b = StringFind(TrafficLight_initialization, "/", start);
      c = StringFind(TrafficLight_initialization, "-", start);
      if(c == -1)break;
      ArrayResize(TLDate, l+1);
      TLDate[l][0] = (EMMA_Deviation_in_Percent/StrToInteger(StringSubstr(TrafficLight_initialization, b+1, c-b-1)))*StrToInteger(StringSubstr(TrafficLight_initialization, a+1, b-a-1));
      start = c+1;
      TLDate[l][1] = StringSubstr(TrafficLight_initialization, c+1, StringFind(TrafficLight_initialization, "|", start)-c-1);
   }
}
//+------------------------------------------------------------------+
//| getTrafficLightColor                                             |
//+------------------------------------------------------------------+
color getTrafficLightColor(){
   string colors;      
   if(StrToDouble(TLDate[0][0]) == 0){
      colors = TLDate[0][1];
   }   
   for(int pos = 0; pos < ArraySize(TLDate)/2; pos++){
      if(position == 1){            //search bottom
         if(ima >= save_Price + save_Price * StrToDouble(TLDate[pos][0]))colors = TLDate[pos][1];
      }else{                        //search top
         if(ima <= save_Price - save_Price * StrToDouble(TLDate[pos][0]))colors = TLDate[pos][1];
      }
   }
   return(getColor(colors));
}
//+------------------------------------------------------------------+
//| fStrToColor                                                      |
//+------------------------------------------------------------------+
color getColor(string title){ 
   color arrayColors[] = 
   {  
      Black, DarkGreen, DarkSlateGray, Olive, Green, Teal, Navy, Purple, Maroon, Indigo, MidnightBlue, DarkBlue, DarkOliveGreen, SaddleBrown, 
      ForestGreen, OliveDrab, SeaGreen, DarkGoldenrod, DarkSlateBlue, Sienna, MediumBlue, Brown, DarkTurquoise, DimGray, LightSeaGreen, 
      DarkViolet, FireBrick, MediumVioletRed, MediumSeaGreen, Chocolate, Crimson, SteelBlue, Goldenrod, MediumSpringGreen, LawnGreen, 
      CadetBlue, DarkOrchid, YellowGreen, LimeGreen, OrangeRed, DarkOrange, Orange, Gold, Yellow, Chartreuse, Lime, SpringGreen, Aqua, DeepSkyBlue, 
      Blue, Magenta, Red, Gray, SlateGray, Peru, BlueViolet, LightSlateGray, DeepPink, MediumTurquoise, DodgerBlue, Turquoise, RoyalBlue, SlateBlue, 
      DarkKhaki, IndianRed, MediumOrchid, GreenYellow, MediumAquamarine, DarkSeaGreen, Tomato, RosyBrown, Orchid, MediumPurple, PaleVioletRed, 
      Coral, CornflowerBlue, DarkGray, SandyBrown, MediumSlateBlue, Tan, DarkSalmon, BurlyWood, HotPink, Salmon, Violet, LightCoral, SkyBlue, 
      LightSalmon, Plum, Khaki, LightGreen, Aquamarine, Silver, LightSkyBlue, LightSteelBlue, LightBlue, PaleGreen, Thistle, PowderBlue, PaleGoldenrod, 
      PaleTurquoise, LightGray, Wheat, NavajoWhite, Moccasin, LightPink, Gainsboro, PeachPuff, Pink, Bisque, LightGoldenrod, BlanchedAlmond, 
      LemonChiffon, Beige, AntiqueWhite, PapayaWhip, Cornsilk, LightYellow, LightCyan, Linen, Lavender, MistyRose, OldLace, WhiteSmoke, Seashell, 
      Ivory, Honeydew, AliceBlue, LavenderBlush, MintCream, Snow, White
   };  
   string arrayTitle[] = 
   {   
      "Black", "DarkGreen", "DarkSlateGray", "Olive", "Green", "Teal", "Navy", "Purple", "Maroon", "Indigo", "MidnightBlue", "DarkBlue", "DarkOliveGreen", "SaddleBrown", 
      "ForestGreen", "OliveDrab", "SeaGreen", "DarkGoldenrod", "DarkSlateBlue", "Sienna", "MediumBlue", "Brown", "DarkTurquoise", "DimGray", "LightSeaGreen", 
      "DarkViolet", "FireBrick", "MediumVioletRed", "MediumSeaGreen", "Chocolate", "Crimson", "SteelBlue", "Goldenrod", "MediumSpringGreen", "LawnGreen", 
      "CadetBlue", "DarkOrchid", "YellowGreen", "LimeGreen", "OrangeRed", "DarkOrange", "Orange", "Gold", "Yellow", "Chartreuse", "Lime", "SpringGreen", "Aqua", "DeepSkyBlue", 
      "Blue", "Magenta", "Red", "Gray", "SlateGray", "Peru", "BlueViolet", "LightSlateGray", "DeepPink", "MediumTurquoise", "DodgerBlue", "Turquoise", "RoyalBlue", "SlateBlue", 
      "DarkKhaki", "IndianRed", "MediumOrchid", "GreenYellow", "MediumAquamarine", "DarkSeaGreen", "Tomato", "RosyBrown", "Orchid", "MediumPurple", "PaleVioletRed", 
      "Coral", "CornflowerBlue", "DarkGray", "SandyBrown", "MediumSlateBlue", "Tan", "DarkSalmon", "BurlyWood", "HotPink", "Salmon", "Violet", "LightCoral", "SkyBlue", 
      "LightSalmon", "Plum", "Khaki", "LightGreen", "Aquamarine", "Silver", "LightSkyBlue", "LightSteelBlue", "LightBlue", "PaleGreen", "Thistle", "PowderBlue", "PaleGoldenrod", 
      "PaleTurquoise", "LightGray", "Wheat", "NavajoWhite", "Moccasin", "LightPink", "Gainsboro", "PeachPuff", "Pink", "Bisque", "LightGoldenrod", "BlanchedAlmond", 
      "LemonChiffon", "Beige", "AntiqueWhite", "PapayaWhip", "Cornsilk", "LightYellow", "LightCyan", "Linen", "Lavender", "MistyRose", "OldLace", "WhiteSmoke", "Seashell", 
      "Ivory", "Honeydew", "AliceBlue", "LavenderBlush", "MintCream", "Snow", "White"
   };     
   for(int loop = 0;loop < ArraySize(arrayTitle); loop++)if(title == arrayTitle[loop])return(arrayColors[loop]);
   return(CLR_NONE);
}
//+------------------------------------------------------------------+
//| EMMA Recount                                                     |
//+------------------------------------------------------------------+
void recount(){
   ArrayInitialize(EMMABuffer,0.0);
   flag_history = false;
   flag = false;
   ctrl = -1;
   save_Price = 0;
   ima = 0;
   home_Time = 0;
   position = 0;
   shift = 0;
}
//+------------------------------------------------------------------+
//| EMMA deinitialization function                                   |
//+------------------------------------------------------------------+
int deinit(){
   if(ObjectFind("EMMA_FIBO") != -1)ObjectDelete("EMMA_FIBO");
   if(ObjectFind("EMMA_FIBO_FAN") != -1)ObjectDelete("EMMA_FIBO_FAN");
   if(ObjectFind("EMMA_Regression_Channel") != -1)ObjectDelete("EMMA_Regression_Channel"); 
   if(ObjectFind("EMMA_StdDevChennel") != -1)ObjectDelete("EMMA_StdDevChennel");   
   if(ObjectFind("EMMA_TrafficLight") != -1)ObjectDelete("EMMA_TrafficLight");   
}
//+------------------------------------------------------------------+

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