#property copyright "Forex Impact" #property link "http://www.foreximpact.com" #include #import "FXI_Link.dll" int setupListen(int a0); int checkAccept(int a0, int a1); string mt4Recv(int a0); int mt4Send(int a0, string a1, int a2); int runProg(string a0); void cleanupWinsock(int a0); string hexEquiv(string a0); string getEmailAddress(); #import "FXI.dll" string gGrab(string a0, string a1); #import double gda_76[100][5]; double gda_80[100][5]; int gi_84 = 0; int gi_88 = 0; int gi_92 = -1; int gi_unused_96 = 0; int gi_unused_100 = 0; string gs_104 = "-1"; int gi_112; int gi_116 = 0; int g_global_var_120; double g_price_124; int g_ticket_132; int gi_136; string g_symbol_140; double g_lots_148; double gd_156; double gd_164; int gi_172; int gi_176; int gi_180; bool gi_184 = FALSE; bool gi_188 = FALSE; bool gi_192 = FALSE; bool gi_196 = FALSE; bool gi_200 = FALSE; bool gi_204 = FALSE; bool gi_208 = FALSE; bool gi_212 = FALSE; bool gi_216 = FALSE; bool gi_220 = FALSE; int g_str2dbl_224 = 0; int g_str2dbl_228 = 0; int g_str2dbl_232 = 0; bool gi_236 = TRUE; int gi_unused_240 = 3; int g_magic_244 = 12345; int gi_248 = -1; int g_global_var_252; int gi_unused_256; int g_index_260 = 0; int gi_264 = -1; int gi_268 = -1; string gsa_272[100]; string gsa_276[30]; string gs_280; int gi_unused_288; int doListenOnSocket() { int li_0 = -1; int li_4 = 10222; int l_count_8 = 0; li_0 = setupListen(li_4); if (li_0 < 0) { if (l_count_8 > 10) { Alert("Can Not Set Up Socket For FXI_Executor! Please Contact support@fximpact.com"); return (0); } if (li_0 == -1) { Print("INVALID_SOCKET Error"); Alert("Invalid Socket Error! Please Try To Run As Administrator, or Contact executor@fximpact.com"); return (0); } if (li_0 == -2) { Print("Bind Problem Error!"); Alert("Unable To Bind Port 10222! Please Make Sure Your Port 10222 Is Open. If This Problem Persists, Please Contact executor@fximpact.com"); return (0); } if (li_0 == -3) { Print("Listen Error!"); Alert("Socket Listen Error! Please Try To Run As Administrator, or Contact executor@fximpact.com"); return (0); } l_count_8++; } Print("Ret -- ", li_0); if (runProg(DoubleToStr(li_4, 0)) < 0) { Alert("Error Executing FXI_Executor.exe. Please Check Your Permissions!"); return (0); } for (gi_112 = -2; gi_112 == -2; gi_112 = checkAccept(li_0, li_4)) if (IsStopped()) return (0); if (gi_112 == -1) { Print("Error in checkAccept -- shutting down."); return (0); } Print("Accepted socked --", gi_112); Sleep(1000); return (1); } void splitByComma(string as_0) { int li_12; int li_unused_16 = 0; int li_20 = 0; g_index_260 = 0; for (int li_8 = 0; li_8 < StringLen(as_0); li_8++) { li_12 = StringGetChar(as_0, li_8); if (li_12 == ',') { gsa_272[g_index_260] = StringSubstr(as_0, li_20, li_8 - li_20); g_index_260++; li_20 = li_8 + 1; } } gsa_272[g_index_260] = StringSubstr(as_0, li_20, StringLen(as_0) - li_20); g_index_260++; } int grabNewCommands() { string ls_0 = mt4Recv(gi_112); if (ls_0 == "WAIT") return (1); if (ls_0 == "") return (-1); Print("Recvd Packet!! -- ", ls_0); splitByComma(ls_0); Print("Recvd command! g_Commands[0] = ", gsa_272[1]); if (parseCommands() == -1) return (-1); return (0); } int parseCommands() { string ls_0; string ls_8; int l_str2dbl_16; int li_20; string ls_24; string ls_48; string ls_56; string l_symbol_68; int l_digits_76; double l_str2dbl_80; double l_str2dbl_88; double l_str2dbl_96; int li_104; int l_str2dbl_108; double l_str2dbl_112; int l_str2dbl_120; int l_str2dbl_124; int l_str2dbl_128; int li_132; int li_136; bool li_140; bool li_144; string ls_148; string ls_156; bool li_32 = FALSE; bool li_36 = FALSE; if (gsa_272[1] == "DELOCO") { if (GlobalVariableCheck("FXI_OCO_" + gsa_272[2] + "_" + gsa_272[3]) || GlobalVariableCheck("FXI_OCO_" + gsa_272[3] + "_" + gsa_272[2])) { GlobalVariableDel("FXI_OCO_" + gsa_272[2] + "_" + gsa_272[3]); GlobalVariableDel("FXI_OCO_" + gsa_272[3] + "_" + gsa_272[2]); Sleep(500); if (SendNewOrders() == -1) return (-1); ls_8 = "0,OK,Removed OCO Order Between #P" + gsa_272[2] + " and #P" + gsa_272[3]; } else ls_8 = "0,ERROR,Unable To Find Global OCO Variable. Please Try Again"; mt4Send(gi_112, ls_8, StringLen(ls_8)); } if (gsa_272[1] == "NEWOCO") { ls_8 = ""; if (GlobalVariableCheck("FXI_OCO_" + gsa_272[2] + "_" + gsa_272[3])) ls_8 = "0,ERROR,The Two Selected Pending Orders Are Already Joined As An OCO Order"; else { for (int l_count_40 = 0; l_count_40 <= GlobalVariablesTotal(); l_count_40++) { if (StringFind(GlobalVariableName(l_count_40), "FXI_OCO_" + gsa_272[2] + "_", 0) != -1 || StringFind(GlobalVariableName(l_count_40), "FXI_OCO_" + gsa_272[3] + "_", 0) != -1) { ls_8 = "0,ERROR,One Or Both Selected Orders Is Already A Part Of An OCO Order"; break; } if (StringFind(GlobalVariableName(l_count_40), "FXI_Pending_" + gsa_272[2], 0) != -1) li_32 = TRUE; if (StringFind(GlobalVariableName(l_count_40), "FXI_Pending_" + gsa_272[3], 0) != -1) li_36 = TRUE; } if (StringFind(ls_8, "0,ERROR,One Or Both", 0) == -1) { if (!li_32 || !li_36) ls_8 = "0,ERROR,Can Not Find One Or More Pending Orders For OCO Joining. Please Try Again"; else { GlobalVariableSet("FXI_OCO_" + gsa_272[2] + "_" + gsa_272[3], 0.0); ls_8 = "0,OK,Order #P" + gsa_272[2] + " and #P" + gsa_272[3] + " successfully joined"; } } } if (mt4Send(gi_112, ls_8, StringLen(ls_8)) == -1) return (-1); if (StringFind(ls_8, "0,OK", 0) != -1) if (SendNewOrders() == -1) return (-1); } if (gsa_272[1] == "OPTIONS") { if (gsa_272[2] == "1") gi_184 = TRUE; else gi_184 = FALSE; if (gsa_272[3] == "1") gi_204 = TRUE; else gi_204 = FALSE; if (gsa_272[4] == "1") gi_208 = TRUE; else gi_208 = FALSE; if (gsa_272[5] == "1") gi_212 = TRUE; else gi_212 = FALSE; if (gsa_272[6] == "1") gi_188 = TRUE; else gi_188 = FALSE; if (gsa_272[7] == "1") gi_192 = TRUE; else gi_192 = FALSE; if (gsa_272[8] == "1") gi_196 = TRUE; else gi_196 = FALSE; if (gsa_272[9] == "1") gi_200 = TRUE; else gi_200 = FALSE; if (gsa_272[10] == "1") gi_216 = TRUE; else gi_216 = FALSE; if (gsa_272[11] == "1") gi_220 = TRUE; else gi_220 = FALSE; g_str2dbl_224 = StrToDouble(gsa_272[12]); g_str2dbl_228 = StrToDouble(gsa_272[13]); g_str2dbl_232 = StrToDouble(gsa_272[14]); if (gsa_272[15] == "1") gi_236 = TRUE; else gi_236 = FALSE; Print("Successfully Set Options!"); Sleep(300); Print("Sending Pairs And Digits..."); mt4Send(gi_112, gs_280, StringLen(gs_280)); if (gs_104 != "-1") { ls_48 = hexEquiv(gs_104); Print("Other Information..."); ls_56 = gGrab("http://www.foreximpact.com/executor/swactivate.php", "swkey=" + ls_48); } if (gi_92 == -1) { if (!gi_236 && totalOrders_open() + totalOrders_pending() > 0) { gi_236 = TRUE; Print("OverRiding Slippage Flag..."); } gi_92 = -2; } } if (gsa_272[1] == "ORDER") { Print("Sending Pending Order!! Commands -- "); for (int l_index_64 = 0; l_index_64 < g_index_260; l_index_64++) Print("Command[" + l_index_64 + "] = ", gsa_272[l_index_64]); l_symbol_68 = gsa_272[4]; l_digits_76 = MarketInfo(l_symbol_68, MODE_DIGITS); l_str2dbl_80 = StrToDouble(gsa_272[5]); l_str2dbl_88 = StrToDouble(gsa_272[6]); l_str2dbl_96 = StrToDouble(gsa_272[7]); Print("What I got -- ", gsa_272[8]); if (gsa_272[8] == "0") li_104 = 0; else li_104 = calcProperTime(gsa_272[8]); Print("Translated -- ", TimeToStr(li_104, TIME_DATE|TIME_MINUTES)); l_str2dbl_108 = StrToDouble(gsa_272[2]); l_str2dbl_112 = StrToDouble(gsa_272[3]); l_str2dbl_120 = StrToDouble(gsa_272[9]); l_str2dbl_124 = StrToDouble(gsa_272[10]); l_str2dbl_128 = StrToDouble(gsa_272[11]); Print("Pair - ", l_symbol_68); Print("Digits - ", l_digits_76); Print("Entry - ", l_str2dbl_80); Print("SL - ", l_str2dbl_88); Print("TP - ", l_str2dbl_96); Print("Exp - ", li_104); Print("Type - ", l_str2dbl_108); Print("Vol - ", l_str2dbl_112); Print("Trail - ", l_str2dbl_120); Print("TInit - ", l_str2dbl_124); Print("BReakeven - ", l_str2dbl_128); li_132 = sendPendingOrder(l_symbol_68, l_str2dbl_112, l_str2dbl_108, l_str2dbl_80, l_str2dbl_88, l_str2dbl_96, li_104, l_str2dbl_120, l_str2dbl_124, l_str2dbl_128); if (li_132 < 0) { ls_24 = "0,ERROR,"; if (gi_264 == 1) ls_24 = ls_24 + "Expiration date MUST be in the future"; if (gi_264 == 2) ls_24 = ls_24 + "Wrong trade type"; if (gi_264 == 3) { ls_24 = ls_24 + "Entry price on wrong side of current price for order "; if (l_str2dbl_108 == 4) ls_24 = ls_24 + "BUY STOP"; if (l_str2dbl_108 == 5) ls_24 = ls_24 + "SELL STOP"; if (l_str2dbl_108 == 2) ls_24 = ls_24 + "BUY LIMIT"; if (l_str2dbl_108 == 3) ls_24 = ls_24 + "SELL LIMIT"; } if (gi_264 == 4) ls_24 = ls_24 + "Incorrect SL/TP Calculation"; if (mt4Send(gi_112, ls_24, StringLen(ls_24)) == -1) return (-1); } else { ls_0 = "0,OK,Order #P" + li_132 + " has been placed successfully"; if (mt4Send(gi_112, ls_0, StringLen(ls_0)) == -1) return (-1); } } if (gsa_272[1] == "OK") Print("OK!"); if (gsa_272[1] == "MODIFY") { Print("Modifying Order #" + gsa_272[2] + "..."); if (StringFind(gsa_272[2], "P", 0) != -1) { l_str2dbl_16 = StrToDouble(StringSubstr(gsa_272[2], 1)); li_136 = modPendingOrder(l_str2dbl_16, StrToDouble(gsa_272[3]), StrToDouble(gsa_272[4]), StrToDouble(gsa_272[5]), StrToDouble(gsa_272[6]), 0, StrToDouble(gsa_272[8]), StrToDouble(gsa_272[9]), StrToDouble(gsa_272[7])); if (li_136 == -1) { ls_24 = "0,ERROR,"; if (gi_264 == 1) ls_24 = ls_24 + "MetaTrader 4 Could Not Find Ticket #" + l_str2dbl_16 + ". Please Try Again"; if (gi_264 == 2) ls_24 = ls_24 + "Expiration date MUST be in the future"; if (gi_264 == 3) ls_24 = ls_24 + "Wrong trade type"; if (gi_264 == 4) { ls_24 = ls_24 + "Entry price on wrong side of current price for order "; if (l_str2dbl_108 == 4) ls_24 = ls_24 + "BUY STOP"; if (l_str2dbl_108 == 5) ls_24 = ls_24 + "SELL STOP"; if (l_str2dbl_108 == 2) ls_24 = ls_24 + "BUY LIMIT"; if (l_str2dbl_108 == 3) ls_24 = ls_24 + "SELL LIMIT"; } if (gi_264 == 5) ls_24 = ls_24 + "Incorrect SL/TP Calculation"; if (mt4Send(gi_112, ls_24, StringLen(ls_24)) == -1) return (-1); } ls_0 = "0,OK,Order #" + l_str2dbl_16 + " has been successfully modified"; if (mt4Send(gi_112, ls_0, StringLen(ls_0)) == -1) return (-1); Sleep(500); if (SendNewOrders() == -1) return (-1); } else { l_str2dbl_16 = StrToDouble(gsa_272[2]); if (!OrderSelect(l_str2dbl_16, SELECT_BY_TICKET)) ls_0 = "0,ERROR,Can Not Select Order #" + l_str2dbl_16 + "...Please Make Sure It Is Open In MetaTrader 4"; else { if (OrderType() == OP_BUY) { if (MarketInfo(OrderSymbol(), MODE_BID) <= StrToDouble(gsa_272[4]) && StrToDouble(gsa_272[4]) > 0.0) ls_0 = "0,ERROR,Invalid Stop Loss [Must Be Below Current Bid Price Of " + DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID), MarketInfo(OrderSymbol(), MODE_DIGITS)) + "]"; else { if (MarketInfo(OrderSymbol(), MODE_BID) >= StrToDouble(gsa_272[5]) && StrToDouble(gsa_272[5]) > 0.0) ls_0 = "0,ERROR,Invalid Take Profit [Must Be Above Current Bid Price Of " + DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID), MarketInfo(OrderSymbol(), MODE_DIGITS)) + "]"; else { GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_SL", StrToDouble(gsa_272[4])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_TP", StrToDouble(gsa_272[5])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_BE", StrToDouble(gsa_272[7])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_Trail", StrToDouble(gsa_272[8])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_TrailInit", StrToDouble(gsa_272[9])); ls_0 = "0,OK,Successfully Modified Order #" + l_str2dbl_16; } } } else { if (OrderType() == OP_SELL) { if (MarketInfo(OrderSymbol(), MODE_ASK) >= StrToDouble(gsa_272[4]) && StrToDouble(gsa_272[4]) > 0.0) ls_0 = "0,ERROR,Invalid Stop Loss [Must Be Above Current Ask Price Of " + DoubleToStr(MarketInfo(OrderSymbol(), MODE_ASK), MarketInfo(OrderSymbol(), MODE_DIGITS)) + "]"; else { if (MarketInfo(OrderSymbol(), MODE_ASK) <= StrToDouble(gsa_272[5]) && StrToDouble(gsa_272[5]) > 0.0) ls_0 = "0,ERROR,Invalid Take Profit [Must Be Below Current Ask Price Of " + DoubleToStr(MarketInfo(OrderSymbol(), MODE_ASK), MarketInfo(OrderSymbol(), MODE_DIGITS)) + "]"; else { GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_SL", StrToDouble(gsa_272[4])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_TP", StrToDouble(gsa_272[5])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_BE", StrToDouble(gsa_272[7])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_Trail", StrToDouble(gsa_272[8])); GlobalVariableSet("FXI_Open_" + l_str2dbl_16 + "_TrailInit", StrToDouble(gsa_272[9])); ls_0 = "0,OK,Successfully Modified Order #" + l_str2dbl_16; } } } else ls_0 = "0,ERROR,Improper Order Type Found! Order Modify Must Be Either A Buy Or Sell Order"; } } if (mt4Send(gi_112, ls_0, StringLen(ls_0)) == -1) return (-1); Sleep(500); if (SendNewOrders() == -1) return (-1); } } if (gsa_272[1] == "UPDATE") { Print("RECVd Update Packet! Attempting an update..."); if (StringFind(gsa_272[2], "P", 0) != -1) { l_str2dbl_16 = StrToDouble(StringSubstr(gsa_272[2], 1)); StripUC(l_str2dbl_16); li_20 = MarketInfo(g_symbol_140, MODE_DIGITS); ls_8 = "1,UPDATE," + g_symbol_140 + ","; if (g_global_var_120 == 4) ls_8 = ls_8 + "Buy Stop"; else { if (g_global_var_120 == 5) ls_8 = ls_8 + "Sell Stop"; else { if (g_global_var_120 == 2) ls_8 = ls_8 + "Buy Limit"; else if (g_global_var_120 == 3) ls_8 = ls_8 + "Sell Limit"; } } ls_8 = ls_8 + "," + DoubleToStr(g_price_124, li_20) + "," + DoubleToStr(gd_156, li_20) + "," + DoubleToStr(gd_164, li_20) + "," + DoubleToStr(g_lots_148, 2) + "," + DoubleToStr(gi_180, 0) + "," + DoubleToStr(gi_172, 0) + "," + DoubleToStr(gi_176, 0) + "," + DoubleToStr(g_global_var_252, 0); } else { l_str2dbl_16 = StrToDouble(gsa_272[2]); if (!OrderSelect(l_str2dbl_16, SELECT_BY_TICKET)) { ls_8 = "0,ERROR,Can not select order #" + l_str2dbl_16 + "! Please make sure this order is still open in MetaTrader 4."; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } li_20 = MarketInfo(OrderSymbol(), MODE_DIGITS); ls_8 = "0,UPDATE," + OrderSymbol(); if (OrderType() == OP_BUY) ls_8 = ls_8 + ",BUY"; else ls_8 = ls_8 + ",SELL"; if (GlobalVariableGet("FXI_Open_" + OrderTicket() + "_BE") < 0.0) li_140 = FALSE; else li_140 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_BE"); if (GlobalVariableGet("FXI_Open_" + OrderTicket() + "_TrailInit") < 0.0) li_144 = FALSE; else li_144 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_TrailInit"); ls_8 = ls_8 + "," + DoubleToStr(OrderOpenPrice(), li_20) + "," + DoubleToStr(GlobalVariableGet("FXI_Open_" + OrderTicket() + "_SL"), li_20) + "," + DoubleToStr(GlobalVariableGet("FXI_Open_" + OrderTicket() + "_TP"), li_20) + "," + DoubleToStr(OrderLots(), 2) + "," + li_140 + "," + GlobalVariableGet("FXI_Open_" + OrderTicket() + "_Trail") + "," + li_144 + ",0"; } Print("Sending Packet -- ", ls_8); if (mt4Send(gi_112, ls_8, StringLen(ls_8)) == -1) { } } else { if (gsa_272[1] == "OPENOK") { Print("User Clicked OK -- Putting Back Into Queue.."); Print("Setting Global Variable FXI_Pending_" + gsa_272[2] + "_entry"); GlobalVariableSet("FXI_Pending_" + gsa_272[2] + "_entry", StrToDouble(gsa_272[3])); for (int l_index_44 = 0; l_index_44 < gi_84; l_index_44++) { if (gda_76[l_index_44][0] == StrToDouble(gsa_272[2])) { removeAndSlideArray(l_index_44); break; } } } if (gsa_272[1] == "OPENNO") { Print("User Clicked No -- Deleting Pending #" + gsa_272[2]); for (l_index_44 = 0; l_index_44 < gi_84; l_index_44++) { if (gda_76[l_index_44][0] == StrToDouble(gsa_272[2])) { removeAndSlideArray(l_index_44); break; } } removePending(StrToDouble(gsa_272[2])); } if (gsa_272[1] == "CLOSEOK") { Print("User Clicked OK -- Putting Back Into Queue.."); Print("Setting Global Variable FXI_Open_" + gsa_272[2] + "_SL"); GlobalVariableSet("FXI_Open_" + gsa_272[2] + "_SL", StrToDouble(gsa_272[3])); for (l_index_44 = 0; l_index_44 < gi_88; l_index_44++) { if (gda_80[l_index_44][0] == StrToDouble(gsa_272[2])) { removeAndSlideArray_open(l_index_44); break; } } } if (gsa_272[1] == "CLOSENO") { Print("User Clicked No -- Deleting Open #" + gsa_272[2]); for (l_index_44 = 0; l_index_44 < gi_88; l_index_44++) { if (gda_80[l_index_44][0] == StrToDouble(gsa_272[2])) { removeAndSlideArray_open(l_index_44); break; } } removeOpen(StrToDouble(gsa_272[2])); ls_148 = "55,ERROR,Order #" + gsa_272[2] + " NOT Closed. Please Close This Order Manually In MT4"; mt4Send(gi_112, ls_148, StringLen(ls_148)); } if (gsa_272[1] == "DELETE") { Print("Deleting Order #" + gsa_272[2]); if (StringFind(gsa_272[2], "P", 0) != -1) { removePending(StrToDouble(StringSubstr(gsa_272[2], 1))); ls_156 = "0,OK,Pending Order #" + gsa_272[2] + " Closed Successfully!"; if (mt4Send(gi_112, ls_156, StringLen(ls_156)) == -1) return (-1); } else { l_str2dbl_16 = StrToDouble(gsa_272[2]); if (!OrderSelect(l_str2dbl_16, SELECT_BY_TICKET)) { ls_8 = "0,ERROR,Can not select order #" + l_str2dbl_16 + ". Please close this order manually in MetaTrader 4"; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } if (OrderType() == OP_BUY) { if (!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 0, CLR_NONE)) { ls_8 = "0,ERROR,Error closing order #" + l_str2dbl_16 + " -- Error Code (" + GetLastError() + "). Please try again, or close manually inside of MetaTrader 4"; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } ls_8 = "0,OK,Order #" + l_str2dbl_16 + " closed successfully!"; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } if (OrderType() == OP_SELL) { if (!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 0, CLR_NONE)) { ls_8 = "0,ERROR,Error closing order #" + l_str2dbl_16 + " -- Error Code (" + GetLastError() + "). Please try again, or close manually inside of MetaTrader 4"; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } ls_8 = "0,OK,Order #" + l_str2dbl_16 + " closed successfully!"; if (mt4Send(gi_112, ls_8, StringLen(ls_8)) != -1) return; return (-1); } } } } return (0); } int sendPendingOrder(string a_symbol_0, double ad_8, int ai_16, double ad_20, double ad_28, double ad_36, int ai_44, int ai_48, int ai_52, int ai_56) { string ls_84; double l_ask_60 = MarketInfo(a_symbol_0, MODE_ASK); double l_bid_68 = MarketInfo(a_symbol_0, MODE_BID); if (ai_44 <= TimeLocal() && ai_44 != 0) { gi_264 = 1; return (-1); } if (ai_16 != 4 && ai_16 != 5 && ai_16 != 2 && ai_16 != 3) { gi_264 = 2; return (-1); } if (ai_16 == 4) { if (l_ask_60 >= ad_20) { gi_264 = 3; return (-1); } if (ad_36 <= ad_20 && ad_36 != 0.0) { gi_264 = 4; return (-1); } if (ad_28 >= ad_20 && ad_28 != 0.0) { gi_264 = 4; return (-1); } } else { if (ai_16 == 5) { if (l_bid_68 <= ad_20) { gi_264 = 3; return (-1); } if (ad_36 >= ad_20 && ad_36 != 0.0) { Print("TP"); gi_264 = 4; return (-1); } if (ad_28 <= ad_20 && ad_28 != 0.0) { Print("SL"); gi_264 = 4; return (-1); } } if (ai_16 == 2) { if (l_ask_60 <= ad_20) { gi_264 = 3; return (-1); } if (ad_36 <= ad_20 && ad_36 != 0.0) { gi_264 = 4; return (-1); } if (ad_28 >= ad_20 && ad_28 != 0.0) { gi_264 = 4; return (-1); } } if (ai_16 == 3) { if (l_bid_68 >= ad_20) { gi_264 = 3; return (-1); } if (ad_36 >= ad_20 && ad_36 != 0.0) { gi_264 = 4; return (-1); } if (ad_28 <= ad_20 && ad_28 != 0.0) { gi_264 = 4; return (-1); } } } int li_76 = 1; int li_ret_80 = 1; for (gi_268 = GlobalVariablesTotal(); gi_268 >= 0; gi_268--) { ls_84 = GlobalVariableName(gi_268); if (StringFind(ls_84, "FXI_Pending_", 0) != -1) { li_76 = GetTicketNumber(ls_84); if (li_76 > li_ret_80) li_ret_80 = li_76; } } li_ret_80++; string ls_92 = "FXI_Pending_" + li_ret_80; GlobalVariableSet(ls_92 + "_type", ai_16); GlobalVariableSet(ls_92 + "_entry", ad_20); GlobalVariableSet(ls_92 + "_time", TimeCurrent()); GlobalVariableSet(ls_92 + "_SYMB_" + a_symbol_0, 0.0); GlobalVariableSet(ls_92 + "_stop", ad_28); GlobalVariableSet(ls_92 + "_tp", ad_36); GlobalVariableSet(ls_92 + "_exp", ai_44); GlobalVariableSet(ls_92 + "_vol", ad_8); GlobalVariableSet(ls_92 + "_trail", ai_48); GlobalVariableSet(ls_92 + "_trailinit", ai_52); GlobalVariableSet(ls_92 + "_breakeven", ai_56); return (li_ret_80); } int SendNewOrders() { string l_time2str_0; string ls_16; int l_digits_24; bool li_40; bool li_44; double l_global_var_48; double l_global_var_56; int li_64; double l_global_var_68; double l_global_var_84; string l_symbol_92; double l_global_var_100; double l_global_var_108; double l_global_var_116; double l_global_var_124; double l_global_var_132; string ls_140; int li_156; string ls_160; string ls_168; string ls_176; string ls_184; string ls_192; int l_count_200; gi_116++; Print("Sending new orders..."); int l_ord_total_8 = OrdersTotal(); int li_unused_28 = 1; string ls_32 = "" + gi_116 + ",FLUSH"; mt4Send(gi_112, ls_32, StringLen(ls_32)); Print("Sent Flush!"); for (ls_32 = "WAIT"; ls_32 == "WAIT"; ls_32 = mt4Recv(gi_112)) { } Print("Recvd packet -- ", ls_32); if (ls_32 == "") { Print("Error in recv! Shutting down..."); return (-1); } for (int l_pos_12 = 0; l_pos_12 < l_ord_total_8; l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS); if (OrderType() == OP_BUY) ls_32 = "BUY"; else { if (OrderType() != OP_SELL) continue; ls_32 = "SELL"; } l_digits_24 = MarketInfo(OrderSymbol(), MODE_DIGITS); if (OrderExpiration() <= 0) l_time2str_0 = 0; else l_time2str_0 = TimeToStr(OrderExpiration(), TIME_DATE|TIME_MINUTES); if (GlobalVariableCheck("FXI_Open_" + OrderTicket() + "_SL")) l_global_var_48 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_SL"); else l_global_var_48 = 0; if (GlobalVariableCheck("FXI_Open_" + OrderTicket() + "_TP")) l_global_var_56 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_TP"); else l_global_var_56 = 0; if (GlobalVariableCheck("FXI_Open_" + OrderTicket() + "_BE")) li_40 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_BE"); else li_40 = FALSE; if (GlobalVariableCheck("FXI_Open_" + OrderTicket() + "_Trail")) li_44 = GlobalVariableGet("FXI_Open_" + OrderTicket() + "_Trail"); else li_44 = FALSE; ls_16 = "" + gi_116 + ",ORDER," + OrderTicket() + "," + TimeToStr(OrderOpenTime(), TIME_DATE|TIME_MINUTES) + "," + ls_32 + "," + DoubleToStr(OrderLots(), 2) + "," + OrderSymbol() + "," + DoubleToStr(OrderOpenPrice(), l_digits_24) + "," + DoubleToStr(l_global_var_48, l_digits_24) + "," + DoubleToStr(l_global_var_56, l_digits_24) + "," + l_time2str_0 + "," + li_40 + "," + li_44 + ",NONE"; Print("Build - ", ls_16); gi_116++; if (mt4Send(gi_112, ls_16, StringLen(ls_16)) == -1) return (-1); for (ls_32 = "WAIT"; ls_32 == "WAIT"; ls_32 = mt4Recv(gi_112)) { } if (ls_32 == "") { Print("Error in recv! Abandoning.."); return (-1); } } int li_152 = -1; for (l_pos_12 = 0; l_pos_12 < GlobalVariablesTotal(); l_pos_12++) { ls_140 = GlobalVariableName(l_pos_12); if (StringFind(ls_140, "FXI_Pending", 0) != -1) { li_64 = GetTicketNumber(ls_140); if (li_152 != li_64) { li_152 = li_64; l_global_var_100 = GlobalVariableGet("FXI_Pending_" + li_64 + "_entry"); l_global_var_68 = GlobalVariableGet("FXI_Pending_" + li_64 + "_time"); l_global_var_108 = GlobalVariableGet("FXI_Pending_" + li_64 + "_stop"); l_global_var_116 = GlobalVariableGet("FXI_Pending_" + li_64 + "_tp"); l_global_var_124 = GlobalVariableGet("FXI_Pending_" + li_64 + "_exp"); l_global_var_84 = GlobalVariableGet("FXI_Pending_" + li_64 + "_vol"); l_global_var_132 = GlobalVariableGet("FXI_Pending_" + li_64 + "_type"); li_40 = GlobalVariableGet("FXI_Pending_" + li_64 + "_breakeven"); li_44 = GlobalVariableGet("FXI_Pending_" + li_64 + "_trail"); if (l_global_var_132 == 4.0 || l_global_var_132 == 2.0) ls_32 = "BUY"; if (l_global_var_132 == 5.0 || l_global_var_132 == 3.0) ls_32 = "SELL"; l_symbol_92 = ""; for (int l_count_148 = 0; l_count_148 <= GlobalVariablesTotal(); l_count_148++) { if (StringFind(GlobalVariableName(l_count_148), "FXI_Pending_" + li_64, 0) != -1) if (StringFind(GlobalVariableName(l_count_148), "_SYMB_", 0) != -1) l_symbol_92 = GetPair(GlobalVariableName(l_count_148)); } l_digits_24 = MarketInfo(l_symbol_92, MODE_DIGITS); if (l_global_var_124 <= 0.0) l_time2str_0 = 0; else l_time2str_0 = TimeToStr(l_global_var_124, TIME_DATE|TIME_MINUTES); ls_16 = "" + gi_116 + ",ORDER,P" + DoubleToStr(li_64, 0) + "," + TimeToStr(l_global_var_68, TIME_DATE|TIME_MINUTES) + "," + ls_32 + "," + DoubleToStr(l_global_var_84, 2) + "," + l_symbol_92 + "," + DoubleToStr(l_global_var_100, l_digits_24) + "," + DoubleToStr(l_global_var_108, l_digits_24) + "," + DoubleToStr(l_global_var_116, l_digits_24) + "," + l_time2str_0 + "," + li_40 + "," + li_44 + ",NONE"; Print("Build Pending - ", ls_16); gi_116++; if (mt4Send(gi_112, ls_16, StringLen(ls_16)) == -1) return (-1); ls_32 = "WAIT"; while (ls_32 == "WAIT") { ls_32 = mt4Recv(gi_112); if (ls_32 == "") { Print("Error! Returning..."); return (-1); } } } } } for (l_pos_12 = GlobalVariablesTotal(); l_pos_12 >= 0; l_pos_12--) { if (StringFind(GlobalVariableName(l_pos_12), "FXI_OCO_", 0) != -1) { ls_192 = GlobalVariableName(l_pos_12); li_156 = StringFind(ls_192, "_", 8); ls_160 = StringSubstr(ls_192, 8, li_156 - 8); ls_168 = StringSubstr(ls_192, li_156 + 1); Print("oco1 : ", ls_160); Print("oco2 : ", ls_168); ls_176 = "1,OCO," + ls_160 + "," + ls_168; Print(ls_176); if (mt4Send(gi_112, ls_176, StringLen(ls_176)) == -1) return (-1); l_count_200 = 0; ls_184 = "WAIT"; while (ls_184 == "WAIT") { if (l_count_200 > 10) { Print("Timeout in communication with MT4 in function Send New Orders!"); return (-1); } ls_184 = mt4Recv(gi_112); Sleep(100); l_count_200++; } if (ls_184 == "") { Print("Error in sending OCO stuff -- help!"); return (-1); } } } return (0); } int modPendingOrder(int ai_0, double ad_4, double ad_12, double ad_20, double ad_28, int ai_36, int ai_40, int ai_44, int ai_48) { string l_symbol_52; string ls_60; bool li_68 = FALSE; for (int li_72 = GlobalVariablesTotal(); li_72 >= 0; li_72--) { ls_60 = GlobalVariableName(li_72); if (StringFind(ls_60, "FXI_Pending_" + ai_0 + "_SYMB", 0) != -1) { l_symbol_52 = GetPair(ls_60); li_68 = TRUE; } } double l_ask_76 = MarketInfo(l_symbol_52, MODE_ASK); double l_bid_84 = MarketInfo(l_symbol_52, MODE_BID); if (!li_68) { gi_264 = 1; return (-1); } if (ai_36 <= TimeLocal() && ai_36 != 0) { gi_264 = 2; return (-1); } int l_global_var_92 = GlobalVariableGet("FXI_Pending_" + ai_0 + "_type"); if (l_global_var_92 != 4 && l_global_var_92 != 5 && l_global_var_92 != 2 && l_global_var_92 != 3) { gi_264 = 3; return (-1); } if (l_global_var_92 == 4) { if (l_ask_76 >= ad_4) { gi_264 = 4; return (-1); } if (ad_20 <= ad_4 && ad_20 != 0.0) { gi_264 = 5; return (-1); } if (ad_12 >= ad_4 && ad_12 != 0.0) { gi_264 = 5; return (-1); } } else { if (l_global_var_92 == 5) { if (l_bid_84 <= ad_4) { gi_264 = 4; return (-1); } if (ad_20 >= ad_4 && ad_20 != 0.0) { gi_264 = 5; return (-1); } if (ad_12 <= ad_4 && ad_12 != 0.0) { gi_264 = 5; return (-1); } } if (l_global_var_92 == 2) { if (l_ask_76 <= ad_4) { gi_264 = 4; return (-1); } if (ad_20 <= ad_4 && ad_20 != 0.0) { gi_264 = 5; return (-1); } if (ad_12 >= ad_4 && ad_12 != 0.0) { gi_264 = 5; return (-1); } } if (l_global_var_92 == 3) { if (l_bid_84 >= ad_4) { gi_264 = 4; return (-1); } if (ad_20 >= ad_4 && ad_20 != 0.0) { gi_264 = 5; return (-1); } if (ad_12 <= ad_4 && ad_12 != 0.0) { gi_264 = 5; return (-1); } } } string ls_96 = "FXI_Pending_" + ai_0; GlobalVariableSet(ls_96 + "_type", l_global_var_92); GlobalVariableSet(ls_96 + "_entry", ad_4); GlobalVariableSet(ls_96 + "_time", TimeCurrent()); GlobalVariableSet(ls_96 + "_stop", ad_12); GlobalVariableSet(ls_96 + "_tp", ad_20); GlobalVariableSet(ls_96 + "_exp", ai_36); GlobalVariableSet(ls_96 + "_vol", ad_28); GlobalVariableSet(ls_96 + "_trail", ai_40); GlobalVariableSet(ls_96 + "_trailinit", ai_44); GlobalVariableSet(ls_96 + "_breakeven", ai_48); return (ai_0); } int checkOpenOrders() { string ls_12; string ls_20; string ls_28; string ls_48; double l_global_var_60; double l_global_var_68; int l_global_var_76; int l_global_var_80; int l_global_var_84; double l_bid_88; double l_ask_96; int li_unused_104; int l_count_108; int li_0 = GlobalVariablesTotal(); int l_ticket_8 = 0; int l_error_36 = 0; int li_40 = 0; int l_count_44 = 0; int l_str2dbl_56 = 0; for (int l_count_4 = 0; l_count_4 <= li_0; l_count_4++) { if (StringFind(GlobalVariableName(l_count_4), "FXI_Open_", 0) != -1) { l_ticket_8 = GetTicketNumber(GlobalVariableName(l_count_4)); if (!OrderSelect(l_ticket_8, SELECT_BY_TICKET)) { removeOpen(l_ticket_8); ls_12 = "9,ERROR,Can not select order with ticket #" + l_ticket_8 + ".. Please check MetaTrader 4 to ensure this order is still open"; if (mt4Send(gi_112, ls_12, StringLen(ls_12)) == -1) return (-1); return (-1); } if (OrderCloseTime() > 0) { removeOpen(OrderTicket()); return (0); } RefreshRates(); l_global_var_60 = GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_SL"); l_global_var_68 = GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_TP"); l_global_var_76 = GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_Trail"); l_global_var_80 = GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_TrailInit"); l_global_var_84 = GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_BE"); l_bid_88 = MarketInfo(OrderSymbol(), MODE_BID); l_ask_96 = MarketInfo(OrderSymbol(), MODE_ASK); li_unused_104 = MarketInfo(OrderSymbol(), MODE_DIGITS); if (GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_Trail") > 0.0 || GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_TrailInit") > 0.0) { if (l_global_var_80 < 0) { if (l_global_var_76 > 0) { if (OrderType() == OP_BUY) { if (l_bid_88 - l_global_var_76 * MarketInfo(OrderSymbol(), MODE_POINT) > l_global_var_60) { GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_SL", l_bid_88 - l_global_var_76 * MarketInfo(OrderSymbol(), MODE_POINT)); ls_28 = "4,TUPD," + l_ticket_8 + "," + DoubleToStr(GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_SL"), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); Print("Sent -- ", ls_28); Sleep(500); } } else { if (OrderType() == OP_SELL) { if (l_ask_96 + l_global_var_76 * MarketInfo(OrderSymbol(), MODE_POINT) < l_global_var_60) { GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_SL", l_ask_96 + l_global_var_76 * MarketInfo(OrderSymbol(), MODE_POINT)); ls_28 = "4,TUPD," + l_ticket_8 + "," + DoubleToStr(GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_SL"), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); Print("Sent -- ", ls_28); Sleep(500); } } } } } else { if (OrderType() == OP_BUY) { if (l_bid_88 >= OrderOpenPrice() + l_global_var_80 * MarketInfo(OrderSymbol(), MODE_POINT)) GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_TrailInit", -2); } else { if (OrderType() == OP_SELL) if (l_ask_96 <= OrderOpenPrice() - l_global_var_80 * MarketInfo(OrderSymbol(), MODE_POINT)) GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_TrailInit", -2); } } } if (GlobalVariableGet("FXI_Open_" + l_ticket_8 + "_BE") > 0.0) { if (l_global_var_84 > 0) { if (OrderType() == OP_BUY) { if (l_bid_88 - OrderOpenPrice() >= l_global_var_84 * MarketInfo(OrderSymbol(), MODE_POINT)) { GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_SL", OrderOpenPrice()); ls_28 = "4,TUPD," + OrderTicket() + "," + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); Print("Sent -- ", ls_28); GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_BE", -1); if (gi_184) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Moved%20To%20Breakeven%20(" + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS) + ")"); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- ", ls_20); } if (gi_216) { ls_28 = "0,OK,Order #" + OrderTicket() + " has moved to breakeven at " + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); } if (gi_220) Alert("Order #" + OrderTicket() + " has moved to breakeven at " + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS))); } } else { if (OrderOpenPrice() - l_ask_96 >= l_global_var_84 * MarketInfo(OrderSymbol(), MODE_POINT)) { GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_SL", OrderOpenPrice()); ls_28 = "4,TUPD," + OrderTicket() + "," + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); Print("Sent -- ", ls_28); GlobalVariableSet("FXI_Open_" + l_ticket_8 + "_BE", -1); if (gi_184 && gi_212) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Moved%20To%20Breakeven%20(" + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS) + ")"); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- ", ls_20); } if (gi_188) { if (gi_216 && gi_200) { ls_28 = "0,OK,Order #" + OrderTicket() + " has moved to breakeven at " + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); } if (gi_220 && gi_200) Alert("Order #" + OrderTicket() + " has moved to breakeven at " + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS))); } } } } } l_count_108 = 0; if (OrderType() == OP_BUY) { if ((l_bid_88 <= l_global_var_60 && l_global_var_60 > 0.0) || (l_bid_88 >= l_global_var_68 && l_global_var_68 > 0.0)) { Print("Closing Order #" + OrderTicket()); if (l_bid_88 <= l_global_var_60 && l_global_var_60 > 0.0) l_str2dbl_56 = g_str2dbl_228; else l_str2dbl_56 = g_str2dbl_232; if (!OrderClose(OrderTicket(), OrderLots(), l_bid_88, l_str2dbl_56, CLR_NONE)) { if (!gi_236) { RefreshRates(); Sleep(500); l_bid_88 = MarketInfo(Symbol(), MODE_BID); while (!OrderClose(OrderTicket(), OrderLots(), l_bid_88, l_str2dbl_56, CLR_NONE)) { RefreshRates(); Sleep(500); l_bid_88 = MarketInfo(Symbol(), MODE_BID); l_count_108++; Print("Attempt #" + l_count_108 + " to close order #" + OrderTicket()); if (l_count_108 > 10) { Print("Error exiting everything completely..."); ls_48 = "20,ERROR,Error Exiting Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(GetLastError()) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); if (gi_184) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Error%20Exiting%20Order%20" + OrderTicket(); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); } removeOpen(OrderTicket()); return (-1); } } } else { l_error_36 = GetLastError(); li_40 = handleError(l_error_36); for (l_count_44 = 0; l_error_36 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Close Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(l_error_36) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removeOpen(OrderTicket()); if (!(gi_184)) break; ls_20 = "10,EMAIL," + OrderSymbol() + ",Could%20Not%20Close%20Order%20" + OrderTicket(); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); break; } if (li_40 == 3) { ls_48 = "3,ERROR,Fatal Error While Closing Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(l_error_36) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removeOpen(OrderTicket()); if (!(gi_184)) break; ls_20 = "10,EMAIL," + OrderSymbol() + ",Fatal%20Error%20Closing%20Order%20" + OrderTicket(); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); break; } Sleep(500); RefreshRates(); if (MathAbs(l_bid_88 - MarketInfo(OrderSymbol(), MODE_BID)) / MarketInfo(OrderSymbol(), MODE_POINT) > l_str2dbl_56) { gda_80[gi_84][0] = OrderTicket(); gda_80[gi_84][1] = MarketInfo(OrderSymbol(), MODE_BID); gi_88++; GlobalVariableSet("FXI_Open_" + OrderTicket() + "_SL", 0); ls_48 = "5,CLOSEDLG," + OrderTicket() + "," + DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } if (OrderClose(OrderTicket(), OrderLots(), l_bid_88, l_str2dbl_56, CLR_NONE)) { l_error_36 = GetLastError(); li_40 = handleError(l_error_36); } else { l_error_36 = 0; delPending(gi_136, g_ticket_132); break; } } } } OrderSelect(OrderTicket(), SELECT_BY_TICKET); if (OrderCloseTime() > 0) { if (gi_184 && gi_208) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Buy%20Order%20Closed%20At%20" + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- ", ls_20); } if (gi_188) { if (gi_216 && gi_196) { ls_28 = "0,OK,Order #" + OrderTicket() + " has been successfully closed at " + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); } if (gi_220 && gi_196) Alert("Order #" + OrderTicket() + " has been successfully closed at " + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS))); } removeOpen(OrderTicket()); } } } else { if (OrderType() == OP_SELL) { if ((l_ask_96 >= l_global_var_60 && l_global_var_60 > 0.0) || (l_ask_96 <= l_global_var_68 && l_global_var_68 > 0.0)) { Print("Closing Order #" + OrderTicket()); if (l_ask_96 >= l_global_var_60 && l_global_var_60 > 0.0) l_str2dbl_56 = g_str2dbl_228; else l_str2dbl_56 = g_str2dbl_232; if (!OrderClose(OrderTicket(), OrderLots(), l_ask_96, l_str2dbl_56, CLR_NONE)) { if (!gi_236) { RefreshRates(); Sleep(500); l_ask_96 = MarketInfo(OrderSymbol(), MODE_ASK); while (!OrderClose(OrderTicket(), OrderLots(), l_ask_96, l_str2dbl_56, CLR_NONE)) { RefreshRates(); Sleep(500); l_ask_96 = MarketInfo(OrderSymbol(), MODE_ASK); l_count_108++; Print("Attempt #" + l_count_108 + " to close order #" + OrderTicket()); if (l_count_108 > 10) { Print("Error exiting everything completely..."); ls_48 = "20,ERROR,Error Exiting Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(GetLastError()) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removeOpen(OrderTicket()); if (gi_184) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Error%20Exiting%20Order%20" + OrderTicket(); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); } return (-1); } } } l_error_36 = GetLastError(); li_40 = handleError(l_error_36); for (l_count_44 = 0; l_error_36 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Close Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(l_error_36) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removeOpen(OrderTicket()); break; } if (li_40 == 3) { ls_48 = "3,ERROR,Fatal Error While Closing Order #" + OrderTicket() + " -- PLEASE CLOSE ORDER MANUALLY! (" + ErrorDescription(l_error_36) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removeOpen(OrderTicket()); if (!(gi_184)) break; ls_20 = "10,EMAIL," + OrderSymbol() + ",Fatal%20Error%20While%20Closing%20Order%20" + OrderTicket(); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); break; } Sleep(500); RefreshRates(); if (MathAbs(l_bid_88 - MarketInfo(OrderSymbol(), MODE_ASK)) / MarketInfo(OrderSymbol(), MODE_POINT) > l_str2dbl_56) { gda_80[gi_84][0] = OrderTicket(); gda_80[gi_84][1] = MarketInfo(OrderSymbol(), MODE_ASK); gi_88++; GlobalVariableSet("FXI_Open_" + OrderTicket() + "_SL", 0); ls_48 = "5,CLOSEDLG," + OrderTicket() + "," + DoubleToStr(MarketInfo(OrderSymbol(), MODE_ASK), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } if (OrderClose(OrderTicket(), OrderLots(), l_ask_96, l_str2dbl_56, CLR_NONE)) { l_error_36 = GetLastError(); li_40 = handleError(l_error_36); } else { l_error_36 = 0; delPending(gi_136, g_ticket_132); break; } } } OrderSelect(OrderTicket(), SELECT_BY_TICKET); if (OrderCloseTime() > 0) { if (gi_184 && gi_208) { ls_20 = "10,EMAIL," + OrderSymbol() + ",Sell%20Order%20Closed%20At%20" + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_20, StringLen(ls_20)); Print("SENT EMAIL --- " + ls_20); } if (gi_188) { if (gi_216 && gi_196) { ls_28 = "0,OK,Order #" + OrderTicket() + " has been successfully closed at " + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_28, StringLen(ls_28)); } if (gi_220 && gi_196) Alert("Order #" + OrderTicket() + " has been successfully closed at " + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(), MODE_DIGITS))); } removeOpen(OrderTicket()); } } } } } } return (0); } void removeAndSlideArray(int ai_0) { for (int li_4 = ai_0; li_4 < gi_84; li_4++) { gda_76[li_4 + 1][0] = gda_76[li_4][0]; gda_76[li_4 + 1][1] = gda_76[li_4][1]; } gi_84--; } void removeAndSlideArray_open(int ai_0) { for (int li_4 = ai_0; li_4 < gi_84; li_4++) { gda_76[li_4 + 1][0] = gda_76[li_4][0]; gda_76[li_4 + 1][1] = gda_76[li_4][1]; } gi_84--; } int calcProperTime(string as_0) { int li_40 = StringFind(as_0, "/", 0); int li_44 = StringFind(as_0, "/", li_40 + 1); int li_48 = StringFind(as_0, " ", 0); if (li_40 == -1 || li_44 == -1 || li_48 == -1) return (0); string ls_16 = StringSubstr(as_0, 0, li_40); string ls_24 = StringSubstr(as_0, li_40 + 1, li_44 - li_40 - 1); string ls_8 = StringSubstr(as_0, li_44 + 1, li_48 - li_44 - 1); string ls_32 = StringSubstr(as_0, li_48 + 1); return (StrToTime(ls_8 + "." + ls_16 + "." + ls_24 + " " + ls_32)); } int handleError(int ai_0) { bool l_bool_12; int l_count_16; int li_unused_4 = 1; switch (ai_0) { case 0: return (0); case 2: Print("System failure. Reboot the computer/check the server"); gi_unused_288 = 2; return (3); case 3: Print("Error of the logic of the EA"); gi_unused_288 = 3; return (3); case 4: Print("Trading server is busy. Wait for 2 minutes."); RefreshRates(); return (2); case 6: l_bool_12 = FALSE; l_count_16 = 0; Print("Disconnect "); while (!l_bool_12 || l_count_16 > 60) { Sleep(10000); Print("Connection not restored", 10 * l_count_16, " seconds passed"); l_bool_12 = IsConnected(); if (l_bool_12) { Print("Connection restored"); return (2); } l_count_16++; } Print("Connection problems"); gi_unused_288 = 6; return (3); case 8: Print("Frequent requests"); gi_unused_288 = 8; return (3); case 64: Print("Account is blocked!"); gi_unused_288 = 64; return (3); case 65: Print("Wrong account number"); gi_unused_288 = 65; return (3); case 128: Print("Waiting of transaction timed out"); RefreshRates(); return (2); case 129: Print("Wrong price"); RefreshRates(); return (2); case 130: Print("Wrong stop"); gi_unused_288 = 130; return (3); case 131: Print("Wrong calculation of trade volume"); gi_unused_288 = 131; return (3); case 132: Print("Market closed"); gi_unused_288 = 132; return (2); case 134: Print("Lack of margin for performing operation"); gi_unused_288 = 134; return (3); case 135: Print("Prices changed"); RefreshRates(); gi_unused_288 = 135; return (2); case 136: Print("No price!"); RefreshRates(); return (2); case 138: Print("Requote again!"); gi_unused_288 = 138; RefreshRates(); return (2); case 139: Print("The order is in process. Program glitch"); gi_unused_288 = 139; return (3); case 141: Print("Too many requests"); gi_unused_288 = 141; return (3); case 146: Print("Thread is busy"); gi_unused_288 = 146; while (IsTradeContextBusy()) Sleep(2000); return (2); case 148: Print("Transaction volume too large"); gi_unused_288 = 148; return (3); } return (0); } int init() { string lsa_0[30]; int l_index_4 = 0; string ls_8 = ""; if (StringLen(Symbol()) > 6) ls_8 = StringSubstr(Symbol(), 6); gsa_276[0] = "USDJPY" + ls_8; gsa_276[1] = "EURUSD" + ls_8; gsa_276[2] = "GBPUSD" + ls_8; gsa_276[3] = "USDCHF" + ls_8; gsa_276[4] = "USDCAD" + ls_8; gsa_276[5] = "AUDUSD" + ls_8; gsa_276[6] = "EURGBP" + ls_8; gsa_276[7] = "EURJPY" + ls_8; gsa_276[8] = "GBPJPY" + ls_8; gsa_276[9] = "EURCHF" + ls_8; gsa_276[10] = "USDMXN" + ls_8; gsa_276[11] = "CHFJPY" + ls_8; gsa_276[12] = "GBPCHF" + ls_8; gsa_276[13] = "EURAUD" + ls_8; gsa_276[14] = "EURCAD" + ls_8; gsa_276[15] = "AUDCAD" + ls_8; gsa_276[16] = "AUDJPY" + ls_8; gsa_276[17] = "NZDUSD" + ls_8; gsa_276[18] = "AUDNZD" + ls_8; gsa_276[19] = "CADJPY" + ls_8; gsa_276[20] = "USDTRY" + ls_8; gsa_276[21] = "XAGUSD" + ls_8; gsa_276[22] = "XAUUSD" + ls_8; gsa_276[23] = "EURNZD" + ls_8; gsa_276[24] = "AUDCHF" + ls_8; gsa_276[25] = "CADCHF" + ls_8; gsa_276[26] = "NZDJPY" + ls_8; for (int l_index_16 = 0; l_index_16 <= 26; l_index_16++) { if (MarketInfo(gsa_276[l_index_16], MODE_BID) > 0.0 && MarketInfo(gsa_276[l_index_16], MODE_ASK) > 0.0) { lsa_0[l_index_4] = gsa_276[l_index_16]; l_index_4++; } } Print("Found " + l_index_4 + " pairs! Building Packet..."); gs_280 = "9,PAIRS,"; for (l_index_16 = 0; l_index_16 < l_index_4; l_index_16++) gs_280 = StringConcatenate(gs_280, lsa_0[l_index_16], "/", MarketInfo(lsa_0[l_index_16], MODE_DIGITS), ","); if (IsConnected()) { gs_104 = "fn=" + getEmailAddress(); gs_104 = StringConcatenate(gs_104, "&tc=", TerminalCompany(), "&tn=", TerminalName(), "&ab=", AccountBalance(), "&id=", IsDemo(), "&ac=", AccountNumber()); } return (0); } int start() { string ls_8; int li_40; string ls_48; int l_error_56; int li_60; int li_0 = 0; bool li_20 = FALSE; if (doListenOnSocket() == 0) return (0); int li_24 = 0; int li_28 = 0; bool li_32 = FALSE; bool li_36 = FALSE; int l_count_44 = 0; while (!IsStopped()) { li_40 = grabNewCommands(); if (li_40 == -1) return (0); li_24 = totalOrders_open(); li_28 = totalOrders_pending(); if (li_32 != li_24 || li_36 != li_28) { li_32 = li_24; li_36 = li_28; if (SendNewOrders() == -1) return (0); } RefreshRates(); Sleep(100); gi_248 = -1; if (!removeExpired()) { Print("Error in removing expired! Exiting.."); return (0); } checkOpenOrders(); li_0 = GlobalVariablesTotal(); for (int li_4 = li_0; li_4 >= 0; li_4--) { ls_8 = GlobalVariableName(li_4); if (StringFind(ls_8, "FXI_Pending", 0) != -1) { if (GetTicketNumber(ls_8) != gi_248) { li_20 = FALSE; for (int l_index_16 = 0; l_index_16 < gi_84; l_index_16++) { if (gda_76[l_index_16][0] == gi_136) { li_20 = TRUE; break; } } if (li_20 == 0) { li_20 = FALSE; for (l_index_16 = 0; l_index_16 < gi_88; l_index_16++) { if (gda_80[l_index_16][0] == gi_136) { li_20 = TRUE; break; } } if (li_20 == 0) { StripUC(ls_8); gi_248 = gi_136; if (g_global_var_120 == 4) { if (MarketInfo(g_symbol_140, MODE_ASK) >= g_price_124) { g_ticket_132 = OrderSend(g_symbol_140, OP_BUY, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Red); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); for (l_count_44 = 0; l_error_56 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Open Order #P" + gi_136 + " -- Removing From Queue (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } if (li_60 == 3) { ls_48 = "3,ERROR,Fatal Error While Putting On Order #P" + gi_136 + " (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } Sleep(500); RefreshRates(); if (gi_236) { if (MathAbs(g_price_124 - MarketInfo(g_symbol_140, MODE_ASK)) / MarketInfo(g_symbol_140, MODE_POINT) > g_str2dbl_224) { gda_76[gi_84][0] = gi_136; gda_76[gi_84][1] = MarketInfo(g_symbol_140, MODE_ASK); gi_84++; ls_48 = "5,OPENDLG," + gi_136 + "," + DoubleToStr(MarketInfo(g_symbol_140, MODE_ASK), MarketInfo(g_symbol_140, MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } } g_ticket_132 = OrderSend(g_symbol_140, OP_BUY, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Red); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); } else { l_error_56 = 0; delPending(gi_136, g_ticket_132); break; } } } else delPending(gi_136, g_ticket_132); } } else { if (g_global_var_120 == 5) { if (MarketInfo(g_symbol_140, MODE_BID) <= g_price_124) { g_ticket_132 = OrderSend(g_symbol_140, OP_SELL, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Blue); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); for (l_count_44 = 0; l_error_56 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Open Order #P" + gi_136 + " -- Removing From Queue (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } if (li_60 == 3) { ls_48 = "3,ERROR,Fatal Error While Putting On Order #P" + gi_136 + " (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } Sleep(500); RefreshRates(); if (gi_236) { if (MathAbs(g_price_124 - MarketInfo(g_symbol_140, MODE_BID)) / MarketInfo(g_symbol_140, MODE_POINT) > g_str2dbl_224) { gda_76[gi_84][0] = gi_136; gda_76[gi_84][1] = MarketInfo(g_symbol_140, MODE_BID); gi_84++; ls_48 = "5,OPENDLG," + gi_136 + "," + DoubleToStr(MarketInfo(g_symbol_140, MODE_BID), MarketInfo(g_symbol_140, MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } } g_ticket_132 = OrderSend(g_symbol_140, OP_SELL, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Blue); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); } else { l_error_56 = 0; delPending(gi_136, g_ticket_132); break; } } } else delPending(gi_136, g_ticket_132); } } else { if (g_global_var_120 == 2) { if (MarketInfo(g_symbol_140, MODE_ASK) <= g_price_124) { g_ticket_132 = OrderSend(g_symbol_140, OP_BUY, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Red); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); for (l_count_44 = 0; l_error_56 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Open Order #P" + gi_136 + " -- Removing From Queue (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } if (li_60 == 3) { ls_48 = "3,ERROR,Fatal Error While Putting On Order #P" + gi_136 + " (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } Sleep(500); RefreshRates(); if (MathAbs(g_price_124 - MarketInfo(g_symbol_140, MODE_ASK)) / MarketInfo(g_symbol_140, MODE_POINT) > g_str2dbl_224) { gda_76[gi_84][0] = gi_136; gda_76[gi_84][1] = MarketInfo(g_symbol_140, MODE_ASK); gi_84++; ls_48 = "5,OPENDLG," + gi_136 + "," + DoubleToStr(MarketInfo(g_symbol_140, MODE_ASK), MarketInfo(g_symbol_140, MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } g_ticket_132 = OrderSend(g_symbol_140, OP_BUY, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Red); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); } else { l_error_56 = 0; delPending(gi_136, g_ticket_132); break; } } } else delPending(gi_136, g_ticket_132); } } else { if (g_global_var_120 == 3) { if (MarketInfo(g_symbol_140, MODE_BID) >= g_price_124) { g_ticket_132 = OrderSend(g_symbol_140, OP_SELL, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Red); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); for (l_count_44 = 0; l_error_56 != 0/* NO_ERROR */; l_count_44++) { if (l_count_44 >= 10) { ls_48 = "9,ERROR,Could Not Open Order #P" + gi_136 + " -- Removing From Queue (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } if (li_60 == 3) { ls_48 = "3,ERROR,Fatal Error While Putting On Order #P" + gi_136 + " (" + ErrorDescription(l_error_56) + ")"; mt4Send(gi_112, ls_48, StringLen(ls_48)); removePending(gi_136); break; } Sleep(500); RefreshRates(); if (MathAbs(g_price_124 - MarketInfo(g_symbol_140, MODE_BID)) / MarketInfo(g_symbol_140, MODE_POINT) > g_str2dbl_224) { gda_76[gi_84][0] = gi_136; gda_76[gi_84][1] = MarketInfo(g_symbol_140, MODE_BID); gi_84++; ls_48 = "5,OPENDLG," + gi_136 + "," + DoubleToStr(MarketInfo(g_symbol_140, MODE_BID), MarketInfo(g_symbol_140, MODE_DIGITS)); mt4Send(gi_112, ls_48, StringLen(ls_48)); break; } g_ticket_132 = OrderSend(g_symbol_140, OP_SELL, g_lots_148, g_price_124, g_str2dbl_224, 0, 0, "ForexImpact.com Pending Order", g_magic_244, 0, Blue); if (g_ticket_132 < 0) { l_error_56 = GetLastError(); li_60 = handleError(l_error_56); } else { l_error_56 = 0; delPending(gi_136, g_ticket_132); break; } } } else delPending(gi_136, g_ticket_132); } } } } } } } } } } } return (0); } void delPending(int ai_0, int ai_4) { string ls_8; string ls_16; string lsa_24[1000]; Print("Placing out pending orders..."); GlobalVariableSet("FXI_Open_" + ai_4 + "_SL", gd_156); GlobalVariableSet("FXI_Open_" + ai_4 + "_TP", gd_164); GlobalVariableSet("FXI_Open_" + ai_4 + "_Trail", gi_172); GlobalVariableSet("FXI_Open_" + ai_4 + "_TrailInit", gi_176); GlobalVariableSet("FXI_Open_" + ai_4 + "_BE", gi_180); int li_28 = 0; int l_index_32 = 0; for (li_28 = GlobalVariablesTotal(); li_28 >= 0; li_28--) { if (StringFind(GlobalVariableName(li_28), "FXI_Pending_" + ai_0, 0) != -1) { lsa_24[l_index_32] = GlobalVariableName(li_28); l_index_32++; } } for (int l_index_36 = 0; l_index_36 < l_index_32; l_index_36++) GlobalVariableDel(lsa_24[l_index_36]); OrderSelect(g_ticket_132, SELECT_BY_TICKET); if (gi_188) { if (gi_216 && gi_192) { ls_8 = "0,OK,Order #P" + gi_136 + " has been successfully placed (New Order #" + g_ticket_132 + ")"; mt4Send(gi_112, ls_8, StringLen(ls_8)); } if (gi_220 && gi_192) Alert("Order #P" + gi_136 + " has been successfully placed (New Order #" + g_ticket_132 + ")"); } if (gi_184 && gi_204) { ls_16 = "10,EMAIL," + OrderSymbol() + ",Has%20Successfully%20Opened%20At%20Price%20" + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), MODE_DIGITS)); mt4Send(gi_112, ls_16, StringLen(ls_16)); Print("SENT EMAIL --- ", ls_16); } } int removePending(int ai_0) { string lsa_4[1000]; int li_8 = 0; int l_index_12 = 0; Print("Removing pending order with ticket #" + ai_0); for (li_8 = GlobalVariablesTotal(); li_8 >= 0; li_8--) { if (StringFind(GlobalVariableName(li_8), "FXI_Pending_" + ai_0, 0) != -1) { lsa_4[l_index_12] = GlobalVariableName(li_8); l_index_12++; } } for (int l_index_16 = 0; l_index_16 < l_index_12; l_index_16++) GlobalVariableDel(lsa_4[l_index_16]); Sleep(300); if (SendNewOrders() == -1) return (0); return (1); } void StripUC(string as_0) { string ls_unused_20; int l_count_32; int li_8 = GetTicketNumber(as_0); int l_str_len_12 = StringLen(as_0); for (int li_28 = GlobalVariablesTotal(); li_28 >= 0; li_28--) { if (StringFind(GlobalVariableName(li_28), "FXI_Pending_" + li_8, 0) != -1) { if (!GlobalVariableCheck("FXI_Pending_" + li_8 + "_stop") || !GlobalVariableCheck("FXI_Pending_" + li_8 + "_tp") || !GlobalVariableCheck("FXI_Pending_" + li_8 + "_type") || !GlobalVariableCheck("FXI_Pending_" + li_8 + "_entry") || !GlobalVariableCheck("FXI_Pending_" + li_8 + "_exp") || !GlobalVariableCheck("FXI_Pending_" + li_8 + "_time") || !GlobalVariableGet("FXI_Pending_" + li_8 + "_vol")) { } gd_156 = GlobalVariableGet("FXI_Pending_" + li_8 + "_stop"); gd_164 = GlobalVariableGet("FXI_Pending_" + li_8 + "_tp"); g_global_var_120 = GlobalVariableGet("FXI_Pending_" + li_8 + "_type"); g_price_124 = GlobalVariableGet("FXI_Pending_" + li_8 + "_entry"); g_global_var_252 = GlobalVariableGet("FXI_Pending_" + li_8 + "_exp"); gi_unused_256 = GlobalVariableGet("FXI_Pending_" + li_8 + "_time"); g_lots_148 = GlobalVariableGet("FXI_Pending_" + li_8 + "_vol"); gi_172 = GlobalVariableGet("FXI_Pending_" + li_8 + "_trail"); gi_176 = GlobalVariableGet("FXI_Pending_" + li_8 + "_trailinit"); gi_180 = GlobalVariableGet("FXI_Pending_" + li_8 + "_breakeven"); gi_136 = li_8; l_count_32 = 0; for (l_count_32 = 0; l_count_32 <= GlobalVariablesTotal(); l_count_32++) { if (StringFind(GlobalVariableName(l_count_32), "FXI_Pending_" + li_8, 0) != -1) if (StringFind(GlobalVariableName(l_count_32), "_SYMB_", 0) != -1) g_symbol_140 = GetPair(GlobalVariableName(l_count_32)); } return; } } } string GetPair(string as_0) { int li_12; int li_20; string ls_unused_32; int l_str_len_8 = StringLen(as_0); int l_count_16 = 0; for (int li_28 = 0; li_28 < l_str_len_8; li_28++) { li_12 = StringGetChar(as_0, li_28); if (li_12 == '_') { if (l_count_16 < 3) l_count_16++; else { if (l_count_16 == 3) { l_count_16++; li_20 = li_28 + 1; } } } } return (StringSubstr(as_0, li_20, StringLen(as_0) - li_20)); } int GetTicketNumber(string as_0) { int li_12; int li_20; int li_24; int l_str_len_8 = StringLen(as_0); int l_count_16 = 0; for (int li_28 = 0; li_28 < l_str_len_8; li_28++) { li_12 = StringGetChar(as_0, li_28); if (li_12 == '_') { if (l_count_16 < 1) l_count_16++; else { if (l_count_16 == 1) { l_count_16++; li_20 = li_28 + 1; } else { if (l_count_16 == 2) { l_count_16++; li_24 = li_28; } } } } } string ls_32 = StringSubstr(as_0, li_20, li_20 - li_24); return (StrToDouble(ls_32)); } bool removeExpired() { string ls_4; double lda_12[1000]; double lda_16[500][2]; int li_0 = GlobalVariablesTotal(); int l_index_20 = 0; int li_unused_24 = -1; int l_index_36 = 0; int li_40 = 0; for (int l_index_28 = li_0; l_index_28 >= 0; l_index_28--) { ls_4 = GlobalVariableName(l_index_28); if (StringFind(ls_4, "FXI_OCO_", 0) != -1) { li_40 = StringFind(ls_4, "_", 8); lda_16[l_index_36][0] = StrToDouble(StringSubstr(ls_4, 8, li_40 - 8)); lda_16[l_index_36][1] = StrToDouble(StringSubstr(ls_4, li_40 + 1)); l_index_36++; } if (StringFind(ls_4, "_exp", 0) != -1) { if (StringFind(ls_4, "FXI_Pending_", 0) != -1) { if (GlobalVariableGet(ls_4) != 0.0) { if (TimeLocal() >= GlobalVariableGet(ls_4)) { lda_12[l_index_20] = GetTicketNumber(ls_4); li_unused_24 = lda_12[l_index_20]; l_index_20++; } } } } } for (int l_index_44 = 0; l_index_44 < l_index_20; l_index_44++) removePending(lda_12[l_index_44]); bool li_48 = FALSE; bool li_52 = FALSE; if (l_index_36 > 0) { for (l_index_28 = 0; l_index_28 < l_index_36; l_index_28++) { for (int l_count_32 = 0; l_count_32 <= GlobalVariablesTotal(); l_count_32++) { if (StringFind(GlobalVariableName(l_count_32), "FXI_Pending_" + DoubleToStr(lda_16[l_index_28][0], 0) + "_", 0) != -1) li_48 = TRUE; if (StringFind(GlobalVariableName(l_count_32), "FXI_Pending_" + DoubleToStr(lda_16[l_index_28][1], 0) + "_", 0) != -1) li_52 = TRUE; } if (!li_48 && li_52) { Print("Found order " + lda_16[l_index_28][1] + " but could not find order " + lda_16[l_index_28][0]); if (removePending(lda_16[l_index_28][1]) == 0) { Print("Error in removing pending order"); return (FALSE); } GlobalVariableDel("FXI_OCO_" + DoubleToStr(lda_16[l_index_28][0], 0) + "_" + DoubleToStr(lda_16[l_index_28][1], 0)); Print("Removed OCO Order linking " + lda_16[l_index_28][0] + " and " + lda_16[l_index_28][1]); } if (!li_52 && li_48) { Print("Found order " + lda_16[l_index_28][0] + " but could not find order " + lda_16[l_index_28][1]); if (removePending(lda_16[l_index_28][0]) == 0) { Print("Error in removing pending order"); return (FALSE); } GlobalVariableDel("FXI_OCO_" + DoubleToStr(lda_16[l_index_28][0], 0) + "_" + DoubleToStr(lda_16[l_index_28][1], 0)); Print("Removed OCO Order linking " + lda_16[l_index_28][0] + " and " + lda_16[l_index_28][1]); } if (!li_48 && !li_52) { GlobalVariableDel("FXI_OCO_" + DoubleToStr(lda_16[l_index_28][0], 0) + "_" + DoubleToStr(lda_16[l_index_28][1], 0)); Print("Removed OCO Order linking " + DoubleToStr(lda_16[l_index_28][0], 0) + " and " + DoubleToStr(lda_16[l_index_28][1], 0)); } } } for (l_index_28 = 0; l_index_28 < l_index_20; l_index_28++) { GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_stop"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_tp"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_type"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_entry"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_exp"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_time"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_vol"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_trail"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_trailinit"); GlobalVariableDel("FXI_Pending_" + lda_12[l_index_28] + "_breakeven"); for (l_count_32 = GlobalVariablesTotal(); l_count_32 >= 0; l_count_32--) { if (StringFind(GlobalVariableName(l_count_32), "FXI_Pending_" + lda_12[l_index_28], 0) != -1) if (StringFind(GlobalVariableName(l_count_32), "_SYMB_", 0) != -1) GlobalVariableDel(GlobalVariableName(l_count_32)); } ObjectDelete("FXI_PEntry_" + lda_12[l_index_28]); ObjectDelete("FXI_PSL_" + lda_12[l_index_28]); ObjectDelete("FXI_PTP_" + lda_12[l_index_28]); Print("Removed ticket #" + lda_12[l_index_28] + " for an expiration time"); } return (TRUE); } int deinit() { string lsa_0[1000]; int l_index_4 = 0; for (int li_8 = 0; li_8 < ObjectsTotal(); li_8++) { if (StringFind(ObjectName(li_8), "FXI_P", 0) != -1) { lsa_0[l_index_4] = ObjectName(li_8); l_index_4++; } } for (int l_index_12 = 0; l_index_12 < l_index_4; l_index_12++) ObjectDelete(lsa_0[l_index_12]); cleanupWinsock(gi_112); return (0); } int totalOrders_open() { int li_unused_0 = 0; int l_ord_total_4 = OrdersTotal(); int l_count_8 = 0; for (int l_count_12 = 0; l_count_12 <= l_ord_total_4; l_count_12++) if (OrderType() == OP_BUY || OrderType() == OP_SELL) l_count_8++; return (l_count_8); } int totalOrders_pending() { int li_0 = 0; int li_4 = GlobalVariablesTotal(); int l_count_8 = 0; for (int l_count_12 = 0; l_count_12 <= li_4; l_count_12++) { if (StringFind(GlobalVariableName(l_count_12), "FXI_Pending", 0) != -1) { if (li_0 != GetTicketNumber(GlobalVariableName(l_count_12))) { li_0 = GetTicketNumber(GlobalVariableName(l_count_12)); l_count_8++; } } } return (l_count_8); } int removeOpen(int ai_0) { string lsa_4[1000]; int li_8 = 0; int l_index_12 = 0; Print("Removing open order with ticket #" + ai_0); for (li_8 = GlobalVariablesTotal(); li_8 >= 0; li_8--) { if (StringFind(GlobalVariableName(li_8), "FXI_Open_" + ai_0, 0) != -1) { lsa_4[l_index_12] = GlobalVariableName(li_8); l_index_12++; } } for (int l_index_16 = 0; l_index_16 < l_index_12; l_index_16++) GlobalVariableDel(lsa_4[l_index_16]); Sleep(500); if (SendNewOrders() == -1) return (0); return (1); }