
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Blue
#property indicator_color4 Yellow

extern bool Alerts = TRUE;
extern bool Tunnel_Alerts = FALSE;
extern bool Email_Alerts = FALSE;
double G_ibuf_88[];
double G_ibuf_92[];
double G_ibuf_96[];
double G_ibuf_100[];
bool Gi_104 = FALSE;
bool Gi_108 = FALSE;
bool Gi_unused_112 = FALSE;
extern int FasterLWMA = 2;
extern int SlowerLWMA = 8;
extern int FasterSidusEMA = 18;
extern int SlowerSidusEMA = 28;
bool Gi_132 = FALSE;
bool Gi_136 = FALSE;

int init() {
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, SYMBOL_ARROWUP);
   SetIndexBuffer(0, G_ibuf_88);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, SYMBOL_ARROWDOWN);
   SetIndexBuffer(1, G_ibuf_92);
   SetIndexStyle(2, DRAW_ARROW, EMPTY);
   SetIndexArrow(2, 167);
   SetIndexBuffer(2, G_ibuf_96);
   SetIndexStyle(3, DRAW_ARROW, EMPTY);
   SetIndexArrow(3, 167);
   SetIndexBuffer(3, G_ibuf_100);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int Li_8;
   double irsi_12;
   double irsi_20;
   double icci_28;
   double ima_36;
   double ima_44;
   double ima_52;
   double ima_60;
   double ima_68;
   double ima_76;
   double ima_84;
   double ima_92;
   double ima_100;
   double ima_108;
   double ima_116;
   double ima_124;
   double Ld_132;
   double Ld_140;
   int Li_148 = IndicatorCounted();
   if (Li_148 < 0) return (-1);
   if (Li_148 > 0) Li_148--;
   int Li_0 = Bars - Li_148;
   for (int Li_4 = 0; Li_4 <= Li_0; Li_4++) {
      Li_8 = Li_4;
      Ld_132 = 0;
      Ld_140 = 0;
      for (Li_8 = Li_4; Li_8 <= Li_4 + 9; Li_8++) Ld_140 += MathAbs(High[Li_8] - Low[Li_8]);
      Ld_132 = Ld_140 / 10.0;
      ima_36 = iMA(NULL, 0, FasterLWMA, 0, MODE_LWMA, PRICE_CLOSE, Li_4);
      ima_52 = iMA(NULL, 0, FasterLWMA, 0, MODE_LWMA, PRICE_CLOSE, Li_4 + 1);
      ima_68 = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, Li_4 - 1);
      ima_44 = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, Li_4);
      ima_60 = iMA(NULL, 0, SlowerLWMA, 0, MODE_LWMA, PRICE_CLOSE, Li_4 + 1);
      ima_76 = iMA(NULL, 0, SlowerLWMA, 0, FasterLWMA, PRICE_CLOSE, Li_4 - 1);
      ima_84 = iMA(NULL, 0, FasterSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4);
      ima_92 = iMA(NULL, 0, FasterSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4 + 1);
      ima_100 = iMA(NULL, 0, FasterSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4 - 1);
      ima_108 = iMA(NULL, 0, SlowerSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4);
      ima_116 = iMA(NULL, 0, SlowerSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4 + 1);
      ima_124 = iMA(NULL, 0, SlowerSidusEMA, 0, MODE_EMA, PRICE_CLOSE, Li_4 - 1);
      irsi_12 = iRSI(NULL, 0, 21, PRICE_CLOSE, Li_4);
      irsi_20 = iRSI(NULL, 0, 21, PRICE_CLOSE, Li_4 + 1);
      icci_28 = iCCI(NULL, 0, 50, PRICE_CLOSE, Li_4);
      if (ima_84 > ima_108 && ima_92 <= ima_116 && ima_100 > ima_124) {
         Gi_108 = TRUE;
         Gi_104 = FALSE;
         G_ibuf_96[Li_4] = Low[Li_4] - 1.0 * Ld_132;
         if (Li_4 <= 2 && Alerts && (!Gi_132) && Tunnel_Alerts) {
            Gi_132 = TRUE;
            Gi_136 = FALSE;
            Alert(Symbol(), " ", Period(), "M  Sidus Tunnel UP ");
            if (Email_Alerts) SendMail("Sidus Tunnel UP " + Symbol(), "");
         }
      }
      if (ima_84 < ima_108 && ima_92 >= ima_116 && ima_100 < ima_124) {
         Gi_104 = TRUE;
         Gi_108 = FALSE;
         G_ibuf_100[Li_4] = High[Li_4] + 1.2 * Ld_132;
         if (Li_4 <= 2 && Alerts && (!Gi_136) && Tunnel_Alerts) {
            Gi_132 = FALSE;
            Gi_136 = TRUE;
            Alert(Symbol(), " ", Period(), "M  Sidus Tunnel DOWN ");
            if (Email_Alerts) SendMail("Sidus Tunnel DOWN " + Symbol(), "");
         }
      }
      if ((ima_36 > ima_84 && ima_36 > ima_108) || (ima_44 > ima_84 && ima_44 > ima_108) && ima_52 <= ima_92 || ima_52 <= ima_116 && ima_60 <= ima_92 || ima_60 <= ima_116 &&
         Gi_108) {
         Gi_108 = FALSE;
         Gi_104 = FALSE;
         Gi_unused_112 = TRUE;
         G_ibuf_88[Li_4] = Low[Li_4] - 1.6 * Ld_132;
         if (Li_4 <= 2 && Alerts && (!Gi_132)) {
            Alert(Symbol(), " ", Period(), "M  Sidus BUY ");
            if (Email_Alerts) SendMail("Sidus BUY " + Symbol(), "");
            Gi_132 = TRUE;
            Gi_136 = FALSE;
         }
      }
      if ((ima_36 < ima_84 && ima_36 < ima_108) || (ima_44 < ima_84 && ima_44 < ima_108) && ima_52 >= ima_92 || ima_52 >= ima_116 && ima_60 >= ima_92 || ima_60 >= ima_116 &&
         Gi_104) {
         Gi_108 = FALSE;
         Gi_104 = FALSE;
         Gi_unused_112 = TRUE;
         G_ibuf_92[Li_4] = High[Li_4] + 1.2 * Ld_132;
         if (Li_4 <= 2 && Alerts && (!Gi_136)) {
            Alert(Symbol(), " ", Period(), "M  Sidus SELL ");
            if (Email_Alerts) SendMail("Sidus SELL " + Symbol(), "");
            Gi_136 = TRUE;
            Gi_132 = FALSE;
         }
      }
   }
   return (0);
}
