/*
Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
Website: http://purebeam.biz
E-mail : purebeam@gmail.com
*/
#property link "http://forexultimatebot.com"
extern string Version = "Forex Ultimate Bot v1.4";
extern double Lots = 0.1;
extern bool MM = FALSE;
extern bool In_BUY = TRUE;
extern bool In_SELL = TRUE;
extern int Aggr_level = 1;
extern double f1 = 0.18;
extern double f2 = 0.18;
extern int Period_Filtring = 3;
extern int SL_bs = 122;
extern bool RecoveryMode = FALSE;
extern bool StealthMode = TRUE;
extern bool TradeOnFridays = FALSE;
extern bool Modify_SL_TP = TRUE;
extern int Modify_SL_TP_Seconds = 10;
extern bool UseSignalRefreshRate = FALSE;
extern int SignalRefreshRate = 1;
string password = "12345";
int gi_168 = 0;
int gi_172 = 2;
int gi_176 = 1;
string gs_180 = "";
int gi_188 = 0;
int g_ticket_192 = 0;
int g_magic_196 = 144;
int g_magic_200 = 233;
double g_lots_204;
bool gi_212;
int init() {
g_lots_204 = Lots;
if (Digits == 5) {
gi_172 = 10 * gi_172;
gi_176 = 10 * gi_176;
}
return (0);
}
int deinit() {
return (0);
}
void LotHandle() {
if (MM == TRUE) {
gi_212 = AccountBalance() / 1000.0;
if (gi_212 == FALSE) gi_212 = TRUE;
} else gi_212 = TRUE;
if (RecoveryMode == TRUE) {
if (LastClosedProfit() < 0.0) {
Lots = 2.0 * g_lots_204 * gi_212;
return;
}
Lots = g_lots_204 * gi_212;
return;
}
Lots = g_lots_204 * gi_212;
}
int start() {
int li_0;
gs_180 = AccountNumber() + IsDemo() + 1000;
if (MD5(gs_180) != password) {
/* Alert("Password is incorrect: " + password);
Print("=========================================");
Print("Password is incorrect");
Print("AccountNumber: " + AccountNumber());
Print("AccountNumber IsDemo: " + "2B" + gs_180 + "AH");
Print("Password: <" + password + ">");
Print("=========================================");*/
}
if (Aggr_level == 0) Aggr_level = 24;
else {
if (Aggr_level == 1) Aggr_level = 5;
else Aggr_level = 24;
}
LotHandle();
if (StealthMode == TRUE || StealthMode == FALSE) {
if (TimeCurrent() <= gi_188) return (0);
li_0 = 57;
if (UseSignalRefreshRate == TRUE) li_0 = SignalRefreshRate;
gi_188 = TimeCurrent() + 60 * li_0;
} else {
if (Time[0] == gi_188) return (0);
gi_188 = Time[0];
if (!IsTradeAllowed()) {
gi_188 = Time[1];
MathSrand(TimeCurrent());
Sleep(MathRand() + 30000);
}
}
if (TradeOnFridays == FALSE && TimeDayOfWeek(TimeCurrent()) == 5) return (0);
if (In_BUY && MA_Signal() == 1) Trade_BUY();
if (In_SELL && MA_Signal() == 2) Trade_SELL();
return (0);
}
int MA_Signal() {
double l_ima_0 = iMA(Symbol(), 0, Period_Filtring, 0, MODE_EMA, PRICE_CLOSE, 1);
double l_ima_8 = iMA(Symbol(), 0, Period_Filtring, 0, MODE_EMA, PRICE_CLOSE, 2);
if (l_ima_0 > l_ima_8) return (1);
if (l_ima_0 < l_ima_8) return (2);
return (0);
}
void Trade_BUY() {
int l_ord_total_0 = OrdersTotal();
for (int l_pos_4 = 0; l_pos_4 < l_ord_total_0; l_pos_4++) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_196) return;
}
g_ticket_192 = -1;
double l_price_8 = Out(Aggr_level, f1);
if (l_price_8 > Bid + 15 * gi_172 * Point && IsTradeAllowed()) {
if (Modify_SL_TP == FALSE) g_ticket_192 = OrderSend(Symbol(), OP_BUY, lot(gi_168), Ask, 8, Bid - gi_176 * SL_bs * Point, l_price_8, 0, g_magic_196, 0, Blue);
else {
g_ticket_192 = OrderSend(Symbol(), OP_BUY, lot(gi_168), Ask, 8, 0, 0, 0, g_magic_196, 0, Blue);
Sleep(1000 * Modify_SL_TP_Seconds);
OrderSelect(g_ticket_192, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - gi_176 * SL_bs * Point, l_price_8, OrderExpiration(), CLR_NONE);
}
RefreshRates();
if (g_ticket_192 < 0) {
Sleep(30000);
gi_188 = Time[1];
}
}
}
void Trade_SELL() {
int l_ord_total_0 = OrdersTotal();
for (int l_pos_4 = 0; l_pos_4 < l_ord_total_0; l_pos_4++) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_200) return;
}
g_ticket_192 = -1;
double l_price_8 = Out(Aggr_level, f2);
if (l_price_8 < Ask - 15 * gi_172 * Point && IsTradeAllowed()) {
if (Modify_SL_TP == FALSE) g_ticket_192 = OrderSend(Symbol(), OP_SELL, lot(gi_168), Bid, 8, Ask + gi_176 * SL_bs * Point, l_price_8, 0, g_magic_200, 0, Red);
else {
g_ticket_192 = OrderSend(Symbol(), OP_SELL, lot(gi_168), Bid, 8, 0, 0, 0, g_magic_200, 0, Red);
Sleep(1000 * Modify_SL_TP_Seconds);
OrderSelect(g_ticket_192, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + gi_176 * SL_bs * Point, l_price_8, OrderExpiration(), CLR_NONE);
}
RefreshRates();
if (g_ticket_192 < 0) {
Sleep(30000);
gi_188 = Time[1];
}
}
}
double Out(int a_period_0, double ad_4) {
double lda_12[1000];
double lda_16[1000];
double l_ima_20 = iMA(NULL, 0, a_period_0, 0, MODE_LWMA, PRICE_CLOSE, 1);
double l_ima_28 = iMA(NULL, 0, a_period_0, 0, MODE_SMA, PRICE_CLOSE, 1);
lda_12[a_period_0] = (6.0 * l_ima_20 - 6.0 * l_ima_28) / (a_period_0 - 1);
lda_16[a_period_0] = 4.0 * l_ima_28 - 3.0 * l_ima_20 - lda_12[a_period_0];
for (int li_36 = a_period_0 - 1; li_36 > 0; li_36--) {
lda_16[li_36] = ad_4 * Close[li_36] + (1 - ad_4) * (lda_16[li_36 + 1] + (lda_12[li_36 + 1]));
lda_12[li_36] = ad_4 * (lda_16[li_36] - (lda_16[li_36 + 1])) + (1 - ad_4) * (lda_12[li_36 + 1]);
}
return (NormalizeDouble(lda_16[1] + lda_12[1], MarketInfo(Symbol(), MODE_DIGITS)));
}
double lot(int ai_0) {
int li_20;
double l_lots_24;
double l_minlot_4 = MarketInfo(Symbol(), MODE_MINLOT);
double l_maxlot_12 = MarketInfo(Symbol(), MODE_MAXLOT);
if (Lots == 0.0) {
li_20 = MathAbs(MathLog(l_minlot_4) / 2.0) + 0.5;
l_lots_24 = NormalizeDouble(0.00001 * AccountFreeMargin() * ai_0, li_20);
if (AccountFreeMargin() < l_lots_24 * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) l_lots_24 = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), li_20);
} else l_lots_24 = Lots;
return (MathMax(MathMin(l_lots_24, l_maxlot_12), l_minlot_4));
}
double LastClosedProfit() {
int l_ticket_0 = LastClosedTicket();
if (l_ticket_0 > 0)
if (OrderSelect(l_ticket_0, SELECT_BY_TICKET, MODE_HISTORY)) return (OrderProfit());
return (0.0);
}
int LastClosedTicket() {
int l_datetime_0 = 0;
int l_ticket_4 = -1;
for (int l_pos_8 = 0; l_pos_8 < OrdersHistoryTotal(); l_pos_8++) {
if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderType() <= OP_SELL) {
if (OrderCloseTime() > l_datetime_0) {
l_datetime_0 = OrderCloseTime();
l_ticket_4 = OrderTicket();
}
}
}
}
return (l_ticket_4);
}
string MD5(string as_0) {
int lia_36[16];
int lia_40[16];
int lia_52[4];
string ls_64;
int li_72;
int l_str_len_8 = StringLen(as_0);
int li_12 = l_str_len_8 % 64;
int li_16 = (l_str_len_8 - li_12) / 64;
int li_20 = 1732584193;
int li_24 = -271733879;
int li_28 = -1732584194;
int li_32 = 271733878;
for (int l_count_44 = 0; l_count_44 < li_16; l_count_44++) {
ls_64 = StringSubstr(as_0, l_count_44 << 6, 64);
StringToIntegerArray(lia_36, ls_64);
MD5Transform(li_20, li_24, li_28, li_32, lia_36);
}
ArrayInitialize(lia_40, 0);
ArrayInitialize(lia_52, 0);
int li_56 = 0;
if (li_12 > 0) {
li_72 = li_12 % 4;
li_16 = li_12 - li_72;
if (li_16 > 0) {
ls_64 = StringSubstr(as_0, l_count_44 << 6, li_16);
li_56 = StringToIntegerArray(lia_40, ls_64);
}
for (int l_index_48 = 0; l_index_48 < li_72; l_index_48++) lia_52[l_index_48] = StringGetChar(as_0, l_count_44 << 6 + li_16 + l_index_48);
}
lia_52[l_index_48] = 128;
lia_40[li_56] = CharToInteger(lia_52);
if (li_12 >= 56) {
MD5Transform(li_20, li_24, li_28, li_32, lia_40);
ArrayInitialize(lia_40, 0);
}
lia_40[14] = l_str_len_8 << 3;
lia_40[15] = l_str_len_8 >> 1 & EMPTY_VALUE >> 28;
MD5Transform(li_20, li_24, li_28, li_32, lia_40);
return (StringConcatenate(IntegerToString(li_20), IntegerToString(li_24), IntegerToString(li_28), IntegerToString(li_32)));
}
int F(int ai_0, int ai_4, int ai_8) {
return (ai_0 & ai_4 | ai_0 & ai_8);
}
int G(int ai_0, int ai_4, int ai_8) {
return (ai_0 & ai_8 | ai_4 & ai_8);
}
int H(int ai_0, int ai_4, int ai_8) {
return (ai_0 ^ ai_4 ^ ai_8);
}
int I(int ai_0, int ai_4, int ai_8) {
return (ai_4 ^ ai_0 | ai_8);
}
int AddUnsigned(int ai_0, int ai_4) {
int li_ret_8 = ai_0 + ai_4;
return (li_ret_8);
}
int FF(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
ai_0 = AddUnsigned(ai_0, AddUnsigned(AddUnsigned(F(ai_4, ai_8, ai_12), ai_16), ai_24));
return (AddUnsigned(RotateLeft(ai_0, ai_20), ai_4));
}
int GG(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
ai_0 = AddUnsigned(ai_0, AddUnsigned(AddUnsigned(G(ai_4, ai_8, ai_12), ai_16), ai_24));
return (AddUnsigned(RotateLeft(ai_0, ai_20), ai_4));
}
int HH(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
ai_0 = AddUnsigned(ai_0, AddUnsigned(AddUnsigned(H(ai_4, ai_8, ai_12), ai_16), ai_24));
return (AddUnsigned(RotateLeft(ai_0, ai_20), ai_4));
}
int II(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
ai_0 = AddUnsigned(ai_0, AddUnsigned(AddUnsigned(I(ai_4, ai_8, ai_12), ai_16), ai_24));
return (AddUnsigned(RotateLeft(ai_0, ai_20), ai_4));
}
int RotateLeft(int ai_0, int ai_4) {
if (ai_4 == 32) return (ai_0);
int li_ret_8 = ai_0 << ai_4 | ai_0 >> 1 & EMPTY_VALUE >> (31 - ai_4);
return (li_ret_8);
}
int StringToIntegerArray(int &aia_0[16], string as_4) {
int li_12 = StringLen(as_4);
if (li_12 % 4 != 0) li_12 -= li_12 % 4;
int l_arr_size_24 = ArraySize(aia_0);
if (l_arr_size_24 < li_12 / 4) ArrayResize(aia_0, li_12 / 4);
int l_index_16 = 0;
for (int li_20 = 0; li_20 < li_12; li_20 += 4) {
aia_0[l_index_16] = StringGetChar(as_4, li_20) | StringGetChar(as_4, li_20 + 1) << 8 | StringGetChar(as_4, li_20 + 2) << 16 | StringGetChar(as_4, li_20 + 3) << 24;
l_index_16++;
}
return (li_12 / 4);
}
string IntegerToString(int ai_0) {
string ls_12;
int lia_20[4];
string l_str_concat_4 = "";
lia_20[0] = ai_0 & 255;
for (int li_24 = 1; li_24 < 4; li_24++) lia_20[li_24] = ai_0 >> 1 & EMPTY_VALUE >> (li_24 << 3 - 1) & 255;
for (int l_index_28 = 0; l_index_28 < 4; l_index_28++) {
ls_12 = Dec2Hex(lia_20[l_index_28]);
l_str_concat_4 = StringConcatenate(l_str_concat_4, ls_12);
}
return (l_str_concat_4);
}
string Dec2Hex(int ai_0) {
int li_4;
string l_str_concat_8;
for (int l_count_16 = 0; l_count_16 < 2; l_count_16++) {
li_4 = ai_0 % 16;
ai_0 = (ai_0 - li_4) / 16;
l_str_concat_8 = StringConcatenate(IntToHexString(li_4), l_str_concat_8);
}
return (l_str_concat_8);
}
string IntToHexString(int ai_0) {
int li_12;
string ls_4 = "0";
if (ai_0 < 10) li_12 = ai_0 + 48;
else li_12 = ai_0 + 97 - 10;
return (StringSetChar(ls_4, 0, li_12));
}
int CharToInteger(int aia_0[4]) {
return (aia_0[0] | aia_0[1] << 8 | aia_0[2] << 16 | aia_0[3] << 24);
}
void MD5Transform(int &ai_0, int &ai_4, int &ai_8, int &ai_12, int aia_16[16]) {
int li_36 = 7;
int li_40 = 12;
int li_44 = 17;
int li_48 = 22;
int li_52 = 5;
int li_56 = 9;
int li_60 = 14;
int li_64 = 20;
int li_68 = 4;
int li_72 = 11;
int li_76 = 16;
int li_80 = 23;
int li_84 = 6;
int li_88 = 10;
int li_92 = 15;
int li_96 = 21;
int li_20 = ai_0;
int li_24 = ai_4;
int li_28 = ai_8;
int li_32 = ai_12;
ai_0 = FF(ai_0, ai_4, ai_8, ai_12, aia_16[0], li_36, -680876936);
ai_12 = FF(ai_12, ai_0, ai_4, ai_8, aia_16[1], li_40, -389564586);
ai_8 = FF(ai_8, ai_12, ai_0, ai_4, aia_16[2], li_44, 606105819);
ai_4 = FF(ai_4, ai_8, ai_12, ai_0, aia_16[3], li_48, -1044525330);
ai_0 = FF(ai_0, ai_4, ai_8, ai_12, aia_16[4], li_36, -176418897);
ai_12 = FF(ai_12, ai_0, ai_4, ai_8, aia_16[5], li_40, D'12.01.2008 01:10:26');
ai_8 = FF(ai_8, ai_12, ai_0, ai_4, aia_16[6], li_44, -1473231341);
ai_4 = FF(ai_4, ai_8, ai_12, ai_0, aia_16[7], li_48, -45705983);
ai_0 = FF(ai_0, ai_4, ai_8, ai_12, aia_16[8], li_36, 1770035416);
ai_12 = FF(ai_12, ai_0, ai_4, ai_8, aia_16[9], li_40, -1958414417);
ai_8 = FF(ai_8, ai_12, ai_0, ai_4, aia_16[10], li_44, -42063);
ai_4 = FF(ai_4, ai_8, ai_12, ai_0, aia_16[11], li_48, -1990404162);
ai_0 = FF(ai_0, ai_4, ai_8, ai_12, aia_16[12], li_36, 1804603682);
ai_12 = FF(ai_12, ai_0, ai_4, ai_8, aia_16[13], li_40, -40341101);
ai_8 = FF(ai_8, ai_12, ai_0, ai_4, aia_16[14], li_44, -1502002290);
ai_4 = FF(ai_4, ai_8, ai_12, ai_0, aia_16[15], li_48, D'08.03.2009 23:32:09');
ai_0 = GG(ai_0, ai_4, ai_8, ai_12, aia_16[1], li_52, -165796510);
ai_12 = GG(ai_12, ai_0, ai_4, ai_8, aia_16[6], li_56, -1069501632);
ai_8 = GG(ai_8, ai_12, ai_0, ai_4, aia_16[11], li_60, 643717713);
ai_4 = GG(ai_4, ai_8, ai_12, ai_0, aia_16[0], li_64, -373897302);
ai_0 = GG(ai_0, ai_4, ai_8, ai_12, aia_16[5], li_52, -701558691);
ai_12 = GG(ai_12, ai_0, ai_4, ai_8, aia_16[10], li_56, 38016083);
ai_8 = GG(ai_8, ai_12, ai_0, ai_4, aia_16[15], li_60, -660478335);
ai_4 = GG(ai_4, ai_8, ai_12, ai_0, aia_16[4], li_64, -405537848);
ai_0 = GG(ai_0, ai_4, ai_8, ai_12, aia_16[9], li_52, 568446438);
ai_12 = GG(ai_12, ai_0, ai_4, ai_8, aia_16[14], li_56, -1019803690);
ai_8 = GG(ai_8, ai_12, ai_0, ai_4, aia_16[3], li_60, -187363961);
ai_4 = GG(ai_4, ai_8, ai_12, ai_0, aia_16[8], li_64, D'15.11.2006 00:41:41');
ai_0 = GG(ai_0, ai_4, ai_8, ai_12, aia_16[13], li_52, -1444681467);
ai_12 = GG(ai_12, ai_0, ai_4, ai_8, aia_16[2], li_56, -51403784);
ai_8 = GG(ai_8, ai_12, ai_0, ai_4, aia_16[7], li_60, 1735328473);
ai_4 = GG(ai_4, ai_8, ai_12, ai_0, aia_16[12], li_64, -1926607734);
ai_0 = HH(ai_0, ai_4, ai_8, ai_12, aia_16[5], li_68, -378558);
ai_12 = HH(ai_12, ai_0, ai_4, ai_8, aia_16[8], li_72, -2022574463);
ai_8 = HH(ai_8, ai_12, ai_0, ai_4, aia_16[11], li_76, 1839030562);
ai_4 = HH(ai_4, ai_8, ai_12, ai_0, aia_16[14], li_80, -35309556);
ai_0 = HH(ai_0, ai_4, ai_8, ai_12, aia_16[1], li_68, -1530992060);
ai_12 = HH(ai_12, ai_0, ai_4, ai_8, aia_16[4], li_72, D'03.05.2010 18:59:13');
ai_8 = HH(ai_8, ai_12, ai_0, ai_4, aia_16[7], li_76, -155497632);
ai_4 = HH(ai_4, ai_8, ai_12, ai_0, aia_16[10], li_80, -1094730640);
ai_0 = HH(ai_0, ai_4, ai_8, ai_12, aia_16[13], li_68, 681279174);
ai_12 = HH(ai_12, ai_0, ai_4, ai_8, aia_16[0], li_72, -358537222);
ai_8 = HH(ai_8, ai_12, ai_0, ai_4, aia_16[3], li_76, -722521979);
ai_4 = HH(ai_4, ai_8, ai_12, ai_0, aia_16[6], li_80, 76029189);
ai_0 = HH(ai_0, ai_4, ai_8, ai_12, aia_16[9], li_68, -640364487);
ai_12 = HH(ai_12, ai_0, ai_4, ai_8, aia_16[12], li_72, -421815835);
ai_8 = HH(ai_8, ai_12, ai_0, ai_4, aia_16[15], li_76, 530742520);
ai_4 = HH(ai_4, ai_8, ai_12, ai_0, aia_16[2], li_80, -995338651);
ai_0 = II(ai_0, ai_4, ai_8, ai_12, aia_16[0], li_84, -198630844);
ai_12 = II(ai_12, ai_0, ai_4, ai_8, aia_16[7], li_88, D'16.09.2005 22:53:35');
ai_8 = II(ai_8, ai_12, ai_0, ai_4, aia_16[14], li_92, -1416354905);
ai_4 = II(ai_4, ai_8, ai_12, ai_0, aia_16[5], li_96, -57434055);
ai_0 = II(ai_0, ai_4, ai_8, ai_12, aia_16[12], li_84, 1700485571);
ai_12 = II(ai_12, ai_0, ai_4, ai_8, aia_16[3], li_88, -1894986606);
ai_8 = II(ai_8, ai_12, ai_0, ai_4, aia_16[10], li_92, -1051523);
ai_4 = II(ai_4, ai_8, ai_12, ai_0, aia_16[1], li_96, -2054922799);
ai_0 = II(ai_0, ai_4, ai_8, ai_12, aia_16[8], li_84, 1873313359);
ai_12 = II(ai_12, ai_0, ai_4, ai_8, aia_16[15], li_88, -30611744);
ai_8 = II(ai_8, ai_12, ai_0, ai_4, aia_16[6], li_92, -1560198380);
ai_4 = II(ai_4, ai_8, ai_12, ai_0, aia_16[13], li_96, 1309151649);
ai_0 = II(ai_0, ai_4, ai_8, ai_12, aia_16[4], li_84, -145523070);
ai_12 = II(ai_12, ai_0, ai_4, ai_8, aia_16[11], li_88, -1120210379);
ai_8 = II(ai_8, ai_12, ai_0, ai_4, aia_16[2], li_92, 718787259);
ai_4 = II(ai_4, ai_8, ai_12, ai_0, aia_16[9], li_96, -343485551);
ai_0 = AddUnsigned(ai_0, li_20);
ai_4 = AddUnsigned(ai_4, li_24);
ai_8 = AddUnsigned(ai_8, li_28);
ai_12 = AddUnsigned(ai_12, li_32);
}