/* Generated by EX4-TO-MQ4 decompiler V4.0.223.1c [] Website: http://purebeam.biz E-mail : purebeam@gmail.com */ #property copyright "Mike Koshelev" #property link "http:\www.forextester.com" #include #import "SignalProvider.dll" int SaveFile(int a0, string a1, string a2, double a3, double a4, double a5, double a6, int a7, string a8); #import string gs_unused_76 = ""; extern string DestinationDir = "\\Experts\\Files"; extern double LotMultiplier = 1.0; extern string EventSound = ""; extern int TimeDelaySec = 0; extern string Copyright = "(c) www.forextester.com"; int g_index_152; int gia_156[100]; string gsa_160[100]; int gia_164[100]; double gda_168[100]; double gda_172[100]; int gia_176[100]; double gda_180[100]; double gda_184[100]; bool OrderClosed(int ai_0) { for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES) != FALSE) if (OrderTicket() == ai_0) return (FALSE); } return (TRUE); } int init() { return (0); } int deinit() { return (0); } int start() { while (!IsStopped()) { LoadOptions(); ComparePositions(); SaveOptions(); if (TimeDelaySec == 0) return (0); Sleep(1000 * TimeDelaySec); } return (0); } void SaveOptions() { int l_file_0 = FileOpen("SignalProvider.dat", FILE_CSV|FILE_WRITE, ';'); if (l_file_0 > 0) { FileWrite(l_file_0, g_index_152); for (int l_index_4 = 0; l_index_4 < g_index_152; l_index_4++) FileWrite(l_file_0, gia_156[l_index_4], gsa_160[l_index_4], gia_164[l_index_4], gda_168[l_index_4], gia_176[l_index_4], gda_180[l_index_4], gda_184[l_index_4], gda_172[l_index_4]); FileClose(l_file_0); } } int SaveTask(int ai_0, string as_4, string as_12, double ad_20, double ad_28, double ad_36, double ad_44, int ai_52) { int li_ret_56; for (int l_count_60 = 0; l_count_60 < 2; l_count_60++) { li_ret_56 = SaveFile(ai_0, as_4, as_12, ad_20, ad_28, ad_36, ad_44, ai_52, DestinationDir); if (li_ret_56 == 0) break; } if (li_ret_56 != 0) Print("Can not save task, possible invalid dir: ", DestinationDir); else { if (EventSound != "") PlaySound(EventSound); Print("New task was saved"); } return (li_ret_56); } void LoadOptions() { ArrayInitialize(gia_156, 0); ArrayInitialize(gia_164, 0); ArrayInitialize(gda_168, 0); ArrayInitialize(gda_172, 0); ArrayInitialize(gia_176, 0); ArrayInitialize(gda_180, 0); ArrayInitialize(gda_184, 0); for (int l_index_0 = 0; l_index_0 < 100; l_index_0++) gsa_160[l_index_0] = ""; int l_file_4 = FileOpen("SignalProvider.dat", FILE_CSV|FILE_READ, ';'); if (l_file_4 > 0) { g_index_152 = FileReadNumber(l_file_4); for (l_index_0 = 0; l_index_0 < g_index_152; l_index_0++) { gia_156[l_index_0] = FileReadNumber(l_file_4); gsa_160[l_index_0] = FileReadString(l_file_4); gia_164[l_index_0] = FileReadNumber(l_file_4); gda_168[l_index_0] = FileReadNumber(l_file_4); gia_176[l_index_0] = FileReadNumber(l_file_4); gda_180[l_index_0] = FileReadNumber(l_file_4); gda_184[l_index_0] = FileReadNumber(l_file_4); gda_172[l_index_0] = FileReadNumber(l_file_4); } FileClose(l_file_4); return; } g_index_152 = 0; SaveOptions(); } void PackArrays() { for (int l_index_0 = 0; l_index_0 < g_index_152; l_index_0++) { if (l_index_0 == 99) break; if (gia_156[l_index_0] == 0) { for (int li_4 = l_index_0; li_4 < g_index_152; li_4++) { gia_156[li_4] = gia_156[li_4 + 1]; gsa_160[li_4] = gsa_160[li_4 + 1]; gia_164[li_4] = gia_164[li_4 + 1]; gda_168[li_4] = gda_168[li_4 + 1]; gia_176[li_4] = gia_176[li_4 + 1]; gda_180[li_4] = gda_180[li_4 + 1]; gda_184[li_4] = gda_184[li_4 + 1]; gda_172[li_4] = gda_172[li_4 + 1]; } g_index_152--; l_index_0--; } } } int FindOrder(int ai_0) { for (int l_index_4 = 0; l_index_4 < g_index_152; l_index_4++) if (gia_156[l_index_4] == ai_0) return (l_index_4); return (-1); } string StrType(int ai_0) { if (ai_0 == 0) return ("BUY"); if (ai_0 == 1) return ("SELL"); if (ai_0 == 2) return ("BUY_LIMIT"); if (ai_0 == 4) return ("BUY_STOP"); if (ai_0 == 3) return ("SELL_LIMIT"); if (ai_0 == 5) return ("SELL_STOP"); return ("Unknown"); } void ComparePositions() { string ls_unused_4; bool li_12 = FALSE; for (int l_pos_0 = 0; l_pos_0 < g_index_152; l_pos_0++) { if (OrderClosed(gia_156[l_pos_0])) { Print("Order closed or deleted: ", gia_156[l_pos_0]); if (SaveTask(gia_156[l_pos_0], "DELETE", gsa_160[l_pos_0], 0, 0, 0, 0, 0) == 0) { gia_156[l_pos_0] = 0; li_12 = TRUE; } } if (OrderSelect(gia_156[l_pos_0], SELECT_BY_TICKET, MODE_TRADES)) { if (OrderLots() != gda_168[l_pos_0] || OrderTakeProfit() != gda_184[l_pos_0] || OrderStopLoss() != gda_180[l_pos_0] || OrderOpenPrice() != gda_172[l_pos_0]) { Print("Order modified: ticket ", gia_156[l_pos_0], ", symbol ", gsa_160[l_pos_0]); if (SaveTask(gia_156[l_pos_0], "MODIFY", gsa_160[l_pos_0], OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit(), OrderLots() * LotMultiplier, OrderOpenTime()) == 0) { gia_156[l_pos_0] = OrderTicket(); gsa_160[l_pos_0] = OrderSymbol(); gia_164[l_pos_0] = OrderType(); gda_172[l_pos_0] = OrderOpenPrice(); gda_168[l_pos_0] = OrderLots(); gia_176[l_pos_0] = OrderOpenTime(); gda_180[l_pos_0] = OrderStopLoss(); gda_184[l_pos_0] = OrderTakeProfit(); li_12 = TRUE; } } if (OrderType() != gia_164[l_pos_0]) { Print("Order executed: ticket ", gia_156[l_pos_0]); if (SaveTask(gia_156[l_pos_0], StringConcatenate("EXECUTED ", StrType(OrderType())), gsa_160[l_pos_0], OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit(), OrderLots() * LotMultiplier, OrderOpenTime()) == 0) { gia_164[l_pos_0] = OrderType(); li_12 = TRUE; } } } } PackArrays(); for (l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES)) { if (FindOrder(OrderTicket()) == -1) { Print("New order created: ", StrType(OrderType()), ", symbol ", OrderSymbol(), ", price ", OrderOpenPrice()); if (SaveTask(OrderTicket(), StrType(OrderType()), OrderSymbol(), OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit(), OrderLots() * LotMultiplier, OrderOpenTime()) == 0) { gia_156[g_index_152] = OrderTicket(); gsa_160[g_index_152] = OrderSymbol(); gia_164[g_index_152] = OrderType(); gda_172[g_index_152] = OrderOpenPrice(); gda_168[g_index_152] = OrderLots(); gia_176[g_index_152] = OrderOpenTime(); gda_180[g_index_152] = OrderStopLoss(); gda_184[g_index_152] = OrderTakeProfit(); g_index_152++; li_12 = TRUE; } } } } if (li_12) SaveOptions(); }