/*
   G e n e r a t e d  by ex4-to-mq4 decompiler FREEWARE 4.0.509.5
   Website: HTtP:/ / Ww W. Me Ta Qu O T es . Ne t
   E-mail :  s Up p o r T@ Me Ta Q uo T es. ne t
*/

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Lime

#import "MT4NSAdapter.dll"
   int CalcNeuralNet(string a0, string a1, double& a2[], double& a3[]);
#import

extern int barsCount = 500;
extern string NN_Setting_Note = "Settings below must be same as setting when collecting data including timrframe and symbol";
extern string Setting_for_NN;
extern bool UseIndicator = FALSE;
extern string DllPath = "D:\\InstaTrader\\experts\\files\\test11.dll";
extern string MswPath = "D:\\InstaTrader\\experts\\files\\test11.nsw";
extern bool UseRangeHour = FALSE;
extern int StartHour = 0;
extern int EndHour = 23;
extern int TotalInputNetwork = 20;
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;
int Gi_164 = 3;
int Gi_168;
double Gda_172[];
double Gda_176[];
double Gda_180[];
double G_ibuf_184[];
double G_ibuf_188[];
double G_ibuf_192[];

// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   IndicatorDigits(8);
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3);
   SetIndexBuffer(0, G_ibuf_184);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2);
   SetIndexBuffer(1, G_ibuf_188);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 1);
   SetIndexBuffer(2, G_ibuf_192);
   if (StartHour > EndHour) EndHour += 24;
   if (UseIndicator == TRUE) Gi_168 = 5 * TotalInputNetwork;
   if (UseIndicator == FALSE) Gi_168 = TotalInputNetwork * 4;
   ArrayResize(Gda_176, Gi_168 - 1);
   ArrayResize(Gda_180, Gi_164);
   f0_5(CustomIndicatorSettings, Gda_172);
   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_2(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_4(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_3(As_0, As_12);
}

// 4EC206143B098AE6C66429682A2C1ED4
string f0_2(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_4(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_3(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(string As_0, int A_timeframe_8, double Ada_12[], int Ai_16, int Ai_20) {
   double icustom_24;
   int arr_size_32 = ArraySize(Ada_12);
   if (arr_size_32 == 1) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ai_16, Ai_20);
   if (arr_size_32 == 2) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ai_16, Ai_20);
   if (arr_size_32 == 3) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ai_16, Ai_20);
   if (arr_size_32 == 4) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ai_16, Ai_20);
   if (arr_size_32 == 5) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ai_16, Ai_20);
   if (arr_size_32 == 6) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ai_16, Ai_20);
   if (arr_size_32 == 7) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ai_16, Ai_20);
   if (arr_size_32 == 8) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ai_16, Ai_20);
   if (arr_size_32 == 9) icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ai_16, Ai_20);
   if (arr_size_32 == 10) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ai_16, Ai_20);
   }
   if (arr_size_32 == 11) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ai_16, Ai_20);
   }
   if (arr_size_32 == 12) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ai_16, Ai_20);
   }
   if (arr_size_32 == 13) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ai_16, Ai_20);
   }
   if (arr_size_32 == 14) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ai_16, Ai_20);
   }
   if (arr_size_32 == 15) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ai_16, Ai_20);
   }
   if (arr_size_32 == 16) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ada_12[15], Ai_16, Ai_20);
   }
   if (arr_size_32 == 17) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ada_12[15], Ada_12[16], Ai_16, Ai_20);
   }
   if (arr_size_32 == 18) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ada_12[15], Ada_12[16], Ada_12[17], Ai_16, Ai_20);
   }
   if (arr_size_32 == 19) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ada_12[15], Ada_12[16], Ada_12[17], Ada_12[18], Ai_16, Ai_20);
   }
   if (arr_size_32 == 20) {
      icustom_24 = iCustom(Symbol(), A_timeframe_8, As_0, Ada_12[0], Ada_12[1], Ada_12[2], Ada_12[3], Ada_12[4], Ada_12[5], Ada_12[6], Ada_12[7], Ada_12[8], Ada_12[9],
         Ada_12[10], Ada_12[11], Ada_12[12], Ada_12[13], Ada_12[14], Ada_12[15], Ada_12[16], Ada_12[17], Ada_12[18], Ada_12[19], Ai_16, Ai_20);
   }
   return (icustom_24);
}

// 25E41F7EDEBE93D748A0C764372FD9C2
void f0_1(int A_timeframe_0, string As_4, string As_12, double &Ada_20[], double Ada_24[], int Ai_28, string As_32, double Ada_40[], int Ai_44, int Ai_48, int Ai_52, int Ai_56) {
   double Ld_60;
   int Li_72;
   int index_76;
   if (Ai_48 == 0) Ld_60 = f0_0(As_32, A_timeframe_0, Ada_40, Ai_44, Ai_56);
   if (Ai_48 == 1) Ld_60 = iOpen(Symbol(), A_timeframe_0, Ai_56);
   if (Ai_48 == 2) Ld_60 = iHigh(Symbol(), A_timeframe_0, Ai_56);
   if (Ai_48 == 3) Ld_60 = iLow(Symbol(), A_timeframe_0, Ai_56);
   if (Ai_48 == 4) Ld_60 = iClose(Symbol(), A_timeframe_0, Ai_56);
   if (Ai_52 == 1) {
      index_76 = 0;
      if (Ai_48 == 0) Li_72 = 1;
      else Li_72 = 0;
      for (int Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = f0_0(As_32, A_timeframe_0, Ada_40, Ai_44, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 1) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iOpen(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 2) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iHigh(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 3) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iLow(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 4) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iClose(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
   }
   if (Ai_52 == 0) {
      index_76 = 0;
      if (Ai_48 == 1) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iOpen(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 2) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iHigh(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 3) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iLow(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
      if (Ai_48 == 4) Li_72 = 1;
      else Li_72 = 0;
      for (Li_68 = Li_72 + Ai_56; Li_68 < Ai_28 + Ai_56; Li_68++) {
         Ada_20[index_76] = iClose(Symbol(), A_timeframe_0, Li_68) - Ld_60;
         index_76++;
      }
   }
   int Li_80 = CalcNeuralNet(As_4, As_12, Ada_20, Ada_24);
   switch (Li_80) {
   case 1:
      Print("Error of creating neuronet from DLL " + As_4);
      return;
   case 2:
      Print("Error of loading balances to neuronet from the file " + As_12);
      return;
   case 3:
      Print("Error of calculation of neuronet");
      return;
      return;
   }
}

// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   for (int Li_0 = barsCount; Li_0 >= 0; Li_0--) {
      f0_1(Period(), DllPath, MswPath, Gda_176, Gda_180, TotalInputNetwork, CustomIndicatorName, Gda_172, CustomIndicatorMode, OutputType, UseIndicator, Li_0);
      G_ibuf_184[Li_0] = Gda_180[2];
      G_ibuf_188[Li_0] = Gda_180[1];
      G_ibuf_192[Li_0] = Gda_180[0];
   }
   return (0);
}
