/*
   G e n e r a t e d  by ex4-to-mq4 decompiler FREEWARE 4.0.509.5
   Website:  ht tP :/ /Www.M E TAQU o TES. n e T
   E-mail :  s U pPort@ met a q uOT e S.n E t
*/

#property indicator_chart_window

extern string ExportFileName = "export.csv";
extern int TotalBars = 5000;
extern bool UseRangeHour = FALSE;
extern int StartHour = 0;
extern int EndHour = 23;
extern int TotalInputNetwork = 5;
extern int PredictedBars = 3;
extern bool UseIndicator = FALSE;
extern string CustomIndicatorName = "Moving Averages";
extern string CustomIndicatorSettings = "14, 0, 0";
extern int CustomIndicatorMode = 0;
extern string Note_OutputType = "0 = data, 1 = open, 2 = high, 3 = low, close = 4";
extern int OutputType = 0;
double Gda_144[];
bool Gi_148 = FALSE;

// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   if (StartHour > EndHour) EndHour += 24;
   f0_5(CustomIndicatorSettings, Gda_144);
   if (Bars < TotalBars) {
      Alert("Error! Not enough history for exporting of data.");
      return;
   }
   return (0);
}

// 942850E354BF57ADD0536738BC694AD3
void f0_5(string As_0, double &Ada_8[], string As_12 = ",", int Ai_unused_20 = 0) {
   ArrayResize(Ada_8, 1);
   int Li_24 = -1;
   int Li_28 = 0;
   if (f0_1(As_0, 1) != As_12) As_0 = As_0 + As_12;
   while (true) {
      Li_28 = StringFind(As_0, As_12, Li_24 + 1);
      Ada_8[ArraySize(Ada_8) - 1] = f0_3(StringSubstr(As_0, Li_24 + 1, Li_28 - Li_24 - 1));
      if (Li_28 >= StringLen(As_0) - 1) break;
      Li_24 = Li_28;
      ArrayResize(Ada_8, ArraySize(Ada_8) + 1);
   }
   f0_2(As_0, As_12);
}

// 4EC206143B098AE6C66429682A2C1ED4
string f0_1(string As_0, int Ai_8 = 1) {
   if (Ai_8 > 0) return (StringSubstr(As_0, StringLen(As_0) - Ai_8, Ai_8));
   if (Ai_8 < 0) return (StringSubstr(As_0, -Ai_8, StringLen(As_0) - Ai_8));
   return ("");
}

// 6D71DA105A32B54DD34F52355DC4D60C
double f0_3(string As_0) {
   string Ls_28;
   int Li_8 = -1;
   int Li_12 = 1;
   double Ld_16 = 0.0;
   for (int Li_24 = 0; Li_24 < StringLen(As_0); Li_24++) {
      Ls_28 = StringSubstr(As_0, Li_24, 1);
      if (Ls_28 == "-") Li_12 = -Li_12;
      else {
         if (Ls_28 == ".") Li_8 = 0;
         else {
            if (Ls_28 >= "0" && Ls_28 <= "9") {
               if (Li_8 >= 0) Li_8++;
               if (Li_8 > 0) {
                  Ld_16 += StrToDouble(Ls_28) / MathPow(10, Li_8);
                  continue;
               }
               Ld_16 = 10.0 * Ld_16 + StrToDouble(Ls_28);
            }
         }
      }
   }
   return (Ld_16 * Li_12);
}

// 526300A01320C18B1450726F6592D4CF
int f0_2(string As_0, string As_8) {
   int count_16 = 0;
   for (int Li_20 = 0; Li_20 < StringLen(As_0); Li_20++)
      if (StringSubstr(As_0, Li_20, StringLen(As_8)) == As_8) count_16++;
   return (count_16);
}

// 0C52F12535CC251CEC387AFFE357B6B0
double f0_0(int Ai_0) {
   double icustom_4;
   int arr_size_12 = ArraySize(Gda_144);
   if (arr_size_12 == 1) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 2) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 3) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 4) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 5) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 6) icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], CustomIndicatorMode, Ai_0);
   if (arr_size_12 == 7) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], CustomIndicatorMode,
         Ai_0);
   }
   if (arr_size_12 == 8) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], CustomIndicatorMode,
         Ai_0);
   }
   if (arr_size_12 == 9) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 10) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 11) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 12) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 13) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 14) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 15) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 16) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], Gda_144[15], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 17) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], Gda_144[15], Gda_144[16], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 18) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], Gda_144[15], Gda_144[16], Gda_144[17], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 19) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], Gda_144[15], Gda_144[16], Gda_144[17], Gda_144[18], CustomIndicatorMode, Ai_0);
   }
   if (arr_size_12 == 20) {
      icustom_4 = iCustom(Symbol(), Period(), CustomIndicatorName, Gda_144[0], Gda_144[1], Gda_144[2], Gda_144[3], Gda_144[4], Gda_144[5], Gda_144[6], Gda_144[7], Gda_144[8],
         Gda_144[9], Gda_144[10], Gda_144[11], Gda_144[12], Gda_144[13], Gda_144[14], Gda_144[15], Gda_144[16], Gda_144[17], Gda_144[18], Gda_144[19], CustomIndicatorMode,
         Ai_0);
   }
   return (icustom_4);
}

// 73D03F657B2846CEFD9F4E7DC4FE63AE
void f0_4() {
   double Ld_12;
   double Ld_20;
   double Ld_28;
   int hour_84;
   int file_8 = FileOpen(ExportFileName, FILE_CSV|FILE_WRITE, ',');
   string Ls_36 = "";
   string Ls_44 = "";
   string Ls_52 = "";
   string Ls_60 = "";
   string Ls_68 = "";
   string Ls_76 = "";
   if (file_8 > 0) {
      Ls_36 = "";
      Ls_44 = "";
      Ls_52 = "";
      Ls_60 = "";
      Ls_68 = "";
      Ls_76 = "";
      for (int Li_0 = -PredictedBars; Li_0 < TotalInputNetwork; Li_0++) {
         if (Li_0 < 0) {
            if (StringLen(Ls_36)) Ls_36 = Ls_36 + ",";
            Ls_36 = Ls_36 + "output" + (-Li_0);
         }
         if (Li_0 >= 0) {
            if (UseIndicator == TRUE)
               if (StringLen(Ls_44)) Ls_44 = Ls_44 + ",";
            Ls_44 = Ls_44 + "data" + Li_0;
            if (StringLen(Ls_52)) Ls_52 = Ls_52 + ",";
            Ls_52 = Ls_52 + "open" + Li_0;
            if (StringLen(Ls_60)) Ls_60 = Ls_60 + ",";
            Ls_60 = Ls_60 + "high" + Li_0;
            if (StringLen(Ls_68)) Ls_68 = Ls_68 + ",";
            Ls_68 = Ls_68 + "low" + Li_0;
            if (StringLen(Ls_76)) Ls_76 = Ls_76 + ",";
            Ls_76 = Ls_76 + "close" + Li_0;
         }
      }
      if (UseIndicator == TRUE) FileWrite(file_8, Ls_36 + "," + Ls_44 + "," + Ls_52 + "," + Ls_60 + "," + Ls_68 + "," + Ls_76);
      else FileWrite(file_8, Ls_36 + "," + Ls_52 + "," + Ls_60 + "," + Ls_68 + "," + Ls_76);
      for (Li_0 = PredictedBars; Li_0 < TotalBars - TotalInputNetwork; Li_0++) {
         if (UseRangeHour == TRUE) {
            hour_84 = TimeHour(Time[Li_0]);
            if (hour_84 < StartHour || hour_84 > EndHour) continue;
         }
         Ls_36 = "";
         Ls_44 = "";
         Ls_52 = "";
         Ls_60 = "";
         Ls_68 = "";
         Ls_76 = "";
         if (OutputType == 0) Ld_28 = f0_0(Li_0);
         if (OutputType == 1) Ld_28 = Open[Li_0];
         if (OutputType == 2) Ld_28 = High[Li_0];
         if (OutputType == 3) Ld_28 = Low[Li_0];
         if (OutputType == 4) Ld_28 = Close[Li_0];
         for (int Li_4 = Li_0 - PredictedBars; Li_4 < TotalInputNetwork + Li_0; Li_4++) {
            if (Li_4 < Li_0)
               if (StringLen(Ls_36)) Ls_36 = Ls_36 + ",";
            if (Li_4 >= Li_0) {
               if (StringLen(Ls_44)) Ls_44 = Ls_44 + ",";
               if (StringLen(Ls_52)) Ls_52 = Ls_52 + ",";
               if (StringLen(Ls_60)) Ls_60 = Ls_60 + ",";
               if (StringLen(Ls_68)) Ls_68 = Ls_68 + ",";
               if (StringLen(Ls_76)) Ls_76 = Ls_76 + ",";
            }
            if (Li_4 < Li_0) {
               if (OutputType == 0) Ld_20 = f0_0(Li_4) - Ld_28;
               if (OutputType == 1) Ld_20 = Open[Li_4] - Ld_28;
               if (OutputType == 2) Ld_20 = High[Li_4] - Ld_28;
               if (OutputType == 3) Ld_20 = Low[Li_4] - Ld_28;
               if (OutputType == 4) Ld_20 = Close[Li_4] - Ld_28;
               Ls_36 = Ls_36 + DoubleToStr(Ld_20, 2 * Digits);
            }
            if (Li_4 >= Li_0) {
               if (UseIndicator == TRUE) {
                  Ld_12 = f0_0(Li_4);
                  Ls_44 = Ls_44 + DoubleToStr(Ld_12 - Ld_28, Digits * 2);
               }
               Ls_52 = Ls_52 + DoubleToStr(Open[Li_4] - Ld_28, Digits * 2);
               Ls_60 = Ls_60 + DoubleToStr(High[Li_4] - Ld_28, Digits * 2);
               Ls_68 = Ls_68 + DoubleToStr(Low[Li_4] - Ld_28, Digits * 2);
               Ls_76 = Ls_76 + DoubleToStr(Close[Li_4] - Ld_28, Digits * 2);
            }
         }
         if (UseIndicator == TRUE) FileWrite(file_8, Ls_36 + "," + Ls_44 + "," + Ls_52 + "," + Ls_60 + "," + Ls_68 + "," + Ls_76);
         else FileWrite(file_8, Ls_36 + "," + Ls_52 + "," + Ls_60 + "," + Ls_68 + "," + Ls_76);
      }
      FileClose(file_8);
      Alert("Export of data finished successfully. You can remove indicator from chart");
      Gi_148 = TRUE;
      return;
   }
   Print("Error! Failed to create the file for data export. ", GetLastError());
}

// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   if (Gi_148 == FALSE) f0_4();
   return (0);
}
