#import "CloveriX-DLL.dll" int InitDll(); double Proc1(double& a0[], double& a1[], double a2, double a3, double a4, double a5, int a6, int a7); double Proc2(double& a0[], double& a1[], double a2, double a3, double a4, double a5, int a6, int a7); double Proc3(double& a0[], double& a1[], double a2, double a3, double a4, double a5); double Proc4(double& a0[], double& a1[], double a2, double a3, double a4, double a5); double Proc5(double& a0[], double& a1[], double a2, double a3, double a4, double a5, double a6, double a7); double Proc6(double& a0[], double& a1[], double a2, double a3, double a4, double a5, double a6, double a7); #import 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_ima_284; double g_irsi_292; double g_irsi_300; double g_iwpr_308; double g_iwpr_316; double gd_332; double gd_340; double gd_348; double g_price_356; double gd_364; double gd_unused_380; double gd_unused_420; double gd_428; double gd_436; string gs_444; bool gi_unused_452 = FALSE; bool g_bool_456 = FALSE; int init() { g_bool_456 = InitDll() == 1; if (!g_bool_456) Alert("Invalid DLL file"); gs_444 = StringSubstr(Symbol(), 0, 6); gd_244 = 10000.0 * (Ask - Bid); if (gs_444 == "EURCHF" || gs_444 == "EURGBP" && Period() == PERIOD_M15) Coment(); gi_176 = GMT_Offset + 21; gi_180 = GMT_Offset + 23; gd_unused_420 = Digits; if (gi_176 > 23) gi_176 -= 24; if (gi_180 > 23) gi_180 -= 24; gd_unused_380 = 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_452 = TRUE; return (0); } int start() { if (!IsDllsAllowed()) { Alert("You have not allowed DLL calls in settings"); return; } if (!g_bool_456) { Alert("Invalid DLL file"); return; } gs_444 = StringSubstr(Symbol(), 0, 6); if ((gs_444 != "EURCHF" && gs_444 != "EURGBP") || Period() != PERIOD_M15) { Comment("------------------", "\n", "WRONG TRADING PAIR OR TIMEFRAME"); return; } Coment(); HideTestIndicators(TRUE); 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)); 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_204 = NormalizeDouble(Proc1(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252, gi_168, gi_172), 5); gd_212 = NormalizeDouble(Proc2(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252, gi_168, gi_172), 5); gd_220 = NormalizeDouble(Proc3(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252), 5); gd_228 = NormalizeDouble(Proc4(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252), 5); 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_284 = iMA(NULL, 0, 18, 0, MODE_SMA, PRICE_MEDIAN, 0); g_irsi_292 = iRSI(NULL, 0, 7, PRICE_OPEN, 0); g_irsi_300 = iRSI(NULL, 0, 7, PRICE_OPEN, 1); g_iwpr_308 = iWPR(NULL, 0, 14, 0); g_iwpr_316 = iWPR(NULL, 0, 14, 1); gd_332 = MathMin(gd_228, gd_212); gd_348 = MathMax(gd_220, gd_204); gd_340 = NormalizeDouble(Proc5(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252, gd_332, gd_348), 5); g_price_356 = NormalizeDouble(Proc6(gda_196, gda_200, gd_204, gd_212, gd_244, gd_252, gd_332, gd_348), 5); gd_428 = gd_236 / 10000.0; if (VariableSpreads == TRUE) { gd_364 = VarSpreadFix / 10000.0; gi_192 = 6; } else gd_364 = Ask - Bid; 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 <= 150 && ErrorAlert == TRUE) Alert("error # ", g_error_160, " Find a definition here http://docs.mql4.com/constants/errors"); 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_444) { gi_164 = TRUE; 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_436 = 1; } if (Bid > g_price_356 - 0.00001 && CloseOnlyByExtTP == FALSE) OC(Bid); 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_444 == "EURGBP") { OC(Bid); gd_436 = 1; } if (g_price_356 - OrderOpenPrice() > MaxTP && g_price_356 - Bid >= gd_428 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + MaxTP, 0, CLR_NONE); if (g_price_356 - OrderOpenPrice() <= MaxTP && g_price_356 != OrderTakeProfit() && g_price_356 - Bid >= gd_428 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), g_price_356, 0, CLR_NONE); if (Bid - OrderOpenPrice() > MaxTP - 0.00001 && CloseOnlyByExtTP == FALSE) OC(Bid); if (OrderOpenPrice() - Low[0] >= 0.001 && OrderOpenPrice() - Bid <= (OrderOpenPrice() - Low[0]) / 2.0) { OC(Bid); gd_436 = 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_436 = 2; } if (Ask - gd_364 < gd_340 + 0.00001 && CloseOnlyByExtTP == FALSE) OC(Ask); 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_444 == "EURGBP") { OC(Ask); gd_436 = 2; } if (OrderOpenPrice() - gd_340 - gd_364 > MaxTP && Ask - gd_340 - gd_364 >= gd_428 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - MaxTP, 0, CLR_NONE); if (OrderOpenPrice() - gd_340 - gd_364 <= MaxTP && gd_340 + gd_364 != OrderTakeProfit() && Ask - gd_340 - gd_364 >= gd_428 && PlaceExternalTP == TRUE) if ((Ask - OrderStopLoss() >= gd_236 && FixedSL) || !FixedSL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), gd_340 + gd_364, 0, CLR_NONE); if (OrderOpenPrice() - Ask > MaxTP - 0.00001 && CloseOnlyByExtTP == FALSE) OC(Ask); if (High[0] - OrderOpenPrice() >= 0.001 && Ask - OrderOpenPrice() <= (High[0] - OrderOpenPrice()) / 2.0) { OC(Ask); gd_436 = 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_444 != "EURGBP" || DayOfWeek() == 0) return; Coment(); CheckParam(); OrderModif(); if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Ask - FixedSL; if (Bid <= g_ima_284 && gd_436 != 1.0 && g_ima_260 > g_ima_276 && gi_168 != TRUE && gd_244 <= gi_192 && Ask - gd_364 < gd_332 + 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_436 = 0; } if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Bid + FixedSL; if (Bid >= g_ima_284 && gd_436 != 2.0 && g_ima_260 < g_ima_276 && gi_168 != TRUE && gd_244 <= gi_192 && Period() == PERIOD_M15 && Bid > gd_348 - 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_436 = 0; } return (""); } void CHF() { double l_price_0; if (gs_444 != "EURCHF" || DayOfWeek() == 0) return; Coment(); CheckParam(); OrderModif(); if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Ask - FixedSL; if (gd_436 != 1.0 && g_ima_260 > g_ima_276 && gi_168 != TRUE && gd_244 <= gi_192 && Ask - gd_364 < gd_332 + 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_436 = 0; } if (FixedSL != 0.0 && UseFixedSL == TRUE) l_price_0 = Bid + FixedSL; if (gd_436 != 2.0 && g_ima_260 < g_ima_276 && gi_168 != TRUE && gd_244 <= gi_192 && Bid > gd_348 - 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_436 = 0; } }