#property copyright "Copyright © 2006, Mark A Flexhaug" #property link "pipaholic@shaw.ca" #property library #include #include bool gba_unused_76[100]; int gia_unused_80[100]; double gda_unused_84[100]; string gsa_unused_88[100]; int gia_unused_92[100]; double gda_unused_96[25]; string gsa_100[] = {"None", "Limit", "Stop"}; int gi_unused_104 = 1; int gi_unused_108 = 2; int gi_unused_112 = 1; int g_magic_116 = 0; int gi_unused_120 = 3; int g_cmd_124 = -1; int gi_unused_128 = -1; int gi_unused_132 = 3; int gi_136 = 2; int gi_140 = 1; int gi_unused_144 = 3; int gi_unused_148 = 2; int gi_unused_152 = 1; int gi_unused_156 = 1; int gi_unused_160 = 2; int gi_unused_164 = 2; int gi_unused_168 = 1; int gi_unused_172 = 2; int gi_unused_176 = 1; int gi_unused_180 = 0; int gi_unused_184 = 1; int gi_unused_188 = 2; int gi_unused_192 = 3; int gi_unused_196 = 4; string gsa_200[] = {"Reset", "Waiting", "In trade", "Closing", "Done Today"}; bool gi_unused_204 = FALSE; bool gi_unused_208 = TRUE; int gi_unused_212 = 60; int gi_unused_216 = 900; int gi_unused_220 = 1800; int gi_unused_224 = 3600; int gi_unused_228 = 5400; int gi_unused_232 = 7200; int gi_unused_236 = 1; int gi_unused_240 = 2; int gi_unused_244 = 3; int gi_unused_248 = 4; int gi_252 = 1; int gi_256 = 0; int gi_260 = 1; int gi_264 = 0; int gi_unused_268 = 1; int gi_unused_272 = 0; int gi_unused_276 = 1; int gi_unused_280 = 0; int gi_284 = 1; int gi_288 = 0; int gi_292 = 1; int gi_unused_296 = 0; int gi_unused_300 = 1; int gi_304 = 0; int gi_308 = 0; int gi_unused_312 = 1; int gi_unused_316 = 0; int gi_unused_320 = 1; int gi_unused_324 = 0; int gi_unused_328 = 1; int gi_unused_332 = 2; int gi_unused_336 = 3; int gi_340 = 1; string gsa_344[] = {"blank", "Waiting", "Preset", "Entry", "Manage"}; string gsa_348[] = {"blank", "SHORT", "LONG", "NEUTRAL"}; string gsa_352[] = {"blank", "Below", "Above"}; string gsa_356[] = {"blank", "Check", "Clear", "Set"}; string gsa_360[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; string gsa_364[] = {"Manual", "Auto"}; string gsa_368[] = {"Micro", "Mini", "Standard"}; string gsa_372[] = {"blank", "Short", "Long"}; string gs_384; string gs_dummy_392; string gsa_400[] = {"Aussie Loonie ", "Aussie Kiwi ", "Aussie Yen ", "Aussie Dollar ", "Swissy Yen", "Euro Aussie", "Euro Loonie", "Euro Swissy", "Euro Pound ", "Euro Yen ", "Euro ", "Pound Swissy ", "Pound Yen ", "Pound ", "Loonie ", "Swissy ", "Dollar Yen ", "Gold ", "Silver ", "Kiwi Yen", "Kiwi Dollar"}; string gs_tradelib_404 = "tradelib"; string gs_unused_412 = " "; bool gi_unused_420 = FALSE; int gi_unused_424 = 0; int gi_unused_428 = 0; double gd_432 = 1.0; double gd_440 = 20.0; double gd_unused_448 = 10.0; double gd_456 = 2.5; double gd_unused_464 = 4.0; double gd_unused_472 = 10.0; double gd_unused_480 = 40.0; int gi_unused_488 = -1; double Basket(string a_symbol_0, int ai_8, int a_magic_12) { double ld_56; int li_unused_16 = 0; int l_magic_32 = 0; int li_unused_36 = 0; int li_unused_48 = 3; int li_unused_52 = 500; double ld_64 = 0; double ld_ret_72 = 0; double ld_80 = 0; int l_ord_total_28 = OrdersTotal(); for (int l_pos_24 = l_ord_total_28 - 1; l_pos_24 >= 0; l_pos_24--) { OrderSelect(l_pos_24, SELECT_BY_POS); l_magic_32 = OrderMagicNumber(); if ((OrderSymbol() == a_symbol_0 && l_magic_32 == a_magic_12) || (a_symbol_0 == "ALL" && l_magic_32 == a_magic_12)) { switch (ai_8) { case 2: ld_80 += OrderProfit(); ld_ret_72 = ld_80; break; case 1: ld_56 = OrderSwap(); ld_64 += ld_56; } } } if (ai_8 == gi_340) ld_ret_72 = ld_64; return (ld_ret_72); } double BasketTotalLots(string a_symbol_0, int a_cmd_8, int a_magic_12) { int li_unused_20; int l_cmd_28; int l_magic_36; int li_unused_44; int li_unused_16 = 0; int li_unused_52 = 0; int li_unused_56 = 3; int li_unused_60 = 250; double ld_ret_64 = 0; int l_ord_total_32 = OrdersTotal(); for (int l_pos_24 = l_ord_total_32 - 1; l_pos_24 >= 0; l_pos_24--) { if (OrderSelect(l_pos_24, SELECT_BY_POS, MODE_TRADES)) { if (a_magic_12 == g_magic_116) l_magic_36 = g_magic_116; else l_magic_36 = OrderMagicNumber(); if ((OrderSymbol() == a_symbol_0 && l_magic_36 == a_magic_12) || (a_symbol_0 == "NULL" && l_magic_36 == a_magic_12)) { li_unused_44 = 0; li_unused_20 = 0; if (a_cmd_8 == g_cmd_124) l_cmd_28 = a_cmd_8; else l_cmd_28 = OrderType(); if (l_cmd_28 == a_cmd_8) ld_ret_64 += OrderLots(); } } else { Print("Error in checking basket total lots : ", GetLastError()); break; } } return (ld_ret_64); } double CalcLots(double ad_0, double ad_8, double ad_16, int ai_24) { double l_minlot_28; double ld_36; if (ad_0 != 0.0) return (ad_0); if (ad_8 > 0.0 && ad_16 > 0.0) { if (ad_8 > 30.0) ad_8 = 30; ld_36 = AccountBalance() * (ad_8 / 100.0); ld_36 /= ai_24; l_minlot_28 = NormalizeDouble(ld_36 / ad_16 / MarketInfo(Symbol(), MODE_TICKVALUE), 2); } else { Print("lot sizing error > dLots:", DoubleToStr(l_minlot_28, 2), " bux:", DoubleToStr(ld_36, 2), " lots:", DoubleToStr(ad_0, 2), " risk:", DoubleToStr(ad_8, 2), " stop:", DoubleToStr(ad_16, 2)); l_minlot_28 = MarketInfo(Symbol(), MODE_MINLOT); } if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.1) l_minlot_28 = NormalizeDouble(l_minlot_28, 1); if (l_minlot_28 < MarketInfo(Symbol(), MODE_MINLOT)) l_minlot_28 = MarketInfo(Symbol(), MODE_MINLOT); return (l_minlot_28); } int CloseAllTrades(int ai_0, int ai_4) { int l_count_24; int l_cmd_28; int l_error_32; int li_36 = 4; int li_40 = 5; int l_ord_total_20 = OrdersTotal(); string ls_44 = gs_384 + "-" + Symbol() + ">>CloseAllTrades"; for (int l_pos_16 = l_ord_total_20 - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { l_count_24 = 0; l_cmd_28 = OrderType(); while (l_count_24 < li_36) { if (TradeGate(ls_44, 1, ai_4, 5)) { switch (l_cmd_28) { case OP_BUY: if (ai_0 == 0 || ai_0 == gi_136) { RefreshRates(); OrderClose(OrderTicket(), OrderLots(), Bid, 0, White); } break; case OP_SELL: if (ai_0 == 0 || ai_0 == gi_140) { RefreshRates(); OrderClose(OrderTicket(), OrderLots(), Ask, 0, White); } break; case OP_BUYLIMIT: case OP_BUYSTOP: if (ai_0 == 0 || ai_0 == gi_136) OrderDelete(OrderTicket()); break; case OP_SELLLIMIT: case OP_SELLSTOP: if (ai_0 == 0 || ai_0 == gi_140) OrderDelete(OrderTicket()); } l_error_32 = GetLastError(); if (l_error_32 == 0/* NO_ERROR */) { TradeGate(ls_44, 0, ai_4, 0); l_count_24 = li_36; } else { l_count_24++; if (l_error_32 == 138/* REQUOTE */ || l_error_32 == 129/* INVALID_PRICE */) continue; if (l_error_32 == 146/* TRADE_CONTEXT_BUSY */) { MySleep(li_40); li_36 = 10; } } } else { l_count_24++; MySleep(li_40); } } } } else { Print("CloseAllTrades Error when order select ", GetLastError()); break; } } return (0); } int CloseBasket(int ai_0) { int l_count_20; int l_cmd_24; int l_error_28; int li_32 = 3; int li_36 = 2; string ls_40 = gs_384 + "-" + Symbol() + ">>CloseBasket"; int l_ord_total_16 = OrdersTotal(); if (TradeGate(ls_40, 1, ai_0, 20)) { for (int l_pos_8 = l_ord_total_16 - 1; l_pos_8 >= 0; l_pos_8--) { if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) { l_count_20 = 0; l_cmd_24 = OrderType(); while (l_count_20 < li_32) { Print("CLOSEBASKET: ", l_pos_8, " ", l_count_20, " ", l_cmd_24); OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); switch (l_cmd_24) { case OP_BUY: RefreshRates(); OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, White); break; case OP_SELL: RefreshRates(); OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, White); break; case OP_BUYLIMIT: case OP_BUYSTOP: case OP_SELLLIMIT: case OP_SELLSTOP: OrderDelete(OrderTicket()); } l_error_28 = GetLastError(); if (l_error_28 != 0/* NO_ERROR */) { MyAlerts("CloseBasket -" + Symbol() + " " + ErrorDescription(l_error_28), gi_252, gi_260, gi_304, gi_284, gi_292); MySleep(li_36); } else l_count_20 = li_32; l_count_20++; } } else { MyAlerts("CloseBasket -" + Symbol() + " " + ErrorDescription(GetLastError()), gi_252, gi_260, gi_304, gi_284, gi_292); break; } } TradeGate(ls_40, 0, ai_0, 0); } return (l_error_28); } int CloseOpenOrders(string as_0, int ai_8, int ai_12) { int l_magic_24; int l_cmd_40; int l_error_44; int li_unused_48; int li_unused_52; string l_symbol_80; int l_count_32 = 0; int li_36 = 4; int l_count_56 = 0; int li_60 = 500; int li_unused_68 = gi_308; int l_ord_total_20 = OrdersTotal(); if (l_ord_total_20 == 0) { Print("No open trades to close"); return (0); } string ls_72 = gs_384 + "-" + as_0 + ">>CloseOpenOrders"; if (TradeGate(ls_72, 1, ai_12, 5)) { for (int l_pos_16 = l_ord_total_20 - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) { if (ai_8 == 0) l_magic_24 = OrderMagicNumber(); else l_magic_24 = ai_8; if (as_0 == "ALL") l_symbol_80 = OrderSymbol(); else l_symbol_80 = as_0; if (l_symbol_80 == OrderSymbol() && l_magic_24 == OrderMagicNumber()) { l_count_32 = 0; l_cmd_40 = OrderType(); if (l_cmd_40 == OP_BUY) li_unused_52 = MarketInfo(OrderSymbol(), MODE_BID); else if (l_cmd_40 == OP_SELL) li_unused_52 = MarketInfo(OrderSymbol(), MODE_ASK); while (l_count_32 < li_36) { switch (l_cmd_40) { case OP_BUY: li_unused_48 = OrderLots(); RefreshRates(); OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 0, White); l_count_56++; break; case OP_SELL: li_unused_48 = OrderLots(); RefreshRates(); OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 0, White); l_count_56++; break; case OP_BUYLIMIT: case OP_BUYSTOP: OrderDelete(OrderTicket()); break; case OP_SELLLIMIT: case OP_SELLSTOP: OrderDelete(OrderTicket()); } TradeGate(ls_72, 0, ai_12, 0); l_error_44 = GetLastError(); if (l_error_44 == 0/* NO_ERROR */) l_count_32 = li_36; else { l_count_32++; MyAlerts("CloseOpenOrders -" + Symbol() + "- " + ErrorDescription(l_error_44), gi_252, gi_264, gi_304, gi_284, gi_292); if (l_error_44 == 138/* REQUOTE */ || l_error_44 == 129/* INVALID_PRICE */) Sleep(li_60 / 2.0); else { if (l_error_44 == 146/* TRADE_CONTEXT_BUSY */) { Sleep(li_60); li_36 = 10; } } } } } } } TradeGate(ls_72, 0, ai_12, 0); } MyAlerts("CloseOpenOrders -" + Symbol() + "- " + ErrorDescription(l_error_44) + " Tries: " + l_count_32, gi_256, gi_264, gi_304, gi_288, gi_292); return (l_error_44); } int CountOpenOrders(string a_symbol_0, int a_cmd_8, double ad_12, int a_magic_20) { bool li_28; int l_cmd_36; int l_count_44; int l_error_48; int l_magic_52; double l_ord_open_price_68; int li_unused_24 = 0; int l_count_56 = 0; int li_60 = 3; int li_64 = 500; int l_ord_total_40 = OrdersTotal(); for (int l_pos_32 = l_ord_total_40 - 1; l_pos_32 >= 0; l_pos_32--) { if (OrderSelect(l_pos_32, SELECT_BY_POS, MODE_TRADES)) { if (a_magic_20 == 0) l_magic_52 = a_magic_20; else l_magic_52 = OrderMagicNumber(); if ((OrderSymbol() == a_symbol_0 && l_magic_52 == a_magic_20) || (a_symbol_0 == "NULL" && l_magic_52 == a_magic_20)) { l_count_44 = 0; li_28 = FALSE; if (ad_12 == 0.0) l_ord_open_price_68 = ad_12; else l_ord_open_price_68 = OrderOpenPrice(); if (a_cmd_8 == g_cmd_124) l_cmd_36 = a_cmd_8; else l_cmd_36 = OrderType(); while (l_count_44 < li_60 && !li_28) { OrderSelect(l_pos_32, SELECT_BY_POS, MODE_TRADES); if (l_cmd_36 == a_cmd_8 && l_ord_open_price_68 == ad_12) { l_count_56++; break; } l_error_48 = GetLastError(); if (l_error_48 != 0/* NO_ERROR */) { Print("Error in checking open orders : " + l_error_48); Sleep(li_64); } else li_28 = TRUE; l_count_44++; } } } else { Print("Error - CountOpenOrders", GetLastError()); break; } } return (l_count_56); } int DeleteAllPending() { bool li_0; int l_cmd_8; int l_count_16; int l_error_20; int li_24 = 3; int li_28 = 250; int l_ord_total_12 = OrdersTotal(); for (int l_pos_4 = l_ord_total_12 - 1; l_pos_4 >= 0; l_pos_4--) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { l_count_16 = 0; li_0 = FALSE; l_cmd_8 = OrderType(); while (l_count_16 < li_24 && !li_0) { switch (l_cmd_8) { case OP_BUY: break; case OP_SELL: break; case OP_BUYLIMIT: case OP_BUYSTOP: OrderDelete(OrderTicket()); break; case OP_SELLLIMIT: case OP_SELLSTOP: OrderDelete(OrderTicket()); } l_error_20 = GetLastError(); if (l_error_20 != 0/* NO_ERROR */) { Print("Close Error : " + l_error_20); Sleep(li_28); } else li_0 = TRUE; l_count_16++; } } } else { Print("Error - DeleteAllPending ", GetLastError()); break; } } return (0); } double GetTradeData(string as_unused_0, int a_cmd_8, int a_magic_12, double &ada_16[]) { int l_error_28; double ld_ret_48; int li_unused_20 = 0; int l_count_32 = 0; int li_36 = 3; int li_40 = 500; int l_ord_total_44 = OrdersTotal(); if (l_ord_total_44 == 0) return (0); for (int l_pos_24 = l_ord_total_44 - 1; l_pos_24 >= 0; l_pos_24--) { if (OrderSelect(l_pos_24, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == a_magic_12 && a_cmd_8 == OrderType() || a_cmd_8 == g_cmd_124) { l_count_32 = 0; li_unused_20 = 0; while (l_count_32 < li_36) { ada_16[7] = OrderType(); ada_16[3] = OrderLots(); ada_16[0] = OrderOpenPrice(); ada_16[1] = OrderStopLoss(); ada_16[2] = OrderTakeProfit(); ada_16[6] = OrderOpenTime(); ada_16[5] = OrderProfit(); if (OrderType() == OP_BUY) ada_16[4] = (MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice()) / MarketInfo(OrderSymbol(), MODE_POINT); else { if (OrderType() == OP_SELL) ada_16[4] = (OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK)) / MarketInfo(OrderSymbol(), MODE_POINT); else ada_16[4] = 0; } l_error_28 = GetLastError(); if (l_error_28 != 0/* NO_ERROR */) { Print("Error in getting order data : " + l_error_28); Sleep(li_40); l_count_32++; } else { l_count_32 = li_36; return (ld_ret_48); } } } } } return (l_error_28); } double GetOrderLots(string a_symbol_0, int a_cmd_8, int a_magic_12) { int l_cmd_28; int l_magic_36; double l_ord_lots_40; string ls_unused_48; int li_unused_16 = 0; int l_ord_total_32 = OrdersTotal(); for (int l_pos_24 = l_ord_total_32 - 1; l_pos_24 >= 0; l_pos_24--) { if (OrderSelect(l_pos_24, SELECT_BY_POS, MODE_TRADES)) { if (a_cmd_8 == g_cmd_124) l_cmd_28 = a_cmd_8; else l_cmd_28 = OrderType(); if (a_magic_12 == 0) l_magic_36 = a_magic_12; else l_magic_36 = OrderMagicNumber(); if (OrderSymbol() == a_symbol_0 && l_magic_36 == a_magic_12 && l_cmd_28 == a_cmd_8) { l_ord_lots_40 = OrderLots(); l_pos_24 = 0; } } } return (l_ord_lots_40); } double GetOrderProfit(string a_symbol_0, int a_magic_8) { int li_unused_12 = 0; int li_unused_44 = 0; int li_unused_48 = 3; int li_unused_52 = 500; double ld_ret_56 = 0; int l_ord_total_28 = OrdersTotal(); for (int l_pos_20 = l_ord_total_28 - 1; l_pos_20 >= 0; l_pos_20--) { if (OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8) ld_ret_56 += OrderProfit(); } else { Print("Error - GetOrderProfit", GetLastError()); break; } } return (ld_ret_56); } int LotCalc(bool ai_0, int ai_4, double ad_8, double ad_16, int ai_24, double &ada_28[]) { double ld_60; double lda_84[10]; double lda_88[10]; int li_40 = 1; double ld_76 = 0; for (int l_index_32 = 0; l_index_32 < 10; l_index_32++) ada_28[l_index_32] = 0; double ld_52 = AccountEquity() * (ad_8 / 100.0); for (l_index_32 = 0; l_index_32 < ai_4; l_index_32++) { ld_60 = ad_16 - ai_24 * (l_index_32 + 1 - 1); if (ld_60 > 0.0) lda_84[l_index_32] = ld_60; else { ai_4--; break; } } if (ai_0) { li_40 = 1; for (l_index_32 = 0; l_index_32 < ai_4; l_index_32++) { lda_88[l_index_32] = lda_84[l_index_32] * li_40; ld_76 += lda_88[l_index_32]; li_40 *= 2; } } else { for (l_index_32 = 0; l_index_32 < ai_4; l_index_32++) { lda_88[l_index_32] = lda_84[l_index_32]; ld_76 += lda_88[l_index_32]; } } int l_index_36 = 0; ada_28[l_index_36] = ld_52; l_index_36++; ada_28[l_index_36] = ld_76; l_index_36++; for (l_index_32 = 0; l_index_32 < ai_4; l_index_32++) { ada_28[l_index_36] = ld_52 / ld_76 * lda_88[l_index_32] / lda_84[l_index_32]; l_index_36++; } return (ai_4); } int ManageStopLosses() { bool li_4; int l_count_16; int l_cmd_20; int l_error_24; int li_unused_28; int l_count_32 = 0; int li_36 = 3; int li_40 = 500; int l_ord_total_12 = OrdersTotal(); for (int l_pos_8 = l_ord_total_12 - 1; l_pos_8 >= 0; l_pos_8--) { if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { l_count_16 = 0; li_4 = FALSE; l_cmd_20 = OrderType(); while (l_count_16 < li_36 && !li_4) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); switch (l_cmd_20) { case OP_BUY: li_unused_28 = OrderLots(); if (Ask < OrderStopLoss()) OrderClose(OrderTicket(), OrderLots(), Bid, 20, White); l_count_32++; break; case OP_SELL: li_unused_28 = OrderLots(); if (Bid > OrderStopLoss()) OrderClose(OrderTicket(), OrderLots(), Ask, 20, White); l_count_32++; case OP_BUYLIMIT: break; case OP_BUYSTOP: break; case OP_SELLLIMIT: break; case OP_SELLSTOP: break; } l_error_24 = GetLastError(); if (l_error_24 != 0/* NO_ERROR */) { Print("Close Error : " + l_error_24); Sleep(li_40); } else li_4 = TRUE; l_count_16++; } } } else { Print("Error when order select ", GetLastError()); break; } } return (0); } int MoveStop(string a_symbol_0, int /**/ ai_unused_8, int /**/ ai_unused_12, double a_pips_16, bool ai_24, int ai_28) { int l_error_44; int l_magic_52; int l_cmd_56; double l_ord_open_price_80; bool li_ret_36 = FALSE; int l_count_60 = 0; int li_64 = 3; int li_unused_68 = 5; int li_72 = 500; int l_ord_total_76 = OrdersTotal(); double l_price_88 = 0; if (l_ord_total_76 == 0) return (0); for (int l_pos_40 = l_ord_total_76 - 1; l_pos_40 >= 0; l_pos_40--) { if (OrderSelect(l_pos_40, SELECT_BY_POS, MODE_TRADES)) { if (ai_28 == 0) l_magic_52 = OrderMagicNumber(); else l_magic_52 = ai_28; if (a_cmd_32 == g_cmd_124) l_cmd_56 = OrderType(); else l_cmd_56 = a_cmd_32; if (OrderSymbol() == a_symbol_0 && l_magic_52 == OrderMagicNumber() && l_cmd_56 == OrderType()) { l_count_60 = 0; li_ret_36 = FALSE; l_ord_open_price_80 = OrderOpenPrice(); if (OrderType() == OP_BUY) { if (Bid >= l_ord_open_price_80 + a_pips_16 * Point) l_price_88 = l_ord_open_price_80 + a_pips_16 * Point; else return (0); } else { if (OrderType() == OP_SELL) { if (Bid <= l_ord_open_price_80 - a_pips_16 * Point) { l_price_88 = l_ord_open_price_80 - a_pips_16 * Point; Print(DoubleToStr(Bid, Digits)); } else return (0); } } while (l_count_60 < li_64 && !li_ret_36) { if (ai_24) OrderModify(OrderTicket(), OrderOpenPrice(), a_pips_16, OrderTakeProfit(), 0, White); else OrderModify(OrderTicket(), OrderOpenPrice(), l_price_88, OrderTakeProfit(), 0, White); l_error_44 = GetLastError(); if (l_error_44 != 0/* NO_ERROR */) { Print("Error in moving stoploss : " + l_error_44); Sleep(li_72); l_count_60++; } else { li_ret_36 = TRUE; return (li_ret_36); } } } } } return (0); } int MyOrderSend(string a_symbol_0, int ai_8, double ad_12, double ad_20, double a_price_28, double a_price_36, string a_comment_44, int a_magic_52, int ai_56) { int li_unused_60; int l_ticket_88; int l_error_92; double l_lots_120; int li_unused_64 = 1; int li_unused_68 = 0; int li_unused_72 = 0; int li_unused_76 = 1; int li_unused_80 = 1; int li_unused_84 = 1; int l_count_96 = 0; int li_100 = 4; int l_slippage_104 = 0; int li_108 = 5; string ls_144 = gs_384 + "-" + a_symbol_0 + ">>MyOrderSend"; string l_var_name_136 = "Alert Log " + Symbol(); if (GlobalVariableCheck(l_var_name_136)) li_unused_60 = GlobalVariableGet(l_var_name_136); else { li_unused_60 = 0; GlobalVariableSet(l_var_name_136, 0); } li_unused_60 = 1; double ld_128 = ad_12; double l_ask_112 = ad_20; while (l_count_96 < li_100) { if (ld_128 > MarketInfo(a_symbol_0, MODE_MAXLOT)) { l_lots_120 = MarketInfo(a_symbol_0, MODE_MAXLOT); ld_128 -= l_lots_120; } else { if (ld_128 < MarketInfo(a_symbol_0, MODE_MINLOT)) l_lots_120 = MarketInfo(a_symbol_0, MODE_MINLOT); else l_lots_120 = ld_128; } if (TradeGate(ls_144, 1, ai_56, 5)) { switch (ai_8) { case 0: RefreshRates(); l_ask_112 = MarketInfo(a_symbol_0, MODE_ASK); l_ticket_88 = OrderSend(a_symbol_0, OP_BUY, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, Lime); break; case 1: RefreshRates(); l_ask_112 = MarketInfo(a_symbol_0, MODE_BID); l_ticket_88 = OrderSend(a_symbol_0, OP_SELL, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, Orange); break; case 2: l_ticket_88 = OrderSend(a_symbol_0, OP_BUYLIMIT, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, RoyalBlue); break; case 3: l_ticket_88 = OrderSend(a_symbol_0, OP_SELLLIMIT, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, Crimson); break; case 4: l_ticket_88 = OrderSend(a_symbol_0, OP_BUYSTOP, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, RoyalBlue); break; case 5: l_ticket_88 = OrderSend(a_symbol_0, OP_SELLSTOP, l_lots_120, l_ask_112, l_slippage_104, a_price_28, a_price_36, a_comment_44, a_magic_52, 0, Crimson); } TradeGate(ls_144, 0, ai_56, 0); l_error_92 = GetLastError(); if (l_error_92 == 0/* NO_ERROR */) { l_count_96 = li_100; MyAlerts("MyOrderSend -" + Symbol() + "- " + ErrorDescription(l_error_92) + " - " + DoubleToStr(ad_12, 2) + " " + ai_8 + " " + DoubleToStr(l_ask_112, Digits) + " " + DoubleToStr(a_price_28, Digits) + " " + DoubleToStr(a_price_36, Digits) + " <" + a_comment_44 + "> " + a_magic_52 + " ", gi_256, gi_264, gi_304, gi_284, gi_292); } else { l_count_96++; MyAlerts("MyOrderSend -" + Symbol() + "- " + ErrorDescription(l_error_92) + " - " + DoubleToStr(ad_12, 2) + " " + ai_8 + " " + DoubleToStr(l_ask_112, Digits) + " " + DoubleToStr(a_price_28, Digits) + " " + DoubleToStr(a_price_36, Digits) + " <" + a_comment_44 + "> " + a_magic_52 + " ", gi_252, gi_264, gi_304, gi_288, gi_292); if (!(l_error_92 == 138/* REQUOTE */) && !(l_error_92 == 129/* INVALID_PRICE */)) if (l_error_92 == 146/* TRADE_CONTEXT_BUSY */) li_100 = 10; MySleep(li_108); l_ticket_88 = -1; } } else { l_count_96++; l_ticket_88 = -1; MySleep(li_108); } } return (l_ticket_88); } int OpenPendingOrders() { bool li_4; int l_cmd_12; int l_count_24; int l_error_28; bool li_ret_0 = FALSE; int li_32 = 3; int li_36 = 250; int l_ord_total_16 = OrdersTotal(); for (int l_pos_8 = l_ord_total_16 - 1; l_pos_8 >= 0; l_pos_8--) { if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { l_count_24 = 0; li_4 = FALSE; l_cmd_12 = OrderType(); while (l_count_24 < li_32 && !li_4) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); switch (l_cmd_12) { case OP_BUYLIMIT: case OP_BUYSTOP: case OP_SELLLIMIT: case OP_SELLSTOP: li_ret_0 = TRUE; } l_error_28 = GetLastError(); if (l_error_28 != 0/* NO_ERROR */) { Print("Error in checking open pendings : " + l_error_28); Sleep(li_36); } else li_4 = TRUE; l_count_24++; } } } else { Print("Error when order select checking open pendings", GetLastError()); break; } } return (li_ret_0); } int PlaceStack(bool aba_0[], int aia_4[], double ada_8[], string a_str_concat_12) { double ld_48; double l_price_72; double ld_88; double ld_96; string l_str_concat_140; bool li_36 = FALSE; double ld_112 = 0; double ld_120 = 0; double ld_128 = 0; double lda_136[] = {1, 2, 4, 8, 16, 32}; int li_32 = aia_4[1]; double ld_104 = ada_8[5]; if (aia_4[0] == gi_136) { a_str_concat_12 = StringConcatenate(a_str_concat_12, " LONG Stack " + aia_4[4]); l_str_concat_140 = StringConcatenate(l_str_concat_140, " LONG"); } else { if (aia_4[0] == gi_140) { a_str_concat_12 = StringConcatenate(a_str_concat_12, " SHORT Stack " + aia_4[4]); l_str_concat_140 = StringConcatenate(l_str_concat_140, " SHORT"); } else { Alert("No stack direction chosen "); return (0); } } if (ada_8[0] == 0.0) { ld_128 = AccountEquity() * (gd_456 / 100.0) / 50.0 / aia_4[2]; if (!aba_0[0]) { if (aia_4[1] > 10) li_32 = 10; for (int l_index_20 = 0; l_index_20 < li_32; l_index_20++) ld_120 += lda_136[l_index_20]; if (aia_4[3] > 1) ld_120 += aia_4[3] - 1; gd_432 = ld_128 / ld_120; } else { if (aia_4[1] > 10) li_32 = 10; if (aia_4[3] > 1) ld_120 = li_32 + (aia_4[3] - 1); else ld_120 = li_32; if (ld_120 > 0.0) gd_432 = ld_128 / ld_120; } } else gd_432 = ada_8[0]; Print("deep : ", ld_120); if (gd_440 == 0.0) gd_440 = 20; if (aia_4[5] == 0 && li_32 > 1) ld_96 = NormalizeDouble(ld_104 / (li_32 - 1) * Point, Digits); else ld_96 = aia_4[5] * Point; if (aia_4[0] == gi_136) { l_price_72 = Ask; ld_48 = l_price_72 - ld_96 * (li_32 - 1) - ada_8[1] * Point; } else { if (aia_4[0] == gi_140) { l_price_72 = Bid; ld_48 = l_price_72 + ld_96 * (li_32 - 1) + ada_8[1] * Point; } } double ld_80 = l_price_72; Print(l_price_72, " ", ld_96, " ", li_32, " ", ada_8[1]); switch (aia_4[0]) { case 2: for (l_index_20 = 1; l_index_20 <= li_32; l_index_20++) { if (l_index_20 == 1) { for (int l_count_24 = 0; l_count_24 < aia_4[3]; l_count_24++) { if (l_count_24 == 0 && ada_8[3] > 0.0) ld_88 = Ask + ada_8[3] * Point; else { if (l_count_24 == 1 && ada_8[4] > 0.0) ld_88 = Ask + ada_8[4] * Point; else ld_88 = 0; } } } else ld_88 = ld_80 + ada_8[3] * Point; if (!aba_0[0]) gd_432 = 2.0 * gd_432; ld_112 += gd_432; li_36 = li_36 + 10000.0 * (ld_80 - ld_48); ld_80 -= ld_96; } break; case 1: for (l_index_20 = 1; l_index_20 <= li_32; l_index_20++) { if (l_index_20 == 1) { for (l_count_24 = 0; l_count_24 < aia_4[3]; l_count_24++) { if (l_count_24 == 0 && ada_8[3] > 0.0) ld_88 = Bid - ada_8[3] * Point; else { if (l_count_24 == 1 && ada_8[4] > 0.0) ld_88 = Bid - ada_8[4] * Point; else ld_88 = 0; } } } else ld_88 = ld_80 - ada_8[3] * Point; if (!aba_0[0]) gd_432 = 2.0 * gd_432; ld_112 += gd_432; li_36 = li_36 + 10000.0 * (ld_48 - ld_80); ld_80 += ld_96; } case 0: break; } return (0); } double LotValue(string a_symbol_0) { bool li_12; int l_count_40; int l_error_44; int li_unused_8 = 0; int li_unused_36 = 0; int li_48 = 3; int li_52 = 500; double ld_ret_56 = 0; int l_ord_total_24 = OrdersTotal(); for (int l_pos_16 = l_ord_total_24 - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == a_symbol_0) { l_count_40 = 0; li_12 = FALSE; while (l_count_40 < li_48 && !li_12) { ld_ret_56 = MathAbs(OrderProfit()) / OrderLots() / (MathAbs(OrderOpenPrice() - MarketInfo(a_symbol_0, MODE_BID)) / Point); l_error_44 = GetLastError(); if (l_error_44 != 0/* NO_ERROR */) { Print("Error in checking basket total lots : " + l_error_44); Sleep(li_52); } else li_12 = TRUE; l_count_40++; } } } else { Print("Error in checking basket total lots : ", GetLastError()); break; } } return (ld_ret_56); } int PartialClose1(string a_symbol_0, double ad_8, double ad_16, int a_cmd_24, int a_magic_28) { int l_error_60; int l_magic_64; int l_cmd_68; int l_ticket_76; int l_cmd_80; int l_pos_84; int lia_108[100]; int lia_112[100]; double l_ord_lots_120; double l_ord_profit_136; double l_price_152; double l_ord_profit_160; bool li_32 = FALSE; bool li_36 = FALSE; int li_unused_88 = 0; int l_count_92 = 0; int li_unused_96 = 0; int li_unused_100 = 3; int li_104 = 500; int l_ord_total_116 = OrdersTotal(); double ld_168 = 0; double ld_176 = 0; double ld_unused_184 = 0; double ld_unused_192 = 0; double ld_unused_200 = 0; if (l_ord_total_116 == 0) return (0); while (!li_36) { l_ord_profit_160 = 1000; l_pos_84 = 0; for (int l_pos_44 = 0; l_pos_44 < l_ord_total_116; l_pos_44++) { OrderSelect(l_pos_44, SELECT_BY_POS, MODE_TRADES); if (a_magic_28 > 0) l_magic_64 = OrderMagicNumber(); else l_magic_64 = 0; if (a_cmd_24 == g_cmd_124) l_cmd_80 = OrderType(); else l_cmd_80 = a_cmd_24; if (OrderSymbol() == a_symbol_0 && l_magic_64 == a_magic_28 && l_cmd_80 == OrderType()) { if (OrderProfit() < l_ord_profit_160) { l_ord_profit_160 = OrderProfit(); l_pos_84 = l_pos_44; } } } iCustom(NULL, 0, "Debug", "big loss " + DoubleToStr(l_ord_profit_160, 2) + " vOrders " + l_ord_total_116 + " ptr " + l_pos_84 + " magic " + l_magic_64, 15134970, gs_tradelib_404, 1, 0); OrderSelect(l_pos_84, SELECT_BY_POS, MODE_TRADES); if ((ld_168 < ad_8 && ad_8 > 0.0) || ((-ld_176) < ad_16 && ad_16 > 0.0)) { li_32 = FALSE; l_ord_lots_120 = OrderLots(); l_ord_profit_136 = OrderProfit(); iCustom(NULL, 0, "Debug", DoubleToStr(ld_176, 2) + " " + DoubleToStr(l_ord_profit_136, 2) + " " + DoubleToStr(ad_16, 2), 15134970, gs_tradelib_404, 1, 0); if ((-ld_176) >= ad_16 || l_ord_profit_136 >= 0.0 || OrdersTotal() == 0) { iCustom(NULL, 0, "Debug", " all done, orders left " + OrdersTotal() + " vProfit " + DoubleToStr(l_ord_profit_136, 2), 16777215, gs_tradelib_404, 1, 0); iCustom(NULL, 0, "Debug", " ", 16777215, gs_tradelib_404, 1, 0); li_32 = TRUE; li_36 = TRUE; } else { if (-(l_ord_profit_136 + ld_176) > ad_16) { if (l_cmd_68 == OP_BUY) l_price_152 = MarketInfo(a_symbol_0, MODE_BID); else if (l_cmd_68 == OP_SELL) l_price_152 = MarketInfo(a_symbol_0, MODE_ASK); } l_count_92 = 0; } while (!li_32) { l_cmd_68 = OrderType(); RefreshRates(); l_ticket_76 = OrderTicket(); if (l_cmd_68 == OP_BUY) l_price_152 = MarketInfo(a_symbol_0, MODE_BID); else if (l_cmd_68 == OP_SELL) l_price_152 = MarketInfo(a_symbol_0, MODE_ASK); l_price_152 = OrderClosePrice(); if (OrderClose(l_ticket_76, l_ord_lots_120, OrderClosePrice(), 3, White)) { li_32 = TRUE; ld_168 += l_ord_lots_120; ld_176 += l_ord_profit_136; } else { l_error_60 = GetLastError(); if (l_error_60 == 146/* TRADE_CONTEXT_BUSY */) Sleep(li_104); else { if (l_count_92 < 5) l_count_92++; else li_32 = TRUE; } } iCustom(NULL, 0, "Debug", "data: " + l_ticket_76 + " " + DoubleToStr(l_ord_lots_120, 2) + " " + DoubleToStr(l_price_152, 2) + " " + l_error_60, 16711935, gs_tradelib_404, 1, 0); } } else { li_36 = TRUE; iCustom(NULL, 0, "Debug", " all done, profit used up", 16777215, gs_tradelib_404, 1, 0); iCustom(NULL, 0, "Debug", " ", 16777215, gs_tradelib_404, 1, 0); } iCustom(NULL, 0, "Debug", l_pos_84 + " " + l_ord_total_116 + " " + "l: " + DoubleToStr(ld_168, 2) + " $ : " + DoubleToStr(l_ord_profit_136, 2) + " $cl: " + DoubleToStr(ld_176, 2) + " " + li_32 + " " + li_36, 65535, gs_tradelib_404, 1, 0); } return (0); } bool TradeGate(string as_0, int ai_8, int ai_12, int ai_16) { string ls_32; bool li_ret_28 = FALSE; int l_datetime_24 = TimeLocal(); string ls_40 = "Signout" + DayOfYear(); if (ai_8 == 1) { if (!GlobalVariableSetOnCondition("$Trade", ai_12, 0)) { ls_32 = as_0 + " / Trade Gate Collision / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); GlobalVariableSet("$TradeCollision", GlobalVariableGet("$TradeCollision") + 1.0); if (l_datetime_24 > GlobalVariableGet("$TradeTime") + GlobalVariableGet("$TradeTimeOut")) { GlobalVariableSet("$Trade", ai_12); GlobalVariableSet("$TradeTime", l_datetime_24); GlobalVariableSet("$TradeKeyTime", ai_16); ls_32 = as_0 + " / TRADE GATE TIMEOUT >> KEY TAKEN / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } else li_ret_28 = FALSE; } else { GlobalVariableSet("$TradeCollision", 0); GlobalVariableSet("$TradeTime", l_datetime_24); GlobalVariableSet("$TradeKeyTime", ai_16); li_ret_28 = TRUE; ls_32 = as_0 + " / Setting Trade Gate / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); } } else { if (ai_8 == 4) { if (GlobalVariableGet("$Trade") == 0.0) { ls_32 = as_0 + " / Keycheck, key is back / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } else { if (ai_12 == GlobalVariableGet("$Trade")) { if (l_datetime_24 > GlobalVariableGet("$TradeTime") + GlobalVariableGet("$TradeKeyTime")) { GlobalVariableSet("$TradeTime", 0); GlobalVariableSet("$TradeKeyTime", 0); ls_32 = as_0 + " / Keycheck, putting key back / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } } else { ls_32 = as_0 + " / Keycheck Wrong ID / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } } } else { if (ai_8 == 0) { GlobalVariableSet("$Trade", 0); GlobalVariableSet("$TradeTime", 0); GlobalVariableSet("$TradeKeyTime", 0); ls_32 = as_0 + " / Freeing Trade Gate / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } else { if (ai_8 == 3) { GlobalVariableSet("$Trade", 0); GlobalVariableSet("$TradeCollision", 0); GlobalVariableSet("$TradeTime", 0); GlobalVariableSet("$TradeKeyTime", 0); if (!GlobalVariableCheck("$TradeTimeOut")) GlobalVariableSet("$TradeTimeOut", 60); ls_32 = as_0 + " / Clearing Trade Gate / id:" + ai_12 + " kt:" + ai_16; Log(ls_40, ls_32, 0); li_ret_28 = TRUE; } } } } return (li_ret_28); } int TradeOn(string as_0, int a_cmd_8, int ai_12) { int l_error_36; int l_cmd_40; int l_magic_56; string l_symbol_64; bool li_ret_16 = FALSE; int li_unused_48 = 0; int li_52 = 3; int li_60 = 500; int l_ord_total_24 = OrdersTotal(); for (int l_pos_20 = l_ord_total_24 - 1; l_pos_20 >= 0; l_pos_20--) { if (OrderSelect(l_pos_20, SELECT_BY_POS)) { GetLastError(); if (ai_12 == 0) l_magic_56 = OrderMagicNumber(); else l_magic_56 = ai_12; if (as_0 == "ALL") l_symbol_64 = OrderSymbol(); else l_symbol_64 = as_0; if (a_cmd_8 == g_cmd_124) l_cmd_40 = OrderType(); else l_cmd_40 = a_cmd_8; if (OrderSymbol() == l_symbol_64 && OrderMagicNumber() == l_magic_56) { for (int l_count_32 = 0; l_count_32 < li_52; l_count_32++) { if (l_cmd_40 == OrderType()) { li_ret_16 = TRUE; l_pos_20 = 0; } else li_ret_16 = FALSE; l_error_36 = GetLastError(); if (l_error_36 != 0/* NO_ERROR */) { Print("Trade On error checking trade types : " + l_error_36); Sleep(li_60); } else l_count_32 = li_52; } } } else { Print("Error in Trade On function ", ErrorDescription(l_error_36)); break; } } return (li_ret_16); } int TradeToday(string as_0, int a_cmd_8, int ai_12, int ai_16) { bool li_20; int l_count_40; int l_error_44; int l_magic_60; int li_unused_24 = 0; int l_cmd_48 = -1; int li_unused_52 = 0; int li_56 = 3; int l_count_64 = 0; int li_68 = 100; int l_datetime_72 = TimeCurrent(); int l_hist_total_32 = OrdersHistoryTotal(); if (StrToInteger(as_0) == 0) as_0 = Symbol(); for (int l_pos_28 = l_hist_total_32 - 1; l_pos_28 >= 0; l_pos_28--) { if (OrderSelect(l_pos_28, SELECT_BY_POS, MODE_HISTORY)) { if (ai_12 == 0) l_magic_60 = OrderMagicNumber(); else l_magic_60 = ai_12; if (a_cmd_8 == -1) l_cmd_48 = a_cmd_8; else l_cmd_48 = OrderType(); if (OrderSymbol() == as_0 && OrderMagicNumber() == l_magic_60) { l_count_40 = 0; li_20 = FALSE; while (l_count_40 < li_56 && !li_20) { if (l_cmd_48 == a_cmd_8 && TimeToStr(OrderCloseTime(), TIME_DATE) == TimeToStr(l_datetime_72, TIME_DATE)) { l_count_64++; if (l_count_64 >= ai_16) return (1); } else li_unused_24 = 0; l_error_44 = GetLastError(); if (l_error_44 != 0/* NO_ERROR */) { Print("Error in checking trade types : " + l_error_44); Sleep(li_68); } else li_20 = TRUE; l_count_40++; } } } } return (0); } int NeedRescue(string as_0, int a_cmd_8, int ai_12, int ai_16) { bool li_20; int l_count_40; int l_error_44; int l_magic_60; int li_unused_24 = 0; int l_cmd_48 = -1; int li_unused_52 = 0; int li_56 = 3; int li_unused_64 = 0; int li_68 = 100; int l_datetime_72 = TimeCurrent(); int l_hist_total_32 = OrdersHistoryTotal(); if (StrToInteger(as_0) == 0) as_0 = Symbol(); for (int l_pos_28 = l_hist_total_32 - 1; l_pos_28 >= 0; l_pos_28--) { if (OrderSelect(l_pos_28, SELECT_BY_POS, MODE_HISTORY)) { if (ai_12 == 0) l_magic_60 = OrderMagicNumber(); else l_magic_60 = ai_12; if (a_cmd_8 == -1) l_cmd_48 = a_cmd_8; else l_cmd_48 = OrderType(); if (OrderSymbol() == as_0 && OrderMagicNumber() == l_magic_60) { l_count_40 = 0; li_20 = FALSE; while (l_count_40 < li_56 && !li_20) { if (l_cmd_48 == a_cmd_8 && TimeToStr(OrderCloseTime(), TIME_DATE) == TimeToStr(l_datetime_72, TIME_DATE)) { if (OrderType() == OP_BUY) if (OrderClosePrice() - OrderOpenPrice() <= ai_16 * Point) return (1); if (OrderType() == OP_SELL) if (OrderOpenPrice() - OrderClosePrice() <= (-ai_16) * Point) return (1); } else li_unused_24 = 0; l_error_44 = GetLastError(); if (l_error_44 != 0/* NO_ERROR */) { Print("Error in checking trade types : " + l_error_44); Sleep(li_68); } else li_20 = TRUE; l_count_40++; } } } } return (0); }