/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2009, 4X Pip Snager."
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime

int gi_76 = 10;
int gi_80 = 0;
int gi_84 = 1;
double g_ibuf_88[];
int gi_92 = 0;

int init() {
   string ls_4;
   SetIndexStyle(0, DRAW_LINE);
   SetIndexShift(0, gi_80);
   IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
   if (gi_76 < 2) gi_76 = 13;
   int li_0 = gi_76 - 1;
   switch (gi_84) {
   case 1:
      ls_4 = "EMA(";
      li_0 = 0;
      break;
   case 2:
      ls_4 = "SMMA(";
      break;
   case 3:
      ls_4 = "LWMA(";
      break;
   default:
      gi_84 = FALSE;
      ls_4 = "SMA(";
   }
   IndicatorShortName(ls_4 + gi_76 + ")");
   SetIndexDrawBegin(0, li_0);
   SetIndexBuffer(0, g_ibuf_88);
   return (0);
}

int start() {
   if (Bars <= gi_76) return (0);
   gi_92 = IndicatorCounted();
   if (gi_92 < 0) return (-1);
   if (gi_92 > 0) gi_92--;
   switch (gi_84) {
   case 0:
      sma();
      break;
   case 1:
      ema();
      break;
   case 2:
      smma();
      break;
   case 3:
      lwma();
   }
   return (0);
}

void sma() {
   double ld_0 = 0;
   int li_12 = Bars - gi_92 - 1;
   if (li_12 < gi_76) li_12 = gi_76;
   int li_8 = 1;
   while (li_8 < gi_76) {
      ld_0 += Close[li_12];
      li_8++;
      li_12--;
   }
   while (li_12 >= 0) {
      ld_0 += Close[li_12];
      g_ibuf_88[li_12] = ld_0 / gi_76;
      ld_0 -= Close[li_12 + gi_76 - 1];
      li_12--;
   }
   if (gi_92 < 1) for (li_8 = 1; li_8 < gi_76; li_8++) g_ibuf_88[Bars - li_8] = 0;
}

void ema() {
   double ld_0 = 2.0 / (gi_76 + 1);
   int li_8 = Bars - 2;
   if (gi_92 > 2) li_8 = Bars - gi_92 - 1;
   while (li_8 >= 0) {
      if (li_8 == Bars - 2) g_ibuf_88[li_8 + 1] = Close[li_8 + 1];
      g_ibuf_88[li_8] = Close[li_8] * ld_0 + (g_ibuf_88[li_8 + 1]) * (1 - ld_0);
      li_8--;
   }
}

void smma() {
   int l_count_8;
   double ld_0 = 0;
   int li_16 = Bars - gi_92 + 1;
   li_16 = Bars - gi_76;
   if (li_16 > Bars - gi_92) li_16 = Bars - gi_92;
   while (li_16 >= 0) {
      if (li_16 == Bars - gi_76) {
         l_count_8 = 0;
         for (int li_12 = li_16; l_count_8 < gi_76; li_12++) {
            ld_0 += Close[li_12];
            g_ibuf_88[li_12] = 0;
            l_count_8++;
         }
      } else ld_0 = (g_ibuf_88[li_16 + 1]) * (gi_76 - 1) + Close[li_16];
      g_ibuf_88[li_16] = ld_0 / gi_76;
      li_16--;
   }
}

void lwma() {
   double l_close_16;
   double ld_0 = 0.0;
   double ld_8 = 0.0;
   int li_28 = 0;
   int li_32 = Bars - gi_92 - 1;
   if (li_32 < gi_76) li_32 = gi_76;
   int li_24 = 1;
   while (li_24 <= gi_76) {
      l_close_16 = Close[li_32];
      ld_0 += l_close_16 * li_24;
      ld_8 += l_close_16;
      li_28 += li_24;
      li_24++;
      li_32--;
   }
   li_32++;
   li_24 = li_32 + gi_76;
   while (li_32 >= 0) {
      g_ibuf_88[li_32] = ld_0 / li_28;
      if (li_32 == 0) break;
      li_32--;
      li_24--;
      l_close_16 = Close[li_32];
      ld_0 = ld_0 - ld_8 + l_close_16 * gi_76;
      ld_8 -= Close[li_24];
      ld_8 += l_close_16;
   }
   if (gi_92 < 1) for (li_24 = 1; li_24 < gi_76; li_24++) g_ibuf_88[Bars - li_24] = 0;
}
