/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2008, SEFC"
#property link      "http://www.forexsefc.net63.net/"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Lime
#property indicator_color3 Red

extern string SEFCMA = "-** Tipe Harga **-";
extern string tipe0 = " 0 = close";
extern string tipe1 = " 1 = open";
extern string tipe2 = " 2 = high";
extern string tipe3 = " 3 = low";
extern string tipe4 = " 4 = median(high+low)/2";
extern string tipe5 = " 5 = typical(high+low+close)/3";
extern string tipe6 = " 6 = weighted(high+low+close+close)/4";
extern int Tipe_MA = 3;
double g_ibuf_144[];
double g_ibuf_148[];
double g_ibuf_152[];
int g_ma_method_156;
string gs_160;

int init() {
   IndicatorBuffers(3);
   SetIndexBuffer(2, g_ibuf_144);
   SetIndexBuffer(1, g_ibuf_148);
   SetIndexBuffer(0, g_ibuf_152);
   SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   switch (3) {
   case 1:
      gs_160 = "EMA";
      g_ma_method_156 = 1;
      break;
   case 2:
      gs_160 = "SMMA";
      g_ma_method_156 = 2;
      break;
   case 3:
      gs_160 = "LWMA";
      g_ma_method_156 = 3;
      break;
   case 4:
      gs_160 = "LSMA";
      break;
   default:
      gs_160 = "SMA";
      g_ma_method_156 = 0;
   }
   IndicatorShortName(gs_160 + " (" + 8 + ") ");
   return (0);
}

double LSMA(int a_timeframe_0, int ai_4, int ai_8, int ai_12) {
   int li_20;
   double ld_32;
   double ld_44;
   double ld_52;
   int li_40 = ai_4;
   double ld_24 = 0;
   for (int li_16 = li_40; li_16 >= 1; li_16--) {
      ld_44 = li_40 + 1;
      ld_44 /= 3.0;
      ld_52 = 0;
      li_20 = li_40 - li_16 + ai_12;
      switch (ai_8) {
      case 0:
         ld_32 = iClose(NULL, a_timeframe_0, li_20);
         break;
      case 1:
         ld_32 = iOpen(NULL, a_timeframe_0, li_20);
         break;
      case 2:
         ld_32 = iHigh(NULL, a_timeframe_0, li_20);
         break;
      case 3:
         ld_32 = iLow(NULL, a_timeframe_0, li_20);
         break;
      case 4:
         ld_32 = (iHigh(NULL, a_timeframe_0, li_20) + iLow(NULL, a_timeframe_0, li_20)) / 2.0;
         break;
      case 5:
         ld_32 = (iHigh(NULL, a_timeframe_0, li_20) + iLow(NULL, a_timeframe_0, li_20) + iClose(NULL, a_timeframe_0, li_20)) / 3.0;
         break;
      case 6:
         ld_32 = (iHigh(NULL, a_timeframe_0, li_20) + iLow(NULL, a_timeframe_0, li_20) + iClose(NULL, a_timeframe_0, li_20) + iClose(NULL, a_timeframe_0, li_20)) / 4.0;
      }
      ld_52 = (li_16 - ld_44) * ld_32;
      ld_24 += ld_52;
   }
   double ld_ret_60 = 6.0 * ld_24 / (li_40 * (li_40 + 1));
   ld_ret_60 = MathFloor(ld_ret_60 / Point) * Point;
   return (ld_ret_60);
}

int start() {
   double l_ima_0;
   double l_ima_8;
   int li_20 = IndicatorCounted();
   if (li_20 < 0) return (-1);
   if (li_20 > 0) li_20--;
   int li_16 = Bars - li_20;
   for (int li_24 = li_16; li_24 >= 0; li_24--) {
      if (Tipe_MA == 4) {
         l_ima_0 = LSMA(0, 80, 6, li_24);
         l_ima_8 = LSMA(0, 80, 6, li_24 + 1);
      } else {
         l_ima_0 = iMA(NULL, 0, 80, 0, g_ma_method_156, PRICE_WEIGHTED, li_24);
         l_ima_8 = iMA(NULL, 0, 80, 0, g_ma_method_156, PRICE_WEIGHTED, li_24 + 1);
      }
      g_ibuf_152[li_24] = l_ima_0;
      g_ibuf_148[li_24] = l_ima_0;
      g_ibuf_144[li_24] = l_ima_0;
      if (l_ima_8 > l_ima_0) g_ibuf_148[li_24] = EMPTY_VALUE;
      else {
         if (l_ima_8 < l_ima_0) g_ibuf_144[li_24] = EMPTY_VALUE;
         else {
            g_ibuf_144[li_24] = EMPTY_VALUE;
            g_ibuf_148[li_24] = EMPTY_VALUE;
         }
      }
   }
   return (0);
}
