#property copyright "Copyright 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window

extern int MA1 = 30;
extern int MA1Type = 0;
extern int MA1Price = 0;
extern int MA2 = 50;
extern int MA2Type = 0;
extern int MA2Price = 0;
extern int MA3 = 100;
extern int MA3Type = 0;
extern int MA3Price = 0;
extern int TrendThreshold = 20;
int g_corner_116 = 0;
int gi_120 = 0;
extern string TF = "yyyyyy";
extern string TA = "yyyyyn";
string gsa_140[6] = {"MN1", "W1", "D1", "H4", "H1", "M15"};
string gsa_144[6] = {"MN1B", "W1B", "D1B", "H4B", "H1B", "M15B"};
int gia_148[6] = {43200, 10080, 1440, 240, 60, 15};
extern bool AlertMAX = FALSE;
extern bool EmailMAX = FALSE;
extern bool AlertPullback = TRUE;
extern bool EmailPullback = FALSE;
bool gi_168 = FALSE;
int gia_172[6];

int init() {
   ArrayInitialize(gia_172, 0);
   Comment("MA", MA3, " ", MA2, " ", MA1);
   return (0);
}

int deinit() {
   for (int l_index_0 = 0; l_index_0 <= 6; l_index_0++) {
      if (StringLen(gsa_140[l_index_0]) > 0)
         if (ObjectFind(gsa_140[l_index_0]) >= 0) ObjectDelete(gsa_140[l_index_0]);
      if (StringLen(gsa_144[l_index_0]) > 0)
         if (ObjectFind(gsa_144[l_index_0]) >= 0) ObjectDelete(gsa_144[l_index_0]);
   }
   Comment("");
   return (0);
}

int start() {
   color l_color_28;
   color l_color_44;
   double lda_124[2][6];
   int l_timeframe_148;
   double l_ima_156;
   double l_ima_164;
   double l_ima_172;
   double l_ima_180;
   double l_ima_188;
   double l_ima_196;
   double l_ima_204;
   double l_ima_212;
   double l_ima_220;
   double l_iclose_228;
   bool li_236;
   int li_240;
   string lsa_0[6] = {"M", "W", "D", "H4", "H", "15"};
   int lia_4[6] = {26, 26, 26, 26, 26, 26};
   int lia_8[6] = {16, 16, 16, 16, 16, 16};
   int lia_12[6] = {10, 33, 57, 76, 100, 122};
   int lia_16[6] = {4, 27, 51, 72, 94, 116};
   int li_20 = 255;
   int li_24 = 3329330;
   int li_32 = 42495;
   int li_36 = 65535;
   int li_40 = 10526303;
   int li_48 = 16777215;
   int li_52 = 65535;
   int li_56 = 65280;
   int li_60 = 42495;
   int li_64 = 255;
   double l_iatr_68 = iATR(NULL, PERIOD_D1, 21, 0);
   double ld_76 = Ask - Bid;
   double ld_unused_84 = 0;
   double ld_unused_92 = 0;
   double l_close_100 = Close[0];
   double ld_unused_108 = 0;
   double ld_unused_116 = 0;
   double ld_unused_128 = 0;
   double ld_unused_136 = 0;
   if (gi_120 >= 1 && gi_120 <= 5) li_236 = gi_120;
   else li_236 = FALSE;
   for (int li_144 = li_236; li_144 <= 5; li_144++) {
      if (NewBar(li_144) && StringSubstr(TF, li_144, 1) == "y") {
         l_timeframe_148 = gia_148[li_144];
         l_ima_180 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, 0);
         l_ima_188 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, 0);
         l_ima_196 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, 0);
         if (gi_168) Print(Symbol(), " 3MA Values ", gsa_140[li_144], " price:", l_close_100, ", MA", MA1, ":", l_ima_180, ", MA", MA2, ":", l_ima_188, ", MA", MA3, ":", l_ima_196);
         l_ima_172 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, 1);
         l_ima_164 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, 1);
         l_ima_156 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, 1);
         l_color_28 = Silver;
         l_color_44 = li_40;
         if (l_ima_188 > l_ima_196) {
            if (l_ima_180 > l_ima_188 && l_close_100 > l_ima_196) {
               l_color_28 = li_24;
               li_240 = 1;
               l_ima_204 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, li_240);
               l_ima_212 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, li_240);
               l_ima_220 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, li_240);
               l_iclose_228 = iClose(NULL, l_timeframe_148, li_240);
               while (l_ima_204 > l_ima_212 && l_ima_212 > l_ima_220 && l_iclose_228 > l_ima_212) {
                  l_ima_204 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, li_240);
                  l_ima_212 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, li_240);
                  l_ima_220 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, li_240);
                  l_iclose_228 = iClose(NULL, l_timeframe_148, li_240);
                  li_240++;
               }
               if (gi_168) Print(Symbol(), l_timeframe_148, " trend for ", li_240);
               if (li_240 > TrendThreshold) {
                  if (iLow(NULL, l_timeframe_148, 1) < l_ima_180) {
                     if (iClose(NULL, l_timeframe_148, 1) > iOpen(NULL, l_timeframe_148, 1) || iClose(NULL, l_timeframe_148, 1) > l_ima_180) {
                        l_color_44 = li_56;
                        if (StringSubstr(TA, li_144, 1) == "y") Comment("MA", MA3, " ", MA2, " ", MA1, " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Long @ ", l_close_100);
                        if (AlertPullback && StringSubstr(TA, li_144, 1) == "y") Alert(Symbol(), " 3MA Pullback Alert: ", " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Long ", l_close_100);
                        if (EmailPullback && StringSubstr(TA, li_144, 1) == "y") Alert(StringConcatenate(Symbol(), " 3MA Pullback Alert: ", " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Long"), StringConcatenate(Symbol(), " 3MA Pullback Alert: ", gsa_140[li_144], " Long ", l_close_100));
                     } else l_color_44 = li_52;
                  } else l_color_44 = li_48;
               }
            } else l_color_28 = li_36;
         } else {
            if (l_ima_180 < l_ima_188 && l_close_100 < l_ima_196) {
               l_color_28 = li_20;
               li_240 = 1;
               l_ima_204 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, li_240);
               l_ima_212 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, li_240);
               l_ima_220 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, li_240);
               l_iclose_228 = iClose(NULL, l_timeframe_148, li_240);
               while (l_ima_204 < l_ima_212 && l_ima_212 < l_ima_220 && l_iclose_228 < l_ima_212) {
                  l_ima_204 = iMA(NULL, l_timeframe_148, MA1, 0, MA1Type, MA1Price, li_240);
                  l_ima_212 = iMA(NULL, l_timeframe_148, MA2, 0, MA2Type, MA1Price, li_240);
                  l_ima_220 = iMA(NULL, l_timeframe_148, MA3, 0, MA3Type, MA1Price, li_240);
                  l_iclose_228 = iClose(NULL, l_timeframe_148, li_240);
                  li_240++;
               }
               if (li_240 > TrendThreshold) {
                  if (iHigh(NULL, l_timeframe_148, 1) > l_ima_180) {
                     if (iClose(NULL, l_timeframe_148, 1) < iOpen(NULL, l_timeframe_148, 1) || iClose(NULL, l_timeframe_148, 1) < l_ima_180) {
                        l_color_44 = li_64;
                        if (StringSubstr(TA, li_144, 1) == "y") Comment("MA", MA3, " ", MA2, " ", MA1, " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Short @ ", l_close_100);
                        if (AlertPullback && StringSubstr(TA, li_144, 1) == "y") Alert(Symbol(), " 3MA Pullback Alert: ", " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Short ", l_close_100);
                        if (EmailPullback && StringSubstr(TA, li_144, 1) == "y") Alert(StringConcatenate(Symbol(), " 3MA Pullback Alert: ", gsa_140[li_144], " Short"), StringConcatenate(Symbol(), " 3MA Pullback Alert: ", " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), " ", gsa_140[li_144], " Short ", l_close_100));
                     } else l_color_44 = li_60;
                  } else l_color_44 = li_48;
               }
            } else l_color_28 = li_32;
         }
         ObjectCreate(gsa_140[li_144], OBJ_LABEL, 0, 0, 0);
         ObjectSetText(gsa_140[li_144], lsa_0[li_144], 7, "Arial Bold", l_color_44);
         ObjectSet(gsa_140[li_144], OBJPROP_CORNER, g_corner_116);
         ObjectSet(gsa_140[li_144], OBJPROP_XDISTANCE, lia_12[li_144]);
         ObjectSet(gsa_140[li_144], OBJPROP_YDISTANCE, lia_4[li_144]);
         ObjectCreate(gsa_144[li_144], OBJ_LABEL, 0, 0, 0);
         ObjectSetText(gsa_144[li_144], "O", 20, "Arial", l_color_28);
         ObjectSet(gsa_144[li_144], OBJPROP_CORNER, g_corner_116);
         ObjectSet(gsa_144[li_144], OBJPROP_XDISTANCE, lia_16[li_144]);
         ObjectSet(gsa_144[li_144], OBJPROP_YDISTANCE, lia_8[li_144]);
         if (l_ima_180 > l_ima_188 && l_ima_188 > l_ima_196 && !(l_ima_172 > l_ima_164 && l_ima_164 > l_ima_156)) {
            if (AlertMAX && StringSubstr(TA, li_144, 1) == "y") Alert(Symbol(), " MA X Long ", gsa_140[li_144], " price:", l_close_100, ", MA", MA1, ":", l_ima_180, ", MA", MA2, ":", l_ima_188, ", MA", MA3, ":", l_ima_196);
            if (EmailMAX && StringSubstr(TA, li_144, 1) == "y") SendMail(StringConcatenate(Symbol(), " MA X Long ", gsa_140[li_144]), StringConcatenate(Symbol(), " MA cross Long ", gsa_140[li_144], " price:", l_close_100, ", MA", MA1, ":", l_ima_180, ", MA", MA2, ":", l_ima_188, ", MA", MA3, ":", l_ima_196));
         }
         if (l_ima_180 < l_ima_188 && l_ima_188 < l_ima_196 && !(l_ima_172 < l_ima_164 && l_ima_164 < l_ima_156)) {
            if (AlertMAX && StringSubstr(TA, li_144, 1) == "y") Alert(Symbol(), " MA X Short ", gsa_140[li_144], " price:", l_close_100, ", MA", MA1, ":", l_ima_180, ", MA", MA2, ":", l_ima_188, ", MA", MA3, ":", l_ima_196);
            if (EmailMAX && StringSubstr(TA, li_144, 1) == "y") SendMail(StringConcatenate(Symbol(), " MA X Short ", gsa_140[li_144]), StringConcatenate(Symbol(), " MA cross Short ", gsa_140[li_144], " price:", l_close_100, ", MA", MA1, ":", l_ima_180, ", MA", MA2, ":", l_ima_188, ", MA", MA3, ":", l_ima_196));
         }
      }
   }
   return (0);
}

int NewBar(int ai_0) {
   if (iTime(Symbol(), gia_148[ai_0], 0) != gia_172[ai_0]) {
      gia_172[ai_0] = iTime(Symbol(), gia_148[ai_0], 0);
      return (1);
   }
   return (0);
}