#property copyright "Rich" #property link "http://www.xpworx.com" #import "Destiny3-33.dll" int LoadSystem(string& a0[], int& a1[], double& a2[]); bool LoadSystem2(int a0, double a1, int a2, double a3, double a4, int a5, int a6, double a7, int a8); string GrabWeb(string a0); #import extern string ver = "Last Modified: 2009.06.08 19:50"; string gsa_84[14]; int gia_88[100]; double gda_92[100]; bool gi_96 = FALSE; string gs_100 = "http://www.forexfactory.com/ff_calendar_thisweek.xml"; extern bool UseNews = TRUE; extern int LeastImpact = 3; extern int TradeHoursBeforeNews = 12; extern bool PrintNewsOnChart = TRUE; extern string ____CurrenciesToUse___________ = "EURCHF - EURGPB - GBPCHF - USDCAD 15M"; bool gi_132 = TRUE; extern double LotsSize = 0.1; extern bool UseMM = TRUE; extern bool UseHedge = FALSE; double gd_unused_152 = 0.0; extern int GMTOffset = 1; bool gi_164 = TRUE; bool gi_168 = TRUE; int gi_172 = 0; bool gi_176 = TRUE; bool gi_180 = TRUE; bool gi_184 = FALSE; int gi_188 = 0; bool gi_192 = FALSE; int g_period_196 = 0; int g_applied_price_200 = PRICE_CLOSE; int g_ma_method_204 = MODE_SMA; string g_comment_208 = "Destiny3-33"; int gi_216 = 0; int gi_unused_220 = 0; int gi_unused_224 = 0; int gi_228 = 0; int gi_232 = 0; int gi_236 = 0; int gi_240 = 0; int g_magic_244 = 0; int g_color_248 = Blue; int g_color_252 = Red; bool gi_256 = FALSE; extern double EURCHF_MaxSpread = 6.0; extern double EURGBP_MaxSpread = 5.0; extern double GBPCHF_MaxSpread = 9.0; extern double USDCAD_MaxSpread = 7.0; int gi_unused_312 = 0; string gsa_316[100]; string gsa_320[100]; int gia_324[100]; int gia_328[100]; int gia_332[100]; int gia_336[100]; string gsa_340[100]; int gia_344[100]; int gia_348[100]; int gi_352 = 0; int gi_356 = 0; int gi_360 = 0; int gi_364 = 0; bool gi_368 = TRUE; int gi_372 = 0; int gi_376 = 0; int gi_380 = 0; int gi_384 = 0; int gi_388 = 0; int gi_392 = 0; int gi_396 = 0; int gi_400 = 0; int gi_404 = 0; int gi_408 = 0; int gi_412 = 0; int gi_416 = 0; int gi_420 = 0; double gd_424 = 0.0; int gi_432 = 0; int gi_436 = 0; int gi_440 = 0; int gi_444 = 0; int gi_448 = 0; int gi_452 = 0; int gi_456 = 0; int gi_460 = 0; int gi_464 = 0; int gi_468 = 0; int gi_472 = 0; int gi_476 = 0; int gi_480 = 0; double gd_484 = 0.0; int gi_492 = 0; int gi_496 = 0; int gi_500 = 0; int gi_504 = 0; int gi_508 = 0; int gi_512 = 0; int gi_516 = 0; int gi_520 = 0; int gi_524 = 0; int gi_528 = 0; int gi_532 = 0; int gi_536 = 0; int gi_540 = 0; double gd_544 = 0.0; int gi_552 = 10; int gi_556 = 0; int gi_560 = 0; int gi_564 = 0; int gi_568 = 0; int gi_572 = 0; int gi_576 = 0; int gi_580 = 0; int gi_584 = 0; int gi_588 = 0; int gi_592 = 0; int gi_596 = 0; int gi_600 = 0; double gd_604 = 0.0; int gi_612 = 0; int gi_616 = 0; int gi_620 = 0; int g_period_624 = 0; int g_period_628 = 0; int gi_632 = 0; int g_period_636 = 0; int gi_640 = 0; int gi_644 = 0; int g_period_648 = 0; int g_applied_price_652 = PRICE_CLOSE; int g_ma_method_656 = MODE_SMA; int gi_660 = 0; int gi_664 = 0; int gi_668 = 0; int gi_672 = 0; int gi_676 = 0; int gi_680 = 0; bool gi_688 = TRUE; int gi_692; double gd_696; double g_maxlot_704; double g_minlot_712; double g_lotstep_720; double gd_728; string g_symbol_736; bool gi_744 = TRUE; bool gi_748 = TRUE; int g_datetime_752; int g_datetime_756; int g_datetime_760; int gi_764; int gi_768; int gi_772; int gi_776; int gi_780; int gi_784; int gi_788; int gi_792; int gi_796; int gi_800; int gi_804; int gi_808; int gi_812; int gi_816; int gi_820; int gi_824; int gi_828; int gi_832; int gi_836; int gi_840; int gi_844; int gi_848; int gi_852; int gi_856; double gd_860; double gd_868; double gd_876; double gd_884; double gd_892; double gd_900; double gd_908; double gd_916; double gd_924; double gd_932; double gd_940; double gda_unused_1092[]; double gda_unused_1096[]; string gs_dummy_1100; string gs_dummy_1108; string gs_dummy_1116; bool gi_unused_1124 = TRUE; double gd_1128 = 4.0; double gd_unused_1136 = 0.0001; int gi_1144 = 10; int g_datetime_1148 = 0; int g_count_1152 = 0; int gia_1156[100] = {0}; int init() { g_magic_244 = GetMagicNumber(56789); HideTestIndicators(TRUE); Comment("loading system ..."); gi_96 = FALSE; wait(1, 3); Cook(gsa_84); if (Point == 0.00001) gd_unused_1136 = 0.0001; else { if (Point == 0.001) gd_unused_1136 = 0.01; else gd_unused_1136 = Point; } if (Symbol() == "EURCHF" || Symbol() == "GBPCHF" || Symbol() == "EURGBP" || Symbol() == "USDCAD" || Symbol() == "mEURCHF" || Symbol() == "mGBPCHF" || Symbol() == "mEURGBP" || Symbol() == "mUSDCAD" && Period() == PERIOD_M15) ScalpInit(); return (0); } int deinit() { return (0); } int start() { if (!(sym("EURCHF") || sym("GBPCHF") || sym("EURGBP") || sym("USDCAD")) || !(Period() == PERIOD_M15)) Comment("Bad pair or timeframe!"); if (IsTesting()) { if (gi_96 == FALSE) { gi_1144 = LoadSystem(gsa_84, gia_88, gda_92); gi_96 = TRUE; if (gi_1144 == 0) { if (UseNews == FALSE) Comment("System loaded successfully"); gi_172 = gia_88[11]; gi_188 = gia_88[12]; g_period_196 = gia_88[13]; g_applied_price_200 = gia_88[14]; g_ma_method_204 = gia_88[15]; gi_216 = gia_88[16]; gi_unused_220 = gia_88[17]; gi_unused_224 = gia_88[18]; gi_228 = gia_88[19]; gi_232 = gia_88[20]; gi_236 = gia_88[21]; gi_240 = gia_88[22]; gi_372 = gia_88[24]; gi_376 = gia_88[25]; gi_380 = gia_88[26]; gi_384 = gia_88[27]; gi_388 = gia_88[28]; gi_392 = gia_88[29]; gi_396 = gia_88[30]; gi_400 = gia_88[31]; gi_404 = gia_88[32]; gi_408 = gia_88[33]; gi_412 = gia_88[34]; gi_416 = gia_88[35]; gi_420 = gia_88[36]; gi_432 = gia_88[37]; gi_436 = gia_88[38]; gi_440 = gia_88[39]; gi_444 = gia_88[40]; gi_448 = gia_88[41]; gi_452 = gia_88[42]; gi_456 = gia_88[43]; gi_460 = gia_88[44]; gi_464 = gia_88[45]; gi_468 = gia_88[46]; gi_472 = gia_88[47]; gi_476 = gia_88[48]; gi_480 = gia_88[49]; gi_492 = gia_88[50]; gi_496 = gia_88[51]; gi_500 = gia_88[52]; gi_504 = gia_88[53]; gi_508 = gia_88[54]; gi_512 = gia_88[55]; gi_516 = gia_88[56]; gi_520 = gia_88[57]; gi_524 = gia_88[58]; gi_528 = gia_88[59]; gi_532 = gia_88[60]; gi_536 = gia_88[61]; gi_540 = gia_88[62]; gi_552 = gia_88[63]; gi_556 = gia_88[64]; gi_560 = gia_88[65]; gi_564 = gia_88[66]; gi_568 = gia_88[67]; gi_572 = gia_88[68]; gi_576 = gia_88[69]; gi_580 = gia_88[70]; gi_584 = gia_88[71]; gi_588 = gia_88[72]; gi_592 = gia_88[73]; gi_596 = gia_88[74]; gi_600 = gia_88[75]; gi_612 = gia_88[76]; gi_616 = gia_88[77]; gi_620 = gia_88[78]; g_period_624 = gia_88[79]; g_period_628 = gia_88[80]; gi_632 = gia_88[81]; g_period_636 = gia_88[82]; gi_640 = gia_88[83]; gi_644 = gia_88[84]; g_period_648 = gia_88[85]; gi_660 = gia_88[86]; gi_664 = gia_88[87]; gi_668 = gia_88[88]; gi_672 = gia_88[89]; gi_676 = gia_88[90]; gi_680 = gia_88[91]; gd_unused_152 = gda_92[7]; gd_424 = gda_92[8]; gd_484 = gda_92[9]; gd_544 = gda_92[10]; gd_604 = gda_92[11]; if (Symbol() == "EURCHF" || Symbol() == "GBPCHF" || Symbol() == "EURGBP" || Symbol() == "USDCAD" || Symbol() == "mEURCHF" || Symbol() == "mGBPCHF" || Symbol() == "mEURGBP" || Symbol() == "mUSDCAD" && Period() == PERIOD_M15) ScalpInit(); } else Comment("Error loading system!(" + gi_1144 + ")"); } } else { if (gi_96 == FALSE && wait(0, 3)) { gi_1144 = LoadSystem(gsa_84, gia_88, gda_92); gi_96 = TRUE; if (gi_1144 == 0) { if (UseNews == FALSE) Comment("System loaded successfully"); gi_172 = gia_88[11]; gi_188 = gia_88[12]; g_period_196 = gia_88[13]; g_applied_price_200 = gia_88[14]; g_ma_method_204 = gia_88[15]; gi_216 = gia_88[16]; gi_unused_220 = gia_88[17]; gi_unused_224 = gia_88[18]; gi_228 = gia_88[19]; gi_232 = gia_88[20]; gi_236 = gia_88[21]; gi_240 = gia_88[22]; gi_372 = gia_88[24]; gi_376 = gia_88[25]; gi_380 = gia_88[26]; gi_384 = gia_88[27]; gi_388 = gia_88[28]; gi_392 = gia_88[29]; gi_396 = gia_88[30]; gi_400 = gia_88[31]; gi_404 = gia_88[32]; gi_408 = gia_88[33]; gi_412 = gia_88[34]; gi_416 = gia_88[35]; gi_420 = gia_88[36]; gi_432 = gia_88[37]; gi_436 = gia_88[38]; gi_440 = gia_88[39]; gi_444 = gia_88[40]; gi_448 = gia_88[41]; gi_452 = gia_88[42]; gi_456 = gia_88[43]; gi_460 = gia_88[44]; gi_464 = gia_88[45]; gi_468 = gia_88[46]; gi_472 = gia_88[47]; gi_476 = gia_88[48]; gi_480 = gia_88[49]; gi_492 = gia_88[50]; gi_496 = gia_88[51]; gi_500 = gia_88[52]; gi_504 = gia_88[53]; gi_508 = gia_88[54]; gi_512 = gia_88[55]; gi_516 = gia_88[56]; gi_520 = gia_88[57]; gi_524 = gia_88[58]; gi_528 = gia_88[59]; gi_532 = gia_88[60]; gi_536 = gia_88[61]; gi_540 = gia_88[62]; gi_552 = gia_88[63]; gi_556 = gia_88[64]; gi_560 = gia_88[65]; gi_564 = gia_88[66]; gi_568 = gia_88[67]; gi_572 = gia_88[68]; gi_576 = gia_88[69]; gi_580 = gia_88[70]; gi_584 = gia_88[71]; gi_588 = gia_88[72]; gi_592 = gia_88[73]; gi_596 = gia_88[74]; gi_600 = gia_88[75]; gi_612 = gia_88[76]; gi_616 = gia_88[77]; gi_620 = gia_88[78]; g_period_624 = gia_88[79]; g_period_628 = gia_88[80]; gi_632 = gia_88[81]; g_period_636 = gia_88[82]; gi_640 = gia_88[83]; gi_644 = gia_88[84]; g_period_648 = gia_88[85]; gi_660 = gia_88[86]; gi_664 = gia_88[87]; gi_668 = gia_88[88]; gi_672 = gia_88[89]; gi_676 = gia_88[90]; gi_680 = gia_88[91]; gd_unused_152 = gda_92[7]; gd_424 = gda_92[8]; gd_484 = gda_92[9]; gd_544 = gda_92[10]; gd_604 = gda_92[11]; if (Symbol() == "EURCHF" || Symbol() == "GBPCHF" || Symbol() == "EURGBP" || Symbol() == "USDCAD" || Symbol() == "mEURCHF" || Symbol() == "mGBPCHF" || Symbol() == "mEURGBP" || Symbol() == "mUSDCAD" && Period() == PERIOD_M15) ScalpInit(); } else Comment("Error loading system!(" + gi_1144 + ")"); } } if (gi_1144 > 0) return (0); if (UseNews) { if (g_datetime_1148 == 0 || TimeDay(g_datetime_1148) != TimeDay(TimeCurrent())) { GetTheNews(); g_datetime_1148 = TimeCurrent(); } } if (UseNews == FALSE) gi_368 = TRUE; if (Symbol() == "EURCHF" || Symbol() == "GBPCHF" || Symbol() == "EURGBP" || Symbol() == "USDCAD" && Period() == PERIOD_M15 && gi_368 == TRUE) ScalpCode(); return (0); } void ScalpInit() { string ls_0; if (!IsDllsAllowed()) { Comment("Warning: Set Parameter \"AllowDLL Imports\" ON in menu Tools -> Options -> ExpertAdvisors."); gi_688 = FALSE; return; } g_symbol_736 = Symbol(); if (Digits < 4) { gd_696 = 0.01; gi_692 = 2; } else { gd_696 = 0.0001; gi_692 = 4; } g_maxlot_704 = MarketInfo(g_symbol_736, MODE_MAXLOT); g_minlot_712 = MarketInfo(g_symbol_736, MODE_MINLOT); g_lotstep_720 = MarketInfo(g_symbol_736, MODE_LOTSTEP); gd_728 = MarketInfo(g_symbol_736, MODE_MARGINREQUIRED) * g_lotstep_720; if (!gi_132) { if (StringSubstr(g_symbol_736, 0, 6) != "EURUSD" || Period() != PERIOD_M1) { Alert("Use Destiny EA only on EURUSD M1."); Print("Use Destiny EA only on EURUSD M1."); Comment("Error: Wrong TimeFrame or Currency!"); gi_688 = FALSE; } else { if (gi_228 < 0 || gi_228 > 23) gi_228 = 0; if (gi_232 < 0 || gi_232 > 59) gi_232 = 0; if (gi_236 < 0 || gi_236 > 23) gi_236 = 0; if (gi_240 < 0 || gi_240 > 59) gi_240 = 0; if (gi_216 < 0) gi_216 = 0; if (gi_216 > 12) gi_216 = 12; } } else { ls_0 = StringSubstr(g_symbol_736, 0, 6); if ((ls_0 != "EURGBP" && ls_0 != "EURCHF" && ls_0 != "GBPCHF" && ls_0 != "USDCAD") || Period() != PERIOD_M15) { Alert("Use scalper system only on EURCHF, EURGPB, GBPCHF or USDCAD M15."); Print("Use scalper system only on EURCHF, EURGPB, GBPCHF or USDCAD M15."); Comment("Error: Wrong TimeFrame or Currency Pair!"); gi_688 = FALSE; } else { if (ls_0 == "EURGBP") { gi_780 = gi_372; gi_784 = gi_376; gi_788 = gi_380; gd_860 = gd_424; gi_792 = gi_384; gi_800 = gi_392; gi_808 = gi_400; gi_816 = gi_408; gi_824 = gi_416; gi_796 = gi_388; gi_804 = gi_396; gi_812 = gi_404; gi_820 = gi_412; gi_828 = gi_420; } else { if (ls_0 == "EURCHF") { gi_780 = gi_432; gi_784 = gi_436; gi_788 = gi_440; gd_860 = gd_484; gi_792 = gi_444; gi_800 = gi_452; gi_808 = gi_460; gi_816 = gi_468; gi_824 = gi_476; gi_796 = gi_448; gi_804 = gi_456; gi_812 = gi_464; gi_820 = gi_472; gi_828 = gi_480; } else { if (ls_0 == "GBPCHF") { gi_780 = gi_492; gi_784 = gi_496; gi_788 = gi_500; gd_860 = gd_544; gi_792 = gi_504; gi_800 = gi_512; gi_808 = gi_520; gi_816 = gi_528; gi_824 = gi_536; gi_796 = gi_508; gi_804 = gi_516; gi_812 = gi_524; gi_820 = gi_532; gi_828 = gi_540; } else { gi_780 = gi_552; gi_784 = gi_556; gi_788 = gi_560; gd_860 = gd_604; gi_792 = gi_564; gi_800 = gi_572; gi_808 = gi_580; gi_816 = gi_588; gi_824 = gi_596; gi_796 = gi_568; gi_804 = gi_576; gi_812 = gi_584; gi_820 = gi_592; gi_828 = gi_600; } } } gd_876 = (-1 * gi_784) * gd_696; gd_868 = gi_780 * gd_696; gi_832 = 60 * gi_792; gi_836 = 60 * gi_800; gi_840 = 60 * gi_808; gi_844 = 60 * gi_816; gi_848 = 60 * gi_824; gd_884 = gi_796 * gd_696; gd_892 = gi_804 * gd_696; gd_900 = gi_812 * gd_696; gd_908 = gi_820 * gd_696; gd_916 = gi_828 * gd_696; gd_940 = NormalizeDouble(gi_788 * gd_696, gi_692); gd_924 = (MarketInfo(g_symbol_736, MODE_SPREAD) + 0.1) * Point; gd_932 = NormalizeDouble(gi_784 * gd_696, gi_692); gi_764 = 100 - gi_632; gi_768 = 100 - gi_640; gi_772 = gi_644 / 2 + 50; gi_776 = 50 - gi_644 / 2; gi_852 = gi_612 + GMTOffset; gi_856 = gi_616 + GMTOffset; while (true) { if (gi_852 >= 24) { gi_852 -= 24; continue; } if (gi_852 >= 0) break; gi_852 += 24; } while (true) { if (gi_856 >= 24) { gi_856 -= 24; continue; } if (gi_856 >= 0) break; gi_856 += 24; } if (g_period_196 <= 0) gi_192 = FALSE; if (g_applied_price_200 < PRICE_CLOSE || g_applied_price_200 > PRICE_WEIGHTED) gi_192 = FALSE; if (g_ma_method_204 < MODE_SMA || g_ma_method_204 > MODE_LWMA) gi_192 = FALSE; } } } void ScalpCode() { if (Symbol() == "EURCHF" || Symbol() == "mEURCHF") gd_1128 = EURCHF_MaxSpread; if (Symbol() == "GBPCHF" || Symbol() == "mGBPCHF") gd_1128 = GBPCHF_MaxSpread; if (Symbol() == "EURGBP" || Symbol() == "mEURGBP") gd_1128 = EURGBP_MaxSpread; if (Symbol() == "USDCAD" || Symbol() == "mUSDCAD") gd_1128 = USDCAD_MaxSpread; double l_spread_0 = MarketInfo(Symbol(), MODE_SPREAD); bool li_8 = FALSE; if (Point == 0.00001 || Point == 0.001) li_8 = 10.0 * gd_1128; else li_8 = gd_1128; if (l_spread_0 >= li_8) { Print("Spread doesn\'t make sense"); return; } if (gi_688) Scalper(); } void Scalper() { double l_irsi_0; double l_irsi_8; double l_ima_16; int l_count_24; double l_ima_28; g_datetime_752 = TimeCurrent(); if (gi_164) WatchLevels(); if (gi_168) NoiseFilter(); SetOrderLevels(); if (Ask - Bid <= gd_924) { if (DayOfWeek() != 0) { if (!gi_184) if (DayOfWeek() == 5) return; if (DayOfWeek() == 1 && Hour() < gi_852) return; if (IsTradeTime()) { if (gi_172 > 0) if (IsRelaxHours()) return; if (gi_176) if (CheckSimpleHeightFilter()) return; if (gi_180) if (CheckTrendFilter()) return; if (gi_188 != 0) if (HaveTrade()) return; HideTestIndicators(TRUE); l_irsi_0 = iRSI(NULL, 0, g_period_628, PRICE_CLOSE, 0); l_irsi_8 = iRSI(NULL, PERIOD_M1, g_period_636, PRICE_CLOSE, 0); l_ima_16 = iMA(NULL, 0, g_period_624, 0, MODE_SMA, PRICE_MEDIAN, 1); HideTestIndicators(FALSE); if (LoadSystem2(2, Ask + 0.0002, ExistPosition(), l_irsi_0, l_irsi_8, gi_640, gi_632, l_ima_16, 0)) { if (gi_744) { if (!gi_192) l_count_24 = 0; else { l_ima_28 = iMA(NULL, 0, g_period_196, 0, g_ma_method_204, g_applied_price_200, 0); if (Close[0] <= l_ima_28) l_count_24++; } if (l_count_24 == 0 && isNewSymbol(Symbol(), g_magic_244) || UseHedge == TRUE) { OpenPosition(OP_BUY, gi_780, gi_784); gi_744 = FALSE; gi_748 = TRUE; } } } if (LoadSystem2(3, Bid - 0.0002, ExistPosition(), l_irsi_0, l_irsi_8, gi_768, gi_764, l_ima_16, 0)) { if (gi_748) { if (!gi_192) l_count_24 = 0; else { l_ima_28 = iMA(NULL, 0, g_period_196, 0, g_ma_method_204, g_applied_price_200, 0); if (Close[0] >= l_ima_28) l_count_24++; } if (l_count_24 == 0 && isNewSymbol(Symbol(), g_magic_244) || UseHedge == TRUE) { OpenPosition(OP_SELL, gi_780, gi_784); gi_748 = FALSE; gi_744 = TRUE; } } } if (LoadSystem2(4, l_irsi_0, gi_772, 0, 0, 0, 0, 0, gi_776)) { gi_748 = TRUE; gi_744 = TRUE; } } } } } bool IsRelaxHours() { int l_datetime_0; bool li_4; double ld_8; double ld_16; double ld_24; int l_datetime_32; int l_ticket_36 = -1; int li_40 = OrdersHistoryTotal() - 1; int l_datetime_44 = -2147483648; for (int l_pos_48 = li_40; l_pos_48 >= 0; l_pos_48--) { if (OrderSelect(l_pos_48, SELECT_BY_POS, MODE_HISTORY)) { if (OrderMagicNumber() == g_magic_244) { if (OrderSymbol() == g_symbol_736) { l_datetime_0 = OrderCloseTime(); if (l_datetime_44 < l_datetime_0) { l_datetime_44 = l_datetime_0; l_ticket_36 = OrderTicket(); } } } } } if (l_ticket_36 < 0) return (FALSE); if (OrderSelect(l_ticket_36, SELECT_BY_TICKET)) { li_4 = FALSE; ld_8 = NormalizeDouble(OrderOpenPrice(), gi_692); ld_16 = NormalizeDouble(OrderClosePrice(), gi_692); ld_24 = NormalizeDouble(OrderStopLoss(), gi_692); if (OrderType() == OP_BUY) { if (ld_16 <= ld_24 && ld_24 != 0.0) li_4 = TRUE; else if (ld_8 - ld_16 >= gd_932) li_4 = TRUE; } else { if (ld_16 >= ld_24 && ld_24 != 0.0) li_4 = TRUE; else if (ld_16 - ld_8 >= gd_932) li_4 = TRUE; } } else return (FALSE); if (!li_4) return (FALSE); int l_shift_52 = iBarShift(NULL, PERIOD_H1, l_datetime_44, FALSE); if (l_shift_52 < gi_172) { l_datetime_32 = iTime(NULL, PERIOD_H1, 0); if (g_datetime_760 != l_datetime_32) g_datetime_760 = l_datetime_32; return (TRUE); } return (FALSE); } bool CheckTrendFilter() { double ld_0; double ld_8; double ld_16; if (gi_660 <= 0) return (FALSE); for (int li_24 = 0; li_24 <= gi_664; li_24++) { ld_0 = NormalizeDouble(iMA(NULL, 0, g_period_648, 0, g_ma_method_656, g_applied_price_652, li_24), gi_692); ld_8 = NormalizeDouble(iMA(NULL, 0, g_period_648, 0, g_ma_method_656, g_applied_price_652, li_24 + gi_660), gi_692); ld_16 = 100.0 * MathAbs(ld_0 - ld_8) / ld_8; if (ld_16 > gd_860) break; } if (li_24 > gi_664) return (FALSE); return (TRUE); } bool CheckSimpleHeightFilter() { int l_datetime_0; bool li_4 = FALSE; if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 1) - iLow(NULL, PERIOD_M15, 1), gi_692) > gd_940) li_4 = TRUE; if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 2) - iLow(NULL, PERIOD_M15, 2), gi_692) > gd_940) li_4 = TRUE; if (li_4) { l_datetime_0 = iTime(NULL, PERIOD_M15, 0); if (g_datetime_756 != l_datetime_0) g_datetime_756 = l_datetime_0; return (TRUE); } return (FALSE); } bool IsTradeTime() { int l_hour_0 = TimeHour(g_datetime_752); if (gi_852 < gi_856 && l_hour_0 < gi_852 || l_hour_0 >= gi_856) return (FALSE); if (gi_852 > gi_856 && (l_hour_0 < gi_852 && l_hour_0 >= gi_856)) return (FALSE); if (gi_856 == 0) gi_856 = 24; if (Hour() == gi_856 - 1 && Minute() >= gi_620) return (FALSE); return (TRUE); } int ExistPosition() { int l_ord_total_0 = OrdersTotal(); for (int l_pos_4 = 0; l_pos_4 < l_ord_total_0; l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == g_magic_244) { if (OrderSymbol() == g_symbol_736) if (OrderType() <= OP_SELL) return (1); } } } return (0); } int OpenPosition(int a_cmd_0, int ai_unused_4, int ai_unused_8) { double l_price_12; color l_color_20; string ls_unused_24; double ld_32 = LotsOptimized(); if (AccountFreeMarginCheck(g_symbol_736, a_cmd_0, ld_32) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) { Print("You don\'t have free margin."); Comment("You don\'t have free margin."); return (-1); } RefreshRates(); if (a_cmd_0 == OP_BUY) { l_price_12 = Ask; l_color_20 = g_color_248; } else { l_price_12 = Bid; l_color_20 = g_color_252; } int l_ticket_40 = OrderSend(g_symbol_736, a_cmd_0, ld_32, l_price_12, MarketInfo(g_symbol_736, MODE_SPREAD), 0, 0, g_comment_208, g_magic_244, 0, l_color_20); if (l_ticket_40 < 0) { } return (l_ticket_40); } void NoiseFilter() { int li_0; double l_price_4; double ld_12; int li_20; double ld_24; bool l_ord_close_32; string ls_unused_36; int l_spread_44 = MarketInfo(g_symbol_736, MODE_SPREAD); int li_48 = OrdersTotal() - 1; for (int l_pos_52 = li_48; l_pos_52 >= 0; l_pos_52--) { if (OrderSelect(l_pos_52, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == g_magic_244) { if (OrderType() <= OP_SELL) { if (OrderSymbol() == g_symbol_736) { li_0 = g_datetime_752 - OrderOpenTime(); if (li_0 > gi_832) { l_price_4 = NormalizeDouble(OrderClosePrice(), gi_692); ld_12 = NormalizeDouble(OrderOpenPrice(), gi_692); li_20 = 0; if (OrderType() == OP_BUY) ld_24 = l_price_4 - ld_12; else ld_24 = ld_12 - l_price_4; if (li_0 < gi_836 && ld_24 >= gd_884) li_20 = 1; else { if (li_0 > gi_836 && li_0 < gi_840 && ld_24 >= gd_892) li_20 = 2; else { if (li_0 > gi_840 && li_0 < gi_844 && ld_24 >= gd_900) li_20 = 3; else { if (li_0 > gi_844 && li_0 < gi_848 && ld_24 >= gd_908) li_20 = 4; else if (li_0 > gi_848 && ld_24 >= gd_916) li_20 = 5; } } } if (li_20 != 0) { RefreshRates(); l_ord_close_32 = OrderClose(OrderTicket(), OrderLots(), l_price_4, l_spread_44, g_color_248); if (!l_ord_close_32) { } } } } } } } } } void WatchLevels() { double l_price_0; double ld_8; double ld_16; bool l_ord_close_24; if (gi_780 <= 0 && gi_784 <= 0) return; int l_spread_28 = MarketInfo(g_symbol_736, MODE_SPREAD); int li_32 = OrdersTotal() - 1; for (int l_pos_36 = li_32; l_pos_36 >= 0; l_pos_36--) { if (OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == g_magic_244) { if (OrderType() <= OP_SELL) { if (OrderSymbol() == g_symbol_736) { l_price_0 = NormalizeDouble(OrderClosePrice(), gi_692); ld_8 = NormalizeDouble(OrderOpenPrice(), gi_692); if (OrderType() == OP_BUY) { ld_16 = l_price_0 - ld_8; if ((gd_868 > 0.0 && ld_16 >= gd_868) || (gd_876 < 0.0 && ld_16 <= gd_876)) { l_ord_close_24 = OrderClose(OrderTicket(), OrderLots(), l_price_0, l_spread_28, g_color_248); if (!l_ord_close_24) if (gi_256) Print("OrderClose(OP_BUY) error = ", GetLastError()); } } else { ld_16 = ld_8 - l_price_0; if ((gd_868 > 0.0 && ld_16 >= gd_868) || (gd_876 < 0.0 && ld_16 <= gd_876)) { l_ord_close_24 = OrderClose(OrderTicket(), OrderLots(), l_price_0, l_spread_28, g_color_252); if (!l_ord_close_24) if (gi_256) Print("OrderClose(OP_SELL) error = ", GetLastError()); } } } } } } } } double LotsOptimized() { if (!UseMM) return (LotsSize); return (MathCeil(AccountBalance() / 1000.0) * LotsSize); } void SetOrderLevels() { double ld_0; double l_price_8; double ld_16; double ld_24; bool li_32; int li_36; int li_40; double l_price_44; double l_price_52; bool l_bool_60; double ld_64 = NormalizeDouble(MarketInfo(g_symbol_736, MODE_STOPLEVEL) * Point, Digits); int li_72 = OrdersTotal() - 1; for (int l_pos_76 = li_72; l_pos_76 >= 0; l_pos_76--) { if (OrderSelect(l_pos_76, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == g_magic_244) { if (OrderType() <= OP_SELL) { if (OrderSymbol() == g_symbol_736) { ld_0 = NormalizeDouble(OrderClosePrice(), gi_692); l_price_8 = NormalizeDouble(OrderOpenPrice(), gi_692); ld_16 = NormalizeDouble(OrderStopLoss(), gi_692); ld_24 = NormalizeDouble(OrderTakeProfit(), gi_692); li_32 = TRUE; li_36 = 0; li_40 = 0; if (ld_16 == 0.0) { if (gi_164) li_36 = gi_668 + MathRand() % gi_672; else li_36 = gi_784; if (li_36 != 0) { if (OrderType() == OP_BUY) { l_price_44 = NormalizeDouble(l_price_8 - li_36 * gd_696, gi_692); if (ld_0 - l_price_44 <= ld_64) li_32 = FALSE; } else { l_price_44 = NormalizeDouble(l_price_8 + li_36 * gd_696, gi_692); if (l_price_44 - ld_0 <= ld_64) li_32 = FALSE; } } } else l_price_44 = ld_16; if (ld_24 == 0.0) { if (gi_164) li_40 = gi_676 + MathRand() % gi_680; else li_40 = gi_780; if (li_40 != 0) { if (OrderType() == OP_BUY) { l_price_52 = NormalizeDouble(l_price_8 + li_40 * gd_696, gi_692); if (l_price_52 - ld_0 <= ld_64) li_32 = FALSE; } else { l_price_52 = NormalizeDouble(l_price_8 - li_40 * gd_696, gi_692); if (ld_0 - l_price_52 <= ld_64) li_32 = FALSE; } } } else l_price_52 = ld_24; if (li_36 != 0 && li_40 != 0 && li_32) { l_bool_60 = OrderModify(OrderTicket(), l_price_8, l_price_44, l_price_52, 0, CLR_NONE); if (!l_bool_60) if (gi_256) Print("OrderClose(OP_SELL) error = ", GetLastError()); } } } } } } } bool HaveTrade() { int l_datetime_0; if (gi_612 == gi_616) return (FALSE); int l_datetime_4 = TimeCurrent(); int li_8 = iTime(NULL, PERIOD_D1, 0); int l_hour_12 = TimeHour(l_datetime_4); int li_unused_16 = 0; if (gi_612 > gi_616) if (l_hour_12 < gi_612) li_8 -= 86400; li_8 += 3600 * gi_612; int li_20 = OrdersTotal() - 1; int l_datetime_24 = -2147483648; for (int l_pos_28 = li_20; l_pos_28 >= 0; l_pos_28--) { if (OrderSelect(l_pos_28, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == g_magic_244) { if (OrderSymbol() == g_symbol_736) { l_datetime_0 = OrderOpenTime(); if (l_datetime_24 < l_datetime_0) l_datetime_24 = l_datetime_0; } } } } if (l_datetime_24 >= li_8) return (TRUE); li_20 = OrdersHistoryTotal() - 1; l_datetime_24 = -2147483648; for (l_pos_28 = li_20; l_pos_28 >= 0; l_pos_28--) { if (OrderSelect(l_pos_28, SELECT_BY_POS, MODE_HISTORY)) { if (OrderMagicNumber() == g_magic_244) { if (OrderSymbol() == g_symbol_736) { l_datetime_0 = OrderOpenTime(); if (l_datetime_24 < l_datetime_0) l_datetime_24 = l_datetime_0; } } } } if (l_datetime_24 >= li_8) return (TRUE); return (FALSE); } int wait(bool ai_0 = FALSE, int ai_4 = 3) { if (ai_0) g_count_1152 = 0; g_count_1152++; if (ai_4 == g_count_1152) return (1); return (0); } void Cook(string &asa_0[14]) { asa_0[0] = AccountCompany(); asa_0[1] = AccountCurrency(); asa_0[2] = AccountName(); asa_0[3] = WindowExpertName(); asa_0[4] = AccountServer(); asa_0[5] = AccountNumber(); asa_0[6] = TerminalCompany(); asa_0[7] = TerminalName(); asa_0[8] = TerminalPath(); asa_0[9] = TimeToStr(TimeCurrent(), TIME_DATE); asa_0[10] = "1"; asa_0[11] = Symbol(); asa_0[12] = "12345"; asa_0[13] = DoubleToStr(IsTesting(), 0); } int GetTheNews() { int li_0 = GetNews(gsa_316, gsa_320, gia_324, gia_328, gia_332, gia_336, GMTOffset); string ls_4 = ""; if (gi_1144 == 0) ls_4 = "System loaded successfully\n\n"; int l_index_12 = 0; for (int l_index_16 = 0; l_index_16 < li_0; l_index_16++) { if (gia_332[l_index_16] > TimeCurrent() && strstr(Symbol(), gsa_320[l_index_16]) && gia_336[l_index_16] >= LeastImpact) { ls_4 = ls_4 + "News Title: " + gsa_316[l_index_16] + " - Currency: " + gsa_320[l_index_16] + " - News Time: " + TimeToStr(gia_332[l_index_16]) + " - Impact: " + gia_336[l_index_16] + "\n"; gsa_340[l_index_12] = gsa_316[l_index_16]; gia_344[l_index_12] = gia_332[l_index_16]; gia_348[l_index_12] = gia_336[l_index_16]; l_index_12++; } } int li_20 = -1; int li_24 = GetTheComingNews(gi_352, gi_356, li_20); if (li_24 > -1) { gi_360 = gi_352; ls_4 = ls_4 + "-------------------------------------------------------------------------------------------\n"; ls_4 = ls_4 + "Comming news event is: " + gsa_340[li_24] + " / " + TimeToStr(gia_344[li_24]) + " (Impact = " + gi_364 + " )" + " Which is " + ((gia_344[li_24] - TimeCurrent()) / 60) + " Minutes from now!\n"; if (li_20 > -1) ls_4 = ls_4 + "Next news event is: " + gsa_340[li_20] + " / " + TimeToStr(gia_344[li_20]) + " Which is " + ((gia_344[li_20] - TimeCurrent()) / 60) + " Minutes from now!\n"; ls_4 = ls_4 + "-------------------------------------------------------------------------------------------\n"; if (gi_360 - TimeCurrent() <= 60 * (60 * TradeHoursBeforeNews)) gi_368 = FALSE; else gi_368 = TRUE; ls_4 = ls_4 + "Trade Allowed = " + BoolToString(gi_368) + "\n"; ls_4 = ls_4 + "-------------------------------------------------------------------------------------------\n"; } else { ls_4 = ls_4 + "\nNo coming events this week for this pair!"; gi_360 = TimeCurrent() + 60000; gi_368 = TRUE; } if (PrintNewsOnChart) Comment(ls_4); return (0); } int GetTheComingNews(int &ai_0, int &ai_4, int &ai_8) { int li_12 = TimeCurrent() + 1209600; int li_16 = TimeCurrent() + 1209600; int li_ret_20 = -1; for (int l_index_24 = 0; l_index_24 < 100; l_index_24++) { if (gia_344[l_index_24] < li_12 && gia_344[l_index_24] > 0) { li_12 = gia_344[l_index_24]; gi_364 = gia_348[l_index_24]; li_ret_20 = l_index_24; } } for (l_index_24 = 0; l_index_24 < 100; l_index_24++) { if (gia_344[l_index_24] > li_12 && gia_344[l_index_24] < li_16 && gia_344[l_index_24] > 0) { li_16 = gia_344[l_index_24]; ai_8 = l_index_24; } } ai_0 = li_12; ai_4 = li_16; return (li_ret_20); } bool strstr(string as_0, string as_8) { if (StringFind(as_0, as_8, 0) > -1) return (TRUE); return (FALSE); } string BoolToString(bool ai_0) { if (ai_0) return ("YES"); return ("NO"); } string StringUpperCase(string as_0) { string ls_ret_16; int l_str_len_8 = StringLen(as_0); int li_12 = 0; for (int li_24 = 0; li_24 < l_str_len_8; li_24++) { li_12 = StringGetChar(as_0, li_24); if (li_12 >= 97 && li_12 <= 122) li_12 -= 32; ls_ret_16 = ls_ret_16 + CharToStr(li_12); } return (ls_ret_16); } int GetMagicNumber(int ai_0) { int li_ret_4 = 0; if (StringFind(StringUpperCase(Symbol()), "USDCHF") > -1) li_ret_4 = ai_0 + 111; if (StringFind(StringUpperCase(Symbol()), "GBPUSD") > -1) li_ret_4 = ai_0 + 222; if (StringFind(StringUpperCase(Symbol()), "EURUSD") > -1) li_ret_4 = ai_0 + 333; if (StringFind(StringUpperCase(Symbol()), "USDJPY") > -1) li_ret_4 = ai_0 + 444; if (StringFind(StringUpperCase(Symbol()), "AUDUSD") > -1) li_ret_4 = ai_0 + 555; if (StringFind(StringUpperCase(Symbol()), "USDCAD") > -1) li_ret_4 = ai_0 + 666; if (StringFind(StringUpperCase(Symbol()), "EURGBP") > -1) li_ret_4 = ai_0 + 777; if (StringFind(StringUpperCase(Symbol()), "EURCHF") > -1) li_ret_4 = ai_0 + 888; if (StringFind(StringUpperCase(Symbol()), "EURJPY") > -1) li_ret_4 = ai_0 + 999; if (StringFind(StringUpperCase(Symbol()), "GBPJPY") > -1) li_ret_4 = ai_0 + 1010; if (StringFind(StringUpperCase(Symbol()), "GBPCHF") > -1) li_ret_4 = ai_0 + 1111; if (StringFind(StringUpperCase(Symbol()), "EURAUD") > -1) li_ret_4 = ai_0 + 1212; if (StringFind(StringUpperCase(Symbol()), "EURCAD") > -1) li_ret_4 = ai_0 + 1313; if (StringFind(StringUpperCase(Symbol()), "USDSGD") > -1) li_ret_4 = ai_0 + 1414; if (StringFind(StringUpperCase(Symbol()), "NZDUSD") > -1) li_ret_4 = ai_0 + 1515; if (StringFind(StringUpperCase(Symbol()), "CHFJPY") > -1) li_ret_4 = ai_0 + 1616; if (StringFind(StringUpperCase(Symbol()), "EURNZD") > -1) li_ret_4 = ai_0 + 1717; if (StringFind(StringUpperCase(Symbol()), "AUDJPY") > -1) li_ret_4 = ai_0 + 1818; if (StringFind(StringUpperCase(Symbol()), "AUDNZD") > -1) li_ret_4 = ai_0 + 1919; if (StringFind(StringUpperCase(Symbol()), "AUDCAD") > -1) li_ret_4 = ai_0 + 2020; if (StringFind(StringUpperCase(Symbol()), "AUDCHF") > -1) li_ret_4 = ai_0 + 2121; if (StringFind(StringUpperCase(Symbol()), "CADCHF") > -1) li_ret_4 = ai_0 + 2222; if (StringFind(StringUpperCase(Symbol()), "CADJPY") > -1) li_ret_4 = ai_0 + 2323; if (StringFind(StringUpperCase(Symbol()), "NZDJPY") > -1) li_ret_4 = ai_0 + 2424; if (StringFind(StringUpperCase(Symbol()), "USDDKK") > -1) li_ret_4 = ai_0 + 2525; if (StringFind(StringUpperCase(Symbol()), "USDNOK") > -1) li_ret_4 = ai_0 + 2626; if (StringFind(StringUpperCase(Symbol()), "USDSEK") > -1) li_ret_4 = ai_0 + 2727; if (StringFind(StringUpperCase(Symbol()), "SGDJPY") > -1) li_ret_4 = ai_0 + 2828; if (StringFind(StringUpperCase(Symbol()), "USDHKD") > -1) li_ret_4 = ai_0 + 2929; if (StringFind(StringUpperCase(Symbol()), "NZDGBP") > -1) li_ret_4 = ai_0 + 3030; if (StringFind(StringUpperCase(Symbol()), "AUDEUR") > -1) li_ret_4 = ai_0 + 3131; if (li_ret_4 == 0) li_ret_4 = ai_0 + 1999; return (li_ret_4); } int isNewSymbol(string a_symbol_0, int a_magic_8) { for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (a_symbol_0 == OrderSymbol() && OrderMagicNumber() == a_magic_8) return (0); } return (1); } int GetNews(string &asa_0[100], string &asa_4[100], int &aia_8[100], int &aia_12[100], int &aia_16[100], int &aia_20[100], int ai_24 = 0) { string ls_28 = GrabWeb(gs_100); if (ls_28 == "0") return (0); string ls_36 = ""; string ls_44 = ""; string ls_52 = ""; string ls_60 = ""; string ls_68 = ""; string ls_76 = ""; string ls_84 = ""; int l_index_92 = 0; while (true) { ls_36 = GetBetween(ls_28, "", "", 0); if (ls_36 == "") break; ls_44 = GetBetween(ls_28, "", "", 1); ls_52 = GetBetween(ls_28, "", "", 2); ls_60 = GetBetween(ls_28, "", "", 3); ls_68 = GetBetween(ls_28, "", 4); ls_76 = GetBetween(ls_28, "", "", 5); ls_84 = ls_44 + "\n"; ls_84 = ls_84 + ls_52 + "\n"; ls_84 = ls_84 + ls_60 + "\n"; ls_84 = ls_84 + ls_68 + "\n"; ls_84 = ls_84 + ls_76; if (StringFind(ls_76, "Holiday", 0) != -1) continue; asa_0[l_index_92] = ls_44; asa_4[l_index_92] = ls_52; ls_60 = FormatYear(ls_60); aia_8[l_index_92] = StrToTime(ls_60); aia_12[l_index_92] = StrToTime(ls_68); aia_20[l_index_92] = ImpactToInt(ls_76); aia_16[l_index_92] = ConvertToTime(ls_60, ls_68, ai_24); l_index_92++; } return (l_index_92); } string FormatYear(string as_0) { string ls_8 = StringSubstr(as_0, 0, 2); string ls_16 = StringSubstr(as_0, 3, 2); string ls_24 = StringSubstr(as_0, 6, 4); return (ls_24 + "." + ls_8 + "." + ls_16); } int ImpactToInt(string as_0) { string ls_8 = StringLowerCase(as_0); if (strstr(ls_8, "holiday")) return (0); if (strstr(ls_8, "low")) return (1); if (strstr(ls_8, "medium")) return (2); if (strstr(ls_8, "high")) return (3); return (0); } string StringLowerCase(string as_0) { int l_str_len_8 = StringLen(as_0); int li_12 = 0; string ls_ret_16 = ""; for (int li_24 = 0; li_24 < l_str_len_8; li_24++) { li_12 = StringGetChar(as_0, li_24); if (li_12 >= 65 && li_12 <= 90) li_12 += 32; ls_ret_16 = ls_ret_16 + CharToStr(li_12); } return (ls_ret_16); } int ConvertToTime(string as_0, string as_8, int ai_16 = 0) { string ls_20 = ""; if (strstr(as_8, "12") && strstr(as_8, "am")) { as_8 = StringReplace(as_8, "12", "00"); ls_20 = as_0 + " " + as_8; return (StrToTime(ls_20) + 60 * (60 * ai_16)); } if (strstr(as_8, "12") && strstr(as_8, "pm")) { ls_20 = as_0 + " " + as_8; return (StrToTime(ls_20) + 60 * (60 * ai_16)); } if (strstr(as_8, "pm") == 0 && strstr(as_8, "am") == 0) { ls_20 = as_0 + " " + as_8; return (StrToTime(ls_20) + 60 * (60 * ai_16)); } ls_20 = as_0 + " " + as_8; if (strstr(as_8, "pm") && strstr(as_8, "12") == 0) return (StrToTime(ls_20) + 43200 + 60 * (60 * ai_16)); if (strstr(as_8, "am") && strstr(as_8, "12") == 0) return (StrToTime(ls_20) + 60 * (60 * ai_16)); return (0); } string StringReplace(string as_0, string as_8, string as_16) { string ls_24 = ""; string ls_32 = ""; int li_40 = StringFind(as_0, as_8); if (li_40 > -1) { if (li_40 != 0) ls_24 = StringSubstr(as_0, 0, li_40); ls_32 = StringSubstr(as_0, li_40 + StringLen(as_8), StringLen(as_0) - li_40 + StringLen(as_8)); } return (ls_24 + as_16 + ls_32); } string GetBetween(string as_0, string as_8, string as_16, int ai_24 = -1) { int li_28 = 0; int li_32 = 0; int li_36 = 0; string ls_ret_40 = ""; if (ai_24 == -1) { li_32 = StringFind(as_0, as_8, li_28); if (li_32 > -1) li_36 = StringFind(as_0, as_16, li_32); if (li_36 > -1) ls_ret_40 = StringSubstr(as_0, li_32 + StringLen(as_8), li_36 - li_32 - StringLen(as_8)); } else { li_32 = StringFind(as_0, as_8, gia_1156[ai_24]); if (li_32 > -1) li_36 = StringFind(as_0, as_16, li_32); if (li_36 > -1) ls_ret_40 = StringSubstr(as_0, li_32 + StringLen(as_8), li_36 - li_32 - StringLen(as_8)); if (li_32 > gia_1156[ai_24]) gia_1156[ai_24] = li_32 + StringLen(as_8) + li_36 - li_32 - StringLen(as_8) + 1; else { gia_1156[ai_24] = 0; ls_ret_40 = ""; } } return (ls_ret_40); } int sym(string as_0) { if (StringFind(StringLowerCase(Symbol()), StringLowerCase(as_0)) > -1) return (1); return (0); }