extern string CloveriX_works_on__________ = " ====== EURGBP and EURCHF ===== "; extern double Risk = 0.25; extern double MaxTP = 10.0; extern string Trading_Hours_Settings_______ = "[ GMT_Offset = Market Watch - GMT ]"; extern int GMT_Offset = 0; extern string ADDITIONAL_SETTINGS______ = "==============================="; extern bool VariableSpreads = FALSE; extern double VarSpreadFix = 3.0; extern bool PlaceExternalTP = FALSE; extern bool CloseOnlyByExtTP = FALSE; extern bool Spread5PipsAlert = FALSE; extern bool ErrorAlert = FALSE; extern bool UseFixedSL = FALSE; extern double FixedSL = 0.0; int g_error_160; bool gi_164; bool gi_168; bool gi_172; int gi_176; int gi_180; int g_slippage_184; int g_slippage_188; int gi_192 = 4; double gda_196[3]; double gda_200[3]; double gd_204; double gd_212; double gd_220; double gd_228; double gd_236; double gd_244; double gd_252; double g_ima_260; double g_ima_268; double g_ima_276; double g_irsi_284; double g_irsi_292; double g_iwpr_300; double g_iwpr_308; double gd_324; double gd_332; double gd_340; double g_price_348; double gd_356; double g_datetime_372; double gd_388; double gd_396; double gd_404; double g_digits_412; double gd_420; double g_ima_428; string gs_436; bool gi_unused_444 = FALSE; int init() { gs_436 = StringSubstr(Symbol(), 0, 6); gd_244 = 10000.0 * (Ask - Bid); if (gs_436 == "EURCHF" || gs_436 != "EURGBP" && Period() == PERIOD_M15) Coment(); gi_176 = GMT_Offset + 21; gi_180 = GMT_Offset + 23; g_digits_412 = Digits; if (gi_176 > 23) gi_176 -= 24; if (gi_180 > 23) gi_180 -= 24; CleanFiles(); g_datetime_372 = iTime(NULL, PERIOD_M15, 1); MaxTP /= 10000.0; FixedSL /= 10000.0; g_slippage_184 = 0; g_slippage_188 = 1; if (PlaceExternalTP == TRUE && CloseOnlyByExtTP == TRUE) gi_unused_444 = TRUE; return (0); } int CleanFiles() { int l_file_0; while (true) { l_file_0 = FileOpen("DDLinker\\Send Cloverix_" + gs_436 + ".sbk", FILE_WRITE, ';'); if (l_file_0 > -1) FileClose(l_file_0); if (l_file_0 <= 0) continue; break; } while (true) { l_file_0 = FileOpen("DDLinker\\Receive Cloverix_" + gs_436 + ".sbk", FILE_WRITE, ';'); if (l_file_0 > -1) FileClose(l_file_0); if (l_file_0 <= 0) continue; break; } return (0); } int start() { if ((gs_436 != "EURCHF" && gs_436 != "EURGBP") || Period() != PERIOD_M15) { Alert("WRONG TRADING PAIR OR TIMEFRAME"); return; } if (!IsExpertEnabled()) { Alert("EXPERTS ARE NOT ALLOWED"); return; } Coment(); HideTestIndicators(TRUE); if (gi_176 < gi_180 && Hour() > gi_180 || Hour() < gi_176 && OrdersTotal() == 0) return; if (gi_176 > gi_180 && (Hour() > gi_180 && Hour() < gi_176) && OrdersTotal() == 0) return; gi_164 = FALSE; gi_168 = FALSE; gi_172 = FALSE; g_error_160 = GetLastError(); if (FixedSL < gd_236 + gd_252 && UseFixedSL) { Alert("Incorrect FixedSL. Check parameters."); return; } gd_236 = MathMax(MarketInfo(Symbol(), MODE_STOPLEVEL), MarketInfo(Symbol(), MODE_FREEZELEVEL)) / 10000.0; RefreshRates(); gda_196[0] = High[1]; gda_196[1] = High[2]; gda_196[2] = High[3]; gda_196[3] = High[4]; gda_200[0] = Low[1]; gda_200[1] = Low[2]; gda_200[2] = Low[3]; gda_200[3] = Low[4]; gd_244 = 10000.0 * (Ask - Bid); gd_252 = Ask - Bid; g_ima_260 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 1); g_ima_268 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 2); g_ima_276 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 3); g_ima_428 = iMA(NULL, 0, 18, 0, MODE_SMA, PRICE_MEDIAN, 0); g_irsi_284 = iRSI(NULL, 0, 7, PRICE_OPEN, 0); g_irsi_292 = iRSI(NULL, 0, 7, PRICE_OPEN, 1); g_iwpr_300 = iWPR(NULL, 0, 14, 0); g_iwpr_308 = iWPR(NULL, 0, 14, 1); if (VariableSpreads == TRUE) { gd_356 = VarSpreadFix / 10000.0; gi_192 = 6; } else gd_356 = Ask - Bid; if (iBarShift(NULL, PERIOD_M15, g_datetime_372, FALSE) != 0) { gd_324 = 0; g_datetime_372 = TimeCurrent(); while (gd_324 == 0.0) { gd_236 = MathMax(MarketInfo(Symbol(), MODE_STOPLEVEL), MarketInfo(Symbol(), MODE_FREEZELEVEL)) / 10000.0; RefreshRates(); gda_196[0] = High[1]; gda_196[1] = High[2]; gda_196[2] = High[3]; gda_200[0] = Low[1]; gda_200[1] = Low[2]; gda_200[2] = iLow(NULL, PERIOD_M15, 3); gd_244 = 10000.0 * (Ask - Bid); gd_252 = Ask - Bid; g_ima_260 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 1); g_ima_268 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 2); g_ima_276 = iMA(NULL, 0, 9, 0, MODE_SMA, PRICE_MEDIAN, 3); g_irsi_284 = NormalizeDouble(iRSI(NULL, 0, 7, PRICE_OPEN, 0), 4); g_irsi_292 = NormalizeDouble(iRSI(NULL, 0, 7, PRICE_OPEN, 1), 4); g_iwpr_300 = NormalizeDouble(iWPR(NULL, 0, 14, 0), 4); g_iwpr_308 = NormalizeDouble(iWPR(NULL, 0, 14, 1), 4); if (VariableSpreads == TRUE) { gd_356 = VarSpreadFix / 10000.0; gi_192 = 6; } else gd_356 = Ask - Bid; CleanFiles(); SendInfo(); GetInfo(); if (iBarShift(NULL, PERIOD_M15, g_datetime_372, FALSE) != 0) gd_324 = 0; } } gi_164 = FALSE; gi_168 = FALSE; gi_172 = FALSE; CHF(); gi_164 = FALSE; gi_168 = FALSE; gi_172 = FALSE; GBP(); if (g_error_160 >= 2/* COMMON_ERROR */ && g_error_160 != 130/* INVALID_STOPS */ && g_error_160 != 4099/* END_OF_FILE */ && g_error_160 != 4108/* INVALID_TICKET */ && g_error_160 != 4103/* CANNOT_OPEN_FILE */ && g_error_160 != 4051/* INVALID_FUNCTION_PARAMETER_VALUE */ && ErrorAlert == TRUE) Alert("error # ", g_error_160, " Find a definition here http://docs.mql4.com/constants/errors"); return (0); } int SendInfo() { int l_file_0; for (int l_error_8 = 4100; l_error_8 >= 4099/* END_OF_FILE */ && l_error_8 < 4105/* NO_ORDER_SELECTED */; l_error_8 = GetLastError()) { l_file_0 = FileOpen("DDLinker\\Send Cloverix_" + gs_436 + ".sbk", FILE_WRITE, ';'); if (l_file_0 > -1) FileWrite(l_file_0, gd_228, gd_220, g_ima_260, g_ima_268, g_ima_276, g_irsi_284, g_irsi_292, g_iwpr_300, g_iwpr_308, gda_196[0], gda_196[1], gda_196[2], gda_200[0], gda_200[1], gda_200[2]); if (l_file_0 > -1) FileClose(l_file_0); } return (0); } int GetInfo() { int l_file_0; string ls_unused_4; double l_datetime_12 = TimeCurrent(); while (gd_324 == 0.0) { l_file_0 = FileOpen("DDLinker\\Receive Cloverix_" + gs_436 + ".sbk", FILE_READ, ';'); if (l_file_0 > -1) gd_324 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); if (gd_324 == 0.0 && l_file_0 > -1) FileClose(l_file_0); if (TimeCurrent() - l_datetime_12 > 60.0) { l_datetime_12 = TimeCurrent(); Alert("Can not connect to EAProtector-CloveriX for more than 60 seconds. Try to restart MT4 and EAProtector-CloveriX"); } } gd_340 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); gd_404 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), g_digits_412); gd_388 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), g_digits_412); gd_396 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), g_digits_412); gd_204 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); gd_212 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); gd_228 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); gd_220 = NormalizeDouble(StrToDouble(FileReadString(l_file_0)), 5); FileClose(l_file_0); while (true) { l_file_0 = FileOpen("DDLinker\\Receive Cloverix_" + gs_436 + ".sbk", FILE_WRITE, ';'); if (l_file_0 > -1) FileClose(l_file_0); if (l_file_0 <= 0) continue; break; } gd_332 = gd_324 + 0.0001; g_price_348 = gd_340 - 0.0001; return (0); } double Lot() { double ld_0 = NormalizeDouble(AccountBalance() / 1000.0 * Risk, 2); ld_0 = MarketInfo(Symbol(), MODE_LOTSTEP) * NormalizeDouble(ld_0 / MarketInfo(Symbol(), MODE_LOTSTEP), 0); ld_0 = MathMin(MarketInfo(Symbol(), MODE_MAXLOT), ld_0); ld_0 = MathMax(MarketInfo(Symbol(), MODE_MINLOT), ld_0); return (ld_0); } int Coment() { Comment("------------------", "\n", "CloveriX is Enabled", "\n", "------------------", "\n", "======= SERVER TIME =======", "\n", "Trading Start Hour: ", gi_176, ":00", "\n", "Trading End Hour: ", gi_180, ":00", "\n", "------------------", "\n", "Risk = ", 100.0 * Risk, "%", "\n", "TradingLot = ", Lot(), "\n", "Current Spread = ", gd_244, "\n", "Max Available Spread = ", gi_192); return (0); } int OC(double a_price_0) { OrderClose(OrderTicket(), OrderLots(), a_price_0, g_slippage_188, Red); return (0); } int OrderModif() { for (int l_pos_0 = OrdersTotal() - 1; l_pos_0 >= 0; l_pos_0--) { if (OrderSelect(l_pos_0, SELECT_BY_POS) == TRUE && OrderMagicNumber() == 318200 || OrderMagicNumber() == 318201 && StringSubstr(OrderSymbol(), 0, 6) == gs_436) { gi_164 = TRUE; RefreshRates(); if (OrderType() == OP_BUY) { if ((gda_196[0] + 0.0003 <= g_ima_260 && Bid >= gda_196[0] - 0.0001) || (gda_196[0] <= g_ima_260 && gda_196[1] <= g_ima_268 && gda_196[2] <= g_ima_276 && Bid >= gda_196[0])) { OC(Bid); gd_420 = 1; return; } if (Bid > g_price_348 - 0.00001 && CloseOnlyByExtTP == FALSE) { OC(Bid); return; } if (Bid >= gda_196[0] && gda_196[0] <= gda_196[1] && gda_196[1] <= gda_196[2] && gda_196[2] <= gda_196[3] && g_ima_260 <= g_ima_276 && gs_436 == "EURGBP") { OC(Bid); gd_420 = 1; return; } if (g_price_348 - OrderOpenPrice() > MaxTP && g_price_348 - Bid >= gd_236 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + MaxTP, 0, CLR_NONE); if (g_price_348 - OrderOpenPrice() <= MaxTP && g_price_348 != OrderTakeProfit() && g_price_348 - Bid >= gd_236 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), g_price_348, 0, CLR_NONE); if (Bid - OrderOpenPrice() > MaxTP - 0.00001 && CloseOnlyByExtTP == FALSE) { OC(Bid); return; } if (OrderOpenPrice() - Low[0] >= 0.001 && OrderOpenPrice() - Bid <= (OrderOpenPrice() - Low[0]) / 2.0) { OC(Bid); gd_420 = 1; } } if (OrderType() == OP_SELL) { if ((gda_200[0] - 0.0003 >= g_ima_260 && Bid <= gda_200[0] + 0.0001) || (gda_200[0] >= g_ima_260 && gda_200[1] >= g_ima_268 && gda_200[2] >= g_ima_276 && Bid <= gda_200[0])) { OC(Ask); gd_420 = 2; return; } if (Ask - gd_356 < gd_332 + 0.00001 && CloseOnlyByExtTP == FALSE) { OC(Ask); return; } if (Bid <= gda_200[0] && gda_200[0] >= gda_200[1] && gda_200[1] >= gda_200[2] && gda_200[2] >= gda_200[3] && g_ima_260 >= g_ima_276 && gs_436 == "EURGBP") { OC(Ask); gd_420 = 2; return; } if (OrderOpenPrice() - gd_332 - gd_356 > MaxTP && Ask - gd_332 - gd_356 >= gd_236 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - MaxTP, 0, CLR_NONE); if (OrderOpenPrice() - gd_332 - gd_356 <= MaxTP && gd_332 + gd_356 != OrderTakeProfit() && Ask - gd_332 - gd_356 >= gd_236 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), gd_332 + gd_356, 0, CLR_NONE); if (OrderOpenPrice() - Ask > MaxTP - 0.00001 && CloseOnlyByExtTP == FALSE) { OC(Ask); return; } if (High[0] - OrderOpenPrice() >= 0.001 && Ask - OrderOpenPrice() <= (High[0] - OrderOpenPrice()) / 2.0) { OC(Ask); gd_420 = 2; } } } } return (0); } int CheckParam() { if (gd_244 >= gi_192 + 1 && Spread5PipsAlert == TRUE) Alert("Spread is higher than ", gi_192, " pips - NO TRADE"); if ((DayOfWeek() == 5 && Hour() > 12) || (DayOfWeek() == 1 && Hour() < 12)) gi_168 = TRUE; if (gi_176 > gi_180 && Hour() >= gi_176 || Hour() < gi_180) gi_172 = TRUE; if (gi_176 < gi_180 && (Hour() >= gi_176 && Hour() < gi_180)) gi_172 = TRUE; return (0); } string GBP() { double l_price_0; if (gs_436 != "EURGBP" || DayOfWeek() == 0) return; Coment(); CheckParam(); OrderModif(); if (gi_164 != TRUE) { RefreshRates(); if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Ask - FixedSL; if (Bid <= g_ima_428 && gd_420 != 1.0 && gd_404 == 1.0 && gi_168 != TRUE && gd_244 <= gi_192 && Ask - gd_356 < gd_324 + 0.00001 && gi_164 != TRUE && gi_172 == TRUE) { OrderSend(Symbol(), OP_BUY, Lot(), Ask, g_slippage_184, l_price_0, 0, 0, 318200, 0, Blue); gd_420 = 0; } if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Bid + FixedSL; if (Bid >= g_ima_428 && gd_420 != 2.0 && gd_404 == 2.0 && gi_168 != TRUE && gd_244 <= gi_192 && Bid > gd_340 - 0.00001 && gi_164 != TRUE && gi_172 == TRUE) { OrderSend(Symbol(), OP_SELL, Lot(), Bid, g_slippage_184, l_price_0, 0, 0, 318201, 0, Blue); gd_420 = 0; } } return (""); } void CHF() { double l_price_0; if (gs_436 != "EURCHF" || DayOfWeek() == 0) return; Coment(); CheckParam(); OrderModif(); if (gi_164 != TRUE) { RefreshRates(); if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Ask - FixedSL; if (gd_420 != 1.0 && gd_404 == 1.0 && gi_168 != TRUE && gd_244 <= gi_192 && Ask - gd_356 < gd_324 + 0.00001 && gi_164 != TRUE && gi_172 == TRUE) { OrderSend(Symbol(), OP_BUY, Lot(), Ask, g_slippage_184, l_price_0, 0, 0, 318200, 0, Blue); gd_420 = 0; } if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Bid + FixedSL; if (gd_420 != 2.0 && gd_404 == 2.0 && gi_168 != TRUE && gd_244 <= gi_192 && Bid > gd_340 - 0.00001 && gi_164 != TRUE && gi_172 == TRUE) { OrderSend(Symbol(), OP_SELL, Lot(), Bid, g_slippage_184, l_price_0, 0, 0, 318201, 0, Blue); gd_420 = 0; } } }