#property copyright "Copyright © 2011, ForexInnovation GmbH,"
#property link      "http://www.metatrader-experts.de"

#include <WinUser32.mqh>
#import "kernel32.dll"
   int _lopen(string a0, int a1);
   int _lcreat(string a0, int a1);
   int _llseek(int a0, int a1, int a2);
   int _lread(int a0, string a1, int a2);
   int _lwrite(int a0, string a1, int a2);
   int _lclose(int a0);
   int CreateDirectoryA(string a0, int& a1[]);
#import "MC_II_V16.dll"
   int f_initialChecks(string a0, string a1, int a2, int a3, string a4, int a5, string a6, int a7);
   int f_checkAccountNb();
   int f_checkExpire(int a0, string a1, string a2, int a3);
   double f_getMaxRiskPerTrade();
   double ConditionCheck_I(double& a0[], double& a1[], double& a2[], double a3, int a4, int a5, double a6);
   double magicConditionCheck_IV(double& a0[], double& a1[], int a2, int a3, double a4, int a5, int a6);
   int f_goForMagicVerifyCheck(int a0, int a1, int a2, double a3, double a4, double a5, string a6);
   double f_getMagicTradeParas(int a0, int a1, int a2, double a3, double a4, double a5, double& a6[], int a7, int a8, double a9, double a10, double a11, double a12, int a13, double a14, double a15, double a16, double a17, double a18, double a19, double a20, double& a21[], double& a22[], double& a23[], double& a24[]);
   int f_checkForCorrectTrading(int a0, int a1, int a2, double a3, double a4, double a5, double a6, double a7, double a8, int a9);
   int f_closeFile();
   int f_checkForTP(int a0, int a1, int a2, double a3, double a4, double a5, double a6, double a7, double a8, double& a9[], double& a10[], double& a11[], double& a12[], double& a13[], double a14, double a15, string a16);
   int f_checkForSlAdaption(int a0, int a1, int a2);
   double f_getTheMagicNewSL(int a0, int a1, int a2, double a3, double a4, double a5, double a6, double& a7[], double& a8[], double& a9[], string a10);
   double f_getTheVarEXPMQL(int a0, int a1, int a2);
   double magicConditionCheck_XXI(double& a0[], int a1, int a2, int a3);
   double magicConditionCheck_XXII(double& a0[], double& a1[], double& a2[], int a3, int a4, int a5);
   double magicConditionCheck_XXIII(double& a0[], double& a1[], double& a2[], int a3, int a4, int a5, int a6);
   double magicConditionCheck_XXIV(double& a0[], double& a1[], double& a2[], double& a3[], double& a4[], double& a5[], double& a6[], double& a7[], int a8, int a9, int a10, int a11, int a12, int a13);
   int f_xyz(int a0, int a1, int a2);
#import

int g_slippage_76 = 2;
double gd_80 = -1.0;
bool gi_88 = FALSE;
bool gi_92 = FALSE;
bool loginfo = FALSE;
bool gi_100 = FALSE;
bool gi_104 = TRUE;
bool prnAll = FALSE;
int gi_112 = 10;
int gi_116 = 1;
bool gi_120;
int gi_124 = 1;
int g_digits_128;
int g_timeframe_132;
double gd_136;
bool g_bool_144;
bool g_bool_148;
bool viMode;
bool gi_156 = FALSE;
int g_ticket_168;
int g_ticket_172;
bool gi_184;
string g_str_concat_192 = "";
string gs_unused_200 = "ServerID.txt";
string gs_server_208 = "SERVER";
int gi_unused_220 = 0;
double gd_unused_224 = 8.0;
string gs_unused_232 = "Arial";
string g_str_concat_240 = "";
int g_file_248 = -1;
bool gi_252 = FALSE;
int gi_256 = 15;
bool gi_260 = FALSE;
bool gi_unused_264 = TRUE;
int gi_268 = 0;
int proVer = 1;
bool gi_276 = TRUE;
string gs_280 = "Magic-Champ II";
//extern int language = 1;
extern int MAGICNUMBER = 946137412;
extern bool longAllowed = TRUE;
extern bool shortAllowed = TRUE;
extern bool SplitLot = FALSE;
bool gi_304 = FALSE;
bool gi_308 = FALSE;
bool gi_312 = FALSE;
extern string _____________________________ = "> Money Management Selection <";
extern int MoneyManagement_Variant = 1;
extern string _____________________________1 = "> Variant 1 <";
extern string FFM_Variant_1_______________ = "> 1 = FFM <";
extern double risk_Long_Percent = 3.0;
extern double risk_Short_Percent = 3.0;
extern bool use_Adaptive_MM = FALSE;
extern int Divisor_Long = 7;
extern int Divisor_Short = 7;
extern string _____________________________2 = "> Variant 2 <";
extern string ReinvestPercent_Variant_2____ = "> 2 = Base and Reinvest <";
extern int basicRisk_L = 0;
extern int basicRisk_S = 0;
extern double reinvest_PcL = 0.0;
extern double reinvest_PcS = 0.0;
extern double maxRisk_PcL = 3.0;
extern double maxRisk_PcS = 3.0;
extern string _____________________________3 = "> Variant 3 <";
extern string FIXED_LOTS_MoneyManagement = "> 3 = Fixed Lotsize <";
extern double lots_Long = 0.0;
extern double lots_Short = 0.0;
extern string TradeManagement = "> Trade Management <";
bool gi_468 = FALSE;
extern bool OrderOpen_withSLTP = FALSE;
extern string _____________________________4 = "> Trading Stop after Stoploss! <";
extern double Break_After_SL = 20.0;
extern string _____________________________5 = "> Automation <";
extern string Trade_Open = "> Auto Tradeopen? <";
extern bool Auto_Trade_Open = TRUE;
extern string SL_Management = "> Auto-SL-Management? <";
extern bool Auto_SL_Management = TRUE;
extern string XXX_Man_SL_Management = "> Man-SL_Management <";
extern double SL_AT_Trade_Open_Long = 20.0;
extern double SL_AT_Trade_Open_Short = 20.0;
extern string TP_Management = "> Auto-TP-Management? <";
extern bool Auto_TP_Management = TRUE;
extern string XXX_Man_TP_Management = "> Man-TP-Management <";
extern double TP_AT_Trade_Open_Long = 20.0;
extern double TP_AT_Trade_Open_Short = 20.0;
extern string _____________________________6 = "> STOP Trading via Day and Time <";
extern bool use_Time_Management = TRUE;
extern bool use_Local_Time = FALSE;
extern bool use_Server_Time = TRUE;
extern string _____________________________7 = "> Trading START <";
int gi_unused_608;
extern int startTime_Day = 1;
extern int startTime_Hour = 2;
extern string _____________________________8 = "> Trading STOP <";
extern int endTime_Day = 5;
extern int endTime_Hour = 21;
extern int endTime_Minute = 45;
extern string _____________________________9 = "> Signal Stop @ End Day <";
extern int lastSignal_Hour_Long = 18;
extern int lastSignal_Minute_Long = 30;
extern int lastSignal_Hour_Short = 18;
extern int lastSignal_Minute_Short = 30;

extern string ____________________________10 = "> Trading time <";
extern bool UseTradingTime = TRUE;
extern int Hour_Start_Trade = 3;
extern int Hour_Stop_Trade = 24;
bool TRADING = TRUE;

string gs_unused_664 = "> Zeitzonendifferenz zu FXPro <";
bool gi_672 = FALSE;
int gi_676 = 100;
int gia_680[24] = {1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1};
int gia_684[24] = {1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0};
bool gi_688;
bool gi_692;
extern string ____________________________11 = "> Slippage & Spread <";
extern int Slippage = 1;
extern double MaxSpread = 5.0;
double gd_716 = 5.0;
double gd_724 = 3.0;
bool gi_732 = FALSE;
bool debugmode = TRUE;
bool gi_740 = TRUE;
bool gi_744 = FALSE;
string gs_unused_748 = ">> SL Management <<";
int gi_unused_756 = 8;
string gs_unused_760 = ">> TP SPLIT Vers. II <<";
int gi_unused_768 = 1;
int gi_unused_772 = 1;
double gd_784;
double gd_792;
double gd_800;
double gd_808;
double gd_816;
double gd_824;
double gd_832 = 0.0;
double gd_840 = 0.0;
int gi_unused_848;
int gi_852;
int gi_unused_856;
int gi_unused_860;
bool gi_unused_864 = TRUE;
bool gi_868 = FALSE;
int gi_876;
int gi_880;
double g_order_lots_892;
double g_order_lots_900;
double g_order_lots_908;
int gi_924 = 60;
int gi_928 = 25;
int gi_932 = 15;
int gi_936 = 60;
int gi_940 = 25;
int gi_944 = 15;
bool gi_948 = FALSE;
bool gi_952 = FALSE;
bool gi_956 = FALSE;
int loginfo0 = 0;
bool gi_unused_964 = FALSE;
int loginfo8;
double gd_972;
double gd_980;
int gi_unused_988 = 3;
int g_timeframe_992;
bool gi_996;
string g_text_1000 = "";
int gi_1008;
string gs_1012 = "\n\n\n\n\n\n";
string gs_1020 = "";
int gi_1028 = -1;
string g_name_1032 = "TRADING_STOPPED";
string g_name_1040 = "Auto_Trade_Open";
string g_name_1048 = "Auto_SL_Management";
string g_name_1056 = "Auto_TP_Management";
string g_name_1064 = "LongTrades";
string g_name_1072 = "ShortTrades";
string g_name_1080 = "RiskBorderLine";
string g_name_1088 = "DLL_Error";
string gs_unused_1096 = "LONG Signals STOP";
string gs_long_off_1104 = "LONG OFF";
string gs_unused_1112 = "SHORT Signals STOP";
string g_text_1120 = "SHORT OFF";
string g_text_1128 = "Trade LONG Signals";
string g_text_1136 = "Trade SHORT Signals";
string g_text_1144 = "LONG Signals STOP";
string g_text_1152 = "SHORT Signals STOP";
string g_text_1160 = "Trading Stopped --> TimeManagement";
bool gi_1168 = TRUE;
bool gi_1172 = FALSE;
bool gi_1176 = FALSE;
bool gi_1180 = TRUE;
bool gi_1184 = TRUE;
bool gi_1188 = TRUE;
double gd_1192 = 0.0;
int gi_1200;
//string gsa_1204[1];
int gi_1208 = 0;
bool gi_1212 = FALSE;
bool gi_1216 = FALSE;
bool gi_unused_1220 = FALSE;
bool gi_unused_1224 = FALSE;
double gda_1228[15];
double gda_1232[15];
double gda_1236[15];
double gda_1240[30];
double gda_1244[30];
double gda_1248[30];
double gda_1252[30];
double g_istddev_1256;
double g_istddev_1264;

int f_openMarket(int a_cmd_0, double a_lots_4, string a_comment_12, double a_price_20 = 0.0, double a_price_28 = 0.0, int a_magic_36 = 0, bool ai_40 = FALSE) {
   int error_44;
   double price_48;
   double ld_56;
   color color_72;
   double price_80;
   double price_88;
   int li_100;
   if (gi_100) errorLog(GetLastError(), "START f_openMarket: ");
   string ls_64 = "";
   if (a_cmd_0 == OP_BUY) {
      ld_56 = nd(Ask);
      ls_64 = "LongTicket";
      color_72 = Green;
   }
   if (a_cmd_0 == OP_SELL) {
      ld_56 = nd(Bid);
      ls_64 = "ShortTicket";
      color_72 = Red;
   }
   int ticket_76 = -1;
   if (!ai_40) {
      price_80 = 0;
      price_88 = 0;
   } else {
      price_80 = a_price_28;
      price_88 = a_price_20;
   }
   for (int li_96 = 1; li_96 <= gi_112; li_96++) {
      f_waitForFreeTradeContext();
      RefreshRates();
      GetLastError();
      if (a_cmd_0 == OP_BUY) {
         price_48 = nd(Ask);
         if (gd_80 >= 0.0) {
            if (price_48 - ld_56 > gd_80 * gd_136) {
               dl("Preis ist schon zu weit weggelauf?n! Gew?nscht war: " + dts(ld_56, Digits) + " aktuell: " + dts(price_48, Digits));
               dl("!!! Fehler, Order konnte nicht aufgegeben werden!");
               return (0);
            }
         }
      }
      if (a_cmd_0 == OP_SELL) {
         price_48 = nd(Bid);
         if (gd_80 >= 0.0) {
            if (ld_56 - price_48 > gd_80 * gd_136) {
               dl("Preis ist schon zu weit weggelauf?n! Gew?nscht war: " + dts(ld_56, Digits) + " aktuell: " + dts(price_48, Digits));
               dl("!!! Fehler, Order konnte nicht aufgegeben werden!");
               return (0);
            }
         }
      }
      if (gi_156) li_100 = GetTickCount();
      ticket_76 = OrderSend(Symbol(), a_cmd_0, a_lots_4, price_48, g_slippage_76, price_88, price_80, a_comment_12, a_magic_36, 0, color_72);
      if (ticket_76 > 0) {
         if (OrderSelect(ticket_76, SELECT_BY_TICKET)) {
            if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 1, ticket_76, GetTickCount() - li_100);
            if (li_96 == 1) {
               if (gi_92) dl("   Y. done. >>> " + ls_64 + "# " + ticket_76 + " er?ffnet ...", 1);
            } else dl(Symbol() + "   Y. done. >>> " + ls_64 + "# " + ticket_76 + " beim " + li_96 + ". Versuch platziert ...", 1);
            if (!ai_40 && a_price_20 != 0.0 || a_price_28 != 0.0) {
               f_orderModify(ticket_76, a_price_20, 1, a_price_28, 1);
               OrderSelect(ticket_76, SELECT_BY_TICKET);
            }
            if (gi_92) dl("   ... newPrice " + DoubleToStr(OrderOpenPrice(), Digits), 1);
            if (gi_92) dl("   ... newSL    " + DoubleToStr(OrderStopLoss(), Digits), 1);
            if (gi_92) dl("   ... newTP    " + DoubleToStr(OrderTakeProfit(), Digits), 1);
            if (gi_92) dl("   ... newLots  " + DoubleToStr(OrderLots(), 2), 1);
            if (gi_92) dl("   ... MN       " + DoubleToStr(OrderMagicNumber(), 0), 1);
            if (!(gi_92)) return (ticket_76);
            dl("   ---------------------------------------------");
            return (ticket_76);
         }
         if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 0, -555, GetTickCount() - li_100);
         dl("Das Ticket# " + ticket_76 + " kann nicht mehr selected werden");
         return (0);
      }
      error_44 = GetLastError();
      if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 0, -error_44, GetTickCount() - li_100);
      if (li_96 == gi_112) {
         if (gi_92) dl(Symbol() + " EA STOP!!! Nach " + li_96 + " Versuchen konnte noch immer kein " + ls_64 + " er?ffnet werden!");
         return (-1 * error_44);
      }
      if (error_44 != 0/* NO_ERROR */) {
         if (gi_92) dl("  " + Symbol() + " >>> Das " + ls_64 + " konnte beim " + li_96 + ". Versuch nicht ge?ffnet werden. Fehler: " + errorLog(error_44, ""), 1, 1);
         if (li_96 >= gi_116) f_giveTheError("f_openMarket", a_cmd_0, price_48, a_price_20, a_price_28, a_lots_4, li_96, error_44);
         if (!check4Retry(error_44)) return (-1 * error_44);
         dl("  " + Symbol() + " RETRY", 1, 1);
         dl("   ---------------------------------------------", 1, 1);
      }
   }
   return (0);
}

int f_orderModify(int a_ticket_0, double a_price_4 = 0.0, bool ai_12 = FALSE, double a_price_16 = 0.0, bool ai_24 = FALSE) {
   bool bool_28;
   int error_32;
   int li_48;
   if (gi_100) errorLog(GetLastError(), "START f_orderModify: ");
   if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
      dl("!!! Fehler, Order #" + a_ticket_0 + " konnte nicht selected werden!");
      return (0);
   }
   if (gi_92) dl("---> Modify von Ticket #" + a_ticket_0);
   if (ai_12) {
      if (NormalizeDouble(a_price_4, Digits) == NormalizeDouble(OrderStopLoss(), Digits)) {
         if (gi_92) dl("   Modify des SL nicht notwendig, alter SL = neuer SL");
         ai_12 = FALSE;
      }
   }
   if (ai_24) {
      if (NormalizeDouble(a_price_16, Digits) == NormalizeDouble(OrderTakeProfit(), Digits)) {
         if (gi_92) dl("   Modify des TP nicht notwendig, alter TP = neuer TP");
         ai_24 = FALSE;
      }
   }
   if ((!ai_12) && !ai_24) {
      if (!(gi_92)) return (1);
      dl("---> Kein Mod notwendig!");
      return (1);
   }
   double ld_36 = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;
   for (int li_44 = 1; li_44 <= gi_112; li_44++) {
      f_waitForFreeTradeContext();
      RefreshRates();
      GetLastError();
      if (ai_12 && a_price_4 > 0.0) {
         if (OrderType() == OP_BUY && Bid - a_price_4 < ld_36) {
            if (gi_92) {
               dl("   ACHTUNG. LONG SL von Ticket# " + OrderTicket() + " kann nicht mehr ver?ndert werden! OldSL " + DoubleToStr(OrderStopLoss(), Digits) + " Der neue SL " + DoubleToStr(a_price_4,
                  Digits) + " zu nah am Bid " + DoubleToStr(Bid, Digits) + " MinStop " + DoubleToStr(ld_36, Digits) + " Pips", 1, 1);
            }
            ai_12 = FALSE;
         }
         if (OrderType() == OP_SELL && a_price_4 - Ask < ld_36) {
            if (gi_92) {
               dl("   ACHTUNG. SHORT SL von Ticket# " + OrderTicket() + " kann nicht mehr ver?ndert werden! OldSL " + DoubleToStr(OrderStopLoss(), Digits) + " Der neue SL " + DoubleToStr(a_price_4,
                  Digits) + " zu nah am Ask " + DoubleToStr(Ask, Digits) + " MinStop " + DoubleToStr(ld_36, Digits) + " Pips", 1, 1);
            }
            ai_12 = FALSE;
         }
      }
      if (ai_24 && a_price_16 > 0.0) {
         if (OrderType() == OP_BUY && a_price_16 != 0.0 && a_price_16 - Bid < ld_36) {
            if (gi_92) {
               dl("   ACHTUNG. LONG TP von Ticket# " + OrderTicket() + " kann nicht mehr ver?ndert werden! OldTP " + DoubleToStr(OrderTakeProfit(), Digits) + " Der neue TP " + DoubleToStr(a_price_16,
                  Digits) + " zu nah am Bid " + DoubleToStr(Bid, Digits) + " MinStop " + DoubleToStr(ld_36, Digits) + " Pips", 1, 1);
            }
            ai_24 = FALSE;
         }
         if (OrderType() == OP_SELL && a_price_16 != 0.0 && Ask - a_price_16 < ld_36) {
            if (gi_92) {
               dl("   ACHTUNG. SHORT TP von Ticket# " + OrderTicket() + " kann nicht mehr ver?ndert werden! OldTP " + DoubleToStr(OrderTakeProfit(), Digits) + " Der neue TP " + DoubleToStr(a_price_16,
                  Digits) + " zu nah am Ask " + DoubleToStr(Ask, Digits) + " MinStop " + DoubleToStr(ld_36, Digits) + " Pips", 1, 1);
            }
            ai_24 = FALSE;
         }
      }
      if ((!ai_12) && !ai_24) return (0);
      if (gi_156) li_48 = GetTickCount();
      if (ai_12 && (!ai_24)) {
         if (gi_92) dl("    G. try to Change SL von " + DoubleToStr(OrderStopLoss(), Digits) + " auf " + DoubleToStr(a_price_4, Digits) + " !");
         bool_28 = OrderModify(OrderTicket(), OrderOpenPrice(), a_price_4, OrderTakeProfit(), 0);
      }
      if ((!ai_12) && ai_24) {
         if (gi_92) dl("    G. try to Change TP von " + DoubleToStr(OrderTakeProfit(), Digits) + " auf " + DoubleToStr(a_price_16, Digits) + " !");
         bool_28 = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), a_price_16, 0);
      }
      if (ai_12 && ai_24) {
         if (gi_92) dl("    G. try to Change SL von " + DoubleToStr(OrderStopLoss(), Digits) + " auf " + DoubleToStr(a_price_4, Digits) + " !");
         if (gi_92) dl("    G. try to Change TP von " + DoubleToStr(OrderTakeProfit(), Digits) + " auf " + DoubleToStr(a_price_16, Digits) + " !");
         bool_28 = OrderModify(OrderTicket(), OrderOpenPrice(), a_price_4, a_price_16, 0, Blue);
      }
      if (bool_28) {
         if (gi_156) f_logTradeOpenTime(3, OrderType(), OrderLots(), 1, OrderTicket(), GetTickCount() - li_48);
         if (!(gi_92)) return (1);
         dl("    Y. Done. Ticket# " + a_ticket_0 + " beim " + li_44 + ". Versuch erfolgreich modified");
         return (1);
      }
      if (!bool_28) {
         error_32 = GetLastError();
         if (gi_156) f_logTradeOpenTime(3, OrderType(), OrderLots(), 0, -error_32, GetTickCount() - li_48);
         if (li_44 == gi_112) {
            dl(Symbol() + " EA STOP!!! Nach " + li_44 + " Versuchen konnte das Ticket# " + a_ticket_0 + " immer noch nicht modified werden!");
            return (0);
         }
         if (error_32 != 0/* NO_ERROR */) {
            if (gi_92) dl("  " + Symbol() + " >>> TICKET MODIFY hat beim " + li_44 + ". Versuch nicht geklappt. Fehler: " + errorLog(error_32, ""), 1, 1);
            if (li_44 >= gi_116 && OrderType() == OP_BUY) f_giveTheError("f_orderModify", 0, Bid, a_price_4, a_price_16, 0, li_44, error_32);
            if (li_44 >= gi_116 && OrderType() == OP_SELL) f_giveTheError("f_orderModify", 1, Ask, a_price_4, a_price_16, 0, li_44, error_32);
            if (!check4Retry(error_32)) return (0);
            dl("  " + Symbol() + " RETRY", 1, 1);
            dl("   ---------------------------------------------", 1, 1);
         }
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_orderModify: ");
   return (1);
}

int f_deletePending(int a_ticket_0) {
   int cmd_8;
   int li_12;
   bool is_deleted_16;
   int error_20;
   if (gi_100) errorLog(GetLastError(), "START f_deletePendingTicket: ");
   dl("START f_deletePendingTicket " + a_ticket_0);
   for (int li_4 = 1; li_4 <= gi_112; li_4++) {
      if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) dl("!!!Fehler, konnte Ticket #" + a_ticket_0 + " bei f_deletePending nicht selecten!");
      else {
         cmd_8 = OrderType();
         if (cmd_8 <= OP_SELL) {
            dl("!!!Fehler, Ticket #" + a_ticket_0 + " bei f_deletePending wir kein Pendingticket!");
            return (-1);
         }
         f_waitForFreeTradeContext();
         if (gi_156) li_12 = GetTickCount();
         is_deleted_16 = OrderDelete(a_ticket_0, Red);
         if (is_deleted_16) {
            if (gi_156) f_logTradeOpenTime(4, OrderType(), OrderLots(), 1, a_ticket_0, GetTickCount() - li_12);
            dl(">>> " + f_cmdToString(cmd_8) + " Ticket# " + a_ticket_0 + " erfolgreich geschlossen!");
            return (0);
         }
         error_20 = GetLastError();
         if (gi_156) f_logTradeOpenTime(4, OrderType(), OrderLots(), 0, -error_20, GetTickCount() - li_12);
         if (li_4 == gi_112) return (a_ticket_0);
         if (error_20 != 0/* NO_ERROR */) {
            dl("  " + Symbol() + " >>> TICKET DELETE hat auch beim " + li_4 + ". Versuch nicht geklappt. Fehler: " + errorLog(error_20, ""), 1, 1);
            if (li_4 >= gi_116) f_giveTheError("f_deletePendingTicket", cmd_8, 0, 0, 0, 0, li_4, error_20);
            if (!check4Retry(error_20)) return (0);
            dl("  " + Symbol() + " RETRY to ORDER DELETE", 1, 1);
            dl("   ---------------------------------------------", 1, 1);
         }
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_deletePendingTicket: ");
   return (a_ticket_0);
}

int f_closeActivePosition(int a_ticket_0, bool ai_4 = TRUE, double ad_8 = 0.0, double ad_16 = 0.0) {
   bool is_closed_24;
   int error_28;
   double price_48;
   int li_56;
   if (gi_100) errorLog(GetLastError(), "START f_closeActivePosition: ");
   double order_lots_32 = 0;
   if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) return (0);
   int cmd_40 = OrderType();
   if (ai_4) order_lots_32 = OrderLots();
   else order_lots_32 = ad_8;
   for (int li_44 = 1; li_44 <= gi_112; li_44++) {
      f_waitForFreeTradeContext();
      RefreshRates();
      GetLastError();
      price_48 = f_getClosePrice(cmd_40);
      if (ad_16 > 0.0) {
         if (cmd_40 == OP_BUY)
            if (Bid < ad_16) return (0);
         if (cmd_40 == OP_SELL)
            if (Ask > ad_16) return (0);
      }
      if (gi_156) li_56 = GetTickCount();
      is_closed_24 = OrderClose(a_ticket_0, order_lots_32, price_48, g_slippage_76, Red);
      if (is_closed_24) {
         if (gi_156) f_logTradeOpenTime(1, OrderType(), order_lots_32, 1, a_ticket_0, GetTickCount() - li_56);
         if (ai_4) {
            if (OrderType() == OP_BUY)
               if (gi_92) dl("   Y. done. >>> LONG Ticket# " + a_ticket_0 + " wurde geschlossen!");
            if (OrderType() == OP_SELL)
               if (gi_92) dl("   Y. done. >>> SHORT Ticket# " + a_ticket_0 + " wurde geschlossen!");
         }
         if (!ai_4) {
            if (OrderType() == OP_BUY)
               if (gi_92) dl("   Y. done. >>> LONG Ticket# " + a_ticket_0 + " wurde teilweise geschlossen. Remaining Lots " + DoubleToStr(OrderLots() - ad_8, 2));
            if (OrderType() == OP_SELL)
               if (gi_92) dl("   Y. done. >>> SHORT Ticket# " + a_ticket_0 + " wurde teilweise geschlossen. Remaining Lots " + DoubleToStr(OrderLots() - ad_8, 2));
         }
         if (!(loginfo)) return (1);
         dl("   ---------------------------------------------");
         return (1);
      }
      if (!is_closed_24) {
         error_28 = GetLastError();
         if (gi_156) f_logTradeOpenTime(1, OrderType(), order_lots_32, 0, -error_28, GetTickCount() - li_56);
         if (li_44 == gi_112) {
            if (OrderType() == OP_BUY) dl(Symbol() + " EA STOP!!! Nach " + li_44 + " Versuchen konnte das LONG Ticket# " + a_ticket_0 + " immer noch nicht geschlossen werden!");
            if (OrderType() == OP_SELL) dl(Symbol() + " EA STOP!!! Nach " + li_44 + " Versuchen konnte das SHORT Ticket# " + a_ticket_0 + " immer noch nicht geschlossen werden!");
            return (-error_28);
         }
         if (error_28 != 0/* NO_ERROR */) {
            dl("  " + Symbol() + " >>> TICKET CLOSE hat auch beim " + li_44 + ". Versuch nicht geklappt.Lots " + ad_8 + " Fehler: " + errorLog(error_28, ""), 1, 1);
            if (li_44 >= gi_116 && OrderType() == OP_BUY) f_giveTheError("f_closeActivePosition", 0, 0, price_48, 0, 0, li_44, error_28);
            if (li_44 >= gi_116 && OrderType() == OP_SELL) f_giveTheError("f_closeActivePosition", 1, 0, price_48, 0, 0, li_44, error_28);
            if (!check4Retry(error_28)) return (-error_28);
            dl("  " + Symbol() + " RETRY to ORDER CLOSE", 1, 1);
            dl("   ---------------------------------------------", 1, 1);
         }
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_closeActivePosition: ");
   return (0);
}

int f_closeAllOrdersForWP(int a_magic_0, int a_cmd_4 = -1) {
   if (gi_100) errorLog(GetLastError(), "START f_closeAllOrdersForWP: ");
   int li_unused_8 = 0;
   int order_total_12 = OrdersTotal();
   bool li_ret_16 = TRUE;
   for (int pos_20 = order_total_12 - 1; pos_20 >= 0; pos_20--) {
      if (!OrderSelect(pos_20, SELECT_BY_POS, MODE_TRADES)) dl("Ticket# " + OrderTicket() + " kann nicht selected werden");
      else {
         if (a_magic_0 >= 0 && OrderMagicNumber() != a_magic_0) continue;
         if (OrderSymbol() == Symbol()) {
            RefreshRates();
            GetLastError();
            if (a_cmd_4 > -1 && OrderType() != a_cmd_4) {
               if (!(loginfo)) continue;
               dl("der TicketType " + OrderType() + " passt nicht zum geforderten Ordertype " + a_cmd_4 + ". Ticket auslassen. Next Ticket");
               continue;
            }
            if (OrderType() <= OP_SELL) {
               if (loginfo) dl("TRY to Close Ticket# " + OrderTicket());
               if (!(!f_closeActivePosition(OrderTicket(), 1))) continue;
               dl("Konnte Ticket #" + OrderTicket() + " nicht schlie?en!");
               li_ret_16 = FALSE;
               continue;
            }
            if (loginfo) dl("TRY to Delete Ticket# " + OrderTicket());
            if (f_deletePending(OrderTicket()) > 0) {
               dl("Konnte Ticket #" + OrderTicket() + " nicht l?schen!");
               li_ret_16 = FALSE;
            }
         }
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_closeAllOrdersForWP: ");
   return (li_ret_16);
}

double f_getClosePrice(int ai_0) {
   double price_4;
   if (gi_100) errorLog(GetLastError(), "START f_getClosePrice: ");
   if (ai_0 == 0) price_4 = Bid;
   if (ai_0 == 1) price_4 = Ask;
   if (gi_100) errorLog(GetLastError(), "ENDE f_getClosePrice: ");
   return (price_4);
}

void f_giveTheError(string as_0, int ai_8, double ad_12 = 0.0, double ad_20 = 0.0, double ad_28 = 0.0, double ad_36 = 0.0, int ai_unused_44 = 1, int a_error_48 = -1, string a_symbol_52 = " ") {
   int error_60;
   double ask_64;
   double bid_72;
   if (a_error_48 == -1) error_60 = GetLastError();
   else error_60 = a_error_48;
   if (a_symbol_52 == " ") a_symbol_52 = Symbol();
   if (error_60 != 146/* TRADE_CONTEXT_BUSY */ && error_60 != 132/* MARKET_CLOSED */) {
      ask_64 = MarketInfo(a_symbol_52, MODE_ASK);
      bid_72 = MarketInfo(a_symbol_52, MODE_BID);
      dl("  >>> ERROR @ " + as_0 + " for " + a_symbol_52 + " <<<", 1, 1);
      dl("  >!! Ticket    Vorsicht...." + DoubleToStr(OrderTicket(), 0), 1, 1);
      dl("  >!! LOTS       " + DoubleToStr(ad_36, 4), 1, 1);
      dl("  >!! newPrice   " + DoubleToStr(ad_12, Digits), 1, 1);
      dl("  >!! Bid: " + DoubleToStr(bid_72, Digits) + " Ask: " + DoubleToStr(ask_64, Digits), 1, 1);
      if (ai_8 == 0) dl("  >!! Price-DIFF " + DoubleToStr((bid_72 - ad_12) / gd_136, Digits), 1, 1);
      if (ai_8 == 1) dl("  >!! Price-DIFF " + DoubleToStr((ad_12 - ask_64) / gd_136, Digits), 1, 1);
      dl("  >!! newSL      " + DoubleToStr(ad_20, Digits), 1, 1);
      if (ad_20 > 0.0 && ai_8 == 0) dl("  >!! SL-DIFF    " + DoubleToStr((ad_12 - ad_20) / gd_136, Digits), 1, 1);
      if (ad_20 > 0.0 && ai_8 == 1) dl("  >!! SL-DIFF    " + DoubleToStr((ad_20 - ad_12) / gd_136, Digits), 1, 1);
      dl("  >!! newTP      " + DoubleToStr(ad_28, Digits), 1, 1);
      if (ad_28 > 0.0 && ai_8 == 0) dl("  >!! TP-DIFF    " + DoubleToStr((ad_28 - ad_12) / gd_136, Digits), 1, 1);
      if (ad_28 > 0.0 && ai_8 == 1) dl("  >!! TP-DIFF    " + DoubleToStr((ad_12 - ad_28) / gd_136, Digits), 1, 1);
      dl("  >!! Ask        " + DoubleToStr(ask_64, Digits), 1, 1);
      dl("  >!! Bid        " + DoubleToStr(bid_72, Digits), 1, 1);
      dl("  >!! minDiff    " + DoubleToStr(MarketInfo(a_symbol_52, MODE_STOPLEVEL) / gi_124, 4), 1, 1);
      dl("  >!! point      " + gd_136, 1, 1);
      dl("  >!! FEHLER: " + error_60 + " >>> " + ErrorDescription(error_60), 1, 1);
   }
   if (error_60 == 146/* TRADE_CONTEXT_BUSY */) {
      dl("  >>> ERROR @ " + as_0 + " for " + a_symbol_52 + " <<<", 1, 1);
      dl("  >!! FEHLER: " + error_60 + " >>> " + ErrorDescription(error_60), 1, 1);
   }
}

bool check4Retry(int ai_0) {
   switch (ai_0) {
   case 1:
      return (FALSE);
   case 2:
      return (FALSE);
   case 3:
      return (FALSE);
   case 4:
      return (TRUE);
   case 5:
      return (FALSE);
   case 6:
      return (TRUE);
   case 7:
      return (FALSE);
   case 8:
      return (FALSE);
   case 9:
      return (TRUE);
   case 64:
      return (FALSE);
   case 65:
      return (FALSE);
   case 128:
      return (FALSE);
   case 129:
      return (TRUE);
   case 130:
      return (FALSE);
   case 131:
      return (FALSE);
   case 132:
      return (FALSE);
   case 133:
      return (FALSE);
   case 134:
      return (FALSE);
   case 135:
      return (TRUE);
   case 136:
      return (TRUE);
   case 137:
      return (TRUE);
   case 138:
      return (TRUE);
   case 139:
      return (TRUE);
   case 140:
      return (FALSE);
   case 141:
      return (FALSE);
   case 145:
      return (TRUE);
   case 146:
      return (TRUE);
   case 147:
      return (FALSE);
   case 148:
      return (FALSE);
   case 4051:
      return (FALSE);
   case 4108:
      return (FALSE);
   }
   return (FALSE);
}

int f_waitForFreeTradeContext() {
   bool bool_0 = TRUE;
   int count_4 = 0;
   while (bool_0) {
      count_4++;
      Sleep(150 * count_4);
      bool_0 = IsTradeContextBusy();
      if (!bool_0) return (1);
      if (count_4 > 5) dl(Symbol() + " Trade Context is busy beim " + count_4 + ". Versuch. NEXT TRY", 1, 1);
      if (count_4 > 10) {
         dl(Symbol() + " Max Versuche wurde erreicht!", 1, 1);
         return (0);
      }
   }
   return (0);
}

double f_pipCalc(double ad_0, double ad_8, double ad_16 = -1.0) {
   if (ad_16 < 0.0) ad_16 = MarketInfo(Symbol(), MODE_TICKVALUE) * gi_124;
   double ld_ret_24 = ad_0 / (ad_16 * ad_8);
   return (ld_ret_24);
}

double f_moneyCalc(double ad_0, double ad_8) {
   double ld_16 = MarketInfo(Symbol(), MODE_TICKVALUE) / MarketInfo(Symbol(), MODE_TICKSIZE);
   double ld_ret_24 = ld_16 * ad_8 * ad_0 * gd_136;
   return (ld_ret_24);
}

double f_getTickValue(string as_0) {
   double ld_24;
   double iclose_32;
   if ((!g_bool_144) && !g_bool_148) return (MarketInfo(Symbol(), MODE_TICKVALUE) * gi_124);
   if (loginfo) {
      dl("      ---------------------------------------------");
      dl("      START f_getTickValue");
   }
   double ld_ret_8 = -1;
   if (StringFind(as_0, "EURUSD") >= 0) {
      ld_ret_8 = 0;
      if (Bid != 0.0) ld_ret_8 = 10.0 * (1.0 / Bid);
      if (loginfo) {
         dl("      TICKVALUE EURUSD");
         dl("      tickValue self made " + DoubleToStr(ld_ret_8, 4));
         dl("      tickValue MT        " + (MarketInfo(as_0, MODE_TICKVALUE) * gi_124));
      }
   }
   string str_concat_16 = StringConcatenate("EURUSD", f_getSuffix(Symbol()));
   if (StringFind(as_0, "GBPUSD") >= 0) {
      ld_ret_8 = 0;
      ld_24 = iClose(str_concat_16, PERIOD_M1, 1);
      if (ld_24 != 0.0) ld_ret_8 = 10.0 * (1 / ld_24);
      else dl("FEHLER in TICKVALUE Berechnung ED!! divider= " + ld_24, 1, 1, 1);
      if (loginfo) {
         dl("      TICKVALUE GBPUSD");
         dl("      tickValue self made " + DoubleToStr(ld_ret_8, 4));
         dl("      tickValue MT        " + DoubleToStr(MarketInfo(as_0, MODE_TICKVALUE) * gi_124, 4));
      }
   }
   if (StringFind(as_0, "EURJPY") >= 0) {
      ld_ret_8 = 0;
      ld_24 = iClose(as_0, PERIOD_M1, 1);
      if (ld_24 != 0.0) ld_ret_8 = 1000.0 * (1 / ld_24);
      else dl("FEHLER in TICKVALUE Berechnung EJ!! divider= " + ld_24, 1, 1, 1);
      if (loginfo) dl("tickValue self made " + DoubleToStr(ld_ret_8, 4));
      if (loginfo) dl("tickValue MT        " + DoubleToStr(MarketInfo(as_0, MODE_TICKVALUE) * gi_124, 4));
   }
   if (StringFind(as_0, "USDJPY") >= 0) {
      ld_ret_8 = 0;
      ld_24 = iClose(as_0, PERIOD_M1, 1);
      iclose_32 = iClose(str_concat_16, PERIOD_M1, 1);
      if (ld_24 != 0.0 && iclose_32 != 0.0) ld_ret_8 = 1000.0 * (1 / ld_24) / iclose_32;
      else dl("FEHLER in TICKVALUE Berechnung UJ!! divider= " + ld_24 + " dividerII= " + iclose_32, 1, 1, 1);
      if (loginfo) dl("tickValue self made " + DoubleToStr(ld_ret_8, 4));
      if (loginfo) dl("tickValue MT        " + DoubleToStr(MarketInfo(as_0, MODE_TICKVALUE) * gi_124, 4));
   }
   if (StringFind(as_0, "EURGBP") >= 0) {
      ld_ret_8 = 0;
      ld_24 = 1 / iClose(as_0, PERIOD_M1, 1);
      if (ld_24 != 0.0) ld_ret_8 = 10.0 * (1 / ld_24);
      else dl("FEHLER in TICKVALUE Berechnung EG!! divider= " + ld_24, 1, 1, 1);
      if (loginfo) dl("tickValue self made " + DoubleToStr(ld_ret_8, 4));
      if (loginfo) dl("tickValue MT        " + DoubleToStr(MarketInfo(as_0, MODE_TICKVALUE) * gi_124, 4));
   }
   if (StringFind(as_0, "AUDUSD") >= 0) {
      ld_24 = iClose(str_concat_16, PERIOD_M1, 0);
      if (ld_24 != 0.0) ld_ret_8 = 10.0 * (1 / ld_24);
      else dl("FEHLER in TICKVALUE Berechnung AU! divider= " + ld_24, 1, 1, 1);
      dl("      TICKVALUE AUDUSD");
      dl("      tickValue self made " + DoubleToStr(ld_ret_8, 4));
      dl("      tickValue MT        " + DoubleToStr(MarketInfo(Symbol(), MODE_TICKVALUE) * gi_124, 4));
   }
   double iclose_40 = 0;
   if (StringFind(as_0, "USDCHF") >= 0) {
      ld_24 = iClose("USDCHF", PERIOD_M1, 1);
      iclose_40 = iClose(str_concat_16, PERIOD_M1, 0);
      if (ld_24 != 0.0 && iclose_40 != 0.0) ld_ret_8 = 10.0 * (1 / ld_24) / iclose_40;
      else dl("FEHLER in TICKVALUE Berechnung UC! divider= " + ld_24 + " divider_II= " + iclose_40, 1, 1, 1);
      dl("      TICKVALUE USDCHF");
      dl("      tickValue self made " + DoubleToStr(ld_ret_8, 4));
      dl("      tickValue MT        " + DoubleToStr(MarketInfo(Symbol(), MODE_TICKVALUE) * gi_124, 4));
   }
   if (ld_ret_8 <= 0.0) {
      if (ld_ret_8 == 0.0) dl("Das hat schon wieder jemand bei Lotsize vergessen die Ticksize auszurechnen, next Try ?ber Marketinfo!!");
      ld_ret_8 = MarketInfo(Symbol(), MODE_TICKVALUE) * gi_124;
      dl("      tickValue lastChance        " + DoubleToStr(ld_ret_8, 4));
      if (ld_ret_8 > 0.0) return (ld_ret_8);
      dl("Error: Pech gehabt, Tickvalue ist immernoch 0!", 1, 1, 1);
      return (0);
   }
   return (ld_ret_8);
}

string f_getSuffix(string as_0) {
   int str_len_8 = StringLen(as_0);
   if (str_len_8 == 6) return ("");
   string ls_ret_12 = StringSubstr(as_0, 6, str_len_8 - 6);
   if (loginfo) dl("suffix " + ls_ret_12);
   return (ls_ret_12);
}

int f_getLotround() {
   if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.0) return (0);
   if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.1) return (1);
   if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) return (2);
   if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.001) return (3);
   dl("Lotroundermittlung nicht erfolgreich", 1, 1, 0);
   return (-1);
}

double nd(double ad_0, int a_digits_8 = -1) {
   if (a_digits_8 == -1) a_digits_8 = Digits;
   return (NormalizeDouble(ad_0, a_digits_8));
}

string dts(double ad_0, int a_digits_8 = -1) {
   if (a_digits_8 == -1) a_digits_8 = Digits;
   return (DoubleToStr(ad_0, a_digits_8));
}

string f_boolToString(bool ai_0) {
   if (ai_0) return ("true");
   return ("false");
}

string f_cmdToString(int ai_0) {
   if (ai_0 == 0) return ("OP_BUY");
   if (ai_0 == 1) return ("OP_SELL");
   if (ai_0 == 2) return ("OP_BUYLIMIT");
   if (ai_0 == 3) return ("OP_SELLLIMIT");
   if (ai_0 == 4) return ("OP_BUYSTOP");
   if (ai_0 == 5) return ("OP_SELLSTOP");
   return (ai_0);
}

string f_cmdToDirection(int ai_0) {
   if (ai_0 == 0 || ai_0 == 2 || ai_0 == 4) return ("Long");
   if (ai_0 == 1 || ai_0 == 3 || ai_0 == 5) return ("Short");
   return (ai_0);
}

string f_strToPeriod(int ai_0) {
   switch (ai_0) {
   case 43200:
      return ("Monthly");
   case 10080:
      return ("Weekly");
   case 1440:
      return ("Daily");
   case 240:
      return ("H4");
   case 60:
      return ("H1");
   case 30:
      return ("M30");
   case 15:
      return ("M15");
   case 5:
      return ("M5");
   case 1:
      return ("M1");
   }
   return ("UnknownPeriod");
}

string f_tStr() {
   return (TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS));
}

string f_shortSymbol(string as_0) {
   if (StringFind(as_0, "AUDUSD") != -1) return ("AU");
   if (StringFind(as_0, "EURCHF") != -1) return ("EC");
   if (StringFind(as_0, "EURUSD") != -1) return ("ED");
   if (StringFind(as_0, "EURGBP") != -1) return ("EG");
   if (StringFind(as_0, "EURJPY") != -1) return ("EJ");
   if (StringFind(as_0, "GBPUSD") != -1) return ("GU");
   if (StringFind(as_0, "USDCHF") != -1) return ("UC");
   if (StringFind(as_0, "USDJPY") != -1) return ("UJ");
   return (as_0);
}

int f_checkForNewTFBar(int a_timeframe_0, bool ai_4 = TRUE) {
   int li_8;
   if (a_timeframe_0 != Period()) li_8 = iBars(Symbol(), a_timeframe_0);
   else li_8 = Bars;
   if (li_8 != gi_184) {
      if (ai_4 && loginfo) dl(">>> NEW BAR @ TF <<< --------------------------------------------------------------------------------------------------------------");
      gi_184 = li_8;
      return (1);
   }
   return (0);
}

void digitRead(string a_symbol_0, bool ai_8 = FALSE) {
   double margincalcmode_12 = MarketInfo(a_symbol_0, MODE_MARGINCALCMODE);
   if (ai_8) dl("Symbol " + a_symbol_0, 1);
   if (ai_8) dl("underlying " + margincalcmode_12, 1);
   g_digits_128 = MarketInfo(a_symbol_0, MODE_DIGITS);
   if (margincalcmode_12 == 0.0) {
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 3.0 || MarketInfo(a_symbol_0, MODE_DIGITS) == 5.0) {
         gi_124 = 10;
         gd_136 = 10.0 * MarketInfo(a_symbol_0, MODE_POINT);
      } else gd_136 = MarketInfo(a_symbol_0, MODE_POINT);
   }
   if (margincalcmode_12 == 1.0 || margincalcmode_12 == 2.0 || margincalcmode_12 == 3.0) {
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 0.0) gd_136 = MarketInfo(a_symbol_0, MODE_POINT);
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 1.0) {
         gi_124 = 10;
         gd_136 = 10.0 * MarketInfo(a_symbol_0, MODE_POINT);
      }
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 2.0) {
         gi_124 = 100;
         gd_136 = 100.0 * MarketInfo(a_symbol_0, MODE_POINT);
         if (MarketInfo(a_symbol_0, MODE_ASK) < 50.0) {
            gd_136 = MarketInfo(a_symbol_0, MODE_POINT);
            gi_124 = 1;
         }
      }
   }
   if (margincalcmode_12 == 4.0) {
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 0.0 || MarketInfo(a_symbol_0, MODE_DIGITS) == 2.0) gd_136 = MarketInfo(a_symbol_0, MODE_POINT);
      if (MarketInfo(a_symbol_0, MODE_DIGITS) == 1.0 || MarketInfo(a_symbol_0, MODE_DIGITS) == 3.0) {
         gi_124 = 10;
         gd_136 = 10.0 * MarketInfo(a_symbol_0, MODE_POINT);
      }
   }
   if (ai_8) dl("Point " + Point + " point " + gd_136, 1);
   if (ai_8) dl("Digits " + MarketInfo(a_symbol_0, MODE_DIGITS) + " fP " + gi_124, 1);
}

void f_comment(string as_0) {
   if (g_bool_144 || g_bool_148 && (!IsVisualMode())) return;
   g_str_concat_192 = StringConcatenate(g_str_concat_192, as_0);
   Comment(g_str_concat_192);
}

int f_generateRandomNumber(int ai_0, int a_datetime_4 = -1) {
   if (a_datetime_4 == -1) a_datetime_4 = TimeCurrent();
   MathSrand(a_datetime_4);
   double ld_8 = MathRand();
   double ld_ret_16 = MathMod(ld_8, ai_0);
   return (ld_ret_16);
}

void f_logTradeOpenTime(int ai_0, int ai_4, double ad_8, int ai_16, int ai_20, int ai_24) {
   string str_concat_28 = StringConcatenate("C:\\Forex\\", "OrderMonitor\\", "OrderMonitor_", gs_server_208, ".txt");
   string str_concat_36 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE), "; ", TimeToStr(TimeLocal(), TIME_SECONDS));
   string ls_44 = f_IdToString(ai_0);
   string ls_52 = f_cmdToString(ai_4);
   string ls_60 = dts(ad_8, 2);
   string ls_68 = f_boolToString(ai_16);
   string str_concat_76 = StringConcatenate(str_concat_36, "; ", TimeCurrent(), "; ", gs_server_208, "; ", AccountCompany(), "; ", AccountNumber(), "; ", Symbol(), "; ",
      ls_44, "; ", ls_52, "; ", ls_60, "; ", ls_68, "; ", ai_20, "; ", ai_24, "; ");
   WriteFile(str_concat_28, str_concat_76);
   dl(str_concat_76);
}

string f_IdToString(int ai_0) {
   switch (ai_0) {
   case 0:
      return ("ID_OPEN");
   case 1:
      return ("ID_FULLCLOSE");
   case 2:
      return ("ID_PARTCLOSE");
   case 3:
      return ("ID_MODIFY");
   }
   return ("ID_NOTKNOWN");
}

void f_logError(string as_0) {
   string str_concat_8 = StringConcatenate("C:\\Forex\\ErrorMsg\\", "errorMsg.txt");
   string str_concat_16 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE), "; ", TimeToStr(TimeLocal(), TIME_SECONDS));
   string str_concat_24 = StringConcatenate(str_concat_16, " TL: ", TimeLocal(), " EA: ", WindowExpertName(), " AC: ", AccountNumber(), " AN: ", AccountName(), " DE: ",
      f_boolToString(IsDemo()), " SY: ", Symbol(), " ER: ", as_0, ";");
   WriteFile(str_concat_8, str_concat_24);
   dl(str_concat_24);
}

void f_objectDelete(string a_name_0) {
   bool bool_8;
   if (ObjectFind(a_name_0) != -1) {
      bool_8 = ObjectDelete(a_name_0);
      if (bool_8 == FALSE && gi_100) errorLog(GetLastError(), "Fehler bei ObjectSet int deleteLines");
   }
}

void paint(string a_name_0, double ad_8, double a_color_16, double a_width_24, int a_datetime_32, double a_price_36) {
   int error_44;
   if (g_bool_144 == FALSE) {
      if (gi_100) errorLog(GetLastError(), "Anfang paint " + ad_8 + " : ");
      f_objectDelete(a_name_0);
      if (!ObjectCreate(a_name_0, OBJ_ARROW, 0, a_datetime_32, a_price_36)) {
         error_44 = GetLastError();
         if (error_44 != 4200/* OBJECT_ALREADY_EXISTS */) errorLog(error_44, "Fehler beim WinDingserstellen-Create name: " + a_name_0 + " am: " + TimeToStr(a_datetime_32));
      } else {
         if (!ObjectSet(a_name_0, OBJPROP_ARROWCODE, ad_8)) errorLog(GetLastError(), "Fehler beim WinDingserstellen-SetCode");
         if (!ObjectSet(a_name_0, OBJPROP_COLOR, a_color_16)) errorLog(GetLastError(), "Fehler beim WinDingserstellen-SetColor");
         if (!ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_24)) errorLog(GetLastError(), "Fehler beim WinDingserstellen-SetWidth");
         if (gi_100) errorLog(GetLastError(), "Ende paint: ");
      }
   }
}

void dl(string as_0, bool ai_8 = TRUE, bool ai_12 = FALSE, bool ai_16 = FALSE, bool ai_20 = FALSE, bool ai_24 = TRUE) {
   if (ai_8) log(as_0, ai_20, ai_24);
   if (ai_12 || prnAll) Print(as_0);
   if (ai_16)
      if ((!g_bool_144) && !g_bool_148) Alert(Symbol(), ": ", as_0);
}

void log_openName(string as_0, int a_timeframe_8 = -1, int ai_12 = -1, bool ai_16 = FALSE) {
   int timeframe_20;
   string str_concat_24;
   string str_concat_32;
   if (g_bool_144 == FALSE) {
      timeframe_20 = a_timeframe_8;
      if (a_timeframe_8 == 0) timeframe_20 = Period();
      str_concat_24 = "";
      str_concat_32 = "";
      if (ai_16) {
         if (ai_12 >= 0) str_concat_24 = StringConcatenate("\\", "MN_", ai_12);
         if (timeframe_20 > 0) str_concat_32 = StringConcatenate(", ", f_strToPeriod(timeframe_20));
         if (g_bool_148) {
            g_str_concat_240 = StringConcatenate("logs\\", as_0, "(", Symbol(), str_concat_32, ")", str_concat_24, "\\", TimeToStr(TimeLocal(), TIME_DATE), ".txt");
            g_file_248 = FileOpen(g_str_concat_240, FILE_WRITE);
         } else {
            g_str_concat_240 = StringConcatenate("logs\\", as_0, "(", Symbol(), str_concat_32, ")", str_concat_24, "\\", TimeToStr(TimeLocal(), TIME_DATE), ".txt");
            g_file_248 = FileOpen(g_str_concat_240, FILE_WRITE|FILE_READ);
         }
         if (g_file_248 == -1) {
            Print("Error beim Errordatei anlegen: " + GetLastError());
            return;
         }
      } else {
         if (ai_12 >= 0) str_concat_24 = StringConcatenate("_", "MN_", ai_12);
         if (timeframe_20 > 0) str_concat_32 = StringConcatenate("_", f_strToPeriod(timeframe_20));
         if (g_bool_148) {
            g_str_concat_240 = StringConcatenate("logs\\", as_0, "(", StringSubstr(Symbol(), 0, 6), str_concat_32, ")", str_concat_24, "_", TimeToStr(TimeLocal(), TIME_DATE),
               ".txt");
            g_file_248 = FileOpen(g_str_concat_240, FILE_WRITE);
         } else {
            g_str_concat_240 = StringConcatenate("logs\\", as_0, "(", StringSubstr(Symbol(), 0, 6), str_concat_32, ")", str_concat_24, "_", TimeToStr(TimeLocal(), TIME_DATE),
               ".txt");
            g_file_248 = FileOpen(g_str_concat_240, FILE_WRITE|FILE_READ);
         }
      }
      Print("LogfilePath: \\experts\\files\\" + g_str_concat_240);
      if (!g_bool_148) FileClose(g_file_248);
   }
}

void log_close() {
   if (g_file_248 > 0) FileClose(g_file_248);
}

void log(string a_str_concat_0, bool ai_8 = FALSE, bool ai_12 = TRUE) {
   if (g_bool_144 == FALSE) {
      if (!gi_104)
         if (!(ai_8)) return;
      if (!g_bool_148) g_file_248 = FileOpen(g_str_concat_240, FILE_WRITE|FILE_READ);
      if (g_file_248 < 0) Print("Log write error! Text: ", a_str_concat_0);
      else {
         if (!FileSeek(g_file_248, 0, SEEK_END)) Print("FileSeek ( " + g_file_248 + ", 0, SEEK_END ) - Error #", GetLastError());
         else {
            if (a_str_concat_0 != "\n" && a_str_concat_0 != "\r\n") {
               if (ai_12) a_str_concat_0 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE) + "; " + TimeToStr(TimeLocal(), TIME_SECONDS), "; ", a_str_concat_0);
               else a_str_concat_0 = a_str_concat_0;
            }
            if (FileWrite(g_file_248, a_str_concat_0) < 0) Print("FileWrite ( ", g_file_248, ", ", a_str_concat_0, " ) - Error #", GetLastError());
            else {
               if (g_bool_148) FileFlush(g_file_248);
               else FileClose(g_file_248);
               if (gi_100) errorLog(GetLastError(), "Ende log: ");
            }
         }
      }
   }
}

string errorLog(int ai_0, string as_4 = "", bool ai_12 = TRUE, bool ai_16 = FALSE, bool ai_20 = FALSE) {
   string str_concat_24;
   if (ai_0 == 4110 || ai_0 == 4111) return;
   if (ai_0 > 0) {
      str_concat_24 = StringConcatenate(Symbol(), " ", as_4, " : FEHLER: ", ai_0, "=", ErrorDescription(ai_0));
      if (g_bool_144 || g_bool_148) ai_20 = FALSE;
      dl(str_concat_24, ai_12, ai_16, ai_20);
      return (str_concat_24);
   }
   return ("");
}

string ErrorDescription(int ai_0) {
   string ls_ret_4;
   switch (ai_0) {
   case 0:
   case 1:
      ls_ret_4 = "no error";
      break;
   case 2:
      ls_ret_4 = "common error";
      break;
   case 3:
      ls_ret_4 = "invalid trade parameters";
      break;
   case 4:
      ls_ret_4 = "trade server is busy";
      break;
   case 5:
      ls_ret_4 = "old version of the client terminal";
      break;
   case 6:
      ls_ret_4 = "no connection with trade server";
      break;
   case 7:
      ls_ret_4 = "not enough rights";
      break;
   case 8:
      ls_ret_4 = "too frequent requests";
      break;
   case 9:
      ls_ret_4 = "malfunctional trade operation (never returned error)";
      break;
   case 64:
      ls_ret_4 = "account disabled";
      break;
   case 65:
      ls_ret_4 = "invalid account";
      break;
   case 128:
      ls_ret_4 = "trade timeout";
      break;
   case 129:
      ls_ret_4 = "invalid price";
      break;
   case 130:
      ls_ret_4 = "invalid stops";
      break;
   case 131:
      ls_ret_4 = "invalid trade volume";
      break;
   case 132:
      ls_ret_4 = "market is closed";
      break;
   case 133:
      ls_ret_4 = "trade is disabled";
      break;
   case 134:
      ls_ret_4 = "not enough money";
      break;
   case 135:
      ls_ret_4 = "price changed";
      break;
   case 136:
      ls_ret_4 = "off quotes";
      break;
   case 137:
      ls_ret_4 = "broker is busy (never returned error)";
      break;
   case 138:
      ls_ret_4 = "requote";
      break;
   case 139:
      ls_ret_4 = "order is locked";
      break;
   case 140:
      ls_ret_4 = "long positions only allowed";
      break;
   case 141:
      ls_ret_4 = "too many requests";
      break;
   case 145:
      ls_ret_4 = "modification denied because order too close to market";
      break;
   case 146:
      ls_ret_4 = "trade context is busy";
      break;
   case 147:
      ls_ret_4 = "expirations are denied by broker";
      break;
   case 148:
      ls_ret_4 = "amount of open and pending orders has reached the limit";
      break;
   case 4000:
      ls_ret_4 = "no error (never generated code)";
      break;
   case 4001:
      ls_ret_4 = "wrong function pointer";
      break;
   case 4002:
      ls_ret_4 = "array index is out of range";
      break;
   case 4003:
      ls_ret_4 = "no memory for function call stack";
      break;
   case 4004:
      ls_ret_4 = "recursive stack overflow";
      break;
   case 4005:
      ls_ret_4 = "not enough stack for parameter";
      break;
   case 4006:
      ls_ret_4 = "no memory for parameter string";
      break;
   case 4007:
      ls_ret_4 = "no memory for temp string";
      break;
   case 4008:
      ls_ret_4 = "not initialized string";
      break;
   case 4009:
      ls_ret_4 = "not initialized string in array";
      break;
   case 4010:
      ls_ret_4 = "no memory for array\' string";
      break;
   case 4011:
      ls_ret_4 = "too long string";
      break;
   case 4012:
      ls_ret_4 = "remainder from zero divide";
      break;
   case 4013:
      ls_ret_4 = "zero divide";
      break;
   case 4014:
      ls_ret_4 = "unknown command";
      break;
   case 4015:
      ls_ret_4 = "wrong jump (never generated error)";
      break;
   case 4016:
      ls_ret_4 = "not initialized array";
      break;
   case 4017:
      ls_ret_4 = "dll calls are not allowed";
      break;
   case 4018:
      ls_ret_4 = "cannot load library";
      break;
   case 4019:
      ls_ret_4 = "cannot call function";
      break;
   case 4020:
      ls_ret_4 = "expert function calls are not allowed";
      break;
   case 4021:
      ls_ret_4 = "not enough memory for temp string returned from function";
      break;
   case 4022:
      ls_ret_4 = "system is busy (never generated error)";
      break;
   case 4050:
      ls_ret_4 = "invalid function parameters count";
      break;
   case 4051:
      ls_ret_4 = "invalid function parameter value";
      break;
   case 4052:
      ls_ret_4 = "string function internal error";
      break;
   case 4053:
      ls_ret_4 = "some array error";
      break;
   case 4054:
      ls_ret_4 = "incorrect series array using";
      break;
   case 4055:
      ls_ret_4 = "custom indicator error";
      break;
   case 4056:
      ls_ret_4 = "arrays are incompatible";
      break;
   case 4057:
      ls_ret_4 = "global variables processing error";
      break;
   case 4058:
      ls_ret_4 = "global variable not found";
      break;
   case 4059:
      ls_ret_4 = "function is not allowed in testing mode";
      break;
   case 4060:
      ls_ret_4 = "function is not confirmed";
      break;
   case 4061:
      ls_ret_4 = "send mail error";
      break;
   case 4062:
      ls_ret_4 = "string parameter expected";
      break;
   case 4063:
      ls_ret_4 = "integer parameter expected";
      break;
   case 4064:
      ls_ret_4 = "double parameter expected";
      break;
   case 4065:
      ls_ret_4 = "array as parameter expected";
      break;
   case 4066:
      ls_ret_4 = "requested history data in update state";
      break;
   case 4099:
      ls_ret_4 = "end of file";
      break;
   case 4100:
      ls_ret_4 = "some file error";
      break;
   case 4101:
      ls_ret_4 = "wrong file name";
      break;
   case 4102:
      ls_ret_4 = "too many opened files";
      break;
   case 4103:
      ls_ret_4 = "cannot open file";
      break;
   case 4104:
      ls_ret_4 = "incompatible access to a file";
      break;
   case 4105:
      ls_ret_4 = "no order selected";
      break;
   case 4106:
      ls_ret_4 = "unknown symbol";
      break;
   case 4107:
      ls_ret_4 = "invalid price parameter for trade function";
      break;
   case 4108:
      ls_ret_4 = "invalid ticket";
      break;
   case 4109:
      ls_ret_4 = "trade is not allowed in the expert properties";
      break;
   case 4110:
      ls_ret_4 = "longs are not allowed in the expert properties";
      break;
   case 4111:
      ls_ret_4 = "shorts are not allowed in the expert properties";
      break;
   case 4200:
      ls_ret_4 = "object is already exist";
      break;
   case 4201:
      ls_ret_4 = "unknown object property";
      break;
   case 4202:
      ls_ret_4 = "object is not exist";
      break;
   case 4203:
      ls_ret_4 = "unknown object type";
      break;
   case 4204:
      ls_ret_4 = "no object name";
      break;
   case 4205:
      ls_ret_4 = "object coordinates error";
      break;
   case 4206:
      ls_ret_4 = "no specified subwindow";
      break;
   case 9999:
      ls_ret_4 = "######################";
      break;
   default:
      ls_ret_4 = "unknown error";
   }
   return (ls_ret_4);
}

int WriteFile(string as_0, string a_str_concat_8, int ai_16 = 2, int ai_20 = 0, bool ai_24 = FALSE) {
   int li_28;
   a_str_concat_8 = StringConcatenate(a_str_concat_8, "\r\n");
   int li_32 = _lopen(as_0, 1);
   if (li_32 < 0 || ai_24) {
      li_32 = _lcreat(as_0, 0);
      if (li_32 < 0) {
         Print("Error creating file ", as_0);
         if (!CreateFullPath(as_0)) {
            Print("Error creating path:", as_0);
            Alert("Error creating path:", as_0);
            return (0);
         }
         li_32 = _lcreat(as_0, 0);
      }
      li_28 = _lclose(li_32);
      li_32 = -1;
   }
   if (li_32 < 0) li_32 = _lopen(as_0, 1);
   if (li_32 < 0) {
      Print("Error opening file ", as_0);
      return (0);
   }
   li_28 = _llseek(li_32, ai_20, ai_16);
   if (li_28 < 0) {
      Print("Error placing pointer while writing");
      return (0);
   }
   int str_len_36 = StringLen(a_str_concat_8);
   li_28 = _lwrite(li_32, a_str_concat_8, str_len_36);
   if (li_28 < 0) Print("Error writing to file ", as_0, " ", str_len_36, " bytes");
   li_28 = _lclose(li_32);
   if (li_28 < 0) Print("Error closing file ", as_0);
   return (1);
}

bool CreateFullPath(string as_0) {
   string lsa_12[];
   int lia_16[];
   bool li_ret_8 = FALSE;
   if (StringLen(as_0) == 0) return (FALSE);
   Print("Create path=>", as_0);
   if (!ParsePath(lsa_12, as_0)) return (FALSE);
   Print("Total subfolders:", ArraySize(lsa_12));
   for (int index_20 = 0; CreateDirectoryA(lsa_12[index_20], lia_16) == 0; index_20++) {
   }
   Print("Create folder:", lsa_12[index_20]);
   for (index_20--; index_20 >= 0; index_20--) {
      CreateDirectoryA(lsa_12[index_20], lia_16);
      Print("Created folder:", lsa_12[index_20]);
   }
   if (index_20 < 0) li_ret_8 = TRUE;
   return (li_ret_8);
}

bool ParsePath(string &asa_0[], string as_4) {
   int li_28;
   bool li_ret_12 = FALSE;
   int li_16 = StringLen(as_4);
   if (li_16 == 0) return (li_ret_12);
   li_16--;
   Print("Parse path=>", as_4);
   int li_20 = 0;
   int li_unused_24 = 0;
   while (li_16 >= 0) {
      li_28 = StringGetChar(as_4, li_16);
      if (li_28 == '\') {
         if (StringGetChar(as_4, li_16 - 1) == '\') break;
         li_20++;
         ArrayResize(asa_0, li_20);
         asa_0[li_20 - 1] = StringSubstr(as_4, 0, li_16);
         Print(li_20, ":", asa_0[li_20 - 1]);
      }
      li_16--;
   }
   if (li_20 > 0) li_ret_12 = TRUE;
   return (li_ret_12);
}

void varsEinlesen(int ai_unused_0, string as_unused_4, int ai_unused_12) {
}

int f_checkIfTradingAllowed() {
   if (!gi_120) {
      Comment(StringConcatenate("\n\n", "EA-Stopped!\n", g_text_1000));
      if (gi_1168) {
         dl(StringConcatenate("EA-Stopped! ", g_text_1000), 1, 1);
         if (!gi_276) f_logError(g_text_1000);
         gi_1168 = FALSE;
      }
      if (gi_1176) {
         f_closeAllOrdersForWP_II(MAGICNUMBER);
         f_getActiveTicket(g_ticket_168, g_ticket_172);
         if (g_ticket_168 == 0 && g_ticket_172 == 0) gi_1176 = FALSE;
      }
      if (!(!gi_1172)) return (0);
      f_deleteInfoObjects(0);
      gi_1172 = TRUE;
      return (0);
   }
   return (1);
}

void f_closeAllAndCheck() {
   f_closeAllOrdersForWP_II(MAGICNUMBER);
   f_getActiveTicket(g_ticket_168, g_ticket_172);
   if (g_ticket_168 > 0 || g_ticket_172 > 0) {
      dl("Es sind immernoch Order offen, diese werden jetzt tickbytick geschlossen!");
      gi_1176 = TRUE;
   }
}

int f_checkIfOpenSuccessfull(int ai_0, int ai_4, double ad_8, double ad_16, int ai_24) {
   bool li_ret_28 = FALSE;
   if (ai_0 > 0) {
      li_ret_28 = f_checkNewTicket(ai_0, ai_4, ad_8, ad_16, ai_24);
      return (li_ret_28);
   }
   if (loginfo) dl("ERROR @ OrderOpen! Das neue Ticket konnte nicht er?ffnet werden. Fehler: " + ai_0);
   if (!gi_276) f_logError("Orderer?ffnung, Fehler: " + ErrorDescription(MathAbs(ai_0)));
   if (ai_0 == -130) {
      f_createErrorMessageOrder(ai_0);
      return (0);
   }
   if (ai_0 == -128 || ai_0 == -1) {
      dl("Fehler == " + ai_0 + ", es muss geschaut werden, ob es ein Ticket gibt!");
      f_getActiveTicket(g_ticket_168, g_ticket_172);
      if (g_ticket_168 > 0 || g_ticket_172 > 0) {
         dl("Obwohl es einen Fehler gab, gibt es ein neues Ticket!");
         if (ai_4 == 0 && g_ticket_168 > 0) {
            li_ret_28 = f_checkNewTicket(g_ticket_168, ai_4, ad_8, ad_16, ai_24);
            return (li_ret_28);
         }
         if (ai_4 == 1 && g_ticket_172 > 0) {
            li_ret_28 = f_checkNewTicket(g_ticket_172, ai_4, ad_8, ad_16, ai_24);
            return (li_ret_28);
         }
      } else {
         dl("Die Order konnte nicht erfolgreich abgegeben werden!");
         if (!(!g_bool_144)) return (0);
         paint("ERROR_TIMEOUT-128" + f_tStr(), 89, Red, 1, Time[0], f_getDrawingPos(ai_4));
         return (0);
      }
   }
   return (li_ret_28);
}

double f_getLotsize_II(double ad_0, double ad_8, int ai_16, double &ad_20) {
   double ld_68;
   double ld_76;
   double ld_84;
   double ld_92;
   double ld_100;
   double ld_108;
   double ld_28 = 100;
   double ld_36 = 0;
   double ld_44 = 0;
   double ld_52 = 0;
   if (gi_88) dl("--------------------------------------");
   if (gi_88) dl("START f_getLotsize for MoneyManagement_Variante " + MoneyManagement_Variant);
   if (gi_88) dl("   baseMoney          " + DoubleToStr(ad_0, 2) + AccountCurrency());
   ld_28 = ad_8;
   if (gi_88) dl("   riskInPoints       " + DoubleToStr(ld_28, 4));
   double ld_60 = 1.0;
   if (gi_260) ld_60 = f_getTickValue(Symbol());
   else ld_60 = nd(f_MarketInfo_TICKVALUE() * gi_124);
   if (gi_88) dl("   tickValue          " + DoubleToStr(ld_60, 8));
   if (ld_60 <= 0.001) {
      dl("!!! ACHTUNG! Es gibt keine TickValue f?r das W?hrungspaar " + Symbol() + "!! So kann nicht getradet werden!");
      if (!(!g_bool_144)) return (0);
      paint("ERROR_NO TICKVALUE_" + f_tStr(), 105, Red, 1, Time[0], f_getDrawingPos(ai_16));
      return (0);
   }
   if (MoneyManagement_Variant == 1 || MoneyManagement_Variant == 2) f_getTotalProfitForEA();
   if (MoneyManagement_Variant == 1) {
      if (gi_88) dl("   START FFM Berechnung");
      ld_68 = 0;
      if (ai_16 == 0) ld_68 = risk_Long_Percent;
      else ld_68 = risk_Short_Percent;
      if (gi_88) dl("   risk               " + DoubleToStr(ld_68, 2));
      ld_44 = ld_68 / 100.0 * ad_0;
      if (gi_88) dl("   moneyToRisk @ FFM  " + DoubleToStr(ld_44, 2) + AccountCurrency());
      if (use_Adaptive_MM == TRUE) {
         if (gi_88) dl("   use_Adaptive_MM == true");
         ld_76 = 0;
         if (ai_16 == 0) {
            ld_76 = Divisor_Long;
            if (gi_88) dl("   Teiler " + ld_76);
            ld_36 = gd_808;
            if (gi_88) dl("   totalProfit = longProfit (" + DoubleToStr(gd_808, 2) + ")");
         }
         if (ai_16 == 1) {
            ld_76 = Divisor_Short;
            if (gi_88) dl("   Teiler " + Divisor_Short);
            ld_36 = gd_816;
            if (gi_88) dl("   totalProfit = shortProfit (" + DoubleToStr(gd_816, 2) + ")");
         }
         ld_84 = ld_36 / ld_76;
         if (gi_88) dl("   moneyToRisk_II = totalProfit/Teiler");
         if (gi_88) dl("   moneyToRisk_II " + DoubleToStr(ld_84, 2) + AccountCurrency());
         if (ld_84 <= ld_44) {
            if (gi_88) {
               dl("   das adaptive MM kommt noch nicht zur Anwendung. Risk by adaptiveMM " + DoubleToStr(ld_84, 2) + AccountCurrency() + " < Risk by FFM " + DoubleToStr(ld_44, 2) +
                  AccountCurrency());
            }
         }
         if (ld_84 > ld_44) {
            if (gi_88) dl("   Risk Increase by adaptiveMM!");
            if (gi_88) dl("   moneyToRisk_II > moneyToRisk!");
            ld_44 = ld_84;
         }
      }
      if (gi_88) dl("   final moneyToRisk = " + DoubleToStr(ld_44, 2) + AccountCurrency());
      ld_52 = ld_44 / (ld_28 * ld_60);
      if (gi_88) dl("   lotround       " + DoubleToStr(loginfo8, 4));
      if (gi_88) dl("   finalLots grob " + DoubleToStr(ld_52, 4));
      if (gi_88) dl("   finalLots      " + DoubleToStr(NormalizeDouble(ld_52, loginfo8), 4));
   }
   if (MoneyManagement_Variant == 2) {
      if (gi_88) dl("   START ReinvestPercent");
      ld_92 = 0;
      ld_100 = 0;
      if (ai_16 == 0) {
         ld_92 = NormalizeDouble(gd_808 * reinvest_PcL / 100.0, 2);
         ld_44 = basicRisk_L + ld_92;
         ld_100 = maxRisk_PcL / 100.0 * ad_0;
         if (gi_88) {
            dl("   basicRisk_L        " + DoubleToStr(basicRisk_L, 2));
            dl("   reinvest_PcL       " + DoubleToStr(reinvest_PcL, 2));
            dl("   maxRisk_PcL        " + DoubleToStr(maxRisk_PcL, 2));
            dl("   longProfit         " + DoubleToStr(gd_808, 2));
            dl("   riskIncrease       " + DoubleToStr(ld_92, 2));
            dl("   moneyToRisk        " + DoubleToStr(ld_44, 2));
            dl("   maxMoneyToRisk     " + DoubleToStr(ld_100, 2));
         }
      }
      if (ai_16 == 1) {
         ld_92 = NormalizeDouble(gd_816 * reinvest_PcS / 100.0, 2);
         ld_44 = basicRisk_S + ld_92;
         ld_100 = maxRisk_PcS / 100.0 * ad_0;
         if (gi_88) {
            dl("   basicRisk_S        " + DoubleToStr(basicRisk_S, 2));
            dl("   reinvest_PcS       " + DoubleToStr(reinvest_PcS, 2));
            dl("   maxRisk_PcS        " + DoubleToStr(maxRisk_PcS, 2));
            dl("   shortProfit        " + DoubleToStr(gd_816, 2));
            dl("   riskIncrease       " + DoubleToStr(ld_92, 2));
            dl("   moneyToRisk        " + DoubleToStr(ld_44, 2));
            dl("   maxMoneyToRisk     " + DoubleToStr(ld_100, 2));
         }
      }
      if (ld_44 > ld_100) {
         if (gi_88) dl("   moneyToRisk (" + DoubleToStr(ld_44, 2) + ") by Reinvest Variante > maxMoneyToRisk (" + DoubleToStr(ld_100, 2));
         ld_44 = ld_100;
      }
      ld_52 = ld_44 / (ld_28 * ld_60);
      if (gi_88) {
         dl("   lotround           " + DoubleToStr(loginfo8, 4));
         dl("   finalLots grob     " + DoubleToStr(ld_52, 4));
         dl("   finalLots          " + DoubleToStr(NormalizeDouble(ld_52, loginfo8), 4));
      }
   }
   if (MoneyManagement_Variant == 3) {
      ld_108 = 0;
      if (ai_16 == 0) {
         if (gi_88) dl("   lots_Long              " + lots_Long);
         ld_68 = ld_60 * ld_28 * lots_Long;
         ld_108 = lots_Long;
      }
      if (ai_16 == 1) {
         if (gi_88) dl("   lots_Short             " + lots_Short);
         ld_68 = ld_60 * ld_28 * lots_Short;
         ld_108 = lots_Short;
      }
      if (gi_88) dl("   >>> final RISK                   " + DoubleToStr(ld_68, 4));
      ld_52 = ld_108;
   }
   double ld_116 = f_MarketInfo_LOTSTEP();
   double ld_ret_124 = nd(MathFloor(ld_52 / ld_116) * ld_116);
   if (gi_88) dl("   roundLots          " + ld_ret_124);
   if (ld_ret_124 < f_MarketInfo_MINLOT()) {
      if (!(gi_88)) return (0);
      dl("!!! Die errechnete Lotsize(" + dts(ld_ret_124, 2) + ") ist kleiner als die minimal erlaubte: " + dts(f_MarketInfo_MINLOT(), 2) + " Kein Trade m?glich!");
      return (0);
   }
   if (ld_ret_124 > f_MarketInfo_MAXLOT()) {
      if (gi_88) dl("!!! Die errechnete Lotsize(" + dts(ld_ret_124, 2) + ") ist gr??er als die maximal erlaubte: " + dts(f_MarketInfo_MAXLOT(), 2) + " Es wird auf Maxlot begrenzt!");
      ld_ret_124 = f_MarketInfo_MAXLOT();
   }
   ad_20 = ld_44;
   if (gi_88) dl("ENDE f_getLotsize for MoneyManagement_Variant " + MoneyManagement_Variant + " Lots: " + dts(ld_ret_124, 2));
   if (gi_88) dl("--------------------------------------");
   return (ld_ret_124);
}

int calcLotSplit(int a_ticket_0, double ad_4, double &ad_12, double ad_20, double &ad_28, double ad_36, double &ad_44, int &ai_52, double a_order_lots_56 = 0.0) {
   double order_lots_64;
   ai_52 = 1;
   if (a_ticket_0 > 0) {
      if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) return (0);
      order_lots_64 = OrderLots();
   } else order_lots_64 = a_order_lots_56;
   double ld_72 = f_MarketInfo_MINLOT();
   double ld_80 = f_MarketInfo_LOTSTEP();
   if (gi_88) dl("lots " + order_lots_64);
   double ld_88 = ad_4 / 100.0;
   double ld_96 = ad_20 / 100.0;
   double ld_104 = ad_36 / 100.0;
   ad_12 = 0;
   ad_28 = 0;
   ad_44 = 0;
   ad_44 = nd(MathFloor(order_lots_64 * ld_104 / ld_80) * ld_80);
   if (ad_44 < ld_72 || !SplitLot) {
      if (gi_88) dl("lotsAT_TPIII (" + DoubleToStr(ad_44, 2) + ") <  minLot " + DoubleToStr(ld_72, 2));
      ad_44 = 0;
      ld_96 += ld_104;
   }
   ad_28 = nd(MathFloor(order_lots_64 * ld_96 / ld_80) * ld_80);
   if (ad_28 < ld_72 || !SplitLot) {
      if (gi_88) dl("lotsAT_TPII (" + DoubleToStr(ad_28, 2) + ") <  minLot " + DoubleToStr(ld_72, 2));
      ad_28 = 0;
      ld_88 += ld_96;
   }
   ad_12 = nd(order_lots_64 - ad_44 - ad_28);
   if (ad_12 < ld_72) {
      if (gi_88) dl("lotsAT_TPI (" + DoubleToStr(ad_12, 2) + ") <  minLot " + DoubleToStr(ld_72, 2));
      ad_12 = 0;
      dl("Lots kleiner minlot, Kein Trade!");
      return (0);
   }
   if (gi_88) {
      dl("LOT SPLIT CALCULATION for OrderLots: " + DoubleToStr(order_lots_64, 2));
      dl("LOTs @ TP I   " + DoubleToStr(ad_12, 2));
      dl("LOTs @ TP II  " + DoubleToStr(ad_28, 2));
      dl("LOTs @ TP III " + DoubleToStr(ad_44, 2));
   }
   return (1);
}

int f_timeManagement(int ai_0) {
   int hour_4;
   int minute_8;
   int day_of_week_12;
   gi_688 = FALSE;
   gi_692 = FALSE;
   if (use_Local_Time) {
      hour_4 = TimeHour(TimeLocal());
      minute_8 = TimeMinute(TimeLocal());
      day_of_week_12 = TimeDayOfWeek(TimeLocal());
   }
   if (use_Server_Time) {
      hour_4 = TimeHour(TimeCurrent());
      minute_8 = TimeMinute(TimeCurrent());
      day_of_week_12 = TimeDayOfWeek(TimeCurrent());
   }
   if (UseTradingTime) {
      if (!IsTradingSession(hour_4)) {
         if (TRADING) {
            TRADING = FALSE;
            Print("Äíåâíàÿ òîðãîâàÿ ñåññèÿ çàêîí÷èëàñü");
         }
         f_HardstopActiv();
         return (0);
      } else {
         if (!TRADING) {
            TRADING = TRUE;
            Print("Äíåâíàÿ òîðãîâàÿ ñåññèÿ íà÷àëàñü");
         }
      }
   }   
   if (day_of_week_12 < startTime_Day) {
      if (loginfo) dl("STOP @ use_Time_Management! >>> Der TradeStartTag " + startTime_Day + " ist noch nicht erreicht! Heute ist Tag " + day_of_week_12);
      f_HardstopActiv();
      return (0);
   }
   if (day_of_week_12 == startTime_Day) {
      if (hour_4 < startTime_Hour) {
         if (loginfo) {
            dl("STOP @ use_Time_Management! >>> Der TradeStartTag (" + startTime_Day + ") ist zwar erreicht, aber noch nicht die TradeStartStunde (" + startTime_Hour + ")! Es ist gerade Stunde " +
               hour_4);
         }
         f_HardstopActiv();
         return (0);
      }
   }
   if (day_of_week_12 > endTime_Day) {
      if (loginfo) dl("-------------------------------------------------------------------------------");
      if (loginfo) dl("Es ist heute Tag " + day_of_week_12 + ". Gem?? Einstellung keine Trades mehr nach Tag endTime_Day (" + endTime_Day + ")");
      f_HardstopActiv();
      if (ai_0 <= 0) return (0);
      if (loginfo) dl("   es werden alle offene Orders geschlossen");
      f_closeAllOrdersForWP_II(MAGICNUMBER);
      return (0);
   }
   if (day_of_week_12 == endTime_Day && hour_4 > endTime_Hour || (hour_4 == endTime_Hour && minute_8 >= endTime_Minute)) {
      if (loginfo) dl("-------------------------------------------------------------------------------");
      if (loginfo) dl("Die Endzeit von " + endTime_Hour + ":" + endTime_Minute + " am EndDay (endTime_Day = " + endTime_Day + ") wurde erreicht!");
      f_HardstopActiv();
      if (ai_0 <= 0) return (0);
      if (loginfo) dl("   es werden alle Orders geschlossen");
      f_closeAllOrdersForWP_II(MAGICNUMBER);
      return (0);
   }
   f_HardstopPassiv();
   if (day_of_week_12 == endTime_Day && hour_4 > lastSignal_Hour_Long || (hour_4 == lastSignal_Hour_Long && minute_8 >= lastSignal_Minute_Long)) {
      if (loginfo && ai_0 == 0) {
         dl("-------------------------------------------------------------------------------");
         dl("Last Signal Time LONG! " + lastSignal_Hour_Long + ":" + lastSignal_Minute_Long + " NO NEW LONG Signals/Trades!");
      }
      f_SoftStopActivLong();
   } else {
      gi_688 = TRUE;
      f_SoftStopPassivLong();
   }
   if (day_of_week_12 == endTime_Day && hour_4 > lastSignal_Hour_Short || (hour_4 == lastSignal_Hour_Short && minute_8 >= lastSignal_Minute_Short)) {
      if (loginfo && ai_0 == 0) {
         dl("-------------------------------------------------------------------------------");
         dl("Last Signal Time SHORT! " + lastSignal_Hour_Short + ":" + lastSignal_Minute_Short + " NO NEW SHORT Signals/Trades!");
      }
      f_SoftStopActivShort();
   } else {
      gi_692 = TRUE;
      f_SoftStopPassivShort();
   }
   return (1);
}

bool IsTradingSession(int hour) {
   if (Hour_Start_Trade<=0) Hour_Start_Trade = Hour_Start_Trade+24;
   if (Hour_Start_Trade>24) Hour_Start_Trade = Hour_Start_Trade-24;
   if (Hour_Stop_Trade<=0) Hour_Stop_Trade = Hour_Stop_Trade+24;
   if (Hour_Stop_Trade>24) Hour_Stop_Trade = Hour_Stop_Trade-24;
   if (Hour_Start_Trade < Hour_Stop_Trade && hour < Hour_Start_Trade || hour >= Hour_Stop_Trade) return (FALSE);
   if (Hour_Start_Trade > Hour_Stop_Trade && (hour < Hour_Start_Trade && hour >= Hour_Stop_Trade)) return (FALSE);
   return (true);
}


void f_HardstopActiv() {
   if (!gi_1180) {
      if (viMode) ObjectSetText(g_name_1032, g_text_1160, 9, "Arial", Crimson);
      gi_1180 = TRUE;
   }
}

void f_HardstopPassiv(bool ai_0 = FALSE) {
   if (gi_1180) {
      if (viMode) {
         ObjectSetText(g_name_1032, " ", 9, "Arial", Crimson);
         if (longAllowed) ObjectSetText(g_name_1064, g_text_1128, 9, "Arial", MediumSeaGreen);
         if (shortAllowed) ObjectSetText(g_name_1072, g_text_1136, 9, "Arial", MediumSeaGreen);
      }
      gi_1180 = FALSE;
      if (!ai_0) f_reinitLogging();
   }
}

void f_SoftStopActivLong() {
   if (!gi_1184) {
      if (viMode)
         if (longAllowed) ObjectSetText(g_name_1064, g_text_1144, 9, "Arial", Crimson);
      gi_1184 = TRUE;
   }
}

void f_SoftStopPassivLong() {
   if (gi_1184) {
      if (viMode)
         if (longAllowed) ObjectSetText(g_name_1064, g_text_1128, 9, "Arial", MediumSeaGreen);
      gi_1184 = FALSE;
   }
}

void f_SoftStopActivShort() {
   if (!gi_1188) {
      if (viMode)
         if (shortAllowed) ObjectSetText(g_name_1072, g_text_1152, 9, "Arial", Crimson);
      gi_1188 = TRUE;
   }
}

void f_SoftStopPassivShort() {
   if (gi_1188) {
      if (viMode)
         if (shortAllowed) ObjectSetText(g_name_1072, g_text_1136, 9, "Arial", MediumSeaGreen);
      gi_1188 = FALSE;
   }
}

int f_checkTradingHours() {
   int li_4 = TimeCurrent() + 60 * (60 * gi_676);
   int hour_8 = TimeHour(li_4);
   if (gi_1028 == 6)
      if (gia_680[hour_8] == 0) return (0);
   if (gi_1028 == 7)
      if (gia_684[hour_8] == 0) return (0);
   return (1);
}

int f_checkTimeDiffToLastSL(int ai_0) {
   string ls_24;
   double ld_32;
   int global_var_4 = 0;
   if (GlobalVariableCheck(StringConcatenate("lastSL_Time_", Symbol()))) global_var_4 = GlobalVariableGet(StringConcatenate("lastSL_Time_", Symbol()));
   if (TimeCurrent() - 60.0 * Break_After_SL < global_var_4) {
      if (loginfo) dl("STOP. der letzte SL @" + TimeToStr(global_var_4) + " ist noch nicht mehr als " + DoubleToStr(Break_After_SL, 0) + " Minuten her");
      if (!(!g_bool_144)) return (0);
      paint("SL-Check1_" + dts(Break_After_SL, 0) + TimeCurrent() + 1, 253, Red, 1, Time[0], f_getDrawingPos(ai_0));
      return (0);
   }
   if (gi_468) return (1);
   int count_8 = 0;
   int li_12 = 0;
   int hist_total_16 = OrdersHistoryTotal();
   for (int pos_20 = hist_total_16 - 1; pos_20 >= 0; pos_20--) {
      if (OrderSelect(pos_20, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol() == Symbol()) {
            if (OrderMagicNumber() == MAGICNUMBER) {
               if (OrderType() <= OP_SELL) {
                  ls_24 = OrderComment();
                  if (StringFind(ls_24, "from") >= 0) return (1);
                  if (OrderProfit() > 0.0) return (1);
                  if (StringFind(ls_24, gs_280) >= 0) {
                     ld_32 = MathAbs(OrderOpenPrice() - OrderStopLoss()) / 2.0;
                     if ((OrderType() == OP_BUY && OrderClosePrice() <= OrderOpenPrice() - ld_32) || (OrderType() == OP_SELL && OrderClosePrice() >= OrderOpenPrice() + ld_32)) {
                        if (Break_After_SL > 0.0) {
                           if (OrderCloseTime() + 60.0 * Break_After_SL > TimeCurrent()) {
                              if (loginfo) dl("STOP-II, der letzte SL @" + TimeToStr(OrderCloseTime()) + " ist noch nicht mehr als  " + DoubleToStr(Break_After_SL, 0) + " Minuten her");
                              if (!(!g_bool_144)) return (0);
                              paint("SL-Check2_" + dts(Break_After_SL, 0) + TimeCurrent() + 1, 141, Red, 1, Time[0], f_getDrawingPos(OrderType()));
                              return (0);
                           }
                        }
                        if (count_8 == 1) {
                           if (li_12 + 10800 > TimeCurrent() && li_12 - OrderCloseTime() < 43200) {
                              if (loginfo) {
                                 dl("STOP-III, der letzte SL ist noch nicht mehr als  " + DoubleToStr(180, 0) + " Minuten her(" + TimeToStr(li_12) + "), und es hat vorher um " + TimeToStr(OrderCloseTime()) +
                                    " noch einen weiteren SL gegeben!");
                              }
                              if (!(!g_bool_144)) return (0);
                              paint("SL-Check3_" + dts(Break_After_SL, 0) + TimeCurrent() + 3, 142, Red, 1, Time[0], f_getDrawingPos(OrderType()));
                              return (0);
                           }
                        }
                        li_12 = OrderCloseTime();
                        count_8++;
                     }
                  }
               }
            }
         }
      }
   }
   return (1);
}

int f_checkSpread(int ai_0) {
   double ld_4 = (Ask - Bid) / gd_136;
   if (ld_4 > MaxSpread) {
      if (loginfo) dl("Der aktuelle Spread(" + dts(ld_4) + ") ist gr??er als der maximal erlaubte Spread von " + dts(MaxSpread), 1, 1);
      if (loginfo) dl("Der Trade wird nicht gemacht");
      if (!(!g_bool_144)) return (0);
      paint("Spreadcheck_" + dts(ld_4, 2) + "_" + (5 * TimeCurrent()), 76, Red, 1, Time[0], f_getDrawingPos(ai_0));
      return (0);
   }
   return (1);
}

int checkPriceDiffToLastClose(int ai_0, int a_timeframe_4) {
   double ld_8 = 0;
   if (ai_0 == 0) {
      ld_8 = (Bid - iClose(NULL, a_timeframe_4, 1)) / gd_136;
      if (ld_8 > gd_716) {
         if (loginfo) {
            dl("Das aktuelle Bid(" + dts(Bid) + ") ist zu weit vom letzten Close der " + a_timeframe_4 + "min-Kerze(" + dts(iClose(NULL, "+timeframe+", 1)) + ") entfernt, erlaubt sind " +
               dts(gd_716, 1) + " Pips! NO TRADE!");
         }
         if (!(!g_bool_144)) return (0);
         paint("CloseCheck_" + dts(ld_8, 2) + "(" + dts(gd_716, 1) + ")_" + TimeCurrent() + 100001, 244, Red, 1, Time[0], f_getDrawingPos(ai_0));
         return (0);
      }
   }
   if (ai_0 == 1) {
      ld_8 = (iClose(NULL, a_timeframe_4, 1) - Bid) / gd_136;
      if (ld_8 > gd_716) {
         if (loginfo) {
            dl("Das aktuelle Bid(" + dts(Bid) + ") ist zu weit vom letzten Close der " + a_timeframe_4 + "min-Kerze(" + dts(iClose(NULL, a_timeframe_4, 1)) + ") entfernt, erlaubt sind " +
               dts(gd_716, 1) + " Pips! NO TRADE!");
         }
         if (!(!g_bool_144)) return (0);
         paint("CloseCheck_" + dts(ld_8, 2) + "(" + dts(gd_716, 1) + ")_" + TimeCurrent() + 100001, 244, Red, 1, Time[0], f_getDrawingPos(ai_0));
         return (0);
      }
   }
   return (1);
}

void f_checkLastOrderLong(int a_ticket_0) {
   if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
      dl("Fehler: Konnte das k?rzlich geschlossene Longticket #" + a_ticket_0 + " nicht selecten!");
      return;
   }
   if (!gi_468) {
      if (OrderProfit() < 0.0 && MathAbs(gd_784 - OrderLots()) < f_MarketInfo_MINLOT()) {
         if (loginfo) {
            dl("!!! LONG SL !!!");
            dl("lastTradetLotsLong  " + gd_784);
            dl("OrderProfit()       " + OrderProfit());
            dl("OrderLots()         " + OrderLots());
            dl("TimeCurrent()       " + TimeCurrent());
         }
         GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), OrderCloseTime());
         if (loginfo) dl("Das letzte Set war ein kompletter LONG SL >>> Stop Trading after SL aktiv");
      }
   }
   if (gi_468) {
      if (NormalizeDouble(f_getLastSetLooserVolume(a_ticket_0, OP_BUY), 2) == NormalizeDouble(gd_784, 2)) {
         if (loginfo) dl("Das letzte Set war ein kompletter LONG SL >>> Stop Trading after SL aktiv");
         GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), OrderCloseTime());
      }
   }
   if (!g_bool_144) f_drawTradesII(a_ticket_0);
}

void f_checkLastOrderShort(int a_ticket_0) {
   if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
      dl("Fehler: Konnte das k?rzlich geschlossene Shortticket #" + a_ticket_0 + " nicht selecten!");
      return;
   }
   if (!gi_468) {
      if (OrderProfit() < 0.0 && MathAbs(gd_792 - OrderLots()) < f_MarketInfo_MINLOT()) {
         if (loginfo) {
            dl("!!! SHORT SL !!!");
            dl("lastTradetLotsShort " + gd_792);
            dl("OrderProfit()       " + OrderProfit());
            dl("OrderLots()         " + OrderLots());
            dl("TimeCurrent()       " + TimeCurrent());
         }
         GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), OrderCloseTime());
         if (loginfo) dl("Das letzte Set war ein kompletter SHORT SL >>> Stop Trading after SL aktiv");
      }
   }
   if (gi_468) {
      if (NormalizeDouble(f_getLastSetLooserVolume(a_ticket_0, OP_SELL), 2) == NormalizeDouble(gd_792, 2)) {
         if (loginfo) dl("Das letzte Set war ein kompletter SHORT SL >>> Stop Trading after SL aktiv");
         GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), OrderCloseTime());
      }
   }
   if (viMode) f_drawTradesII(a_ticket_0);
}

void f_drawTradesII(int a_ticket_0) {
   int ticket_4;
   int cmd_8;
   double ld_12;
   double datetime_20;
   double datetime_28;
   double ld_36;
   double ld_44;
   double ld_52;
   double ld_60;
   string str_concat_68;
   string str_concat_76;
   int li_84;
   int li_88;
   string str_concat_92;
   if (g_bool_144 == FALSE) {
      if (OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
         ticket_4 = OrderTicket();
         cmd_8 = OrderType();
         ld_12 = OrderProfit() + OrderSwap() + OrderCommission();
         datetime_20 = OrderCloseTime();
         datetime_28 = OrderOpenTime();
         if (gi_100) errorLog(GetLastError(), "Mitte drawTrades: ");
         ld_36 = NormalizeDouble(OrderOpenPrice(), g_digits_128 + 1);
         ld_44 = NormalizeDouble(OrderClosePrice(), g_digits_128 + 1);
         ld_52 = NormalizeDouble(OrderTakeProfit(), g_digits_128 + 1);
         ld_60 = NormalizeDouble(OrderStopLoss(), g_digits_128 + 1);
         str_concat_68 = StringConcatenate(ticket_4, "OP:", DoubleToStr(ld_36, g_digits_128), "O:", DoubleToStr(ld_12, 2), "?");
         str_concat_76 = StringConcatenate(ticket_4, "_OP:", DoubleToStr(ld_36, g_digits_128), " O: ", TimeToStr(datetime_28, TIME_SECONDS), " Lots: ", dts(OrderLots(), 2));
         if (DoubleToStr(ld_44, g_digits_128 + 1) == DoubleToStr(ld_52, g_digits_128 + 1) || ld_12 > 0.0) {
            if (ld_12 > 0.0) {
               li_84 = 3145645;
               li_88 = 252;
            } else {
               li_84 = 3145645;
               li_88 = 254;
            }
         } else {
            li_84 = 8721863;
            li_88 = 251;
         }
         if (gi_744) paint(str_concat_68, li_88, li_84, 5, datetime_20, f_getDrawingPos(cmd_8));
         str_concat_92 = StringConcatenate("Close #", OrderTicket(), " CloseT: ", TimeToStr(datetime_20), " CP: ", dts(ld_44));
         paint(str_concat_92, 3, DeepPink, 5, datetime_20, ld_44);
      }
   }
}

int f_checkLastTradeOpening(int a_cmd_0) {
   int li_4 = OrdersHistoryTotal() - 1;
   for (int pos_8 = li_4; pos_8 >= 0; pos_8--) {
      if (OrderSelect(pos_8, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol() == Symbol()) {
            if (OrderMagicNumber() == MAGICNUMBER) {
               if (OrderType() == a_cmd_0) {
                  if (TimeCurrent() - OrderOpenTime() < 45) {
                     if (loginfo) dl("Fehler, es wurde schon um " + TimeToStr(OrderOpenTime()) + " eine Order er?ffnet! TC: " + TimeToStr(TimeCurrent()) + " Dies ist nichtvorgesehen! Stop!");
                     gi_120 = FALSE;
                     g_text_1000 = "Fehler: Zu viele Order innerhalb kurzer Zeit!";
                     dl(g_text_1000, 1, 1, 1);
                     return (0);
                  }
                  if (!(loginfo)) return (1);
                  dl("Letzter Trade: Order gefunden " + TimeToStr(OrderOpenTime()) + " " + TimeToStr(TimeCurrent()));
                  return (1);
               }
            }
         }
      }
   }
   return (1);
}

double f_MarketInfo_MINLOT() {
   return (MarketInfo(Symbol(), MODE_MINLOT));
}

double f_MarketInfo_MAXLOT() {
   return (MarketInfo(Symbol(), MODE_MAXLOT));
}

double f_MarketInfo_LOTSTEP() {
   return (MarketInfo(Symbol(), MODE_LOTSTEP));
}

double f_MarketInfo_TICKSIZE() {
   return (MarketInfo(Symbol(), MODE_TICKSIZE));
}

double f_MarketInfo_TICKVALUE() {
   return (MarketInfo(Symbol(), MODE_TICKVALUE));
}

void f_getTheDrawingFacts(double &ad_0, double &ad_8) {
   int lowest_16 = iLowest(Symbol(), Period(), MODE_LOW, 10);
   ad_0 = Low[lowest_16];
   if (Bid < ad_0) ad_0 = Bid;
   int highest_20 = iHighest(Symbol(), Period(), MODE_HIGH, 10);
   ad_8 = High[highest_20];
   if (Bid > ad_8) ad_8 = Bid;
}

double f_getDrawingPos(int ai_0) {
   double ld_ret_4 = 0;
   if (ai_0 == 0) ld_ret_4 = gd_980 - 15.0 * gd_136;
   if (ai_0 == 1) ld_ret_4 = gd_972 + 15.0 * gd_136;
   return (ld_ret_4);
}

int f_getActWP() {
   int li_ret_0 = -1;
   if (StringFind(Symbol(), "AUDUSD") >= 0) li_ret_0 = 1;
   else {
      if (StringFind(Symbol(), "CHFJPY") >= 0) li_ret_0 = 2;
      else {
         if (StringFind(Symbol(), "EURCHF") >= 0) li_ret_0 = 3;
         else {
            if (StringFind(Symbol(), "EURGBP") >= 0) li_ret_0 = 4;
            else {
               if (StringFind(Symbol(), "EURJPY") >= 0) li_ret_0 = 5;
               else {
                  if (StringFind(Symbol(), "EURUSD") >= 0) li_ret_0 = 6;
                  else {
                     if (StringFind(Symbol(), "GBPUSD") >= 0) li_ret_0 = 7;
                     else {
                        if (StringFind(Symbol(), "NZDUSD") >= 0) li_ret_0 = 8;
                        else {
                           if (StringFind(Symbol(), "USDCAD") >= 0) li_ret_0 = 9;
                           else {
                              if (StringFind(Symbol(), "USDCHF") >= 0) li_ret_0 = 10;
                              else
                                 if (StringFind(Symbol(), "USDJPY") >= 0) li_ret_0 = 11;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
   return (li_ret_0);
}

void f_sendEntryMail(int a_ticket_0) {
   double ld_4;
   string dbl2str_12;
   string dbl2str_20;
   double ld_28;
   string dbl2str_36;
   string ls_44;
   string str_concat_52;
   string ls_60;
   if (g_bool_144 == FALSE) {
      if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) dl("!!!Fehler, konnte Ticket #" + a_ticket_0 + " zum Mailversand nicht selecten!");
      else {
         ld_4 = MathAbs(OrderOpenPrice() - OrderStopLoss()) / gd_136;
         dbl2str_12 = DoubleToStr(ld_4, 1);
         dbl2str_20 = DoubleToStr(f_moneyCalc(ld_4, OrderLots()), 2);
         if (OrderTakeProfit() > 0.0) ld_28 = MathAbs(OrderTakeProfit() - OrderOpenPrice()) / gd_136;
         dbl2str_36 = DoubleToStr(OrderLots(), 2);
         if (OrderType() == OP_BUY) ls_44 = "LONG";
         if (OrderType() == OP_SELL) ls_44 = "SHORT";
         str_concat_52 = StringConcatenate("MC@", f_shortSymbol(Symbol()), " ", ls_44, " ", TimeToStr(OrderOpenTime(), TIME_SECONDS), " ", DoubleToStr(OrderLots(), loginfo8),
            " Lot SL @ ", dbl2str_12, "(", dbl2str_20, ") OP: ", dts(OrderOpenPrice()));
         ls_60 = "GO GO GO";
         if (loginfo) dl("#### " + str_concat_52);
         if (gi_304) SendMail(AccountNumber() + " " + str_concat_52, ls_60);
      }
   }
}

void f_sendTpMail(int a_ticket_0, int ai_4, string as_8) {
   double order_lots_16;
   double ld_24;
   string str_concat_32;
   if (g_bool_144 == FALSE) {
      if (a_ticket_0 > 0) {
         if (!(OrderSelect(a_ticket_0, SELECT_BY_TICKET))) return;
         order_lots_16 = OrderLots();
         if (ai_4 == 0) ld_24 = f_moneyCalc(order_lots_16, (OrderStopLoss() - OrderOpenPrice()) / gd_136);
         if (ai_4 == 1) ld_24 = f_moneyCalc(order_lots_16, (OrderOpenPrice() - OrderStopLoss()) / gd_136);
      } else order_lots_16 = 0;
      str_concat_32 = StringConcatenate("MC@", f_shortSymbol(Symbol()), as_8, dts(f_getLastTicketProfitIII(), 2), " ", AccountCurrency(), " R-Lots: ", DoubleToStr(order_lots_16,
         loginfo8), " MV: ", dts(ld_24, 2), " ", AccountCurrency());
      if (loginfo) dl("#### " + str_concat_32);
      if (gi_308) SendMail(AccountNumber() + " " + str_concat_32, str_concat_32);
   }
}

void f_sendExitMail() {
   double ld_0;
   int li_8;
   string str_concat_12;
   if (g_bool_144 == FALSE) {
      li_8 = f_getLastType();
      if (li_8 == 0) ld_0 = gd_808;
      if (li_8 == 1) ld_0 = gd_816;
      str_concat_12 = StringConcatenate("MC@", f_shortSymbol(Symbol()), " FLAT>>>LastSplit ", dts(f_getLastTicketProfitIII(), 2), " ", AccountCurrency(), " Pos: ", dts(f_getLastTicketProfitIII(gi_996),
         2), " ", AccountCurrency(), " ACB ", dts(AccountBalance(), 2), " ", AccountCurrency(), " PL MC ", dts(ld_0, 2), " ", AccountCurrency());
      if (loginfo) {
         dl("");
         dl("#### " + str_concat_12);
         dl("");
      }
      if (gi_312) SendMail(AccountNumber() + " " + str_concat_12, str_concat_12);
   }
}

int f_getLastType() {
   int hist_total_0 = OrdersHistoryTotal();
   for (int pos_4 = hist_total_0 - 1; pos_4 >= 0; pos_4--) {
      if (OrderSelect(pos_4, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol() == Symbol()) {
            if (OrderMagicNumber() == MAGICNUMBER)
               if (OrderType() <= OP_SELL) return (OrderType());
         }
      }
   }
   return (0);
}

double f_getLastSetLooserVolume(int a_ticket_0, int a_cmd_4) {
   double order_profit_28;
   OrderSelect(a_ticket_0, SELECT_BY_TICKET);
   int datetime_8 = OrderOpenTime();
   double ld_ret_12 = 0;
   int count_20 = 0;
   for (int hist_total_24 = OrdersHistoryTotal(); hist_total_24 > -1; hist_total_24--) {
      OrderSelect(hist_total_24, SELECT_BY_POS, MODE_HISTORY);
      if (OrderMagicNumber() == MAGICNUMBER && OrderSymbol() == Symbol() && OrderType() == a_cmd_4) {
         if (OrderOpenTime() == datetime_8) {
            order_profit_28 = OrderProfit();
            dl("Ticket# " + OrderTicket() + " geh?rt in das Set");
            if (order_profit_28 > 0.0) {
               dl("Das Ticket# " + OrderTicket() + " wurde mit Gewinn geschlossen! >>> kein voller SL >>> kein Stop Trading after SL");
               break;
            }
            if (order_profit_28 < 0.0) {
               dl("  OrderProfit()  " + order_profit_28);
               dl("  OrderLots()    " + OrderLots());
               count_20++;
               if (count_20 > 4) break;
            }
         }
      }
   }
   return (ld_ret_12);
}

double f_getLastTicketProfitIII(int ai_0 = 0) {
   double ld_ret_4;
   for (int pos_12 = OrdersHistoryTotal() - 1; pos_12 >= 0; pos_12--) {
      if (OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol() == Symbol()) {
            if (OrderMagicNumber() == MAGICNUMBER) {
               if (OrderType() <= OP_SELL) {
                  ld_ret_4 += OrderProfit() + OrderSwap() + OrderCommission();
                  if (ai_0 <= 0) break;
                  if (OrderTicket() == ai_0) break;
               }
            }
         }
      }
   }
   return (ld_ret_4);
}

double f_getTotalProfitForEA() {
   double ld_12;
   gd_808 = gd_832;
   gd_816 = gd_840;
   gd_824 = 0;
   double ld_0 = gd_808 + gd_816;
   for (int pos_8 = 0; pos_8 < OrdersHistoryTotal(); pos_8++) {
      if (OrderSelect(pos_8, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol() == Symbol()) {
            if (OrderMagicNumber() == MAGICNUMBER) {
               if (OrderType() <= OP_SELL) {
                  ld_12 = OrderProfit() + OrderSwap() + OrderCommission();
                  ld_0 += ld_12;
                  if (OrderType() == OP_BUY) gd_808 += ld_12;
                  if (OrderType() == OP_SELL) gd_816 += ld_12;
               }
            }
         }
      }
   }
   gd_824 = ld_0;
   return (gd_824);
}

int f_getActiveTicket(int &a_ticket_0, int &a_ticket_4) {
   if (gi_100) errorLog(GetLastError(), "START f_getActiveTicket: ");
   int li_ret_8 = 0;
   int count_12 = 0;
   int count_16 = 0;
   a_ticket_0 = 0;
   a_ticket_4 = 0;
   if (gi_256 == 20) {
      gi_unused_856 = 1;
      gi_unused_860 = 1;
   }
   if (OrdersTotal() > 0) {
      for (int pos_20 = 0; pos_20 < OrdersTotal(); pos_20++) {
         OrderSelect(pos_20, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICNUMBER) {
            if (OrderType() == OP_BUY) {
               count_12++;
               if (!gi_732) a_ticket_0 = OrderTicket();
               else
                  if (StringFind(OrderComment(), "NEXT", 0) < 0) a_ticket_0 = OrderTicket();
               if (gi_468)
                  if (StringFind(OrderComment(), "P1", 0) > 0) gi_unused_856 = 0;
            }
            if (OrderType() == OP_SELL) {
               count_16++;
               if (!gi_732) a_ticket_4 = OrderTicket();
               else
                  if (StringFind(OrderComment(), "NEXT", 0) < 0) a_ticket_4 = OrderTicket();
               if (gi_468)
                  if (StringFind(OrderComment(), "P1", 0) > 0) gi_unused_860 = 0;
            }
         }
      }
   }
   li_ret_8 = count_12 + count_16;
   if ((!gi_468) && !gi_732) {
      if (li_ret_8 > 1) {
         gi_120 = FALSE;
         dl("Fehler, es waren mehrere Order offen. Alles wird geschlossen, und das Trading beendet!");
         g_text_1000 = "Fehler: Multiple Order!";
         dl(g_text_1000, 1, 1, 1);
         f_closeAllAndCheck();
         return (0);
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_getActiveTicket: ");
   return (li_ret_8);
}

int f_closeAllOrdersForWP_II(int a_magic_0) {
   if (gi_100) errorLog(GetLastError(), "START f_closeAllOrdersForWP: ");
   int li_unused_4 = 0;
   int order_total_8 = OrdersTotal();
   bool li_ret_12 = TRUE;
   for (int pos_16 = order_total_8 - 1; pos_16 >= 0; pos_16--) {
      if (!OrderSelect(pos_16, SELECT_BY_POS, MODE_TRADES)) dl("Ticket# " + OrderTicket() + " kann nicht selected werden");
      else {
         if (a_magic_0 >= 0 && OrderMagicNumber() != a_magic_0) continue;
         if (OrderSymbol() == Symbol()) {
            RefreshRates();
            GetLastError();
            if (OrderType() <= OP_SELL) {
               if (loginfo) dl("TRY to Close Ticket# " + OrderTicket());
               if (!f_closePosi(OrderTicket(), 1)) {
                  dl("Konnte Ticket #" + OrderTicket() + " nicht schlie?en!");
                  li_ret_12 = FALSE;
               }
            }
         }
      }
   }
   if (gi_100) errorLog(GetLastError(), "ENDE f_closeAllOrdersForWP: ");
   return (li_ret_12);
}

bool f_closePosi(int ai_0, int ai_4, double ad_8 = 0.0) {
   int li_16 = f_closeActivePosition(ai_0, ai_4, ad_8);
   if (li_16 == 1) return (TRUE);
   if (li_16 < 0 && (!gi_276) && (!g_bool_148) && (!g_bool_144)) f_logError("f_closePosi, Fehler: " + ErrorDescription(MathAbs(li_16)));
   if (!ai_4 && li_16 == -131) {
      dl("Teilverkauf nicht m?glich, schlie?e komplette Posi!");
      li_16 = f_closeActivePosition(ai_0, 1);
      if (li_16 > 0) dl("Close der Posi jetzt erfolgreich.");
      else f_closeAllOrdersForWP_II(MAGICNUMBER);
   }
   return (FALSE);
}

void f_paintDaInfosOnTheScreen() {
   if (viMode) {
      f_paintDaInfosOnTheScreen_ENG();
   }
}

void f_paintDaInfosOnTheScreen_ENG() {
   double ld_16;
   double ld_24;
   double ld_unused_32;
   double ld_unused_40;
   double ld_48;
   double ld_56;
   double ld_64;
   double ld_72;
   double ld_80;
   double ld_88;
   double ld_0 = 0;
   double ld_8 = 0;
   f_getTotalProfitForEA();
   if (MoneyManagement_Variant == 1) {
      ld_16 = risk_Long_Percent / 100.0 * AccountBalance();
      ld_24 = risk_Short_Percent / 100.0 * AccountBalance();
      if (gd_808 > 0.0 && Divisor_Long > 0) ld_0 = gd_808 / Divisor_Long;
      if (gd_816 > 0.0 && Divisor_Short > 0) ld_8 = gd_816 / Divisor_Short;
   }
   g_str_concat_192 = "";
   f_comment("\n" 
   + gs_1020 + gs_1012);
   f_comment(StringConcatenate("\n       Licence Limit: max Risk per Trade ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
   if (MoneyManagement_Variant < 1 || MoneyManagement_Variant > 3) {
      f_comment("\n\n       No MoneyManagement_Variant chosen");
      if (longAllowed) f_comment(StringConcatenate("\n\n       Error, LongAllowed + MoneyManagement_Variant ", MoneyManagement_Variant));
      else f_comment("\n\n       Long is deactivated!");
      if (shortAllowed) f_comment(StringConcatenate("\n\n       Error, shortAllowed + MoneyManagement_Variant ", MoneyManagement_Variant));
      else f_comment("\n\n       Short is deactivated!");
   }
   if (MoneyManagement_Variant == 1) {
      if (!use_Adaptive_MM) {
         f_comment("\n\n       MoneyManagement_Variant = 1 >>> FFM activated & adaptive MM deactivated!");
         if (longAllowed) {
            f_comment(StringConcatenate("\n\n       > Risk LONG theoretically: ", DoubleToStr(risk_Long_Percent, 2), " % of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(risk_Long_Percent / 100.0 * AccountBalance(),
               2), " ", AccountCurrency()));
            if (ld_16 > gd_800) f_comment(StringConcatenate("\n       > The risk LONG is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
         } else f_comment("\n\n       Long is deactivated!");
         f_comment("\n\n       =================");
         if (shortAllowed) {
            f_comment(StringConcatenate("\n\n       > Risk SHORT theoretically:  ", DoubleToStr(risk_Short_Percent, 2), " % of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(risk_Short_Percent / 100.0 * AccountBalance(),
               2), " ", AccountCurrency()));
            if (ld_24 > gd_800) f_comment(StringConcatenate("\n       > The risk SHORT is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
         } else f_comment("\n\n       Short is deactivated!");
      }
      if (use_Adaptive_MM) {
         f_comment("\n\n       Adaptive MM && FFM activated!");
         if (longAllowed) {
            f_comment(StringConcatenate("\n\n       > Risk LONG @ FFM: ", DoubleToStr(risk_Long_Percent, 2), " % of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(risk_Long_Percent / 100.0 * AccountBalance(),
               2), " ", AccountCurrency()));
            f_comment(StringConcatenate("\n       > Risk LONG @ Adaptive-MM: ", DoubleToStr(Divisor_Long, 0), " = " + DoubleToStr(ld_0, 2), " (", gd_808, " ", AccountCurrency(),
               " : ", DoubleToStr(Divisor_Long, 0), ")"));
            if (ld_0 > ld_16) f_comment("\n       > Increased risk LONG due to positive LONG-Performance & Adaptive-MM");
            if (ld_0 > gd_800) f_comment(StringConcatenate("\n       > The risk of the license is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
            ld_unused_32 = ld_16;
            if (ld_0 > ld_16) ld_16 = ld_0;
            if (ld_16 > gd_800) ld_16 = gd_800;
            f_comment(StringConcatenate("\n          FINAL Risk ", DoubleToStr(ld_16, 2), " ", AccountCurrency()));
         } else f_comment("\n\n       Long is deactivated!");
         f_comment("\n\n       =================");
         if (shortAllowed) {
            f_comment(StringConcatenate("\n\n       > Risk SHORT @ FFM:  ", DoubleToStr(risk_Short_Percent, 2), " % of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(risk_Short_Percent / 100.0 * AccountBalance(),
               2), " ", AccountCurrency()));
            f_comment(StringConcatenate("\n       > Risk SHORT @ Adaptive-MM: ", DoubleToStr(Divisor_Short, 0), " = " + DoubleToStr(ld_8, 2), " (", gd_816, " ", AccountCurrency(),
               " : ", DoubleToStr(Divisor_Short, 0), ")"));
            if (ld_8 > ld_24) f_comment("\n       > Increased risk SHORT due to positive SHORT-Performance & Adaptive-MM");
            if (ld_8 > gd_800) f_comment(StringConcatenate("\n       > The risk of the license is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
            ld_unused_40 = ld_24;
            if (ld_8 > ld_24) ld_24 = ld_8;
            if (ld_24 > gd_800) ld_24 = gd_800;
            f_comment(StringConcatenate("\n          FINAL Risk ", DoubleToStr(ld_24, 2), " ", AccountCurrency()));
         } else f_comment("\n\n       Short is deactivated!");
      }
   }
   if (MoneyManagement_Variant == 2) {
      ld_48 = 0;
      ld_56 = 0;
      ld_64 = 0;
      ld_72 = 0;
      ld_80 = 0;
      ld_88 = 0;
      f_comment("\n\n       Reinvest MM activated!");
      if (longAllowed) {
         ld_64 = NormalizeDouble(gd_808 * reinvest_PcL / 100.0, 2);
         ld_48 = basicRisk_L + ld_64;
         ld_80 = maxRisk_PcL / 100.0 * AccountBalance();
         if (ld_48 > ld_80) ld_48 = ld_80;
         f_comment(StringConcatenate("\n\n       # MAX Risk per Trade LONG (", DoubleToStr(maxRisk_PcL, 2), "%) of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(ld_80,
            2), " ", AccountCurrency()));
         f_comment(StringConcatenate("\n       # BASE-Risk: " + DoubleToStr(basicRisk_L, 2) + " // P/L " + DoubleToStr(gd_808, 2) + " // ReInvest " + DoubleToStr(reinvest_PcL,
            2) + "% = ", DoubleToStr(reinvest_PcL / 100.0 * gd_808, 2)));
         f_comment(StringConcatenate("\n          FINAL Risk ", dts(ld_48, 2), " ", AccountCurrency()));
         if (ld_48 > gd_800) f_comment(StringConcatenate("\n          The risk of the license is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
      } else f_comment("\n\n       Long ist deactivated!");
      f_comment("\n\n       =================");
      if (shortAllowed) {
         ld_72 = NormalizeDouble(gd_816 * reinvest_PcS / 100.0, 2);
         ld_56 = basicRisk_S + ld_72;
         ld_88 = maxRisk_PcS / 100.0 * AccountBalance();
         if (ld_56 > ld_88) ld_56 = ld_88;
         f_comment(StringConcatenate("\n\n       # MAX Risk per Trade SHORT (", DoubleToStr(maxRisk_PcS, 2), "%) of " + DoubleToStr(AccountBalance(), 2), " = ", DoubleToStr(ld_88,
            2), " ", AccountCurrency()));
         f_comment(StringConcatenate("\n       # BASE-Risk: " + DoubleToStr(basicRisk_S, 2) + " // P/L " + DoubleToStr(gd_816, 2) + " // ReInvest " + DoubleToStr(reinvest_PcS,
            2) + "% = ", DoubleToStr(reinvest_PcS / 100.0 * gd_816, 2)));
         f_comment(StringConcatenate("\n          FINAL Risk ", dts(ld_56, 2), " ", AccountCurrency()));
         if (ld_56 > gd_800) f_comment(StringConcatenate("\n          The risk of the license is limited to ", DoubleToStr(gd_800, 2), " ", AccountCurrency()));
      } else f_comment("\n\n       Short ist deactivated!");
   }
   if (MoneyManagement_Variant == 3) {
      f_comment(StringConcatenate("\n\n\n       FFM deactivated", 
         "\n       > fixed LOTS LONG: ", DoubleToStr(lots_Long, 2), 
      "\n       > fixed LOTS SHORT:  ", DoubleToStr(lots_Short, 2)));
   }
   f_comment(StringConcatenate("\n\n       Total Profit @ ", gs_280, " ", Symbol(), " LONG   ", dts(gd_808, 2), " ", AccountCurrency()));
   f_comment(StringConcatenate("\n       Total Profit @ ", gs_280, " ", Symbol(), " SHORT ", dts(gd_816, 2), " ", AccountCurrency()));
}

void f_createErrorMessageOrder(int ai_0) {
   if (ai_0 == -130) {
         dl("WARNING - Error (" + ai_0 + ") during order opening! Please verify the variable OrderOpen_withSLTP", 1, 1, 1);
         ObjectSetText(g_name_1088, StringConcatenate("OrderOpen-Error ", ai_0, ",check Variable OrderOpen_withSLTP"), 10, "Arial", Yellow);
   }
}

void f_reinitLogging() {
   if (g_bool_144 || g_bool_148) return;
   log_openName(WindowExpertName(), -1, -1, 1);
   f_logTheVars();
}

int f_openMarket_II(int a_cmd_0, double a_lots_4, string a_comment_12, double ad_20, double a_price_28, double a_price_36, int a_magic_44, bool ai_48) {
   int error_52;
   double price_56;
   color color_72;
   double price_80;
   double price_88;
   int li_100;
   if (gi_100) errorLog(GetLastError(), "START f_openMarket: ");
   string ls_64 = "";
   if (a_cmd_0 == OP_BUY) {
      ls_64 = "LongTicket";
      color_72 = Green;
   }
   if (a_cmd_0 == OP_SELL) {
      ls_64 = "ShortTicket";
      color_72 = Red;
   }
   int ticket_76 = -1;
   if (!ai_48) {
      price_80 = 0;
      price_88 = 0;
   } else {
      price_80 = a_price_36;
      price_88 = a_price_28;
   }
   for (int li_96 = 1; li_96 <= gi_112; li_96++) {
      f_waitForFreeTradeContext();
      RefreshRates();
      GetLastError();
      if (a_cmd_0 == OP_BUY) {
         price_56 = nd(Ask);
         if (gd_80 >= 0.0) {
            if (price_56 - ad_20 > gd_80 * gd_136) {
               dl("Preis ist schon zu weit weggelauf?n! Gew?nscht war: " + dts(ad_20, Digits) + " aktuell: " + dts(price_56, Digits));
               dl("!!! Fehler, Order konnte nicht aufgegeben werden!");
               if (!(!g_bool_144)) return (0);
               paint("InitPriceCheck_" + dts(ad_20) + "_Ask(" + dts(price_56) + ")", 221, Red, 1, Time[0], f_getDrawingPos(a_cmd_0));
               return (0);
            }
         }
      }
      if (a_cmd_0 == OP_SELL) {
         price_56 = nd(Bid);
         if (gd_80 >= 0.0) {
            if (ad_20 - price_56 > gd_80 * gd_136) {
               dl("Preis ist schon zu weit weggelauf?n! Gew?nscht war: " + dts(ad_20, Digits) + " aktuell: " + dts(price_56, Digits));
               dl("!!! Fehler, Order konnte nicht aufgegeben werden!");
               if (!(!g_bool_144)) return (0);
               paint("InitPriceCheck_" + dts(ad_20) + "_Ask(" + dts(price_56) + ")", 222, Red, 1, Time[0], f_getDrawingPos(a_cmd_0));
               return (0);
            }
         }
      }
      if (gi_156) li_100 = GetTickCount();
      ticket_76 = OrderSend(Symbol(), a_cmd_0, a_lots_4, price_56, g_slippage_76, price_88, price_80, a_comment_12, a_magic_44, 0, color_72);
      if (ticket_76 > 0) {
         if (OrderSelect(ticket_76, SELECT_BY_TICKET)) {
            if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 1, ticket_76, GetTickCount() - li_100);
            if (li_96 == 1) {
               if (gi_92) dl("   Y. done. >>> " + ls_64 + "# " + ticket_76 + " er?ffnet ...", 1);
            } else dl(Symbol() + "   Y. done. >>> " + ls_64 + "# " + ticket_76 + " beim " + li_96 + ". Versuch platziert ...", 1);
            if (!ai_48 && a_price_28 != 0.0 || a_price_36 != 0.0) {
               f_orderModify(ticket_76, a_price_28, 1, a_price_36, 1);
               OrderSelect(ticket_76, SELECT_BY_TICKET);
            }
            if (gi_92) dl("   ... newPrice " + DoubleToStr(OrderOpenPrice(), Digits), 1);
            if (gi_92) dl("   ... newSL    " + DoubleToStr(OrderStopLoss(), Digits), 1);
            if (gi_92) dl("   ... newTP    " + DoubleToStr(OrderTakeProfit(), Digits), 1);
            if (gi_92) dl("   ... newLots  " + DoubleToStr(OrderLots(), 2), 1);
            if (gi_92) dl("   ... MN       " + DoubleToStr(OrderMagicNumber(), 0), 1);
            if (!(gi_92)) return (ticket_76);
            dl("   ---------------------------------------------");
            return (ticket_76);
         }
         if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 0, -555, GetTickCount() - li_100);
         dl("Das Ticket# " + ticket_76 + " kann nicht mehr selected werden");
         return (0);
      }
      error_52 = GetLastError();
      if (gi_156) f_logTradeOpenTime(0, a_cmd_0, a_lots_4, 0, -error_52, GetTickCount() - li_100);
      if (li_96 == gi_112) {
         if (gi_92) dl(Symbol() + " EA STOP!!! Nach " + li_96 + " Versuchen konnte noch immer kein " + ls_64 + " er?ffnet werden!");
         return (-1 * error_52);
      }
      if (error_52 != 0/* NO_ERROR */) {
         if (gi_92) dl("  " + Symbol() + " >>> Das " + ls_64 + " konnte beim " + li_96 + ". Versuch nicht ge?ffnet werden. Fehler: " + errorLog(error_52, ""), 1, 1);
         if (li_96 >= gi_116) f_giveTheError("f_openMarket", a_cmd_0, price_56, a_price_28, a_price_36, a_lots_4, li_96, error_52);
         if (!check4Retry(error_52)) return (-1 * error_52);
         dl("  " + Symbol() + " RETRY", 1, 1);
         dl("   ---------------------------------------------", 1, 1);
      }
   }
   return (0);
}

void f_initializeEA() {
   g_text_1000 = "";
   f_initLogging();
   if (gi_740) {
      f_comment("\n" 
      + gs_1020);
      f_comment("\n\n\n\n\n\n\n --> Initialzing EA");
   }
   digitRead(Symbol());
   
   if ((!IsOptimization()) && !IsTesting()) {
      while (!IsConnected() || AccountNumber() == 0 || AccountCompany() == "") {
         Sleep(1000);
         if (!gi_868) {
            f_comment("\n --> Metatrader not connected, waiting for connection!");
            Alert("MetaTrader not connected!");
            gi_868 = TRUE;
         }
      }
   }
   int li_0 = 100.0 * Bid;
   int li_4 = f_generateRandomNumber(li_0 + 1000);
   gi_1008 = TimeCurrent() - li_4;
   Sleep(li_4);
   if (f_checkChartSymbol()) {
      HideTestIndicators(TRUE);
      gi_120 = TRUE;
      loginfo8 = f_getLotround();
      varsEinlesen(AccountNumber(), Symbol(), gi_268);
      if (f_checkDLLAllowed()) {
         if (f_checkLicence()) {
            if (f_checkAccNbr()) {
               if (f_checkExpiration()) {
                  dl("Registered account number identified, license is valid", 1, 1);
                  gd_800 = f_getMaxRiskPerTrade();
                  if (f_checkVars()) {
                     f_getEndTimes();
                     f_logTheVars();
                     if (GlobalVariableGet(StringConcatenate("lastSL_Time_", Symbol())) <= 1.0) GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), 1);
                     if (g_bool_144 || g_bool_148) GlobalVariableSet(StringConcatenate("lastSL_Time_", Symbol()), 1);
                     f_displayConfirmation();
                     f_resetTheVars(gi_852);
                     if (f_verifyData()) {
                        if (gi_740) {
                           f_comment("\n --> EA successfully intialized!");
                           f_comment("\n --> Waiting for next Tick!");
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

int OpenOrder(int ai_0) {
   int li_4;
   double ld_8;
   double ld_16;
   double lda_24[10];
   string str_concat_28;
   int li_36;
   double lda_40[20];
   double lda_44[20];
   double lda_48[20];
   int li_52;
   int li_56;
   double lda_60[2];
   double ld_64;
   double ld_72;
   double ld_80;
   double ld_88;
   double ld_96;
   double ld_104;
   double ld_112;
   double ld_120;
   double ld_128;
   double ld_136;
   double ld_144;
   double ld_152;
   int li_160;
   bool li_164;
   double ld_168;
   int li_176;
   double ld_180;
   double ld_188;
   int li_196;
   bool li_200;
   int li_204;
   if ((!g_bool_144) && !g_bool_148) {
      RefreshRates();
      GetLastError();
   }
   if (ai_0 == 0) {
      if (gi_672) {
         if (!f_checkTradingHours()) {
            if (loginfo) {
               dl("----------------------!!! STOP LONG !!! kein Trade zu dieser Stunde erlaubt! ----------------------------------------------------------------------------", 1,
                  0, 0, 0, 0);
            }
            if (!(!g_bool_144)) return (0);
            paint("TIMESTOP_" + f_tStr(), 192, Red, 1, Time[0], gd_980 - 10.0 * gd_136);
            return (0);
         }
      }
   }
   if (!f_checkTimeDiffToLastSL(ai_0)) {
      if (loginfo) dl("SIGNAL rejected - Zeitdiff zum letzten SL nicht ausreichend!");
   } else {
      if (!f_checkLastTradeOpening(ai_0)) return (0);
      if (!f_checkSpread(ai_0)) return (0);
      li_4 = 5;
      if (ai_0 == 1) li_4 = 5;
      if (!checkPriceDiffToLastClose(ai_0, li_4)) return (0);
      if (loginfo) dl("   Current Bid: " + dts(Bid) + " Ask: " + dts(Ask));
      ld_8 = 0;
      ld_16 = 0;
      str_concat_28 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE) + "; " + TimeToStr(TimeLocal(), TIME_SECONDS), " ; ");
      if (!f_goForMagicVerifyCheck(gi_1200, gi_1028, ai_0, Ask, Bid, gd_136, str_concat_28)) return (0);
      if (!Auto_TP_Management) {
         li_36 = TP_AT_Trade_Open_Long;
         if (ai_0 == 1) li_36 = TP_AT_Trade_Open_Short;
         if (li_36 > 0) {
            if (loginfo) dl("    > Auto_TP_Management == false && TP_AT_Trade_Open (" + DoubleToStr(li_36, Digits) + ") > 0");
            if (ai_0 == 0) ld_16 = NormalizeDouble(Ask + li_36 * gd_136, Digits);
            if (ai_0 == 1) ld_16 = NormalizeDouble(Bid - li_36 * gd_136, Digits);
            if (loginfo) dl("    >>> newTP " + DoubleToStr(ld_16, Digits));
         } else
            if (loginfo) dl("    > Auto_TP_Management == false && TP_AT_Trade_Open (" + DoubleToStr(li_36, Digits) + ") >>> User will keinen TP bei Orderer?ffnung");
      } else {
         if (loginfo) dl("    > Auto_TP_Management == true das TP-Management erfolgt vollautomatisch");
         ld_16 = 0;
      }
      ArrayInitialize(lda_40, 0);
      ArrayInitialize(lda_44, 0);
      ArrayInitialize(lda_48, 0);
      li_52 = 0;
      for (li_52 = 0; li_52 < 15; li_52++) {
         lda_40[li_52] = iClose(Symbol(), PERIOD_M5, li_52);
         if (lda_40[li_52] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ OpenBuyOrder PERIOD_M5 closeArray[i]  " + li_52 + " " + DoubleToStr(lda_40[li_52], Digits));
         lda_44[li_52] = iHigh(Symbol(), PERIOD_M5, li_52);
         if (lda_44[li_52] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ OpenBuyOrder PERIOD_M5 highArray[i]  " + li_52 + " " + DoubleToStr(lda_44[li_52], Digits));
         lda_48[li_52] = iLow(Symbol(), PERIOD_M5, li_52);
         if (lda_48[li_52] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ OpenBuyOrder PERIOD_M5 lowArray[i]  " + li_52 + " " + DoubleToStr(lda_48[li_52], Digits));
      }
      if (!Auto_SL_Management) {
         li_56 = SL_AT_Trade_Open_Long;
         if (ai_0 == 1) li_56 = SL_AT_Trade_Open_Short;
         if (li_56 > 0) {
            if (loginfo) dl("    > Auto_SL_Management == false && SL_AT_Trade_Open_Long (" + DoubleToStr(li_56, Digits) + ") > 0");
            ld_8 = li_56;
         } else
            if (loginfo) dl("    > Auto_SL_Management == false && SL_AT_Trade_Open (" + DoubleToStr(li_56, Digits) + ") >>> User will keinen SL bei Orderer?ffnung");
      }
      if (f_fillTickValue(lda_60)) {
         if (loginfo) dl("Die Tickvalue von Metatrader ist: " + DoubleToStr(lda_60[1], Digits));
         f_getTotalProfitForEA();
         ld_64 = 0;
         ld_72 = 0;
         ld_80 = 0;
         ld_88 = 0;
         ld_96 = 0;
         ld_104 = 0;
         ld_112 = 0;
         if (ai_0 == 0) {
            ld_64 = gd_808;
            ld_72 = risk_Long_Percent;
            if (MoneyManagement_Variant == 1 && use_Adaptive_MM) ld_80 = Divisor_Long;
            ld_88 = basicRisk_L;
            ld_96 = reinvest_PcL;
            ld_104 = maxRisk_PcL;
            ld_112 = lots_Long;
         }
         if (ai_0 == 1) {
            ld_64 = gd_816;
            ld_72 = risk_Short_Percent;
            if (MoneyManagement_Variant == 1 && use_Adaptive_MM) ld_80 = Divisor_Short;
            ld_88 = basicRisk_S;
            ld_96 = reinvest_PcS;
            ld_104 = maxRisk_PcS;
            ld_112 = lots_Short;
         }
         if (loginfo) dl("   profit of Direction (" + DoubleToStr(ld_64, 2) + ")");
         ld_120 = f_MarketInfo_LOTSTEP();
         ld_128 = f_MarketInfo_MINLOT();
         ld_136 = f_MarketInfo_MAXLOT();
         ld_144 = f_getMagicTradeParas(gi_1200, gi_1028, ai_0, Ask, Bid, gd_136, lda_60, Auto_SL_Management, Auto_TP_Management, AccountBalance(), ld_8, ld_120, ld_128, MoneyManagement_Variant,
            ld_72, ld_80, ld_64, ld_88, ld_96, ld_104, ld_112, lda_40, lda_44, lda_48, lda_24);
         f_getLotsize_II(AccountBalance(), lda_24[3], ai_0, ld_152);
         if (loginfo) dl("newLots             " + DoubleToStr(ld_144, 4));
         if (loginfo) dl("nP3                  " + DoubleToStr(lda_24[3], 4));
         if (loginfo) dl("nP5                  " + DoubleToStr(lda_24[5], 4));
         if (ld_144 < 0.0) {
            if (loginfo) dl("!!!Fehler, STOP! Der Trade wird nicht ausgef?hrt. Fehler " + ld_144);
            if (loginfo) dl("nP0 " + lda_24[0]);
            if (loginfo) dl("nP1 " + lda_24[1]);
            if (loginfo) dl("nP2 " + lda_24[2]);
            if (loginfo) dl("nP3 " + lda_24[3]);
            if (loginfo) dl("nP4 " + lda_24[4]);
            if (loginfo) dl("nP5 " + lda_24[5]);
            if (loginfo) dl("nP6 " + lda_24[6]);
            li_160 = ld_144;
            f_createErrorMessage(li_160);
            if (!(!g_bool_144)) return (0);
            paint("ERROR_LOTCALC-" + dts(ld_144, 1) + "_" + f_tStr(), 109, Red, 1, Time[0], f_getDrawingPos(ai_0));
            return (0);
         }
         if (MoneyManagement_Variant == 3) {
            if (ld_144 < ld_112) {
               if (loginfo) dl("Die fixed Lots(" + dts(ld_112, 3) + ") h?tten ein zu hohes Risiko gehabt! Sie wurden auf " + dts(ld_144, 3) + " reduziert!");
               if (!g_bool_144) {
                  paint("Fixed lot-Reduction " + dts(ld_144, 1) + "_" + f_tStr(), 109, Yellow, 1, Time[0], f_getDrawingPos(ai_0));
               }
            }
         }
         if (ld_144 < ld_128) {
            if (loginfo) dl("Es kann kein Trade er?ffnet werden, die resultierende Lotsize " + NormalizeDouble(ld_144, Digits) + " ist geringer als die Brokeranforderung von " + ld_128);
            if (!g_bool_144) {
               paint("Error_LOT Lots smaller than Minlot" + TimeCurrent(), 111, Red, 1, Time[0], f_getDrawingPos(ai_0));
            }
         } else {
            if (ld_144 > ld_136) {
               if (loginfo) dl("!!! Die errechnete Lotsize(" + dts(ld_144, 2) + ") ist gr??er als die maximal erlaubte: " + dts(ld_136, 2) + " Es wird auf Maxlot begrenzt!");
               ld_144 = ld_136;
            }
            li_164 = calcLotSplit(0, lda_24[0], g_order_lots_892, lda_24[1], g_order_lots_900, lda_24[2], g_order_lots_908, loginfo0, ld_144);
            if (!li_164) {
               dl("Fehler bei der calcLotSplit Berechnung!");
               return (0);
            }
            ld_168 = ld_144;
            if (loginfo) dl("die Summe der Teilpositionen ergibt " + ((g_order_lots_892 + g_order_lots_900 + g_order_lots_908)) + " lastTradetLots " + ld_168);
            if (ai_0 == 0) gd_784 = ld_168;
            if (ai_0 == 1) gd_792 = ld_168;
            loginfo0 = 1;
            if (lda_24[4] > 0.0) {
               if (loginfo) dl("ACHTUNG - Risk in Begrenzer gelaufen!");
               if (!g_bool_144) {
                  ObjectSetText(g_name_1080, "Risk limit for license was reached with past trade.", 10, "Arial", MediumVioletRed);
               }
               if (loginfo) dl("nP5 " + lda_24[5]);
               if (loginfo) dl("nP6 " + lda_24[6]);
            }
            if (!Auto_Trade_Open) {
               li_176 = f_askForOrderOpen(ai_0);
               if (!(li_176)) return;
            }
            if (!g_bool_148) {
               RefreshRates();
               GetLastError();
            }
            ld_180 = 0;
            ld_188 = 0;
            if (ai_0 == 0) ld_188 = nd(Ask);
            if (ai_0 == 1) ld_188 = nd(Bid);
            if (lda_24[3] > 0.1) {
               if (ai_0 == 0) ld_180 = nd(ld_188 - lda_24[3] * gd_136);
               if (ai_0 == 1) ld_180 = nd(ld_188 + lda_24[3] * gd_136);
               if (loginfo) dl("    NSL: " + dts(ld_180));
               gd_1192 = lda_24[5];
            } else
               if (loginfo) dl("    !NSL: " + lda_24[3]);
            if (lda_24[7] > 0.1) {
               if (ai_0 == 0) ld_16 = nd(ld_188 + lda_24[7] * gd_136);
               if (ai_0 == 1) ld_16 = nd(ld_188 - lda_24[7] * gd_136);
               if (loginfo) dl("    NTP: " + dts(ld_16));
            } else
               if (loginfo) dl("    !NSL: " + lda_24[7]);
            li_196 = (GetTickCount() - gi_880) / 1000;
            if (loginfo) dl("   ... sec to calculate " + li_196, 1);
            if (li_196 > 120) {
               dl("   es sind mehr als 120 Sekunden zum berechnen vergangen, abbruch! " + li_196);
               return (0);
            }
            gi_876 = GetTickCount();
            li_200 = FALSE;
            if (li_200) {
               dl("Entry " + ai_0 + " Lots " + dts(ld_144, 3) + " newPrice " + dts(ld_188, 5) + " newSL " + dts(ld_180, 5), 1, 0, 0, 1);
               return (0);
            }
            li_204 = f_openPositions(ai_0, ld_144, ld_188, ld_180, ld_16);
         }
      }
   }
   return (li_204);
}

int f_askForOrderOpen(int ai_0) {
   int datetime_4 = TimeCurrent();
   int mb_code_8 = -1;
   while (mb_code_8 < 0) {
         mb_code_8 = MessageBox(Symbol() + ": New " + f_cmdToDirection(ai_0) + " Signal identified! Would you like to open the trade?", "Magic-Champ II >>> verify Setup!",
            MB_YESNO|MB_ICONQUESTION);
   }
   int datetime_12 = TimeCurrent();
   int li_16 = datetime_12 - datetime_4;
   if (loginfo) dl("timeDiff Question to Answer " + li_16);
   if (li_16 > 60 && mb_code_8 == IDYES) {
      dl("The trade will not be executed, more than 60 seconds have elapsed since signal identification!", 1, 1, 1);
      return (0);
   }
   if (mb_code_8 == IDNO) {
      dl("The trade will not be executed! The trade was cancelled manually!", 1, 1, 1);
      return (0);
   }
   if (mb_code_8 == IDYES) {
      dl("Order opening was confirmed manually. Trade is executed", 1, 1, 1);
      return (1);
   }
   return (0);
}

int f_openPositions(int ai_0, double ad_4, double ad_12, double ad_20, double ad_28) {
   bool li_52;
   bool li_56;
   string str_concat_60;
   string str_concat_68;
   string str_concat_76;
   string ls_36 = "";
   int li_ret_44 = 0;
   if (ai_0 == 0) ls_36 = "LONG @ " + gs_280;
   else ls_36 = "SHORT @ " + gs_280;
   bool li_48 = FALSE;
   if (!gi_468) {
      if (loginfo) dl("initPositionSplit == false >>> Teilverk?ufe sind gem?? Benutzereingabe m?glich, es wird eine Gesamtposition er?ffnet");
      gd_80 = gd_724;
      li_52 = TRUE;
      if (OrderOpen_withSLTP) li_ret_44 = f_openMarket_II(ai_0, ad_4, ls_36, ad_12, ad_20, ad_28, MAGICNUMBER, OrderOpen_withSLTP);
      else {
         li_ret_44 = f_openMarket_II(ai_0, ad_4, ls_36, ad_12, 0, 0, MAGICNUMBER, OrderOpen_withSLTP);
         if (li_ret_44 > 0) {
            li_56 = f_orderModify(li_ret_44, ad_20, 1, ad_28, 1);
            if (li_56) li_52 = FALSE;
         }
      }
      li_48 = f_checkIfOpenSuccessfull(li_ret_44, ai_0, ad_20, ad_28, li_52);
      return (li_48);
   }
   if (gi_468) {
      if (loginfo) dl("initPositionSplit == true >>> Teilverk?ufe sind gem?? Benutzereingabe NICHT m?glich, es werden mehrere Teilpositionen er?ffnet");
      if (loginfo) dl("+++ Try to open LONG Part I");
      str_concat_60 = StringConcatenate(ls_36, "-P1");
      li_ret_44 = f_openMarket(ai_0, g_order_lots_892, str_concat_60, ad_20, ad_28, MAGICNUMBER, OrderOpen_withSLTP);
      li_48 = f_checkIfOpenSuccessfull(li_ret_44, ai_0, ad_20, ad_28, 1);
      if (li_48 == FALSE) return (0);
      if (g_order_lots_900 > 0.0) {
         if (loginfo) dl("+++ Try to open " + f_cmdToDirection(ai_0) + " Part II");
         str_concat_68 = StringConcatenate(ls_36, "-P2");
         li_ret_44 = f_openMarket(ai_0, g_order_lots_900, str_concat_68, ad_20, ad_28, MAGICNUMBER, OrderOpen_withSLTP);
         li_48 = f_checkIfOpenSuccessfull(li_ret_44, ai_0, ad_20, ad_28, 1);
         if (li_48 == FALSE) return (0);
      }
      if (g_order_lots_908 > 0.0) {
         if (loginfo) dl("+++ Try to open " + f_cmdToDirection(ai_0) + " Part III");
         str_concat_76 = StringConcatenate(ls_36, "-P3");
         li_ret_44 = f_openMarket(ai_0, g_order_lots_908, str_concat_76, ad_20, ad_28, MAGICNUMBER, OrderOpen_withSLTP);
         li_48 = f_checkIfOpenSuccessfull(li_ret_44, ai_0, ad_20, ad_28, 1);
         if (li_48 == FALSE) return (0);
      }
   }
   return (li_ret_44);
}

int f_checkNewTicket(int a_ticket_0, int ai_4, double ad_8, double ad_16, bool ai_24) {
   double ld_32;
   double ld_40;
   double ld_48;
   double ld_56;
   double ld_64;
   if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
      g_text_1000 = "ERROR @ OrderSelect!. Das neue Ticket kann nicht er?ffnet werden\nDie Order wird wieder geschlossen!";
      dl(g_text_1000, 1, 1, 1);
      gi_120 = FALSE;
      f_closeAllAndCheck();
      return (0);
   }
   bool li_28 = FALSE;
   if (Auto_SL_Management || (!Auto_SL_Management && (ai_4 == 0 && SL_AT_Trade_Open_Long > 0.0) || (ai_4 == 1 && SL_AT_Trade_Open_Short > 0.0))) {
      if (ai_24) {
         if (OrderStopLoss() == 0.0) {
            dl("Fehler!!! Kein Stoploss(" + OrderStopLoss() + ") gesetzt bei Ticket " + a_ticket_0 + " mit Auto_SL_Management. Es wird erneut versucht den SL auf " + dts(ad_8) +
               " zu setzen!");
            li_28 = f_orderModify(a_ticket_0, ad_8, 1);
            if (li_28) {
               OrderSelect(a_ticket_0, SELECT_BY_TICKET);
               if (OrderStopLoss() != 0.0) {
                  if (loginfo) dl("Der SL von Ticket " + a_ticket_0 + " konnte jetzt erfolgreich auf " + dts(OrderStopLoss()) + " gesetzt werden!");
               } else {
                  if (loginfo) dl("!!!Fehler, Der SL von Ticket " + a_ticket_0 + " konnte nicht erfolgreich auf " + dts(ad_8) + " gesetzt werden!");
                  li_28 = FALSE;
               }
            }
            if (!li_28) {
               OrderSelect(a_ticket_0, SELECT_BY_TICKET);
               if (OrderStopLoss() == 0.0) {
                  dl("Der SL von Ticket " + a_ticket_0 + " konnte auch im zweiten Versuch nicht gesetzt werden. Das Ticket wird wieder geschlossen und das Trading beendet.");
                  if (f_closePosi(a_ticket_0, 1)) {
                     dl("Ticket " + a_ticket_0 + " wurde erfolgreich geschlossen!");
                     g_text_1000 = "Bei Ticketer?ffnung konnte kein Stoploss gesetzt werden, das Trading wurde beendet!";
                     dl(g_text_1000, 1, 1, 1);
                  } else {
                     dl("Fehler: Ticket " + a_ticket_0 + " konnte nicht erfolgreich geschlossen werden!");
                     g_text_1000 = "Bei Ticketer?ffnung konnte kein Stoploss gesetzt werden, das Trading wurde beendet! \nDie Order konnte noch nicht erfolgreich geschlossen werden!!";
                     dl(g_text_1000, 1, 1, 1);
                     f_closeAllAndCheck();
                  }
                  dl(g_text_1000, 1, 1, 1);
                  gi_120 = FALSE;
                  return (0);
               }
               dl("Der Orderstoploss war doch nicht 0, obwohl das Modify nicht erfolgreich war. SL: " + dts(OrderStopLoss()));
            }
         }
      }
   }
   if (!Auto_TP_Management) {
      if ((ai_4 == 0 && TP_AT_Trade_Open_Long > 0.0) || (ai_4 == 1 && TP_AT_Trade_Open_Short > 0.0)) {
         if (OrderTakeProfit() == 0.0) {
            dl("Fehler!!! Kein Takeprofit gesetzt mit Auto_TP_Management. Es wird erneut versucht den TP auf " + dts(ad_16) + " zu setzen!");
            li_28 = f_orderModify(a_ticket_0, ad_8, 0, ad_16, 1);
            if (li_28) dl("Der TP von Ticket " + a_ticket_0 + " konnte jetzt erfolgreich auf " + dts(ad_16) + " gesetzt werden!");
            else {
               if (loginfo) dl("!!!Fehler, Der TP von Ticket " + a_ticket_0 + " konnte nicht erfolgreich auf " + dts(ad_16) + " gesetzt werden!");
               li_28 = FALSE;
            }
            if (!li_28) {
               OrderSelect(a_ticket_0, SELECT_BY_TICKET);
               if (OrderTakeProfit() == 0.0) {
                  dl("Der TP von Ticket " + a_ticket_0 + " konnte auch im zweiten Versuch nicht gesetzt werden. Das Ticket wird wieder geschlossen und das Trading beendet.");
                  if (f_closePosi(a_ticket_0, 1)) {
                     dl("Ticket " + a_ticket_0 + " wurde erfolgreich geschlossen!");
                     g_text_1000 = "Bei Ticketer?ffnung konnte kein Takeprofit gesetzt werden, das Trading wurde beendet!";
                     dl(g_text_1000, 1, 1, 1);
                  } else {
                     dl("Fehler: Ticket " + a_ticket_0 + " konnte nicht erfolgreich geschlossen werden!");
                     g_text_1000 = "Bei Ticketer?ffnung konnte kein Takeprofit gesetzt werden, das Trading wurde beendet! \nDie Order konnte noch nicht erfolgreich geschlossen werden!!";
                     dl(g_text_1000, 1, 1, 1);
                     f_closeAllAndCheck();
                  }
                  dl(g_text_1000, 1, 1, 1);
                  gi_120 = FALSE;
                  return (0);
               }
               dl("Der Ordertakeprofit war doch nicht 0, obwohl das Modify nicht erfolgreich war. SL: " + dts(OrderTakeProfit()));
            }
         }
      } else dl("Auto_TP_Man " + Auto_TP_Management + " TP_L " + TP_AT_Trade_Open_Long + " TP_S" + TP_AT_Trade_Open_Short);
   }
   if ((!g_bool_148) && !g_bool_144) {
      if (MoneyManagement_Variant < 3) {
         if (gd_1192 > 0.0) {
            ld_32 = MathAbs(OrderOpenPrice() - OrderStopLoss()) / gd_136;
            ld_40 = f_moneyCalc(ld_32, OrderLots());
            if (loginfo) dl("+++++++++++++++++RISK DOUBLECHECKER++++++++++++++++");
            if (loginfo) dl("Das Risiko des Trades nach Abgabe des SLs betr?gt " + dts(ld_40, 2) + AccountCurrency() + " Ausgerechnet waren " + dts(gd_1192, 2) + AccountCurrency());
            if (loginfo) dl("Die Tickvalue war: " + dts(f_MarketInfo_TICKVALUE() * gi_124, 3));
            if (ld_40 > gd_1192) {
               dl("Das aktuelle Risiko ist gr??er als das Berechnete. Der SL wird angepasst!");
               ld_48 = nd(f_pipCalc(gd_1192, OrderLots()));
               ld_56 = 0;
               if (OrderType() == OP_BUY) ld_56 = OrderOpenPrice() - ld_48 * gd_136;
               else ld_56 = OrderOpenPrice() + ld_48 * gd_136;
               dl("Der neu errechnete SL betr?gt " + dts(ld_48, 3) + " Pips und wird auf " + dts(ld_56) + " gelegt!");
               li_28 = f_orderModify(a_ticket_0, ld_56, 1);
               if (!li_28) dl("Der neu errechnete SL konnte nicht an den Broker ?bermittelt werden!", 1, 1);
               ld_64 = gd_980 - 18.0 * gd_136;
               if (OrderType() == OP_SELL) ld_64 = gd_972 + 18.0 * gd_136;
               if (!g_bool_144) paint("Riskcheck_SL" + dts(ld_56) + "(" + dts(ad_8) + ")_" + iTime(Symbol(), g_timeframe_992, 0), 169, Red, 1, Time[0], ld_64);
            }
         } else dl("Obwohl MM = " + MoneyManagement_Variant + " war moneyToRisk: " + gd_1192);
      }
   }
   OrderSelect(a_ticket_0, SELECT_BY_TICKET);
   f_checkForCorrectTrading(gi_1200, gi_1028, ai_4, Ask, Bid, gd_136, OrderStopLoss(), OrderLots(), OrderOpenPrice(), gi_468);
   return (a_ticket_0);
}

bool f_fillTickValue(double &ada_0[2]) {
   string str_concat_4 = StringConcatenate("EURUSD", f_getSuffix(Symbol()));
   ada_0[0] = MarketInfo(str_concat_4, MODE_BID);
   ada_0[1] = f_MarketInfo_TICKVALUE() * gi_124;
   if (ada_0[1] <= 0.2) {
      dl("Fehler, konnte Tickvalue nicht auslesen! Tickvalue: " + ada_0[1], 1, 1, 1);
      return (FALSE);
   }
   return (TRUE);
}

void f_changeDaTicket(string as_0, int a_cmd_8) {
   if (gi_100) errorLog(GetLastError(), "START f_testDaBest: ");
   for (int pos_12 = OrdersTotal() - 1; pos_12 >= 0; pos_12--) {
      if (OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICNUMBER) {
            if (OrderType() == a_cmd_8)
               if (StringFind(OrderComment(), as_0, 0) > 0) f_closeActivePosition(OrderTicket(), 1);
         }
      }
   }
}

int f_SLTrailingWithSplit(double ad_0, int a_cmd_8) {
   if (gi_100) errorLog(GetLastError(), "START f_SLTrailingWithSplit: ");
   for (int pos_12 = 0; pos_12 < OrdersTotal(); pos_12++) {
      if (!OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES)) {
         dl("ERROR @ OrderSelect in f_magicTPManagement_SHORT_NEW for activeShortTicket# " + g_ticket_172);
         return (0);
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICNUMBER) {
         if (OrderType() == a_cmd_8 && OrderType() == OP_BUY) {
            if (OrderStopLoss() < ad_0) {
               if (loginfo) dl("GO GO GO for SL TRAILING");
               f_orderModify(OrderTicket(), ad_0, 1);
            }
         }
         if (OrderType() == a_cmd_8 && OrderType() == OP_SELL) {
            if (OrderStopLoss() > ad_0) {
               if (loginfo) dl("GO GO GO for SL TRAILING");
               f_orderModify(OrderTicket(), ad_0, 1);
            }
         }
      }
   }
   return (0);
}

double f_getLastCloseTime() {
   int hist_total_0 = 0;
   double datetime_4 = TimeCurrent();
   for (hist_total_0 = OrdersHistoryTotal(); hist_total_0 > -1; hist_total_0--) {
      OrderSelect(hist_total_0, SELECT_BY_POS, MODE_HISTORY);
      if (OrderMagicNumber() == MAGICNUMBER && OrderSymbol() == Symbol()) {
         if (OrderCloseTime() != 0 && OrderType() == OP_BUY || OrderType() == OP_SELL) {
            datetime_4 = OrderCloseTime();
            return (datetime_4);
         }
      }
   }
   return (datetime_4);
}

double f_getLastOpenTime() {
   int hist_total_0 = 0;
   double datetime_4 = TimeCurrent();
   for (hist_total_0 = OrdersHistoryTotal(); hist_total_0 > -1; hist_total_0--) {
      OrderSelect(hist_total_0, SELECT_BY_POS, MODE_HISTORY);
      if (OrderMagicNumber() == MAGICNUMBER && OrderSymbol() == Symbol()) {
         if (OrderCloseTime() != 0 && OrderType() == OP_BUY || OrderType() == OP_SELL) {
            datetime_4 = OrderOpenTime();
            return (datetime_4);
         }
      }
   }
   return (datetime_4);
}

void f_resetTheVars(int &ai_0) {
   gi_996 = FALSE;
   gi_unused_848 = 0;
   ai_0 = 1;
   gi_948 = FALSE;
   gi_952 = FALSE;
   gi_956 = FALSE;
   loginfo0 = 0;
   gi_unused_964 = FALSE;
}

void f_initLogging() {
   g_bool_144 = IsOptimization();
   g_bool_148 = IsTesting();
   g_timeframe_132 = Period();
   gi_1028 = f_getActWP();
   if (!debugmode) loginfo = FALSE;
   else loginfo = TRUE;
   if (g_bool_144 || g_bool_148) loginfo = FALSE;
   if (!loginfo) gi_92 = FALSE;
   else {
      gi_92 = TRUE;
      gi_88 = TRUE;
   }
   if (((!g_bool_144) && !g_bool_148) || (g_bool_148 && IsVisualMode())) viMode = TRUE;
   if (!viMode) gi_740 = FALSE;
   log_openName(WindowExpertName(), -1, -1, 1);
}

bool f_checkDLLAllowed() {
   if (gi_740) {
      f_comment("\n --> Check if DLL imports are allowed");
   }
   if (!IsDllsAllowed()) {
      f_setError("DLL imports must be allowed! >>> NO TRADING possible. EA stopped <<<\nDLLs unter EXPERTS/OPTIONEN/EXPERT ADVISORS bitte zulassen!");
      return (FALSE);
   }
   return (TRUE);
}

bool f_checkLicence() {
   
   if (gi_740) {
      f_comment("\n --> Checking licence");
   }
   Print("path " + TerminalPath());
   int li_0 = f_initialChecks(TerminalPath(), AccountCompany(), IsDemo(), AccountNumber(), AccountCurrency(), TimeCurrent(), AccountName(), proVer);
   if (li_0 != 1) {
      g_text_1000 = f_getErrorDescription(li_0);
      return (FALSE);
   }
   return (TRUE);
}

bool f_checkAccNbr() {
   int li_0 = f_checkAccountNb();
   if (li_0 < 1) {
      f_setError(StringConcatenate(AccountNumber(), " not known! The EA will not trade correctly! Error: ", dts(li_0, 0)));
      return (FALSE);
   }
   return (TRUE);
}

bool f_checkExpiration() {
   if (gi_740) {
      f_comment("\n --> Checking license duration");
   }
   string str_concat_0 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE) + "; " + TimeToStr(TimeLocal(), TIME_SECONDS), " ; ");
   if (f_checkExpire(gi_1028, TerminalPath(), str_concat_0, TimeCurrent()) < 1) {
      f_setError("The duration of the license has ended!");
      return (FALSE);
   }
   return (TRUE);
}

bool f_checkVars() {
   if (gi_740) f_comment("\n --> ?berpr?fe Variablenwerte");
   g_text_1000 = "";
   if (!Auto_SL_Management) {
      if (SL_AT_Trade_Open_Long < 1.0 && longAllowed) {
         f_setError(StringConcatenate("LONG-SL = ", dts(SL_AT_Trade_Open_Long, 1), " Please enter a larger LONG-SL value, or put Auto_SL_Management variable on true"));
         return (FALSE);
      }
      if (SL_AT_Trade_Open_Short < 1.0 && shortAllowed) {
         f_setError(StringConcatenate("SHORT-SL = ", dts(SL_AT_Trade_Open_Short, 1), " Please enter a larger SHORT-SL value, or put Auto_SL_Management variable on true"));
         return (FALSE);
      }
   }
   if (use_Time_Management) {
      if ((use_Local_Time && use_Server_Time) || ((!use_Local_Time) && !use_Server_Time)) {
         f_setError("Please make a choice between use_Local_Time == true OR use_Server_Time == true");
         return (FALSE);
      }
   }
   if (proVer == 1) {
      if (MoneyManagement_Variant < 1 || MoneyManagement_Variant > 3) {
         f_setError("Please choose one MoneyManagement_Variant 1, 2 or 3!");
         return (FALSE);
      }
   } else {
      if (MoneyManagement_Variant < 1 || MoneyManagement_Variant > 3) {
         f_setError("Please choose one MoneyManagement_Variant 1!");
         return (FALSE);
      }
      if (MoneyManagement_Variant != 1) {
         
         f_setError("MoneyManagement_Variant 2 or 3 is available in Pro-Version only!");
         return (FALSE);
      }
   }
   if (MoneyManagement_Variant == 1) {
      if (use_Adaptive_MM) {
         if (Divisor_Long < 5) {
            dl(StringConcatenate("The set divisor_Long (", Divisor_Long, ") is raised to the minimum of 5!"), 1, 1, 1);
            Divisor_Long = 5;
         }
         if (Divisor_Short < 5) {
            dl(StringConcatenate("The set divisor_Short (", Divisor_Short, ") is raised to the minimum of 5!"), 1, 1, 1);
            Divisor_Short = 5;
         }
      }
      if (longAllowed && risk_Long_Percent <= 0.0) {
         f_setError("MM-Variant 1- Long, please set the appropriate risk for risk_Long_Percent!");
         return (FALSE);
      }
      if (shortAllowed && risk_Short_Percent <= 0.0) {
         f_setError("MM-Variant 1- Short, please set the appropriate risk for risk_Short_Percent!");
         return (FALSE);
      }
   }
   if (MoneyManagement_Variant == 2) {
      if (longAllowed && maxRisk_PcL <= 0.0) {
         f_setError("MM-Variant 2- Long, please set the appropriate risk for maxRisk_PcL!");
         return (FALSE);
      }
      if (shortAllowed && maxRisk_PcS <= 0.0) {
         f_setError("MM-Variant 2- Short, please set the appropriate risk for maxRisk_PcS!");
         return (FALSE);
      }
      if (longAllowed && basicRisk_L <= 0) {
         f_setError("MM-Variant 2- Long, please set the appropriate risk for basicRisk_L!");
         return (FALSE);
      }
      if (shortAllowed && basicRisk_S <= 0) {
         f_setError("MM-Variant 2- Short, please set the appropriate risk for basicRisk_S!");
         return (FALSE);
      }
   }
   if (MoneyManagement_Variant == 3) {
      if (longAllowed && lots_Long <= 0.0) {
         f_setError("MM-Variant 3- Long, please set the appropriate lotsize for lots_Long!");
         return (FALSE);
      }
      if (shortAllowed && lots_Short <= 0.0) {
         f_setError("MM-Variant 3- Short, please set the appropriate lotsize for lots_Short!");
         return (FALSE);
      }
   }
   if (g_bool_144 || (g_bool_148 && (!IsVisualMode()))) {
      if (!Auto_Trade_Open) {
         f_setError("In the tester- and optimization mode the variable Auto_Trade_Open must be set to true!");
         return (FALSE);
      }
   }
   if (gi_672 && gi_676 > 12) {
      f_setError("Please check the variable fxProOffset!");
      return (FALSE);
   }
   return (TRUE);
}

void f_setError(string a_text_0) {
   g_text_1000 = a_text_0;
   dl(g_text_1000, 1, 1, 1);
   gi_120 = FALSE;
}

int f_checkOpenOrder() {
   int li_4;
   int li_ret_0 = f_getActiveTicket(g_ticket_168, g_ticket_172);
   if (g_ticket_168 > 0)
      if (loginfo) dl("Es gibt ein Longticket das jetzt gemanaged wird: " + g_ticket_168);
   if (g_ticket_172 > 0)
      if (loginfo) dl("Es gibt ein Shortticket das jetzt gemanaged wird: " + g_ticket_172);
   if ((!gi_468) && Auto_TP_Management && (!loginfo0)) {
      if (g_ticket_168 > 0) {
         f_xyz(0, gi_1028, 1);
         li_4 = calcLotSplit(g_ticket_168, gi_924, g_order_lots_892, gi_928, g_order_lots_900, gi_932, g_order_lots_908, loginfo0, 0);
         dl("l done");
      }
      if (g_ticket_172 > 0) {
         f_xyz(1, gi_1028, 1);
         li_4 = calcLotSplit(g_ticket_172, gi_936, g_order_lots_892, gi_940, g_order_lots_900, gi_944, g_order_lots_908, loginfo0, 0);
         dl("s done");
      }
   }
   return (li_ret_0);
}

void f_getEndTimes() {
   if (proVer == 1) {
      if (!(loginfo)) return;
      dl("proVersion Individuelle Endzeiten werden verwendet");
      return;
   }
   lastSignal_Hour_Long = endTime_Hour - 3;
   if (lastSignal_Hour_Long >= 0) lastSignal_Minute_Long = endTime_Minute;
   else {
      lastSignal_Hour_Long = 0;
      lastSignal_Minute_Long = 0;
   }
   lastSignal_Hour_Short = endTime_Hour - 3;
   if (lastSignal_Hour_Short >= 0) {
      lastSignal_Minute_Short = endTime_Minute;
      return;
   }
   lastSignal_Hour_Short = 0;
   lastSignal_Minute_Short = 0;
}

void f_logDataError(int ai_0) {
   gi_1208++;
   if (gi_1208 < 100) {
      dl("  WARNING Missing data in " + f_strToPeriod(ai_0) + " chart!", 1, 1);
   }
}

bool f_verifyData() {
   int li_0 = 0;
   for (li_0 = 0; li_0 <= 30; li_0++) {
      if (iLow(Symbol(), PERIOD_M5, li_0) <= 0.001) f_logDataError(5);
      if (iHigh(Symbol(), PERIOD_M5, li_0) <= 0.001) f_logDataError(5);
      if (iLow(Symbol(), PERIOD_M15, li_0) <= 0.001) f_logDataError(15);
      if (iHigh(Symbol(), PERIOD_M15, li_0) <= 0.001) f_logDataError(15);
      if (iClose(Symbol(), PERIOD_H4, li_0) <= 0.001) f_logDataError(240);
   }
   for (li_0 = 0; li_0 < 300; li_0++) {
      if (iClose(Symbol(), PERIOD_M1, li_0) <= 0.001) f_logDataError(1);
      if (iClose(Symbol(), PERIOD_M5, li_0) <= 0.001) f_logDataError(5);
      if (iClose(Symbol(), PERIOD_M15, li_0) <= 0.001) f_logDataError(15);
      if (iHigh(Symbol(), PERIOD_M30, li_0) <= 0.001) f_logDataError(30);
      if (iOpen(Symbol(), PERIOD_M30, li_0) <= 0.001) f_logDataError(30);
      if (iClose(Symbol(), PERIOD_M30, li_0) <= 0.001) f_logDataError(30);
      if (iLow(Symbol(), PERIOD_M30, li_0) <= 0.001) f_logDataError(30);
      if (iHigh(Symbol(), PERIOD_H1, li_0) <= 0.001) f_logDataError(60);
      if (iOpen(Symbol(), PERIOD_H1, li_0) <= 0.001) f_logDataError(60);
      if (iClose(Symbol(), PERIOD_H1, li_0) <= 0.001) f_logDataError(60);
      if (iLow(Symbol(), PERIOD_H1, li_0) <= 0.001) f_logDataError(60);
   }
   if (gi_1208 == 0) return (TRUE);
   dl("Missing data for " + gi_1208 + " in chart, please click on each period once from 1min to H4!", 1, 1, 1);
   return (TRUE);
}

void f_createErrorMessage(int ai_0) {
   dl("ATTENTION - Error (" + ai_0 + ") in MT-DLL Connection!", 1, 1, 1);
   if (viMode) {
      if (ai_0 <= -201 && ai_0 >= -203) {
         dl("hier");
         f_setError(f_getErrorDescription(ai_0));
         ObjectSetText(g_name_1088, g_text_1000, 10, "Arial", Yellow);
      } else {
         ObjectSetText(g_name_1088, StringConcatenate("MT4-DLL-Error ", ai_0, " --->info@metatrader-experts.de"), 10, "Arial", Yellow);
      }
   }
}

string f_getErrorDescription(int ai_0) {
   string str_concat_4 = StringConcatenate("Fehler: ", ai_0);
   if (ai_0 == -1) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -2) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -3) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -17) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -7) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -8) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n No license for account number ", AccountNumber(), "!\n Please contact info@metatrader-experts.de");
   }
   if (ai_0 == -9) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Please use the correct version of Magic-Champ II!");
   }
   if (ai_0 == -51) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Please save the .dll - file only in the folder /experts/libraries!");
   }
   if (ai_0 == -54) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Please delete any old Magic-Champ - files under /experts,\nexcept for the current version of Magic-Champ_II_DLL_V1.6_xx.ex4.");
   }
   if (ai_0 == -55) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Please save the unmodified file Magic-Champ_II_DLL_V1.6_xx.ex4 under /experts");
   }
   if (ai_0 == -61) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Please save the unmodified file Magic-Champ_II_DLL_V1.6_xx.ex4 under /experts");
   }
   if (ai_0 == -201 || ai_0 == -202) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Invalid Plimus-Key: The registered license key does not match to the activated license in the software!");
   }
   if (ai_0 == -203) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Expired Key: The duration of the license key has expired!");
   }
   if (ai_0 == -201 || ai_0 == -202) {
         str_concat_4 = StringConcatenate("Error: ", dts(ai_0, 0), 
         "\n Invalid Plimus-Key: The registered license key does not match to the activated license in the software!");
   }
   f_createInfoObjects(g_name_1088, 20, 15);
   ObjectSetText(g_name_1088, StringConcatenate("STOP: ", str_concat_4), 10, "Arial", Yellow);
   return (str_concat_4);
}

void f_displayConfirmation() {
   if (gi_740) f_comment("\n --> Erstelle Informationsobjekte");
   if (viMode) {
      f_createInfoObjects(g_name_1088, 20, 15);
      f_createInfoObjects(g_name_1080, 160, 15);
      f_createInfoObjects(g_name_1040, 20, 50);
      f_createInfoObjects(g_name_1048, 20, 65);
      f_createInfoObjects(g_name_1056, 160, 65);
      f_createInfoObjects(g_name_1064, 20, 80);
      f_createInfoObjects(g_name_1072, 160, 80);
      f_createInfoObjects(g_name_1032, 20, 95);
      ObjectSetText(g_name_1088, "", 10, "Arial", Yellow);
      ObjectSetText(g_name_1080, "", 9, "Arial", Crimson);
      ObjectSetText(g_name_1032, g_text_1160, 9, "Arial", Crimson);
      if (Auto_Trade_Open) {
         ObjectSetText(g_name_1040, "Automatic tradeopening", 9, "Arial", MediumSeaGreen);
      } else {
         ObjectSetText(g_name_1040, "Tradeopening only after manual confirmation!", 9, "Arial", Yellow);
      }
      if (Auto_SL_Management) ObjectSetText(g_name_1048, "SL-Management: AUTO", 9, "Arial", MediumSeaGreen);
      if (!Auto_SL_Management) ObjectSetText(g_name_1048, "SL-Management: MAN", 9, "Arial", YellowGreen);
      if (Auto_TP_Management) ObjectSetText(g_name_1056, "TP-Management: AUTO", 9, "Arial", MediumSeaGreen);
      if (!Auto_TP_Management) ObjectSetText(g_name_1056, "TP-Management: MAN", 9, "Arial", YellowGreen);
      if (longAllowed) {
         if (use_Time_Management) ObjectSetText(g_name_1064, g_text_1144, 9, "Arial", Yellow);
         else ObjectSetText(g_name_1064, g_text_1128, 9, "Arial", MediumSeaGreen);
      }
      if (!longAllowed) ObjectSetText(g_name_1064, gs_long_off_1104, 9, "Arial", Crimson);
      if (shortAllowed) {
         if (use_Time_Management) ObjectSetText(g_name_1072, g_text_1152, 9, "Arial", Yellow);
         else ObjectSetText(g_name_1072, g_text_1136, 9, "Arial", MediumSeaGreen);
      }
      if (!shortAllowed) ObjectSetText(g_name_1072, g_text_1120, 9, "Arial", Crimson);
   }
}

void f_createInfoObjects(string a_name_0, int a_x_8, int a_y_12, int a_corner_16 = 0) {
   int error_20;
   if (!ObjectCreate(a_name_0, OBJ_LABEL, 0, 0, 0)) {
      error_20 = GetLastError();
      if (error_20 != 4200/* OBJECT_ALREADY_EXISTS */) {
         errorLog(error_20, StringConcatenate("ObjectCreate( \"", a_name_0, "\", OBJ_LABEL,0,0,0 ) - Error #", error_20));
         return;
      }
   }
   if (!ObjectSet(a_name_0, OBJPROP_CORNER, a_corner_16)) errorLog(GetLastError(), StringConcatenate("ObjectSet( \"", a_name_0, "\", OBJPROP_CORNER, ", a_corner_16, " )"));
   if (!ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_8)) errorLog(GetLastError(), StringConcatenate("ObjectSet( \"", a_name_0, "\", OBJPROP_XDISTANCE, ", a_x_8, " )"));
   if (!ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_12)) errorLog(error_20, StringConcatenate("ObjectSet( \"", a_name_0, "\", OBJPROP_YDISTANCE, ", a_y_12, " )"));
   if (!ObjectSetText(a_name_0, "", 10)) errorLog(error_20, StringConcatenate("ObjectSetText( \"", a_name_0, "\", \"\", 10 )"));
}

void f_deleteInfoObjects(bool ai_0) {
   if (ObjectFind(g_name_1032) != -1) ObjectDelete(g_name_1032);
   if (ObjectFind(g_name_1064) != -1) ObjectDelete(g_name_1064);
   if (ObjectFind(g_name_1072) != -1) ObjectDelete(g_name_1072);
   if (ObjectFind(g_name_1040) != -1) ObjectDelete(g_name_1040);
   if (ObjectFind(g_name_1048) != -1) ObjectDelete(g_name_1048);
   if (ObjectFind(g_name_1056) != -1) ObjectDelete(g_name_1056);
   if (ObjectFind(g_name_1080) != -1) ObjectDelete(g_name_1080);
   if (ai_0)
      if (ObjectFind(g_name_1088) != -1) ObjectDelete(g_name_1088);
}

void f_logTheVars() {
   dl("#########################################################");
   dl("#########################################################");
   dl("Expert:                      " + WindowExpertName());
   dl("Symbol:                      " + Symbol());
   dl("Accountnumber:               " + AccountNumber());
   dl("Accountname:                 " + AccountName());
   dl("AccountCompany:              " + AccountCompany());
   dl("AccountCurrency:             " + AccountCurrency());
   dl("Demo:                        " + f_boolToString(IsDemo()));
   dl("AccountServer:               " + AccountServer());
   dl("IsTradeAllowed               " + f_boolToString(IsTradeAllowed()));
   dl("IsDllsAllowed                " + f_boolToString(IsDllsAllowed()));
   dl("Starting Time                " + TimeCurrent());
   dl("User VARSs-----------------------------------------------");
   dl("longAllowed                  " + f_boolToString(longAllowed));
   dl("shortAllowed                 " + f_boolToString(shortAllowed));
   dl("proVersion                   " + f_boolToString(proVer));
   dl("MoneyManagement_Variant      " + MoneyManagement_Variant);
   dl("risk_Long_Percent            " + risk_Long_Percent);
   dl("risk_Short_Percent           " + risk_Short_Percent);
   dl("use_Adaptive_MM              " + f_boolToString(use_Adaptive_MM));
   dl("Divisor_Long                 " + Divisor_Long);
   dl("Divisor_Short                " + Divisor_Short);
   dl("basicRisk_L                  " + basicRisk_L);
   dl("basicRisk_S                  " + basicRisk_S);
   dl("reinvest_PcL                 " + reinvest_PcL);
   dl("reinvest_PcS                 " + reinvest_PcS);
   dl("maxRisk_PcL                  " + maxRisk_PcL);
   dl("maxRisk_PcS                  " + maxRisk_PcS);
   dl("lots_Long                    " + lots_Long);
   dl("lots_Short                   " + lots_Short);
   dl("maxRiskPerTrade              " + gd_800);
   dl("initPositionSplit            " + f_boolToString(gi_468));
   dl("OrderOpen_withSLTP           " + f_boolToString(OrderOpen_withSLTP));
   dl("Break_After_SL               " + Break_After_SL);
   dl("Auto_Trade_Open              " + f_boolToString(Auto_Trade_Open));
   dl("Auto_SL_Management           " + f_boolToString(Auto_SL_Management));
   dl("SL_AT_Trade_Open_Long        " + SL_AT_Trade_Open_Long);
   dl("SL_AT_Trade_Open_Short       " + SL_AT_Trade_Open_Short);
   dl("Auto_TP_Management           " + f_boolToString(Auto_TP_Management));
   dl("TP_AT_Trade_Open_Long        " + TP_AT_Trade_Open_Long);
   dl("TP_AT_Trade_Open_Short       " + TP_AT_Trade_Open_Short);
   dl("use_Time_Management          " + f_boolToString(use_Time_Management));
   dl("use_Local_Time               " + f_boolToString(use_Local_Time));
   dl("use_Server_Time              " + f_boolToString(use_Server_Time));
   dl("startTime_Day                " + startTime_Day);
   dl("startTime_Hour               " + startTime_Hour);
   dl("endTime_Day                  " + endTime_Day);
   dl("endTime_Hour                 " + endTime_Hour);
   dl("endTime_Minute               " + endTime_Minute);
   dl("lastSignal_Hour_Long         " + lastSignal_Hour_Long);
   dl("lastSignal_Minute_Long       " + lastSignal_Minute_Long);
   dl("lastSignal_Hour_Short        " + lastSignal_Hour_Short);
   dl("lastSignal_Minute_Short      " + lastSignal_Minute_Short);
   dl("Slippage                     " + Slippage);
   dl("current Spread               " + MarketInfo(Symbol(), MODE_SPREAD));
   dl("current TickValue            " + f_MarketInfo_TICKVALUE());
   dl("minLot                       " + f_MarketInfo_MINLOT());
   dl("maxLot                       " + f_MarketInfo_MAXLOT());
   dl("lotStep                      " + f_MarketInfo_LOTSTEP());
   dl("lotSize                      " + MarketInfo(Symbol(), MODE_LOTSIZE));
   dl("ticksize                     " + f_MarketInfo_TICKSIZE());
   dl("debug                        " + f_boolToString(debugmode));
   dl("log                          " + f_boolToString(loginfo));
   dl("t_printAll                   " + f_boolToString(prnAll));
   dl("isVisual                     " + f_boolToString(viMode));
}

int init() {
   g_str_concat_192 = "";
   gs_1020 = "\n === Magic-Champ II V1.6 @ metatrader-experts.de-ForexInnovation GmbH ===";
   f_initializeEA();
   if (g_text_1000 != "") {
      Comment(StringConcatenate("\n\n", "EA-Stopped!\n", g_text_1000));
      gi_120 = FALSE;
      f_logTheVars();
      return/*(WARN)*/;
   }
   f_paintDaInfosOnTheScreen();
   gi_184 = FALSE;
   int li_0 = f_checkOpenOrder();
   gi_1180 = TRUE;
   gi_1184 = TRUE;
   gi_1188 = TRUE;
   if (use_Time_Management) f_timeManagement(li_0);
   else {
      f_SoftStopPassivShort();
      f_SoftStopPassivLong();
      f_HardstopPassiv(1);
   }
   if (gi_1212) {
      loginfo = TRUE;
      gi_92 = TRUE;
   }
   return (0);
}

int start() {
   int ticket_4;
   int ticket_8;
   bool li_12;
   int li_16;
   int li_20;
   if (f_checkIfTradingAllowed()==1) {
      ticket_4 = g_ticket_168;
      ticket_8 = g_ticket_172;
      li_12 = FALSE;
      if (g_ticket_168 > 1 || g_ticket_172 > 1) li_12 = TRUE;
      li_16 = f_checkForNewTFBar(PERIOD_M5, li_12);
      if ((!g_bool_144) && li_16) {
         f_getTheDrawingFacts(gd_980, gd_972);
         if (viMode) f_paintDaInfosOnTheScreen();
      }
      li_20 = f_getActiveTicket(g_ticket_168, g_ticket_172);
      if (!li_16 && g_ticket_168 == 0 && g_ticket_172 == 0 && ticket_4 == 0 && ticket_8 == 0) return (0);
      if (g_ticket_168 > 0) f_magicTPManagement_LONG(g_ticket_168, 0);
      if (g_ticket_172 > 0) f_magicTPManagement_SHORT(g_ticket_172, 1);
      if (ticket_4 > 0 && g_ticket_168 == 0) f_checkLastOrderLong(ticket_4);
      if (ticket_8 > 0 && g_ticket_172 == 0) f_checkLastOrderShort(ticket_8);
      if (g_ticket_168 == 0 && g_ticket_172 == 0 && (!gi_852)) {
         f_getTotalProfitForEA();
         if (!g_bool_144) f_sendExitMail();
         if (loginfo) dl("FLAT >>> Vars werden resetted");
         f_resetTheVars(gi_852);
         return (0);
      }
      if (g_ticket_168 > 1 || g_ticket_172 > 1) gi_852 = 0;
      if (use_Time_Management) {
         if (f_timeManagement(li_20) == 0) {
            if (!(loginfo)) return;
            dl("STOP @ use_Time_Management!");
            return;
         }
      }
      if (!(g_ticket_168 == 0 && g_ticket_172 == 0 && li_16)) return (0);
      if (longAllowed && gi_688 && (!gi_252)) {
         if (checkForLong(0) == 1) {
            if (loginfo) dl("### LONG SIGNAL >>> OPEN LONG TRADE for id# " + gi_1008 + " ###");
            if (!g_bool_144) paint("LONG_ENTRY_MC-II_" + gi_1008 + "_" + f_tStr(), 217, Lime, 1, Time[0], Low[0] - 8.0 * gd_136);
            gi_996 = OpenOrder(0);
            f_getActiveTicket(g_ticket_168, g_ticket_172);
            if (g_ticket_168 > 0) f_sendEntryMail(g_ticket_168);
         }
      }
      if (!(shortAllowed && g_ticket_168 == 0 && gi_692 && (!gi_252))) return (0);
      if (checkForShort(1) != 1) return (0);
      if (loginfo) dl("### SHORT SIGNAL >>> OPEN SHORT TRADE for id# " + gi_1008 + " ###");
      if (!g_bool_144) paint("SHORT_ENTRY_MC-II_" + gi_1008 + "_" + f_tStr(), 218, Red, 1, Time[0], High[0] + 8.0 * gd_136);
      gi_996 = OpenOrder(1);
      f_getActiveTicket(g_ticket_168, g_ticket_172);
      if (g_ticket_172 <= 0) return (0);
      f_sendEntryMail(g_ticket_172);
   }
   return (0);
}

int f_checkAllCondiesLong() {
   gi_unused_1220 = TRUE;
   return (gi_1216);
}

int f_checkAllCondiesShort() {
   gi_unused_1224 = TRUE;
   return (gi_1216);
}

int checkForLong(int ai_0) {
   double lda_12[25];
   double lda_16[25];
   double lda_20[25];
   if ((!g_bool_144) && !g_bool_148) {
      RefreshRates();
      GetLastError();
   }
   if (loginfo) dl("\n     CheckForLONG " + gi_1008 + " ---------------------------", 1, 0, 0, 0, 0);
   gi_880 = GetTickCount();
   double ld_4 = f_useMagicConditionCheck_XXI(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_I " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_I " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXI(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_II " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_II " + DoubleToStr(ld_4, 2));
   ArrayInitialize(lda_12, 0);
   ArrayInitialize(lda_16, 0);
   ArrayInitialize(lda_20, 0);
   int li_24 = 0;
   for (li_24 = 0; li_24 < 25; li_24++) {
      lda_12[li_24] = iClose(Symbol(), PERIOD_M5, li_24);
      if (lda_12[li_24] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ useCondi_III closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits));
      lda_16[li_24] = iHigh(Symbol(), PERIOD_M5, li_24);
      if (lda_16[li_24] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ useCondi_III highArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits));
      lda_20[li_24] = iLow(Symbol(), PERIOD_M5, li_24);
      if (lda_20[li_24] < 0.001) dl("  ACHUNG FEHLENDE DATEN @ useCondi_III lowArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits));
   }
   ld_4 = ConditionCheck_I(lda_12, lda_16, lda_20, gd_136, gi_1028, ai_0, f_getLastCloseTime());
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_III " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_III " + DoubleToStr(ld_4, 2));
   double lda_28[31] = {0.0};
   double lda_32[31] = {0.0};
   for (li_24 = 0; li_24 <= 30; li_24++) {
      lda_28[li_24] = iClose(Symbol(), PERIOD_H1, li_24);
      if (lda_28[li_24] < 0.001) {
         dl("  Bitte aktivieren Sie den 1h Chart erneut, es fehlen Daten!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_IV closeArrayForDll_CheckV_I[i]  " + li_24 + " " + DoubleToStr(lda_28[li_24], Digits));
      }
      lda_32[li_24] = iClose(Symbol(), PERIOD_H4, li_24);
      if (lda_32[li_24] < 0.001) {
         dl("  Bitte aktivieren Sie den 4h Chart erneut, es fehlen Daten!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_V closeArrayForDll_CheckV_II[i]  " + li_24 + " " + DoubleToStr(lda_32[li_24], Digits));
      }
   }
   ld_4 = magicConditionCheck_IV(lda_28, lda_32, gi_1028, ai_0, f_getLastOpenTime(), AccountNumber(), 0);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_V IV-V " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_V IV-V " + DoubleToStr(ld_4, 4));
   ld_4 = f_useMagicConditionCheck_XXII(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_VI " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_VI " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXII(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_VII " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_VII " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIII(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_VIII " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_VIII " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIII(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_IX " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_IX " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIV(30, 60, ai_0, gi_1028, 0, 0);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" LONG STOP @ useCondi_XXIV X-XI " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesLong()) return (0);
   } else
      if (loginfo) dl(" LONG OK @ useCondi_XXIV X-XI " + DoubleToStr(ld_4, 4));
   return (1);
}

int checkForShort(int ai_0) {
   double lda_12[25];
   double lda_16[25];
   double lda_20[25];
   if ((!g_bool_144) && !g_bool_148) {
      RefreshRates();
      GetLastError();
   }
   if (loginfo) dl("\n     CheckForSHORT " + gi_1008 + " ---------------------------", 1, 0, 0, 0, 0);
   gi_880 = GetTickCount();
   double ld_4 = f_useMagicConditionCheck_XXI(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_I " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_I " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXI(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_II " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_II " + DoubleToStr(ld_4, 2));
   ArrayInitialize(lda_12, 0);
   ArrayInitialize(lda_16, 0);
   ArrayInitialize(lda_20, 0);
   int li_24 = 0;
   for (li_24 = 0; li_24 < 25; li_24++) {
      lda_12[li_24] = iClose(Symbol(), PERIOD_M5, li_24);
      if (lda_12[li_24] < 0.001) {
         dl("  Please activate the 5min chart again, data is missing!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_III closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits));
      }
      lda_16[li_24] = iHigh(Symbol(), PERIOD_M5, li_24);
      if (lda_16[li_24] < 0.001) {
         dl("  Please activate the 5min chart again, data is missing!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_III highArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits));
      }
      lda_20[li_24] = iLow(Symbol(), PERIOD_M5, li_24);
      if (lda_20[li_24] < 0.001) {
         dl("  Please activate the 5min chart again, data is missing!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_III lowArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits));
      }
   }
   ld_4 = ConditionCheck_I(lda_12, lda_16, lda_20, gd_136, gi_1028, ai_0, f_getLastCloseTime());
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_III " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_III " + DoubleToStr(ld_4, 2));
   double lda_28[36] = {0.0};
   double lda_32[36] = {0.0};
   for (li_24 = 1; li_24 <= 35; li_24++) {
      lda_28[li_24] = iClose(Symbol(), PERIOD_H1, li_24);
      if (lda_28[li_24] < 0.001) {
         dl("  Please activate the 1h chart again, data is missing!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_IV closeArrayForDll_CheckV_I[i]  " + li_24 + " " + DoubleToStr(lda_28[li_24], Digits));
      }
      lda_32[li_24] = iClose(Symbol(), PERIOD_H4, li_24);
      if (lda_32[li_24] < 0.001) {
         dl("  Please activate the 4h chart again, data is missing!", 1, 1, 1);
         dl("  ACHUNG FEHLENDE DATEN @ useCondi_V closeArrayForDll_CheckV_II[i]  " + li_24 + " " + DoubleToStr(lda_32[li_24], Digits));
      }
   }
   ld_4 = magicConditionCheck_IV(lda_28, lda_32, gi_1028, ai_0, f_getLastOpenTime(), AccountNumber(), 0);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_V IV-V " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_V IV-V " + DoubleToStr(ld_4, 4));
   ld_4 = f_useMagicConditionCheck_XXII(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_VI " + DoubleToStr(ld_4, 2));
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_VI " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXII(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_VII " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_VII " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIII(5, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_VIII " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_VIII " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIII(15, ai_0, gi_1028);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_IX " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_IX " + DoubleToStr(ld_4, 2));
   ld_4 = f_useMagicConditionCheck_XXIV(30, 60, ai_0, gi_1028, 0, 0);
   if (ld_4 < 1.0) {
      if (loginfo) dl(" SHORT STOP @ useCondi_XXIV X-XI " + DoubleToStr(ld_4, 2));
      if (ld_4 < 0.0) f_createErrorMessage(ld_4);
      if (!f_checkAllCondiesShort()) return (0);
   } else
      if (loginfo) dl(" SHORT OK @ useCondi_XXIV X-XI " + DoubleToStr(ld_4, 4));
   return (1);
}

int deinit() {
   dl("id " + gi_1008 + " closed");
   dl("-----------------------------------------------------------------------");
   if (viMode) f_deleteInfoObjects(1);
   f_closeFile();
   if (g_bool_148) log_close();
   Comment("");
   return (0);
}

double f_useMagicConditionCheck_XXI(int ai_0, int ai_4, int ai_8) {
   double lda_12[210];
   if (loginfo) dl("START f_useMagicConditionCheck_XXI");
   int li_16 = 0;
   if (ai_0 == 5) {
      for (li_16 = 0; li_16 < 210; li_16++) {
         lda_12[li_16] = iClose(Symbol(), PERIOD_M5, li_16);
         if (lda_12[li_16] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_16 + " " + DoubleToStr(lda_12[li_16], Digits), 1, 1, 1);
         }
      }
   }
   if (ai_0 == 15) {
      for (li_16 = 0; li_16 < 210; li_16++) {
         lda_12[li_16] = iClose(Symbol(), PERIOD_M15, li_16);
         if (lda_12[li_16] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_16 + " " + DoubleToStr(lda_12[li_16], Digits), 1, 1, 1);
         }
      }
   }
   return (magicConditionCheck_XXI(lda_12, ai_8, ai_0, ai_4));
}

double f_useMagicConditionCheck_XXII(int ai_0, int ai_4, int ai_8) {
   double lda_12[30];
   double lda_16[30];
   double lda_20[30];
   if (loginfo) dl("START f_useMagicConditionCheck_XXII");
   int li_24 = 0;
   if (ai_0 == 5) {
      for (li_24 = 0; li_24 < 30; li_24++) {
         lda_12[li_24] = iClose(Symbol(), PERIOD_M5, li_24);
         if (lda_12[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits), 1, 1, 1);
         }
         lda_16[li_24] = iLow(Symbol(), PERIOD_M5, li_24);
         if (lda_16[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN lowArrayForDll[i]    " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits), 1, 1, 1);
         }
         lda_20[li_24] = iHigh(Symbol(), PERIOD_M5, li_24);
         if (lda_20[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN highArrayForDll[i]   " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits), 1, 1, 1);
         }
      }
   }
   if (ai_0 == 15) {
      for (li_24 = 0; li_24 < 30; li_24++) {
         lda_12[li_24] = iClose(Symbol(), PERIOD_M15, li_24);
         if (lda_12[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 15min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits), 1, 1, 1);
         }
         lda_16[li_24] = iLow(Symbol(), PERIOD_M15, li_24);
         if (lda_16[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 15min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN lowArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits), 1, 1, 1);
         }
         lda_20[li_24] = iHigh(Symbol(), PERIOD_M15, li_24);
         if (lda_20[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 15min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN highArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits), 1, 1, 1);
         }
      }
   }
   return (magicConditionCheck_XXII(lda_12, lda_16, lda_20, ai_8, ai_0, ai_4));
}

double f_useMagicConditionCheck_XXIII(int ai_0, int ai_4, int ai_8) {
   double lda_12[50];
   double lda_16[50];
   double lda_20[50];
   if (loginfo) dl("START f_useMagicConditionCheck_XXIII");
   int li_24 = 0;
   if (ai_0 == 5) {
      for (li_24 = 1; li_24 < 50; li_24++) {
         lda_12[li_24] = iClose(Symbol(), PERIOD_M5, li_24);
         if (lda_12[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits), 1, 1, 1);
         }
         lda_16[li_24] = iLow(Symbol(), PERIOD_M5, li_24);
         if (lda_16[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN lowArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits), 1, 1, 1);
         }
         lda_20[li_24] = iHigh(Symbol(), PERIOD_M5, li_24);
         if (lda_20[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN highArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits), 1, 1, 1);
         }
      }
   }
   if (ai_0 == 15) {
      for (li_24 = 1; li_24 < 50; li_24++) {
         lda_12[li_24] = iClose(Symbol(), PERIOD_M15, li_24);
         if (lda_12[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN closeArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_12[li_24], Digits), 1, 1, 1);
         }
         lda_16[li_24] = iLow(Symbol(), PERIOD_M15, li_24);
         if (lda_16[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN lowArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_16[li_24], Digits), 1, 1, 1);
         }
         lda_20[li_24] = iHigh(Symbol(), PERIOD_M15, li_24);
         if (lda_20[li_24] < 0.001) {
            dl("  Bitte aktivieren Sie den 5min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  ACHTUNG FEHLENDE DATEN highArrayForDll[i]  " + li_24 + " " + DoubleToStr(lda_20[li_24], Digits), 1, 1, 1);
         }
      }
   }
   return (magicConditionCheck_XXIII(lda_12, lda_16, lda_20, ai_8, ai_0, ai_4, AccountNumber()));
}

double f_useMagicConditionCheck_XXIV(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20) {
   double lda_24[300] = {0.0};
   double lda_28[300] = {0.0};
   double lda_32[300] = {0.0};
   double lda_36[300] = {0.0};
   double lda_40[300] = {0.0};
   double lda_44[300] = {0.0};
   double lda_48[300] = {0.0};
   double lda_52[300] = {0.0};
   if (lda_28[0] == 0.0) {
      if (loginfo) dl("Refill openArrayForDll_CheckXXIV_I M30 / M60");
      for (int li_56 = 0; li_56 < 300; li_56++) {
         lda_24[li_56] = iHigh(Symbol(), PERIOD_M30, li_56);
         if (lda_24[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 30min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  highArrayForDll_CheckXXIV_I[i]   " + li_56 + " " + DoubleToStr(lda_24[li_56], Digits));
         }
         lda_28[li_56] = iOpen(Symbol(), PERIOD_M30, li_56);
         if (lda_28[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 30min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  openArrayForDll_CheckXXIV_I[i]   " + li_56 + " " + DoubleToStr(lda_28[li_56], Digits));
         }
         lda_32[li_56] = iClose(Symbol(), PERIOD_M30, li_56);
         if (lda_32[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 30min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  closeArrayForDll_CheckXXIV_I[i]  " + li_56 + " " + DoubleToStr(lda_32[li_56], Digits));
         }
         lda_36[li_56] = iLow(Symbol(), PERIOD_M30, li_56);
         if (lda_36[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 30min Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  lowArrayForDll_CheckXXIV_I[i]    " + li_56 + " " + DoubleToStr(lda_36[li_56], Digits));
         }
         lda_40[li_56] = iHigh(Symbol(), PERIOD_H1, li_56);
         if (lda_40[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 1h Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  highArrayForDll_CheckXXIV_II[i]   " + li_56 + " " + DoubleToStr(lda_40[li_56], Digits));
         }
         lda_44[li_56] = iOpen(Symbol(), PERIOD_H1, li_56);
         if (lda_44[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 1h Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  openArrayForDll_CheckXXIV_II[i]   " + li_56 + " " + DoubleToStr(lda_44[li_56], Digits));
         }
         lda_48[li_56] = iClose(Symbol(), PERIOD_H1, li_56);
         if (lda_48[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 1h Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  closeArrayForDll_CheckXXIV_II[i]  " + li_56 + " " + DoubleToStr(lda_48[li_56], Digits));
         }
         lda_52[li_56] = iLow(Symbol(), PERIOD_H1, li_56);
         if (lda_52[li_56] < 0.001) {
            dl("  Bitte aktivieren Sie den 1h Chart erneut, es fehlen Daten!", 1, 1, 1);
            dl("  lowArrayForDll_CheckXXIV_II[i]    " + li_56 + " " + DoubleToStr(lda_52[li_56], Digits));
         }
      }
   }
   return (magicConditionCheck_XXIV(lda_24, lda_28, lda_32, lda_36, lda_40, lda_44, lda_48, lda_52, ai_12, ai_0, ai_4, ai_8, ai_16, ai_20));
}

void f_magicTPManagement_LONG(int a_ticket_0, int ai_4) {
   double order_lots_8;
   double order_stoploss_16;
   double order_open_price_24;
   double lda_40[2];
   string str_concat_44;
   bool li_52;
   string ls_56;
   if (gi_100) errorLog(GetLastError(), "START f_magicTPManagement_LONG: ");
   double ld_32 = 0;
   if (f_fillTickValue(lda_40)) {
      str_concat_44 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE) + "; " + TimeToStr(TimeLocal(), TIME_SECONDS), " ; ");
      li_52 = FALSE;
      ls_56 = "";
      g_istddev_1256 = 0;
      g_istddev_1264 = 0;
      if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) dl("ERROR @ OrderSelect in f_magicTPManagement_LONG for activeLongTicket# " + a_ticket_0);
      else {
         order_lots_8 = OrderLots();
         order_stoploss_16 = OrderStopLoss();
         order_open_price_24 = OrderOpenPrice();
         if ((!gi_948) && Auto_TP_Management) {
            for (int li_64 = 0; li_64 < 20; li_64++) {
               gda_1240[li_64] = iClose(Symbol(), PERIOD_M5, li_64);
               gda_1244[li_64] = iClose(Symbol(), PERIOD_M15, li_64);
            }
            if (f_checkForTP(1, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_40, gda_1240, gda_1244, gda_1240, gda_1240, g_istddev_1256,
               g_istddev_1256, str_concat_44) > 0) {
               if (loginfo) dl("\n                       JIHA tp_I_Reached LONG >>> close the relevant part", 1, 0, 0, 0, 0);
               if (gi_468) {
                  f_changeDaTicket("P1", OP_BUY);
                  gi_948 = TRUE;
               }
               if (!gi_468) {
                  if (g_order_lots_892 > order_lots_8) g_order_lots_892 = order_lots_8;
                  if (g_order_lots_892 == order_lots_8) {
                     if (loginfo) dl(" Orderlots for lotsAT_TPI = OrderLots() >>> close all");
                     f_closePosi(a_ticket_0, 1);
                     return;
                  }
                  if (f_closePosi(a_ticket_0, 0, g_order_lots_892)) {
                     f_getActiveTicket(a_ticket_0, g_ticket_172);
                     if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
                        dl("ERROR @ OrderSelect in f_magicTPManagement_LONG for activeLongTicket# " + a_ticket_0);
                        return;
                     }
                     order_lots_8 = OrderLots();
                     order_stoploss_16 = OrderStopLoss();
                     order_open_price_24 = OrderOpenPrice();
                     if (loginfo) dl("close at tp_I_Reached successfull >>> new Ticket# " + a_ticket_0);
                     gi_948 = TRUE;
                     li_52 = TRUE;
                     ls_56 = " JIHA TP I >>> ";
                  }
               }
            }
         }
         if (gi_948 && (!gi_952) && Auto_TP_Management) {
            for (li_64 = 0; li_64 < 20; li_64++) {
               gda_1240[li_64] = iClose(Symbol(), PERIOD_M5, li_64);
               gda_1244[li_64] = iClose(Symbol(), PERIOD_M15, li_64);
            }
            if (f_checkForTP(2, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_40, gda_1240, gda_1244, gda_1244, gda_1244, g_istddev_1264,
               g_istddev_1264, str_concat_44) > 0) {
               if (loginfo) dl("\n                       JIHA tp_II_Reached LONG >>> close the relevant part", 1, 0, 0, 0, 0);
               if (gi_468) {
                  f_changeDaTicket("P2", OP_BUY);
                  gi_952 = TRUE;
               }
               if (!gi_468) {
                  if (g_order_lots_900 > order_lots_8) g_order_lots_900 = order_lots_8;
                  if (g_order_lots_900 == order_lots_8) {
                     if (loginfo) dl(" Orderlots for lotsAT_TPII = OrderLots() >>> close all");
                     f_closePosi(a_ticket_0, 1);
                     return;
                  }
                  if (f_closePosi(a_ticket_0, 0, g_order_lots_900)) {
                     f_getActiveTicket(a_ticket_0, g_ticket_172);
                     if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
                        dl("ERROR @ OrderSelect in f_magicTPManagement_LONG for activeLongTicket# " + a_ticket_0);
                        return;
                     }
                     order_lots_8 = OrderLots();
                     order_stoploss_16 = OrderStopLoss();
                     order_open_price_24 = OrderOpenPrice();
                     if (loginfo) dl("close at tp_II_Reached successfull >>> new Ticket# " + a_ticket_0);
                     gi_952 = TRUE;
                     li_52 = TRUE;
                     ls_56 = " JIHA TP II >>> ";
                  }
               }
            }
         }
         if (gi_948 && gi_952 && (!gi_956) && Auto_TP_Management) {
            for (li_64 = 0; li_64 < 20; li_64++) {
               gda_1240[li_64] = iClose(Symbol(), PERIOD_M5, li_64);
               gda_1244[li_64] = iClose(Symbol(), PERIOD_M15, li_64);
            }
            if (f_checkForTP(3, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_40, gda_1240, gda_1244, gda_1244, gda_1244, g_istddev_1264,
               g_istddev_1264, str_concat_44) > 0) {
               if (loginfo) dl("\n                       JIHA tp_III_Reached LONG >>> close the relevant part", 1, 0, 0, 0, 0);
               if (gi_468) {
                  f_changeDaTicket("P3", OP_BUY);
                  gi_956 = TRUE;
               }
               if (!gi_468) {
                  if (g_order_lots_908 > order_lots_8) g_order_lots_908 = order_lots_8;
                  if (g_order_lots_908 == order_lots_8) {
                     if (loginfo) dl(" Orderlots for lotsAT_TPIII = OrderLots() >>> close all");
                     f_closePosi(a_ticket_0, 1);
                     return;
                  }
                  if (f_closePosi(a_ticket_0, 0, g_order_lots_908)) {
                     f_getActiveTicket(a_ticket_0, g_ticket_172);
                     if (loginfo) dl("close at tp_III_Reached successfull >>> new Ticket# " + a_ticket_0);
                     gi_956 = TRUE;
                     li_52 = TRUE;
                     ls_56 = " JIHA TP III >>> ";
                  }
               }
            }
         }
         if (gi_948 && a_ticket_0 > 0 && Auto_SL_Management) {
            ArrayInitialize(gda_1228, 0);
            ArrayInitialize(gda_1232, 0);
            ArrayInitialize(gda_1236, 0);
            for (li_64 = 0; li_64 < 15; li_64++) {
               gda_1228[li_64] = iClose(Symbol(), PERIOD_M5, li_64);
               gda_1232[li_64] = iHigh(Symbol(), PERIOD_M5, li_64);
               gda_1236[li_64] = iLow(Symbol(), PERIOD_M5, li_64);
            }
            ld_32 = NormalizeDouble(f_getTheMagicNewSL(0, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, gda_1228, gda_1232, gda_1236, str_concat_44), Digits);
            if (ld_32 - 0.09 * gd_136 > OrderStopLoss()) {
               if (loginfo) dl("GO GO GO for SL TRAILING LONG >>> Change SL von " + DoubleToStr(OrderStopLoss(), Digits) + " to " + DoubleToStr(ld_32, Digits));
               if (gi_468) f_SLTrailingWithSplit(ld_32, OP_BUY);
               if (!gi_468) f_orderModify(a_ticket_0, ld_32, 1);
            }
         }
         if (li_52) f_sendTpMail(a_ticket_0, 0, ls_56);
      }
   }
}

void f_magicTPManagement_SHORT(int a_ticket_0, int ai_4) {
   double order_lots_8;
   double order_stoploss_16;
   double order_open_price_24;
   double lda_32[2];
   string str_concat_36;
   bool li_44;
   string ls_48;
   int li_56;
   double ld_60;
   if (gi_100) errorLog(GetLastError(), "START f_magicTPManagement_SHORT: ");
   if (f_fillTickValue(lda_32)) {
      str_concat_36 = StringConcatenate(TimeToStr(TimeLocal(), TIME_DATE) + "; " + TimeToStr(TimeLocal(), TIME_SECONDS), " ; ");
      li_44 = FALSE;
      ls_48 = "";
      g_istddev_1256 = 0;
      g_istddev_1264 = 0;
      if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) dl("ERROR @ OrderSelect in f_magicTPManagement_SHORT_NEW for activeShortTicket# " + a_ticket_0);
      else {
         order_lots_8 = OrderLots();
         order_stoploss_16 = OrderStopLoss();
         order_open_price_24 = OrderOpenPrice();
         li_56 = 0;
         if ((!gi_948) && Auto_TP_Management) {
            for (li_56 = 0; li_56 < 20; li_56++) {
               gda_1240[li_56] = iClose(Symbol(), PERIOD_M5, li_56);
               gda_1244[li_56] = iClose(Symbol(), PERIOD_M15, li_56);
            }
            if (f_checkForTP(1, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_32, gda_1240, gda_1244, gda_1240, gda_1240, g_istddev_1256,
               g_istddev_1256, str_concat_36) > 0) {
               if (loginfo) dl("\n                       JIHA tp_I_Reached SHORT >>> close the relevant part", 1, 0, 0, 0, 0);
               if (gi_468) {
                  f_changeDaTicket("P1", OP_SELL);
                  gi_948 = TRUE;
               }
               if (!gi_468) {
                  if (g_order_lots_892 > order_lots_8) g_order_lots_892 = order_lots_8;
                  if (g_order_lots_892 == order_lots_8) {
                     if (loginfo) dl(" Orderlots for lotsAT_TPI = OrderLots() >>> close all");
                     f_closePosi(a_ticket_0, 1);
                     return;
                  }
                  if (f_closePosi(a_ticket_0, 0, g_order_lots_892)) {
                     f_getActiveTicket(g_ticket_168, a_ticket_0);
                     if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
                        dl("ERROR @ OrderSelect in f_magicTPManagement_SHORT for activeShortTicket# " + a_ticket_0);
                        return;
                     }
                     order_lots_8 = OrderLots();
                     order_stoploss_16 = OrderStopLoss();
                     order_open_price_24 = OrderOpenPrice();
                     if (loginfo) dl("close at tp_I_Reached successfull >>> new Ticket# " + a_ticket_0);
                     gi_948 = TRUE;
                     li_44 = TRUE;
                     ls_48 = " JIHA TP I >>> ";
                  }
               }
            }
         }
         if ((!gi_952) && Auto_TP_Management) {
            for (li_56 = 0; li_56 < 20; li_56++) {
               gda_1240[li_56] = iClose(Symbol(), PERIOD_M5, li_56);
               gda_1244[li_56] = iClose(Symbol(), PERIOD_M15, li_56);
            }
            if (f_checkForTP(2, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_32, gda_1240, gda_1244, gda_1244, gda_1244, g_istddev_1264,
               g_istddev_1264, str_concat_36) > 0) {
               if (loginfo) dl("\n                       JIHA tp_II_Reached SHORT >>> close the relevant part", 1, 0, 0, 0, 0);
               if (gi_468) {
                  f_changeDaTicket("P2", OP_SELL);
                  gi_952 = TRUE;
               }
               if (!gi_468) {
                  if (g_order_lots_900 > order_lots_8) g_order_lots_900 = order_lots_8;
                  if (g_order_lots_900 == order_lots_8) {
                     if (loginfo) dl(" Orderlots for lotsAT_TPII = OrderLots() >>> close all");
                     f_closePosi(a_ticket_0, 1);
                     return;
                  }
                  if (f_closePosi(a_ticket_0, 0, g_order_lots_900)) {
                     f_getActiveTicket(g_ticket_168, a_ticket_0);
                     if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
                        dl("ERROR @ OrderSelect in f_magicTPManagement_SHORT for activeShortTicket# " + a_ticket_0);
                        return;
                     }
                     order_lots_8 = OrderLots();
                     order_stoploss_16 = OrderStopLoss();
                     order_open_price_24 = OrderOpenPrice();
                     if (loginfo) dl("close at tp_II_Reached successfull >>> new Ticket# " + a_ticket_0);
                     gi_952 = TRUE;
                     li_44 = TRUE;
                     ls_48 = " JIHA TP II >>> ";
                  }
               }
            }
         }
         if (Auto_SL_Management) {
            if (f_checkForSlAdaption(1, gi_948, gi_952) == 1) {
               if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET)) {
                  dl("ERROR @ OrderSelect in f_magicTPManagement_SHORT_NEW for activeShortTicket# " + a_ticket_0);
                  return;
               }
               ld_60 = NormalizeDouble(OrderOpenPrice() + f_getTheVarEXPMQL(10, gi_1028, ai_4) * gd_136, Digits);
               if (ld_60 + 0.09 * gd_136 < OrderStopLoss()) {
                  if (loginfo) dl("GO GO GO for FIRST SL TRAILING >>> Change SL von " + DoubleToStr(OrderStopLoss(), Digits) + " to " + DoubleToStr(ld_60, Digits));
                  if (gi_468) f_SLTrailingWithSplit(ld_60, OP_SELL);
                  if (!gi_468) f_orderModify(a_ticket_0, ld_60, 1);
               }
            }
         }
         if (gi_948 && gi_952 && Auto_TP_Management) {
            for (li_56 = 0; li_56 < 20; li_56++) {
               gda_1248[li_56] = iClose(Symbol(), PERIOD_M5, li_56);
               gda_1252[li_56] = iClose(Symbol(), PERIOD_M15, li_56);
            }
            g_istddev_1256 = iStdDev(Symbol(), PERIOD_M5, 20, 1, MODE_SMA, PRICE_CLOSE, 1);
            g_istddev_1264 = iStdDev(Symbol(), PERIOD_M15, 20, 1, MODE_SMA, PRICE_CLOSE, 1);
            if (f_checkForTP(3, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, order_stoploss_16, order_lots_8, lda_32, gda_1240, gda_1244, gda_1248, gda_1252, g_istddev_1256,
               g_istddev_1264, str_concat_36) > 0) {
               if (loginfo) dl("LAST TP SHORT >>> close ALL SHORT Positions");
               f_closeAllOrdersForWP(MAGICNUMBER);
               return;
            }
         }
         if (a_ticket_0 > 0 && Auto_SL_Management) {
            if (f_checkForSlAdaption(2, gi_948, gi_952) == 1) {
               ArrayInitialize(gda_1228, 0);
               ArrayInitialize(gda_1232, 0);
               ArrayInitialize(gda_1236, 0);
               for (li_56 = 0; li_56 < 15; li_56++) {
                  gda_1228[li_56] = iClose(Symbol(), PERIOD_M5, li_56);
                  gda_1232[li_56] = iHigh(Symbol(), PERIOD_M5, li_56);
                  gda_1236[li_56] = iLow(Symbol(), PERIOD_M5, li_56);
               }
               ld_60 = NormalizeDouble(f_getTheMagicNewSL(1, gi_1028, ai_4, Ask, Bid, gd_136, order_open_price_24, gda_1228, gda_1232, gda_1236, str_concat_36), Digits);
               if (ld_60 + 0.09 * gd_136 < OrderStopLoss()) {
                  if (loginfo) dl("GO GO GO for SL TRAILING SHORT >>> Change SL von " + DoubleToStr(OrderStopLoss(), Digits) + " to " + DoubleToStr(ld_60, Digits));
                  if (gi_468) f_SLTrailingWithSplit(ld_60, OP_SELL);
                  if (!gi_468) f_orderModify(a_ticket_0, ld_60, 1);
               }
            }
         }
         if (li_44) f_sendTpMail(a_ticket_0, 1, ls_48);
         if (gi_100) errorLog(GetLastError(), "ENDE f_magicTPManagement_SHORT_NEW: ");
      }
   }
}

bool f_checkChartSymbol() {
   if (gi_1028 != 6 && gi_1028 != 7) {
      g_text_1000 = "Only EURUSD und GBPUSD!";
      dl(g_text_1000, 1, 1, 1);
      gi_120 = FALSE;
      return (FALSE);
   }
   return (TRUE);
}


