#property copyright "Scalper_MA"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 MediumBlue
#property indicator_color3 Red
#property indicator_color4 MediumBlue
#property indicator_color5 Blue
#property indicator_color6 Red

extern int MaMetod = 3;
extern int MaPeriod = 80;
extern bool Signal = TRUE;
extern bool Mail = TRUE;
extern int Step = 5;
extern color Bars_ColorUP = Red;
extern color Bars_ColorDOWN = MediumBlue;
double g_ibuf104[];
double g_ibuf108[];
double g_ibuf112[];
double g_ibuf116[];
double g_ibuf120[];
double g_ibuf124[];
double gd_128;
string gs_null136 = "NULL";
string gs_null144 = "NULL";
int gi_152 = 0;

int init() {
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Bars_ColorUP);
   SetIndexBuffer(0, g_ibuf104);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, Bars_ColorDOWN);
   SetIndexBuffer(1, g_ibuf108);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Bars_ColorUP);
   SetIndexBuffer(2, g_ibuf112);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, Bars_ColorDOWN);
   SetIndexBuffer(3, g_ibuf116);
   SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexBuffer(4, g_ibuf120);
   SetIndexArrow(4, 233);
   SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexBuffer(5, g_ibuf124);
   SetIndexArrow(5, 234);
   SetIndexDrawBegin(0, 5);
   SetIndexBuffer(0, g_ibuf104);
   SetIndexBuffer(1, g_ibuf108);
   SetIndexBuffer(2, g_ibuf112);
   SetIndexBuffer(3, g_ibuf116);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   double l_ima0;
   double l_ima8;
   double l_ima16;
   double l_ima24;
   double l_ima32;
   double l_ima40;
   double ld_48;
   double ld_56;
   double ld_64;
   double ld_72;
   if (Bars <= 10) return (0);
   gi_152 = IndicatorCounted();
   if (gi_152 < 0) return (-1);
   if (gi_152 > 0) gi_152--;
   for (int li_96 = Bars - gi_152 - 1; li_96 >= 0; li_96--) {
      l_ima0 = iMA(NULL, 0, MaPeriod, 0, MaMetod, PRICE_CLOSE, li_96);
      l_ima8 = iMA(NULL, 0, MaPeriod, 0, MaMetod, PRICE_LOW, li_96);
      l_ima16 = iMA(NULL, 0, MaPeriod, 0, MaMetod, PRICE_OPEN, li_96);
      l_ima24 = iMA(NULL, 0, MaPeriod, 0, MaMetod, PRICE_HIGH, li_96);
      ld_48 = (g_ibuf112[li_96 + 1] + (g_ibuf116[li_96 + 1])) / 2.0;
      ld_72 = (l_ima0 + l_ima24 + l_ima16 + l_ima8) / 4.0;
      ld_56 = MathMax(l_ima24, MathMax(ld_48, ld_72));
      ld_64 = MathMin(l_ima16, MathMin(ld_48, ld_72));
      l_ima32 = iMA(NULL, 0, 30, 1, MODE_SMA, PRICE_LOW, li_96);
      l_ima40 = iMA(NULL, 0, 30, 1, MODE_SMA, PRICE_LOW, li_96 - 1);
      if (ld_48 < ld_72) {
         g_ibuf104[li_96] = ld_64;
         if (g_ibuf104[li_96] < g_ibuf108[li_96] && g_ibuf104[li_96 + 1] < g_ibuf108[li_96 + 1] && g_ibuf104[li_96 + 2] > g_ibuf108[li_96 + 2]) {
            if (iMA(Symbol(), Period(), 40, 0, MODE_EMA, PRICE_CLOSE, li_96) < iMA(Symbol(), Period(), 60, 0, MODE_EMA, PRICE_CLOSE, li_96)) g_ibuf120[li_96] = ld_64 - 5.0 * Point;
            if (li_96 == 0) gs_null136 = "BUY";
         }
         g_ibuf108[li_96] = ld_56;
      } else {
         g_ibuf104[li_96] = ld_56;
         g_ibuf108[li_96] = ld_64;
         if (g_ibuf104[li_96] > g_ibuf108[li_96] && g_ibuf104[li_96 + 1] > g_ibuf108[li_96 + 1] && g_ibuf104[li_96 + 2] < g_ibuf108[li_96 + 2]) {
            if (iMA(Symbol(), Period(), 40, 0, MODE_EMA, PRICE_CLOSE, li_96) > iMA(Symbol(), Period(), 60, 0, MODE_EMA, PRICE_CLOSE, li_96)) g_ibuf124[li_96] = ld_64 + 5.0 * Point;
            if (li_96 == 0) gs_null136 = "SELL";
         }
      }
      g_ibuf112[li_96] = ld_48;
      g_ibuf116[li_96] = ld_72;
   }
   if (gs_null144 != gs_null136) {
      gs_null144 = gs_null136;
      if (gs_null136 == "BUY") gd_128 = NormalizeDouble(Step * Point + Ask, 4);
      if (gs_null136 == "SELL") gd_128 = NormalizeDouble(Step * Point + Bid, 4);
      if (Signal == TRUE) {
         Alert("Поступил новый сигнал: " + gs_null136 
            + "\n" 
            + "Дата: " + TimeDay(TimeLocal()) + "." + TimeMonth(TimeLocal()) + "." + TimeYear(TimeLocal()) 
            + "\n" 
            + "Валютная пара: " + Symbol() 
            + "\n" 
            + "Таймфрейм: " + Period() 
            + "\n" 
         + "Цена открытия: " + gd_128);
      }
      if (Mail == TRUE) {
         SendMail("Новый сигнал STS", "Поступил новый сигнал: " + gs_null136 
            + "\n" 
            + "Дата: " + TimeDay(TimeLocal()) + "." + TimeMonth(TimeLocal()) + "." + TimeYear(TimeLocal()) 
            + "\n" 
            + "Валютная пара: " + Symbol() 
            + "\n" 
            + "Таймфрейм: " + Period() 
            + "\n" 
         + "Цена открытия: " + gd_128);
         Print(GetLastError());
      }
   }
   return (0);
}