#property copyright "bibjQOOXDgt`t" #property link "" bool gi_76 = FALSE; bool gi_80 = FALSE; extern bool MM = FALSE; extern double Lots = 0.1; double gd_96 = 100.0; extern double Risk = 0.0; double g_slippage_112 = 5.0; bool gi_120 = TRUE; bool gi_unused_124 = TRUE; double g_pips_128 = 100.0; double g_pips_136 = 30.0; bool gi_144 = TRUE; double g_pips_148 = 13.0; double g_pips_156 = 18.0; int gi_164 = 5; int gi_168 = 10; int g_period_172 = 10; int gi_176 = 5; int gi_180 = 5; int gi_184 = 5; int gi_188 = 15; int gi_192 = 10; int g_period_196 = 500; int gi_200 = 0; double gd_204 = 0.1; double gd_212 = 0.3; double gd_220 = 0.3; bool gi_228 = TRUE; double gd_232 = 0.5; bool gi_240 = TRUE; double gd_244 = 3.2; double gd_252 = 0.2; int gi_260 = 2; int gi_264 = 80; double gd_268 = 0.5; double gd_276 = 0.7; double gd_284 = 0.7; double gd_292 = 70.0; double gd_300 = 30.0; bool gi_308 = FALSE; double gd_312 = 1.9; int g_period_320 = 25; bool gi_324 = TRUE; int g_period_328 = 2; double gd_332 = 0.6; int gi_340 = 0; int gi_344 = 20; int gi_348 = 5; int gi_352 = 6; int gi_356 = 11; int gi_360 = 12; int gi_364 = 19; bool gi_368 = FALSE; bool gi_372 = FALSE; int gi_376 = 5; int gi_380 = 5; int gi_384 = 13; int gi_388 = 20; bool gi_392 = FALSE; int gi_396 = 0; int gi_400 = 0; int gi_404 = 0; int gi_408 = 0; double gd_412 = 1.0; double gd_420 = 1.0; double gd_428 = 1.0; double gd_436 = 1.0; double gd_444 = 1.0; double gd_452 = 1.0; double gd_460; double gd_468; double gd_476; double gd_484; int gi_492; int g_ticket_508; double g_price_512; int gi_520; int gi_524; double gd_528; double g_ima_536; double g_ima_544; double g_ima_552; double g_ima_560; double g_ima_568; double g_ima_576; double g_ima_584; double gd_608; double gd_616; double g_high_624; double g_low_632; double g_irsi_640; double g_ima_648; double gd_656; double g_istddev_664; double gd_672; double gd_680; int init() { gi_520 = MagicfromSymbol() + 12345; gd_528 = Take_Profit(); gd_468 = gd_244; gd_476 = gd_244; return (0); } int deinit() { return (0); } int start() { int li_40; int li_44; int li_48; int l_datetime_64; double l_ord_open_price_68; double l_high_108; double l_low_116; int li_unused_0 = 0; int l_count_4 = 0; int l_count_8 = 0; bool li_12 = FALSE; bool li_16 = FALSE; bool li_20 = FALSE; bool li_24 = FALSE; int l_datetime_28 = TimeCurrent(); int l_hour_32 = TimeHour(l_datetime_28); int l_minute_36 = TimeMinute(l_datetime_28); if (!IsTradeAllowed()) return (0); if (gi_392) { li_40 = 60 * l_hour_32 + l_minute_36; li_44 = 60 * gi_396 + gi_400; li_48 = 60 * gi_404 + gi_408; if (li_44 < li_48 && li_44 < li_40 && li_40 < li_48) li_12 = TRUE; if (li_44 > li_48 && li_44 < li_40 || li_40 < li_48) li_12 = TRUE; } if (gi_368 == TRUE && DayOfWeek() == gi_376 && l_hour_32 >= gi_384) li_12 = TRUE; if (gi_368 == TRUE && DayOfWeek() > gi_376) li_12 = TRUE; if (gi_372 == TRUE && DayOfWeek() == gi_380 && l_hour_32 >= gi_388) li_16 = TRUE; if (gi_372 == TRUE && DayOfWeek() > gi_380) li_16 = TRUE; int li_52 = OrdersHistoryTotal() - 1; int l_count_56 = 0; for (int l_pos_60 = li_52; l_pos_60 >= 0; l_pos_60--) { if (OrderSelect(l_pos_60, SELECT_BY_POS, MODE_HISTORY) == TRUE) { if (OrderMagicNumber() != gi_520) continue; l_datetime_64 = OrderCloseTime(); l_ord_open_price_68 = OrderOpenPrice(); l_count_56++; } if (l_ord_open_price_68 > 0.0) break; } int l_hour_76 = TimeHour(l_datetime_28 - l_datetime_64); if (l_hour_76 >= 1 || l_count_56 == 0 || Ask <= l_ord_open_price_68 - g_pips_156 * Point) li_20 = TRUE; if (l_hour_76 >= 1 || l_count_56 == 0 || Bid >= l_ord_open_price_68 + g_pips_156 * Point) li_24 = TRUE; if (!gi_324) { li_20 = TRUE; li_24 = TRUE; } double l_ord_open_price_80 = 0; for (int l_pos_88 = 0; l_pos_88 < OrdersTotal(); l_pos_88++) { if (OrderSelect(l_pos_88, SELECT_BY_POS, MODE_TRADES) == TRUE) { if (OrderMagicNumber() == gi_520) { if (OrderType() == OP_BUY) l_count_4++; if (OrderType() == OP_SELL) l_count_8++; l_ord_open_price_80 = OrderOpenPrice(); } } } int li_92 = l_count_4 + l_count_8; if (li_92 == 0 || li_92 > gi_524) { gi_524 = li_92; if (gi_524 > 1 && gi_120 && gi_120) Changes_Stoploss(gi_520, gi_524); } int li_96 = l_hour_32 + gi_340; gi_492 = MaShift_Custom(li_96); gd_484 = Xox_Custom(li_96); gd_460 = Limit_Percent_Custom(li_96); RefreshRates(); g_ima_536 = iMA(NULL, 0, g_period_172, gi_492, MODE_SMA, PRICE_OPEN, 0); g_ima_544 = iMA(NULL, 0, 25, 0, MODE_EMA, PRICE_OPEN, 0); g_ima_552 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_OPEN, 0); g_ima_560 = iMA(NULL, 0, 100, 0, MODE_EMA, PRICE_OPEN, 0); g_ima_568 = iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_OPEN, 0); g_ima_576 = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_OPEN, 0); g_ima_584 = iMA(NULL, 0, 400, 0, MODE_EMA, PRICE_OPEN, 0); double ld_100 = 0; for (l_pos_88 = 0; l_pos_88 < gi_188; l_pos_88++) { l_high_108 = High[iHighest(NULL, 0, MODE_OPEN, gi_192, l_pos_88)]; l_low_116 = Low[iLowest(NULL, 0, MODE_OPEN, gi_192, l_pos_88)]; ld_100 += MathLog(l_high_108 / l_low_116); } double ld_124 = ld_100 / gi_188; if (ld_124 < gd_460 / 100.0) ld_124 = gd_460 / 100.0; gd_608 = g_ima_536 * (ld_124 + 1.0); gd_616 = g_ima_536 * (1 - ld_124); gd_672 = g_ima_536 * (gd_232 / 100.0 + 1.0); gd_680 = g_ima_536 * (1 - gd_232 / 100.0); g_ima_648 = iMA(NULL, 0, g_period_196, gi_200, MODE_SMMA, PRICE_OPEN, 0); g_istddev_664 = iStdDev(NULL, PERIOD_H4, g_period_320, 0, MODE_EMA, PRICE_CLOSE, 0); g_high_624 = High[iHighest(NULL, 0, MODE_CLOSE, gi_264, 0)]; g_low_632 = Low[iLowest(NULL, 0, MODE_CLOSE, gi_264, 0)]; gd_656 = (g_high_624 - g_low_632) / (g_ima_648 / 100.0); g_irsi_640 = iRSI(NULL, 0, 14, PRICE_CLOSE, 0); double l_iatr_132 = iATR(NULL, 0, g_period_328, 0); bool li_140 = FALSE; bool li_144 = FALSE; if (!li_12 && l_count_4 < gi_164 && gd_656 >= gd_484 && g_irsi_640 <= gd_300 && gd_616 >= Ask && l_iatr_132 <= gd_332 && Ask <= l_ord_open_price_80 - g_pips_156 * Point || l_count_4 == 0) li_140 = TRUE; if (!li_20 || (!gi_308 && g_istddev_664 >= gd_312)) li_140 = FALSE; if (g_ima_584 > g_ima_576 && g_ima_576 > g_ima_568 && g_ima_568 > g_ima_560 && g_ima_560 > g_ima_552 && g_ima_552 > g_ima_544) li_140 = FALSE; if (gi_228 && !li_12 && li_20 && l_count_4 < gi_164 && g_ima_584 < g_ima_576 && g_ima_576 < g_ima_568 && g_ima_568 < g_ima_560 && g_ima_560 < g_ima_544 && gd_680 >= Ask && Ask <= l_ord_open_price_80 - g_pips_156 * Point || l_count_4 == 0) li_140 = TRUE; if (gi_240 && !li_12 && g_ima_584 > g_ima_576 && g_ima_576 > g_ima_568 && g_ima_568 > g_ima_560 && g_ima_560 > g_ima_552 && g_ima_552 > g_ima_544) { if (l_count_4 < gi_164 && gd_656 >= gd_468 && g_irsi_640 <= gd_300) { li_140 = TRUE; gd_468 += gd_252; } } else gd_468 = gd_244; if (li_140 == TRUE) { ClosePositions(1, 4, gi_520); OrderPositions(1, l_count_4, l_count_8, gi_520); li_140 = FALSE; li_20 = FALSE; return (0); } if (!li_12 && l_count_8 < gi_164 && gd_656 >= gd_484 && g_irsi_640 >= gd_292 && l_iatr_132 <= gd_332 && gd_608 <= Bid && Bid >= l_ord_open_price_80 + g_pips_156 * Point || l_count_8 == 0) li_144 = TRUE; if (!li_24 || (!gi_308 && g_istddev_664 > gd_312)) li_144 = FALSE; if (g_ima_584 < g_ima_576 && g_ima_576 < g_ima_568 && g_ima_568 < g_ima_560 && g_ima_560 < g_ima_552 && g_ima_552 < g_ima_544) li_144 = FALSE; if (gi_228 && !li_12 && li_24 && l_count_8 < gi_164 && g_ima_584 > g_ima_576 && g_ima_576 > g_ima_568 && g_ima_568 > g_ima_560 && g_ima_560 > g_ima_544 && gd_672 <= Bid && Bid >= l_ord_open_price_80 + g_pips_156 * Point || l_count_8 == 0) li_144 = TRUE; if (gi_240 && !li_12 && g_ima_584 < g_ima_576 && g_ima_576 < g_ima_568 && g_ima_568 < g_ima_560 && g_ima_560 < g_ima_552 && g_ima_552 < g_ima_544) { if (l_count_8 < gi_164 && gd_656 >= gd_476 && g_irsi_640 >= gd_292) { li_144 = TRUE; gd_476 += gd_252; } } else gd_476 = gd_244; if (li_144 == TRUE) { ClosePositions(1, 3, gi_520); OrderPositions(2, l_count_4, l_count_8, gi_520); li_144 = FALSE; li_24 = FALSE; return (0); } double ld_148 = Bid - l_ord_open_price_80; if (gi_144 && l_count_4 > 0 && gd_528 > g_pips_148 * Point && ld_148 > g_pips_148 * Point) ClosePositions(0, 3, gi_520); double ld_156 = l_ord_open_price_80 - Ask; if (gi_144 && l_count_8 > 0 && gd_528 > g_pips_148 * Point && ld_156 > g_pips_148 * Point) ClosePositions(0, 4, gi_520); switch (gi_524) { case 4: if (l_count_4 == 1) ClosePositions(1, 3, gi_520); if (l_count_8 == 1) ClosePositions(1, 4, gi_520); case 0: case 1: case 2: case 3: break; } if (l_count_4 > 0 && g_high_624 - Bid <= gi_260 * Point || gd_608 < Bid || li_16) { ClosePositions(1, 3, gi_520); return (0); } if (l_count_8 > 0 && Ask - g_low_632 <= gi_260 * Point || gd_616 > Ask || li_16) { ClosePositions(1, 4, gi_520); return (0); } return (0); } double lotSizeCalc(int ai_0) { int li_4 = 1; double ld_ret_8 = 0; int li_16 = 0; double l_lotsize_20 = MarketInfo(Symbol(), MODE_LOTSIZE); double l_maxlot_28 = MarketInfo(Symbol(), MODE_MAXLOT); double l_minlot_36 = MarketInfo(Symbol(), MODE_MINLOT); double l_free_magrin_44 = AccountFreeMargin(); string ls_52 = AccountCurrency(); if (ls_52 == "JPY") li_4 = 100; if (ls_52 == "USD") li_4 = 1; double ld_60 = l_free_magrin_44 * Risk / (li_4 * l_lotsize_20); if (l_minlot_36 >= 1.0) li_16 = 0; else { if (l_minlot_36 >= 0.1) li_16 = 1; else if (l_minlot_36 >= 0.01) li_16 = 2; } switch (ai_0) { case 0: ld_ret_8 = NormalizeDouble(ld_60 * gd_412, li_16); break; case 1: ld_ret_8 = NormalizeDouble(ld_60 * gd_420, li_16); break; case 2: ld_ret_8 = NormalizeDouble(ld_60 * gd_428, li_16); break; case 3: ld_ret_8 = NormalizeDouble(ld_60 * gd_436, li_16); break; case 4: ld_ret_8 = NormalizeDouble(ld_60 * gd_444, li_16); break; default: ld_ret_8 = NormalizeDouble(ld_60 * gd_452, li_16); } if (ld_ret_8 < l_minlot_36) ld_ret_8 = l_minlot_36; if (ld_ret_8 > l_maxlot_28) ld_ret_8 = l_maxlot_28; if (ld_ret_8 > gd_96) ld_ret_8 = gd_96; return (ld_ret_8); } int MaShift_Custom(int ai_0) { bool li_ret_4 = FALSE; if (gi_352 <= gi_356) { if (ai_0 >= gi_352 && ai_0 <= gi_356) li_ret_4 = gi_180; } else if (ai_0 >= gi_352 || ai_0 <= gi_356) li_ret_4 = gi_180; if (gi_360 <= gi_364) { if (ai_0 >= gi_360 && ai_0 <= gi_364) li_ret_4 = gi_184; } else if (ai_0 >= gi_360 || ai_0 <= gi_364) li_ret_4 = gi_184; if (gi_344 <= gi_348) { if (ai_0 >= gi_344 && ai_0 <= gi_348) li_ret_4 = gi_176; } else if (ai_0 >= gi_344 || ai_0 <= gi_348) li_ret_4 = gi_176; return (li_ret_4); } double Xox_Custom(int ai_0) { double ld_ret_4 = 0; if (gi_352 <= gi_356) { if (ai_0 >= gi_352 && ai_0 <= gi_356) ld_ret_4 = gd_276; } else if (ai_0 >= gi_352 || ai_0 <= gi_356) ld_ret_4 = gd_276; if (gi_360 <= gi_364) { if (ai_0 >= gi_360 && ai_0 <= gi_364) ld_ret_4 = gd_284; } else if (ai_0 >= gi_360 || ai_0 <= gi_364) ld_ret_4 = gd_284; if (gi_344 <= gi_348) { if (ai_0 >= gi_344 && ai_0 <= gi_348) ld_ret_4 = gd_268; } else if (ai_0 >= gi_344 || ai_0 <= gi_348) ld_ret_4 = gd_268; return (ld_ret_4); } double Limit_Percent_Custom(int ai_0) { double ld_ret_4 = 0; if (gi_352 <= gi_356) { if (ai_0 >= gi_352 && ai_0 <= gi_356) ld_ret_4 = gd_212; } else if (ai_0 >= gi_352 || ai_0 <= gi_356) ld_ret_4 = gd_212; if (gi_360 <= gi_364) { if (ai_0 >= gi_360 && ai_0 <= gi_364) ld_ret_4 = gd_220; } else if (ai_0 >= gi_360 || ai_0 <= gi_364) ld_ret_4 = gd_220; if (gi_344 <= gi_348) { if (ai_0 >= gi_344 && ai_0 <= gi_348) ld_ret_4 = gd_204; } else if (ai_0 >= gi_344 || ai_0 <= gi_348) ld_ret_4 = gd_204; return (ld_ret_4); } int MagicfromSymbol() { int li_ret_0 = 0; for (int li_4 = 0; li_4 < 5; li_4++) li_ret_0 = 3 * li_ret_0 + StringGetChar(Symbol(), li_4); li_ret_0 = 3 * li_ret_0 + Period(); return (li_ret_0); } double Take_Profit() { int l_stoplevel_0 = MarketInfo(Symbol(), MODE_STOPLEVEL); int l_freezelevel_4 = MarketInfo(Symbol(), MODE_FREEZELEVEL); if (l_stoplevel_0 > g_pips_148) gd_528 = l_stoplevel_0; else gd_528 = g_pips_148; if (l_freezelevel_4 > gd_528) gd_528 = l_freezelevel_4; return (gd_528); } void ClosePositions(int ai_0, int ai_4, int a_magic_8) { int l_error_12; int l_cmd_20; RefreshRates(); for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderMagicNumber() == a_magic_8) { l_cmd_20 = OrderType(); if ((l_cmd_20 == OP_BUY && ai_4 == 3) || (l_cmd_20 == OP_SELL && ai_4 == 4)) { switch (l_cmd_20) { case OP_BUY: OrderClose(OrderTicket(), OrderLots(), Bid, g_slippage_112, MediumSeaGreen); l_error_12 = GetLastError(); if (l_error_12 != 0/* NO_ERROR */) Print("Close Positions Error OrderTicket = ", OrderTicket()); else { if (gi_80) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); if (gi_76) Alert("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); } if (ai_0 == 0) return; break; case OP_SELL: OrderClose(OrderTicket(), OrderLots(), Ask, g_slippage_112, DarkOrange); l_error_12 = GetLastError(); if (l_error_12 != 0/* NO_ERROR */) Print("Close Positions Error OrderTicket = ", OrderTicket()); else { if (gi_80) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); if (gi_76) Alert("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); } if (ai_0 == 0) return; } } } } } void OrderPositions(int ai_0, int ai_4, int ai_8, int a_magic_12) { double ld_unused_16 = 0; double l_price_24 = 0; int li_32 = MathAbs(ai_4 - ai_8); double ld_36 = 0; if (MM) ld_36 = lotSizeCalc(li_32); else ld_36 = ld_36; if (ai_0 == 1) { g_ticket_508 = 0; if (AccountFreeMarginCheck(Symbol(), OP_BUY, ld_36) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return; } if (gi_120) l_price_24 = Ask - g_pips_128 * Point; else l_price_24 = 0.0; if (gi_144) g_price_512 = Ask + gd_528 * Point; else g_price_512 = 0.0; for (int li_44 = 1; li_44 <= gi_168; li_44++) { g_ticket_508 = OrderSend(Symbol(), OP_BUY, ld_36, Ask, g_slippage_112 * Point, l_price_24, g_price_512, "Buy(#" + a_magic_12 + ")", a_magic_12, 0, DodgerBlue); if (g_ticket_508 > 0) { if (OrderSelect(g_ticket_508, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened : ", OrderOpenPrice()); if (gi_80) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + "@" + DoubleToStr(ld_36, 2) + "@ Open Buy"); if (!(gi_76)) break; Alert("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + "@" + DoubleToStr(ld_36, 2) + "@ Open Buy"); break; } if (gi_76) Alert("Error opening BUY order : ", GetLastError()); Sleep(5000); } } } if (ai_0 == 2) { g_ticket_508 = 0; if (AccountFreeMarginCheck(Symbol(), OP_SELL, ld_36) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) Print("We have no money. Free Margin = ", AccountFreeMargin()); else { if (gi_120) l_price_24 = Bid + g_pips_128 * Point; else l_price_24 = 0.0; if (gi_144) g_price_512 = Bid - gd_528 * Point; else g_price_512 = 0.0; for (int li_48 = 1; li_48 <= gi_168; li_48++) { g_ticket_508 = OrderSend(Symbol(), OP_SELL, ld_36, Bid, g_slippage_112 * Point, l_price_24, g_price_512, "Sell(#" + a_magic_12 + ")", a_magic_12, 0, DeepPink); if (g_ticket_508 > 0) { if (OrderSelect(g_ticket_508, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened : ", OrderOpenPrice()); if (gi_80) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + "@" + ld_36 + "@ Open Sell"); if (!(gi_76)) break; Alert("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + "@" + ld_36 + "@ Open Sell"); return; } if (gi_76) Alert("Error opening SELL order : ", GetLastError()); Sleep(5000); } } } } } void Changes_Stoploss(int a_magic_0, int ai_unused_4) { int l_error_8; int l_cmd_20; int li_12 = OrdersTotal() - 1; for (int l_pos_16 = 0; l_pos_16 < li_12; l_pos_16++) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderMagicNumber() == a_magic_0) { l_cmd_20 = OrderType(); switch (l_cmd_20) { case OP_BUY: OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss() - Point * g_pips_136, OrderTakeProfit(), 0, Yellow); l_error_8 = GetLastError(); if (l_error_8 != 0/* NO_ERROR */) Print("Changes Stoploss Error OrderTicket = ", OrderTicket()); break; case OP_SELL: OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss() + Point * g_pips_136, OrderTakeProfit(), 0, Yellow); l_error_8 = GetLastError(); if (l_error_8 != 0/* NO_ERROR */) Print("Changes Stoploss Error OrderTicket = ", OrderTicket()); } } } }