#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, "