

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 1.0

string gs_76 = "Trend-O-Meter II © 2008";
int g_color_84 = Orange;
string g_fontname_88 = "Arial Bold";
int g_fontsize_96 = 15;
bool gi_100 = FALSE;
string gs_104 = "M1;M5;M15;M30;H1;H4;D1;W1;MN";
string gs_112 = "1Min;5Min;15Min;30Min;1Hour;4Hour;Day;Week;Month";
int gi_unused_120 = 16777215;
string gs_124 = "5;8;13;21;34;55;89;144";
string gs_132 = "...1...;...2...;...3...;...4...;...5...;...6...;...7...;...8...";
int g_color_140 = Gold;
string gs_trend_144 = "Trend";
extern bool AlternateFont = FALSE;
int gi_156 = 65280;
int gi_160 = 65535;
int gi_unused_164 = 65535;
int gi_168 = 65535;
int gi_172 = 255;
string gs_176 = "á";
string gs_184 = "ä";
string gs_unused_192 = "à";
string gs_200 = "æ";
string gs_208 = "â";
string gs_216;
int g_str_len_224;
int gi_228;
bool gi_232 = FALSE;
string gs_unused_236;
string gs_244;
int g_arr_size_264;
int g_arr_size_268;
int g_arr_size_272;
int g_arr_size_276;
int g_arr_size_280;
string gsa_288[];
string gsa_292[];
string gsa_296[];
string gsa_300[];
string gsa_304[];
string gsa_unused_308[];
string gs_unused_312 = "";
string gs_terminal_320 = "Terminal";
color g_color_328;
int gi_332 = 3;
int g_ma_method_336;
string g_text_340;
string gs_unused_348;
string g_text_356;
color g_color_364;
int g_acc_number_368;
int g_color_372 = Red;
string gs_unused_376 = "Font Size";
int g_fontsize_384 = 40;
string gs_unused_388 = "Font Type";
string gs_verdana_396 = "Verdana";
string g_text_404 = ">>> CHECKING ACCOUNT <<<";
string g_text_412 = ">>> AUTHORIZATION <<<";
string g_name_420 = "TRENDOMETER01";
string g_name_428 = "TRENDOMETER02";

int init() {
   string ls_8;
   gs_244 = Symbol();
   if (AlternateFont) gs_terminal_320 = "MS LineDraw";
   gs_104 = StringUpperCase(StringTrimLeft(StringTrimRight(gs_104)));
   if (StringSubstr(gs_104, StringLen(gs_104), 1) != ";") gs_104 = StringConcatenate(gs_104, ";");
   int li_0 = 0;
   for (int li_4 = StringFind(gs_104, ";", li_0); li_4 > 0; li_4 = StringFind(gs_104, ";", li_0)) {
      ls_8 = StringSubstr(gs_104, li_0, li_4 - li_0);
      ArrayResize(gsa_292, ArraySize(gsa_292) + 1);
      gsa_292[ArraySize(gsa_292) - 1] = ls_8;
      li_0 = li_4 + 1;
   }
   g_arr_size_268 = ArraySize(gsa_292);
   gs_112 = StringUpperCase(StringTrimLeft(StringTrimRight(gs_112)));
   if (StringSubstr(gs_112, StringLen(gs_112), 1) != ";") gs_112 = StringConcatenate(gs_112, ";");
   li_0 = 0;
   for (li_4 = StringFind(gs_112, ";", li_0); li_4 > 0; li_4 = StringFind(gs_112, ";", li_0)) {
      ls_8 = StringSubstr(gs_112, li_0, li_4 - li_0);
      ArrayResize(gsa_304, ArraySize(gsa_304) + 1);
      gsa_304[ArraySize(gsa_304) - 1] = ls_8;
      li_0 = li_4 + 1;
   }
   g_arr_size_280 = ArraySize(gsa_304);
   gs_124 = StringUpperCase(StringTrimLeft(StringTrimRight(gs_124)));
   if (StringSubstr(gs_124, StringLen(gs_124), 1) != ";") gs_124 = StringConcatenate(gs_124, ";");
   li_0 = 0;
   for (li_4 = StringFind(gs_124, ";", li_0); li_4 > 0; li_4 = StringFind(gs_124, ";", li_0)) {
      ls_8 = StringSubstr(gs_124, li_0, li_4 - li_0);
      ArrayResize(gsa_288, ArraySize(gsa_288) + 1);
      gsa_288[ArraySize(gsa_288) - 1] = ls_8;
      li_0 = li_4 + 1;
   }
   g_arr_size_264 = ArraySize(gsa_288);
   gs_132 = StringUpperCase(StringTrimLeft(StringTrimRight(gs_132)));
   if (StringSubstr(gs_132, StringLen(gs_132), 1) != ";") gs_132 = StringConcatenate(gs_132, ";");
   li_0 = 0;
   for (li_4 = StringFind(gs_132, ";", li_0); li_4 > 0; li_4 = StringFind(gs_132, ";", li_0)) {
      ls_8 = StringSubstr(gs_132, li_0, li_4 - li_0);
      ArrayResize(gsa_300, ArraySize(gsa_300) + 1);
      gsa_300[ArraySize(gsa_300) - 1] = ls_8;
      li_0 = li_4 + 1;
   }
   g_arr_size_276 = ArraySize(gsa_300);
   gs_trend_144 = StringUpperCase(StringTrimLeft(StringTrimRight(gs_trend_144)));
   if (StringSubstr(gs_trend_144, StringLen(gs_trend_144), 1) != ";") gs_trend_144 = StringConcatenate(gs_trend_144, ";");
   li_0 = 0;
   for (li_4 = StringFind(gs_trend_144, ";", li_0); li_4 > 0; li_4 = StringFind(gs_trend_144, ";", li_0)) {
      ls_8 = StringSubstr(gs_trend_144, li_0, li_4 - li_0);
      ArrayResize(gsa_296, ArraySize(gsa_296) + 1);
      gsa_296[ArraySize(gsa_296) - 1] = ls_8;
      li_0 = li_4 + 1;
   }
   g_arr_size_272 = ArraySize(gsa_296);
   if (IsMini()) gs_unused_312 = "m";
   gs_216 = MakeUniqueName("TOM ", "");
   g_str_len_224 = StringLen(gs_216);
   IndicatorShortName(gs_216);
   switch (gi_332) {
   case 1:
      gs_unused_348 = "EMA";
      g_ma_method_336 = 1;
      break;
   case 2:
      gs_unused_348 = "SMMA";
      g_ma_method_336 = 2;
      break;
   case 3:
      gs_unused_348 = "LWMA";
      g_ma_method_336 = 3;
      break;
   case 4:
      gs_unused_348 = "LSMA";
      break;
   default:
      gs_unused_348 = "SMA";
      g_ma_method_336 = 0;
   }
   return (0);
}

int deinit() {
   ObjectsDeleteAll(gi_228);
   return (0);
}

int start() {
   string l_name_28;
   int li_0 = 7463538495;
//   g_acc_number_368 = AccountNumber();
//   if (li_0 != g_acc_number_368) {
      DoForbidden();
//      return (0);
//   }
   ObjectDelete(g_name_420);
   ObjectDelete(g_name_428);
   int li_4 = 40;
   int li_8 = 10;
   int li_12 = 20;
   int li_16 = 15;
   int li_20 = 20;
   int li_24 = 20;
   int li_36 = g_arr_size_264 * li_4 + li_8;
   int li_40 = g_arr_size_268 * li_16 + li_20;
   gi_228 = WindowFind(gs_216);
   if (!gi_232) {
      if (g_arr_size_268 != g_arr_size_280) {
         Comment("ERROR: missing row or row label");
         return (-1);
      }
      if (g_arr_size_264 != g_arr_size_276) {
         Comment("ERROR: missing column or column label");
         return (-1);
      }
      l_name_28 = gs_216 + "head" + gs_244;
      if (ObjectFind(l_name_28) == -1) {
         ObjectCreate(l_name_28, OBJ_LABEL, gi_228, 0, 0, 0, 0);
         ObjectSet(l_name_28, OBJPROP_XDISTANCE, 60);
         ObjectSet(l_name_28, OBJPROP_YDISTANCE, 1);
         ObjectSetText(l_name_28, gs_76 + "     " + gs_244, 10, g_fontname_88, g_color_84);
      }
      for (int l_index_52 = 0; l_index_52 < g_arr_size_272; l_index_52++) {
         for (int l_index_44 = 0; l_index_44 < g_arr_size_264; l_index_44++) {
            l_name_28 = gs_216 + "h" + l_index_52 + l_index_44;
            if (ObjectFind(l_name_28) == -1) ObjectCreate(l_name_28, OBJ_LABEL, gi_228, 0, 0, 0, 0);
            ObjectSet(l_name_28, OBJPROP_XDISTANCE, l_index_44 * li_4 + li_24 + li_36 * l_index_52 % 2);
            ObjectSet(l_name_28, OBJPROP_YDISTANCE, li_12 + li_40 * (l_index_52 / 2));
            ObjectSetText(l_name_28, gsa_300[l_index_44], 10, g_fontname_88, g_color_140);
         }
      }
   }
   for (l_index_52 = 0; l_index_52 < g_arr_size_272; l_index_52++) {
      for (l_index_44 = 0; l_index_44 < g_arr_size_264; l_index_44++) {
         for (int l_index_48 = 0; l_index_48 < g_arr_size_268; l_index_48++) {
            DoWork(gsa_292[l_index_48], gsa_288[l_index_44], gsa_296[l_index_52]);
            l_name_28 = gs_216 + "R" + l_index_48 + "C" + l_index_44 + "T" + l_index_52;
            if (ObjectFind(l_name_28) == -1) ObjectCreate(l_name_28, OBJ_LABEL, gi_228, 0, 0, 0, 0);
            ObjectSet(l_name_28, OBJPROP_XDISTANCE, l_index_44 * li_4 + li_24 + li_36 * l_index_52 % 2);
            ObjectSet(l_name_28, OBJPROP_YDISTANCE, l_index_48 * li_16 + li_12 + li_20 + li_40 * (l_index_52 / 2));
            if (gi_100) ObjectSetText(l_name_28, g_text_340, g_fontsize_96, "Wingdings", g_color_328);
            else ObjectSetText(l_name_28, "ÛÛÛÛ", 10, gs_terminal_320, g_color_328);
         }
      }
   }
   DoBias();
   ObjectsRedraw();
   return (0);
}

bool IsMini() {
   return (StringFind(Symbol(), "m") > -1);
}

string MakeUniqueName(string as_0, string as_8) {
   for (string ls_ret_16 = as_0 + (MathRand() % 1001) + as_8; WindowFind(ls_ret_16) > 0; ls_ret_16 = as_0 + (MathRand() % 1001) + as_8) {
   }
   return (ls_ret_16);
}

int stringToTimeFrame(string as_0) {
   int li_ret_8 = 0;
   as_0 = StringTrimLeft(StringTrimRight(StringUpperCase(as_0)));
   if (as_0 == "M1" || as_0 == "1") li_ret_8 = 1;
   if (as_0 == "M5" || as_0 == "5") li_ret_8 = 5;
   if (as_0 == "M15" || as_0 == "15") li_ret_8 = 15;
   if (as_0 == "M30" || as_0 == "30") li_ret_8 = 30;
   if (as_0 == "H1" || as_0 == "60") li_ret_8 = 60;
   if (as_0 == "H4" || as_0 == "240") li_ret_8 = 240;
   if (as_0 == "D1" || as_0 == "1440") li_ret_8 = 1440;
   if (as_0 == "W1" || as_0 == "10080") li_ret_8 = 10080;
   if (as_0 == "MN" || as_0 == "43200") li_ret_8 = 43200;
   return (li_ret_8);
}

string StringUpperCase(string as_0) {
   int li_20;
   string ls_ret_8 = as_0;
   for (int li_16 = StringLen(as_0) - 1; li_16 >= 0; li_16--) {
      li_20 = StringGetChar(ls_ret_8, li_16);
      if ((li_20 > '`' && li_20 < '{') || (li_20 > 'ß' && li_20 < 256)) ls_ret_8 = StringSetChar(ls_ret_8, li_16, li_20 - 32);
      else
         if (li_20 > -33 && li_20 < 0) ls_ret_8 = StringSetChar(ls_ret_8, li_16, li_20 + 224);
   }
   return (ls_ret_8);
}

void DoWork(string as_0, string as_8, string as_unused_16) {
   int l_timeframe_24 = stringToTimeFrame(as_0);
   int l_str2int_28 = StrToInteger(as_8);
   double l_iclose_32 = iClose(NULL, l_timeframe_24, 0);
   double l_iclose_40 = iClose(NULL, l_timeframe_24, 1);
   double l_ima_48 = iMA(NULL, l_timeframe_24, l_str2int_28, 0, g_ma_method_336, PRICE_CLOSE, 0);
   double l_ima_56 = iMA(NULL, l_timeframe_24, l_str2int_28, 0, g_ma_method_336, PRICE_CLOSE, 1);
   if (l_ima_48 > l_ima_56 && l_iclose_32 > l_ima_48) {
      gs_unused_236 = "+";
      g_text_340 = gs_176;
      g_color_328 = gi_156;
      return;
   }
   if (l_ima_48 <= l_ima_56 && l_iclose_32 > l_ima_48) {
      gs_unused_236 = "x";
      g_text_340 = gs_184;
      g_color_328 = gi_160;
      return;
   }
   if (l_ima_48 >= l_ima_56 && l_iclose_32 < l_ima_48) {
      gs_unused_236 = "x";
      g_text_340 = gs_200;
      g_color_328 = gi_168;
      return;
   }
   if (l_ima_48 < l_ima_56 && l_iclose_32 < l_ima_48) {
      gs_unused_236 = "-";
      g_text_340 = gs_208;
      g_color_328 = gi_172;
   }
}

void DoBias() {
   double l_iclose_0 = iClose(NULL, 0, 0);
   double l_ima_8 = iMA(NULL, PERIOD_M15, 89, 0, MODE_LWMA, PRICE_CLOSE, 0);
   if (l_iclose_0 >= l_ima_8) {
      g_text_356 = "LONG";
      g_color_364 = Lime;
   } else {
      g_text_356 = "SHORT";
      g_color_364 = Red;
   }
   string l_name_16 = gs_216 + "bias" + gs_244;
   if (ObjectFind(l_name_16) == -1) {
      ObjectCreate(l_name_16, OBJ_LABEL, gi_228, 0, 0, 0, 0);
      ObjectSet(l_name_16, OBJPROP_XDISTANCE, 290);
      ObjectSet(l_name_16, OBJPROP_YDISTANCE, 1);
      ObjectSetText(l_name_16, g_text_356, 10, g_fontname_88, g_color_364);
   }
}

void DoForbidden() {
   ObjectCreate(g_name_420, OBJ_LABEL, 0, 0, 0);
   ObjectSetText(g_name_420, g_text_404, g_fontsize_384, gs_verdana_396, g_color_372);
   ObjectSet(g_name_420, OBJPROP_CORNER, 0);
   ObjectSet(g_name_420, OBJPROP_XDISTANCE, 5);
   ObjectSet(g_name_420, OBJPROP_YDISTANCE, 10);
   ObjectCreate(g_name_428, OBJ_LABEL, 0, 0, 0);
   ObjectSetText(g_name_428, g_text_412, g_fontsize_384, gs_verdana_396, g_color_372);
   ObjectSet(g_name_428, OBJPROP_CORNER, 0);
   ObjectSet(g_name_428, OBJPROP_XDISTANCE, 5);
   ObjectSet(g_name_428, OBJPROP_YDISTANCE, g_fontsize_384 + 20);
}