alg.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «alg.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 4, предназначенный для автоматической торговли на валютном рынке. Продукт анализирует ценовые данные и результаты расчётов технических индикаторов, управляет позициями через торговый API MetaTrader, поддерживает хеджирование и отправку уведомлений о событиях. Перед началом работы советник выполняет проверку допустимости DLL-вызовов и таймфрейма графика, а также инициализирует внутренние параметры в зависимости от выбранного уровня риска.
Настройки программы
| Настройка | Описание |
|---|---|
| P1 | Текстовый параметр 1 — Текстовая строка, отображаемая в интерфейсе для обозначения версии и статуса аутентификации советника. |
| P2 | Текстовый параметр 2 — Текстовая строка-разделитель, обозначающая начало группы торговых параметров в настройках. |
| P3 | Текстовый параметр 3 — Текстовое описание уровней риска (низкий, умеренный, высокий), используемое в интерфейсе настройки. |
| iRiskLevel | Уровень риска — Целочисленный параметр от 1 до 10, определяющий числовой уровень риска, влияющий на расчёт размера позиции. |
| P4 | Текстовый параметр 4 — Текстовая строка с пояснением ограничения торговли только указанными парами. |
| P5 | Текстовый параметр 5 — Текстовый список валютных пар, на которых советник может вести торговлю. |
| P6 | Текстовый параметр 6 — Текстовый полный перечень поддерживаемых валютных пар для торговли. |
| HedgingAllowed | Разрешение хеджирования — Логический переключатель, определяющий, разрешено ли одновременное открытие позиций в обе стороны по одному инструменту. |
Поиск по коду файла
#include <stdlib.mqh>
extern string P1 = " This EA Version is AUTHENTICATED ";
extern string P2 = " --- Trading Parameters --- ";
extern string P3 = "RISK LEVEL (1=LOW recommendet, 2=MODERATE, 3=HIGH)";
extern int iRiskLevel = 2;
extern string P4 = "Please use the ea only on this pairs:";
extern string P5 = "AUDCAD, AUDJPY, AUDNZD, AUDUSD,CADJPY, CHFJPY, EURAUD, EURCAD, EURCHF,";
extern string P6 = "EURGBP, EURJPY, EURUSD, GBPCHF, GBPJPY, GBPUSD, NZDJPY, NZDUSD, USDCAD, USDCHF, USDJPY";
bool gi_128 = FALSE;
double gd_132;
bool gi_140 = TRUE;
double gd_144;
int gi_152 = 30;
int gi_156 = 60;
string gs_unused_160 = "---------------- MACD SETTINGS----------------------";
int gi_168 = 30;
int gi_172 = 78;
int gi_176 = 1;
double gd_180;
double gd_188;
double gd_196;
int gi_204 = 1;
int gi_208 = 30;
int gi_212 = 60;
string gs_unused_216 = "------------SmaAngle Settings---------------";
bool gi_unused_224 = FALSE;
double gd_unused_228 = 50.0;
double gd_unused_236 = 0.25;
double gd_244 = 99.0;
double gd_252 = 100.0;
int gi_260 = 6;
bool gi_264 = TRUE;
bool gi_268 = TRUE;
extern bool HedgingAllowed = TRUE;
bool gi_276 = TRUE;
double gd_280 = 48.0;
bool gi_288 = FALSE;
string gs_unused_292 = "Martingale Settings";
int gi_300 = 20;
bool gi_304 = FALSE;
bool gi_308 = FALSE;
double g_period_312;
double g_period_320;
double g_period_328;
string gs_unused_336 = "StopLoss Settings";
bool gi_344 = FALSE;
int gi_348 = 20;
bool gi_352 = FALSE;
int gi_356 = 10;
string gs_unused_360 = "StopLossMa";
double g_period_368 = 33.0;
double g_ma_method_376 = 1.0;
string gs_unused_384 = "///////////////////////////////";
bool gi_392 = TRUE;
bool gi_396 = TRUE;
int gi_400 = 400;
string gs_unused_404 = "///////////////////////////////";
bool gi_412 = FALSE;
int gi_416 = 400;
int gi_420;
int gi_424;
int gi_428;
int gi_432;
bool gi_436;
double gda_440[25];
double gda_444[25];
double gd_448;
double gd_456;
double gd_unused_464;
double gd_unused_472;
double g_ord_open_price_480;
double g_ord_open_price_488;
double gd_496;
double gd_504;
int gi_512;
int gi_516;
int gi_unused_520 = 0;
int g_bars_524 = -1;
bool gi_528 = FALSE;
int gi_532 = 100;
string gs_536 = "";
int gi_unused_544 = 5;
int gi_548 = 0;
int gi_552;
int gi_556 = 9000;
int gi_unused_560;
double gd_564;
double gd_572;
double gd_580;
double gd_588;
double gd_596;
double gd_604;
bool gi_612;
bool gi_616;
int g_shift_620;
bool gi_624 = FALSE;
string gs_unused_628 = "SlowMa";
double g_ma_method_636 = 0.0;
double g_applied_price_644 = 0.0;
double gd_652 = 0.0;
double g_timeframe_660 = 0.0;
string gs_unused_668 = "///////////////////////////";
string gs_unused_676 = "MediumMa";
double g_ma_method_684 = 1.0;
double g_applied_price_692 = 0.0;
double gd_700 = 0.0;
double g_timeframe_708 = 0.0;
string gs_unused_716 = "///////////////////////////";
string gs_unused_724 = "FastMa";
double g_ma_method_732 = 1.0;
double g_applied_price_740 = 0.0;
double gd_748 = 0.0;
double g_timeframe_756 = 0.0;
string gs_unused_764 = "///////////////////////////";
double g_applied_price_772 = 0.0;
double gd_780 = 0.0;
double g_timeframe_788 = 0.0;
double g_iclose_796;
double gd_804;
double gd_812;
int gi_820 = 0;
bool gi_824 = FALSE;
int gi_unused_828 = 3;
string gs_unused_832 = "N/A";
string gs_unused_840 = "v.21";
string gs_unused_848 = " ";
string gs_unused_856 = " ";
string gs_unused_864 = " ";
string gs_unused_872 = " ";
string gs_unused_880 = " ";
string gs_unused_888 = " ";
string gs_unused_896 = " ";
string gs_unused_904 = " ";
string gs_unused_912 = " ";
string gs_unused_920 = " ";
bool gi_unused_928 = FALSE;
bool gi_unused_932 = FALSE;
int g_count_936;
int g_count_940;
double gda_unused_944[10];
double gda_unused_948[10];
double gda_952[10] = {4.0, 5.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0};
int gi_unused_956 = 100;
int gi_unused_960 = 0;
int gi_unused_964 = 5;
int gi_unused_968 = 120;
bool gi_unused_972 = FALSE;
int gi_unused_976 = 0;
int gi_unused_980 = 3;
double gd_unused_984 = 0.02;
double gd_unused_992 = 0.2;
int gi_unused_1000 = 0;
int gi_unused_1004 = 34;
int gi_unused_1008 = 0;
int gi_unused_1012 = 0;
int gi_unused_1016 = 0;
int gi_unused_1020 = 0;
int gi_unused_1024 = 9;
double gd_unused_1028 = 0.3;
int gi_unused_1036 = 0;
int gi_unused_1040 = 5;
int gi_unused_1044 = 1;
bool gi_unused_1048 = FALSE;
string gs_1052 = "v3.1";
string gs_1060 = "OrderReliable fname unset";
int gi_1068 = 10;
double gd_1072 = 8.0;
double gd_1080 = 25.0;
int gi_1088 = 3;
bool gi_1092 = FALSE;
bool gi_1096 = FALSE;
void f0_37(int ai_0) {
gi_unused_828 = ai_0;
}
int f0_3(string as_0) {
string ls_8 = StringSubstr(as_0, 0, 6);
if (ls_8 == "AUDCAD") return (1);
if (ls_8 == "AUDJPY") return (2);
if (ls_8 == "AUDNZD") return (3);
if (ls_8 == "AUDUSD") return (4);
if (ls_8 == "CADJPY") return (5);
if (ls_8 == "CHFJPY") return (6);
if (ls_8 == "EURAUD") return (7);
if (ls_8 == "EURCAD") return (8);
if (ls_8 == "EURCHF") return (9);
if (ls_8 == "EURGBP") return (10);
if (ls_8 == "EURJPY") return (11);
if (ls_8 == "EURUSD") return (12);
if (ls_8 == "GBPCHF") return (13);
if (ls_8 == "GBPJPY") return (14);
if (ls_8 == "GBPUSD") return (15);
if (ls_8 == "NZDJPY") return (16);
if (ls_8 == "NZDUSD") return (17);
if (ls_8 == "USDCAD") return (18);
if (ls_8 == "USDCHF") return (19);
if (ls_8 == "USDJPY") return (20);
return (21);
}
int f0_36(int ai_0) {
switch (ai_0) {
case 1:
return (1);
case 5:
return (2);
case 15:
return (3);
case 30:
return (4);
case 60:
return (5);
case 240:
return (6);
case 1440:
return (7);
case 10080:
return (8);
case 43200:
return (9);
}
return (0);
}
double f0_2() {
double l_ticksize_0 = MarketInfo(Symbol(), MODE_TICKSIZE);
return (f0_21(l_ticksize_0));
}
double f0_21(double ad_0) {
if (ad_0 == 0.00001 || ad_0 == 0.001) ad_0 = 10.0 * ad_0;
return (ad_0);
}
int f0_29(int ai_0, int ai_4) {
gs_unused_832 = "NumOpenPositionsThisPair";
f0_13(ai_0);
if (ai_4 == -1) return (g_count_936 + g_count_940);
if (ai_4 == 0) return (g_count_936);
if (ai_4 == 1) return (g_count_940);
return (0);
}
int f0_13(int a_magic_0) {
gs_unused_832 = "CountOpenOrdersThisPair";
g_count_936 = 0;
g_count_940 = 0;
for (int l_pos_4 = OrdersTotal() - 1; l_pos_4 >= 0; l_pos_4--) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != a_magic_0 && a_magic_0 != 0) continue;
if (OrderType() == OP_BUY) g_count_936++;
else
if (OrderType() == OP_SELL) g_count_940++;
}
if (g_count_936 == 0 && g_count_940 == 0) return (-1);
if (g_count_936 > 0 && g_count_940 == 0) return (0);
if (g_count_940 > 0 && g_count_936 == 0) return (1);
return (g_count_936 + g_count_940);
}
int f0_18(string a_symbol_0, int a_cmd_8, double a_lots_12, double a_price_20, int a_slippage_28, double a_price_32, double a_price_40, string a_comment_48, int a_magic_56, int a_datetime_60 = 0, color a_color_64 = -1) {
int l_digits_68;
double ld_72;
double ld_80;
double ld_88;
double l_ord_stoploss_96;
double l_ord_takeprofit_104;
int l_count_112;
double ld_116;
double l_price_124;
int l_ticket_132 = -1;
if (!gi_1096) {
if (IsOptimization() || IsTesting()) {
l_ticket_132 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, a_price_20, a_slippage_28, a_price_32, a_price_40, a_comment_48, a_magic_56, a_datetime_60, Black);
return (l_ticket_132);
}
}
gs_1060 = "OrderSendReliable";
f0_8("");
f0_8(" ");
f0_8("Attempted " + f0_40(a_cmd_8) + " " + a_lots_12 + " lots @" + a_price_20 + " sl:" + a_price_32 + " tp:" + a_price_40);
double l_point_136 = MarketInfo(a_symbol_0, MODE_POINT);
f0_10(0, a_symbol_0, a_cmd_8, l_digits_68, ld_72, l_ord_stoploss_96, l_ord_takeprofit_104, ld_80, ld_88, 0);
a_price_20 = NormalizeDouble(a_price_20, l_digits_68);
a_price_32 = NormalizeDouble(a_price_32, l_digits_68);
a_price_40 = NormalizeDouble(a_price_40, l_digits_68);
f0_44(a_symbol_0, a_cmd_8, a_price_20, a_price_32, a_price_40);
int l_error_144 = GetLastError();
l_error_144 = 0;
bool li_148 = FALSE;
bool li_152 = FALSE;
bool li_156 = FALSE;
if (a_cmd_8 == OP_BUYSTOP || a_cmd_8 == OP_SELLSTOP || a_cmd_8 == OP_BUYLIMIT || a_cmd_8 == OP_SELLLIMIT) {
l_count_112 = 0;
while (!li_148) {
l_ticket_132 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, a_price_20, a_slippage_28, a_price_32, a_price_40, a_comment_48, a_magic_56, a_datetime_60, a_color_64);
l_error_144 = GetLastError();
switch (l_error_144) {
case 0/* NO_ERROR */:
li_148 = TRUE;
break;
case 4/* SERVER_BUSY */:
case 6/* NO_CONNECTION */:
case 136/* OFF_QUOTES */:
case 137/* BROKER_BUSY */:
case 146/* TRADE_CONTEXT_BUSY */:
case 128/* TRADE_TIMEOUT */:
l_count_112++;
break;
case 135/* PRICE_CHANGED */:
case 138/* REQUOTE */:
RefreshRates();
continue;
break;
case 129/* INVALID_PRICE */:
case 130/* INVALID_STOPS */:
l_count_112++;
ld_116 = MarketInfo(a_symbol_0, MODE_STOPLEVEL) * l_point_136;
if (a_cmd_8 == OP_BUYSTOP || a_cmd_8 == OP_BUYLIMIT) {
if (MathAbs(ld_88 - a_price_20) <= ld_116) {
if (gi_1092) {
li_152 = TRUE;
li_148 = TRUE;
} else {
if (li_156) {
if (a_cmd_8 == OP_BUYSTOP) {
a_price_20 += ld_72;
if (a_price_32 > 0.0) a_price_32 += ld_72;
if (a_price_40 > 0.0) a_price_40 += ld_72;
f0_8("Pending BuyStop Order still has ERR_INVALID_STOPS, adding 1 pip; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
} else {
if (a_cmd_8 == OP_BUYLIMIT) {
a_price_20 -= ld_72;
if (a_price_32 > 0.0) a_price_32 -= ld_72;
if (a_price_40 > 0.0) a_price_40 -= ld_72;
f0_8("Pending BuyLimit Order still has ERR_INVALID_STOPS, subtracting 1 pip; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
}
}
} else {
if (a_cmd_8 == OP_BUYLIMIT) {
l_price_124 = a_price_20;
a_price_20 = ld_88 - ld_116;
if (a_price_32 > 0.0) a_price_32 += a_price_20 - l_price_124;
if (a_price_40 > 0.0) a_price_40 += a_price_20 - l_price_124;
f0_8("Pending BuyLimit has ERR_INVALID_STOPS; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
} else {
if (a_cmd_8 == OP_BUYSTOP) {
l_price_124 = a_price_20;
a_price_20 = ld_88 + ld_116;
if (a_price_32 > 0.0) a_price_32 += a_price_20 - l_price_124;
if (a_price_40 > 0.0) a_price_40 += a_price_20 - l_price_124;
f0_8("Pending BuyStop has ERR_INVALID_STOPS; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
}
}
li_156 = TRUE;
}
f0_44(a_symbol_0, a_cmd_8, a_price_20, a_price_32, a_price_40);
}
}
} else {
if ((a_cmd_8 == OP_SELLSTOP || a_cmd_8 == OP_SELLLIMIT)) {
if (MathAbs(ld_80 - a_price_20) <= ld_116) {
if (gi_1092) {
li_152 = TRUE;
li_148 = TRUE;
} else {
if (li_156) {
if (a_cmd_8 == OP_SELLSTOP) {
a_price_20 -= ld_72;
if (a_price_32 > 0.0) a_price_32 -= ld_72;
if (a_price_40 > 0.0) a_price_40 -= ld_72;
f0_8("Pending SellStop Order still has ERR_INVALID_STOPS, subtracting 1 pip; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
} else {
if (a_cmd_8 == OP_SELLLIMIT) {
a_price_20 += ld_72;
if (a_price_32 > 0.0) a_price_32 += ld_72;
if (a_price_40 > 0.0) a_price_40 += ld_72;
f0_8("Pending SellLimit Order still has ERR_INVALID_STOPS, adding 1 pip; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
}
}
} else {
if (a_cmd_8 == OP_SELLSTOP) {
l_price_124 = a_price_20;
a_price_20 = ld_80 - ld_116;
if (a_price_32 > 0.0) a_price_32 -= l_price_124 - a_price_20;
if (a_price_40 > 0.0) a_price_40 -= l_price_124 - a_price_20;
f0_8("Pending SellStop has ERR_INVALID_STOPS; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
} else {
if (a_cmd_8 == OP_SELLLIMIT) {
l_price_124 = a_price_20;
a_price_20 = ld_80 + ld_116;
if (a_price_32 > 0.0) a_price_32 -= l_price_124 - a_price_20;
if (a_price_40 > 0.0) a_price_40 -= l_price_124 - a_price_20;
f0_8("Pending SellLimit has ERR_INVALID_STOPS; new price = " + DoubleToStr(a_price_20, l_digits_68));
if (a_price_32 > 0.0 || a_price_40 > 0.0) f0_8("NOTE: SL (now " + DoubleToStr(a_price_32, l_digits_68) + ") & TP (now " + DoubleToStr(a_price_40, l_digits_68) + ") were adjusted proportionately");
}
}
li_156 = TRUE;
}
f0_44(a_symbol_0, a_cmd_8, a_price_20, a_price_32, a_price_40);
}
}
}
}
break;
case 3/* INVALID_TRADE_PARAMETERS */:
default:
li_148 = TRUE;
}
if (l_count_112 > gi_1068) li_148 = TRUE;
if (li_148) {
if (l_error_144 != 0/* NO_ERROR */ && l_error_144 != 1/* NO_RESULT */) f0_8("Non-retryable error: " + f0_12(l_error_144));
if (l_count_112 > gi_1068) f0_8("Retry attempts maxed at " + gi_1068);
} else {
f0_8("Result of attempt " + l_count_112 + " of " + gi_1068 + ": Retryable error: " + f0_12(l_error_144));
f0_8("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");
f0_32(gd_1072, gd_1080);
RefreshRates();
}
}
if (l_error_144 == 0/* NO_ERROR */ || l_error_144 == 1/* NO_RESULT */) {
f0_8("Ticket #" + l_ticket_132 + ": Successful " + f0_40(a_cmd_8) + " order placed, details follow.");
OrderSelect(l_ticket_132, SELECT_BY_TICKET, MODE_TRADES);
OrderPrint();
f0_8(" ");
f0_8("");
return (l_ticket_132);
}
if (!li_152) {
f0_8("Failed to execute stop or limit order after " + gi_1068 + " retries");
f0_8("Failed trade: " + f0_40(a_cmd_8) + " " + DoubleToStr(a_lots_12, 2) + " lots " + a_symbol_0 + "@" + a_price_20 + " tp@" + a_price_40 + " sl@" + a_price_32);
f0_8("Last error: " + f0_12(l_error_144));
f0_8(" ");
f0_8("");
return (-1);
}
}
if (li_152) {
f0_8("Going from stop/limit order to market order because market is too close.");
if (a_cmd_8 == OP_BUYSTOP || a_cmd_8 == OP_BUYLIMIT) {
a_cmd_8 = 0;
a_price_20 = ld_88;
} else {
if (a_cmd_8 == OP_SELLSTOP || a_cmd_8 == OP_SELLLIMIT) {
a_cmd_8 = 1;
a_price_20 = ld_80;
}
}
}
l_error_144 = GetLastError();
l_error_144 = 0;
l_ticket_132 = -1;
li_148 = FALSE;
if (a_cmd_8 == OP_BUY || a_cmd_8 == OP_SELL) {
l_count_112 = 0;
while (!li_148) {
l_ticket_132 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, a_price_20, a_slippage_28, a_price_32, a_price_40, a_comment_48, a_magic_56, a_datetime_60, a_color_64);
l_error_144 = GetLastError();
switch (l_error_144) {
case 0/* NO_ERROR */:
li_148 = TRUE;
break;
case 4/* SERVER_BUSY */:
case 6/* NO_CONNECTION */:
case 129/* INVALID_PRICE */:
case 136/* OFF_QUOTES */:
case 137/* BROKER_BUSY */:
case 146/* TRADE_CONTEXT_BUSY */:
case 128/* TRADE_TIMEOUT */:
l_count_112++;
break;
case 135/* PRICE_CHANGED */:
case 138/* REQUOTE */:
RefreshRates();
continue;
break;
default:
li_148 = TRUE;
}
if (l_count_112 > gi_1068) li_148 = TRUE;
if (!li_148) {
f0_8("Result of attempt " + l_count_112 + " of " + gi_1068 + ": Retryable error: " + f0_12(l_error_144));
f0_8("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");
f0_32(gd_1072, gd_1080);
RefreshRates();
} else {
if (l_error_144 != 0/* NO_ERROR */ && l_error_144 != 1/* NO_RESULT */) f0_8("Non-retryable error: " + f0_12(l_error_144));
if (l_count_112 > gi_1068) f0_8("Retry attempts maxed at " + gi_1068);
}
}
if (l_error_144 == 0/* NO_ERROR */ || l_error_144 == 1/* NO_RESULT */) {
f0_8("Ticket #" + l_ticket_132 + ": Successful " + f0_40(a_cmd_8) + " order placed, details follow.");
OrderSelect(l_ticket_132, SELECT_BY_TICKET, MODE_TRADES);
OrderPrint();
f0_8(" ");
f0_8("");
return (l_ticket_132);
}
f0_8("Failed to execute OP_BUY/OP_SELL, after " + gi_1068 + " retries");
f0_8("Failed trade: " + f0_40(a_cmd_8) + " " + DoubleToStr(a_lots_12, 2) + " lots " + a_symbol_0 + "@" + a_price_20 + " tp@" + a_price_40 + " sl@" + a_price_32);
f0_8("Last error: " + f0_12(l_error_144));
f0_8(" ");
f0_8("");
return (-1);
}
return (0);
}
int f0_30(string a_symbol_0, int a_cmd_8, double a_lots_12, double a_price_20, int a_slippage_28, double a_price_32, double a_price_40, string a_comment_48, int a_magic_56, int a_datetime_60 = 0, color a_color_64 = -1) {
int l_digits_68;
double ld_72;
double ld_80;
double ld_88;
double l_ord_stoploss_96;
double l_ord_takeprofit_104;
int l_count_112;
double l_price_116;
int l_slippage_124;
int l_error_140;
int l_ticket_128 = -1;
if (IsOptimization() || IsTesting()) {
l_ticket_128 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, a_price_20, a_slippage_28, a_price_32, a_price_40, a_comment_48, a_magic_56, a_datetime_60, Black);
return (l_ticket_128);
}
if (a_cmd_8 > OP_SELL) {
l_ticket_128 = f0_18(a_symbol_0, a_cmd_8, a_lots_12, a_price_20, a_slippage_28, 0, 0, a_comment_48, a_magic_56, a_datetime_60, a_color_64);
return (l_ticket_128);
}
gs_1060 = "OrderSendReliableMKT";
f0_8("");
f0_8(" ");
f0_8("Attempted " + f0_40(a_cmd_8) + " " + a_lots_12 + " lots @" + a_price_20 + " sl:" + a_price_32 + " tp:" + a_price_40);
f0_10(0, a_symbol_0, a_cmd_8, l_digits_68, ld_72, l_ord_stoploss_96, l_ord_takeprofit_104, ld_80, ld_88, 0);
a_price_20 = NormalizeDouble(a_price_20, l_digits_68);
a_price_32 = NormalizeDouble(a_price_32, l_digits_68);
a_price_40 = NormalizeDouble(a_price_40, l_digits_68);
f0_44(a_symbol_0, a_cmd_8, a_price_20, a_price_32, a_price_40);
int l_error_132 = GetLastError();
l_error_132 = 0;
bool li_136 = FALSE;
if (a_cmd_8 == OP_BUY || a_cmd_8 == OP_SELL) {
l_count_112 = 0;
while (!li_136) {
l_price_116 = a_price_20;
l_slippage_124 = a_slippage_28;
if (a_cmd_8 == OP_BUY) {
l_price_116 = NormalizeDouble(MarketInfo(a_symbol_0, MODE_ASK), MarketInfo(a_symbol_0, MODE_DIGITS));
if (l_price_116 > a_price_20) l_slippage_124 = a_slippage_28 - (l_price_116 - a_price_20) / ld_72;
} else {
if (a_cmd_8 == OP_SELL) {
l_price_116 = NormalizeDouble(MarketInfo(a_symbol_0, MODE_BID), MarketInfo(a_symbol_0, MODE_DIGITS));
if (l_price_116 < a_price_20) l_slippage_124 = a_slippage_28 - (a_price_20 - l_price_116) / ld_72;
}
}
if (l_slippage_124 > a_slippage_28) l_slippage_124 = a_slippage_28;
if (l_slippage_124 >= 0) {
l_ticket_128 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, l_price_116, l_slippage_124, a_price_32, a_price_40, a_comment_48, a_magic_56, a_datetime_60, a_color_64);
l_error_132 = GetLastError();
} else l_error_132 = 129;
l_error_140 = l_error_132;
if (l_error_140 == 135/* PRICE_CHANGED */) continue;
if (l_error_140 == 138/* REQUOTE */) continue;
switch (l_error_140) {
case 0/* NO_ERROR */:
li_136 = TRUE;
break;
case 4/* SERVER_BUSY */:
case 6/* NO_CONNECTION */:
case 129/* INVALID_PRICE */:
case 136/* OFF_QUOTES */:
case 137/* BROKER_BUSY */:
case 146/* TRADE_CONTEXT_BUSY */:
case 128/* TRADE_TIMEOUT */:
l_count_112++;
break;
default:
li_136 = TRUE;
}
if (l_count_112 > gi_1068) li_136 = TRUE;
if (!li_136) {
f0_8("Result of attempt " + l_count_112 + " of " + gi_1068 + ": Retryable error: " + f0_12(l_error_132));
f0_8("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");
f0_32(gd_1072, gd_1080);
} else {
if (l_error_132 != 0/* NO_ERROR */ && l_error_132 != 1/* NO_RESULT */) f0_8("Non-retryable error: " + f0_12(l_error_132));
if (l_count_112 > gi_1068) f0_8("Retry attempts maxed at " + gi_1068);
}
}
if (l_error_132 == 0/* NO_ERROR */ || l_error_132 == 1/* NO_RESULT */) {
f0_8("Ticket #" + l_ticket_128 + ": Successful " + f0_40(a_cmd_8) + " order placed, details follow.");
OrderSelect(l_ticket_128, SELECT_BY_TICKET, MODE_TRADES);
OrderPrint();
f0_8(" ");
f0_8("");
return (l_ticket_128);
}
f0_8("Failed to execute OP_BUY/OP_SELL, after " + gi_1068 + " retries");
f0_8("Failed trade: " + f0_40(a_cmd_8) + " " + DoubleToStr(a_lots_12, 2) + " lots " + a_symbol_0 + "@" + a_price_20 + " tp@" + a_price_40 + " sl@" + a_price_32);
f0_8("Last error: " + f0_12(l_error_132));
f0_8(" ");
f0_8("");
return (-1);
}
return (0);
}
int f0_7(int a_ticket_0, double a_price_4, double a_price_12, double a_price_20, int a_datetime_28, color a_color_32 = -1) {
int l_cmd_36;
int l_digits_40;
double ld_44;
double ld_52;
double ld_60;
double l_ord_stoploss_68;
double l_ord_takeprofit_76;
bool l_bool_84 = FALSE;
bool li_88 = FALSE;
if (!gi_1096) {
if (IsOptimization() || IsTesting()) {
l_bool_84 = OrderModify(a_ticket_0, a_price_4, a_price_12, a_price_20, a_datetime_28, Black);
return (l_bool_84);
}
}
gs_1060 = "OrderModifyReliable";
f0_8("");
f0_8(" ");
f0_8("Attempted modify of #" + a_ticket_0 + " price:" + a_price_4 + " sl:" + a_price_12 + " tp:" + a_price_20);
string l_symbol_92 = "ALLOCATE";
f0_10(a_ticket_0, l_symbol_92, l_cmd_36, l_digits_40, ld_44, l_ord_stoploss_68, l_ord_takeprofit_76, ld_52, ld_60);
double l_price_100 = a_price_4;
if (l_cmd_36 == OP_BUY) l_price_100 = ld_52;
else
if (l_cmd_36 == OP_SELL) l_price_100 = ld_60;
l_price_100 = NormalizeDouble(l_price_100, l_digits_40);
a_price_4 = NormalizeDouble(a_price_4, l_digits_40);
a_price_12 = NormalizeDouble(a_price_12, l_digits_40);
a_price_20 = NormalizeDouble(a_price_20, l_digits_40);
double ld_108 = a_price_12;
double ld_116 = a_price_20;
if (a_price_12 == l_ord_stoploss_68) ld_108 = 0;
if (a_price_20 == l_ord_takeprofit_76) ld_116 = 0;
f0_44(l_symbol_92, l_cmd_36, l_price_100, ld_108, ld_116, 0);
if (a_price_12 != l_ord_stoploss_68) a_price_12 = ld_108;
if (a_price_20 != l_ord_takeprofit_76) a_price_20 = ld_116;
int l_count_124 = 0;
int l_error_128 = GetLastError();
l_error_128 = 0;
bool li_132 = FALSE;
while (!li_132) {
l_bool_84 = OrderModify(a_ticket_0, a_price_4, a_price_12, a_price_20, a_datetime_28, a_color_32);
l_error_128 = GetLastError();
if (l_bool_84 == TRUE) li_132 = TRUE;
else {
switch (l_error_128) {
case 0/* NO_ERROR */:
li_132 = TRUE;
f0_8("ERR_NO_ERROR received, but OrderClose() returned false; exiting");
break;
case 1/* NO_RESULT */:
li_132 = TRUE;
break;
case 130/* INVALID_STOPS */:
f0_8("OrderModifyReliable, ERR_INVALID_STOPS, should not happen; stops already adjusted");
case 2/* COMMON_ERROR */:
case 4/* SERVER_BUSY */:
case 6/* NO_CONNECTION */:
case 8/* TOO_FREQUENT_REQUESTS */:
case 128/* TRADE_TIMEOUT */:
case 129/* INVALID_PRICE */:
case 136/* OFF_QUOTES */:
case 137/* BROKER_BUSY */:
case 141/* TOO_MANY_REQUESTS */:
case 146/* TRADE_CONTEXT_BUSY */:
l_count_124++;
break;
case 145/* TRADE_MODIFY_DENIED */: break;
case 135/* PRICE_CHANGED */:
case 138/* REQUOTE */:
RefreshRates();
continue;
break;
default:
li_132 = TRUE;
li_88 = TRUE;
}
}
if (l_count_124 > gi_1068) li_132 = TRUE;
if (!li_132) {
f0_8("Result of attempt " + l_count_124 + " of " + gi_1068 + ": Retryable error: " + f0_12(l_error_128));
f0_8("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");
f0_32(gd_1072, gd_1080);
RefreshRates();
} else {
if (l_count_124 > gi_1068) f0_8("Retry attempts maxed at " + gi_1068);
else
if (li_88) f0_8("Non-retryable error: " + f0_12(l_error_128));
}
}
if (l_error_128 == 1/* NO_RESULT */) {
f0_8("Server reported modify order did not actually change parameters.");
f0_8("Redundant modification: " + a_ticket_0 + " " + l_symbol_92 + "@" + a_price_4 + " tp@" + a_price_20 + " sl@" + a_price_12);
f0_8("Suggest modifying code logic to avoid.");
}
if (l_bool_84) {
f0_8("Ticket #" + a_ticket_0 + ": Modification successful, updated trade details follow.");
OrderSelect(a_ticket_0, SELECT_BY_TICKET, MODE_TRADES);
OrderPrint();
} else {
f0_8("Failed to execute modify after " + gi_1068 + " retries");
f0_8("Failed modification: " + a_ticket_0 + " " + l_symbol_92 + "@" + a_price_4 + " tp@" + a_price_20 + " sl@" + a_price_12);
f0_8("Last error: " + f0_12(l_error_128));
}
f0_8(" ");
f0_8("");
return (l_bool_84);
}
string f0_12(int ai_0) {
return (ai_0 + " :: " + ErrorDescription(ai_0));
}
void f0_8(string as_0) {
if (gi_1088 >= 99 || !(IsTesting() || IsOptimization()))
if (gi_1088 > 0) Print(gs_1060 + " " + gs_1052 + ": " + as_0);
}
string f0_40(int ai_0) {
if (ai_0 == 0) return ("BUY");
if (ai_0 == 1) return ("SELL");
if (ai_0 == 4) return ("BUY STOP");
if (ai_0 == 5) return ("SELL STOP");
if (ai_0 == 2) return ("BUY LIMIT");
if (ai_0 == 3) return ("SELL LIMIT");
return ("None (" + ai_0 + ")");
}
void f0_44(string a_symbol_0, int ai_8, double ad_12, double &ad_20, double &ad_28, bool ai_36 = TRUE) {
double ld_40;
double ld_48;
string ls_56 = gs_1060;
gs_1060 = "EnsureValidStops";
double l_point_64 = MarketInfo(a_symbol_0, MODE_POINT);
double ld_72 = ad_20;
double ld_80 = ad_28;
int l_stoplevel_88 = MarketInfo(a_symbol_0, MODE_STOPLEVEL);
double ld_92 = l_stoplevel_88 * l_point_64;
double ld_100 = MarketInfo(a_symbol_0, MODE_ASK) - MarketInfo(a_symbol_0, MODE_BID);
if (ad_20 != 0.0) {
if (ai_8 % 2 == 0) {
ld_40 = ad_12 - ld_92;
if (ai_8 == 0 && ai_36) ld_40 -= ld_100;
ad_20 = MathMin(ad_20, ld_40);
} else {
ld_40 = ad_12 + ld_92;
if (ai_8 == 1 && ai_36) ld_40 += ld_100;
ad_20 = MathMax(ad_20, ld_40);
}
ad_20 = NormalizeDouble(ad_20, MarketInfo(a_symbol_0, MODE_DIGITS));
}
if (ad_28 != 0.0) {
if (MathAbs(ad_12 - ad_28) <= ld_92) {
if (ai_8 % 2 == 0) {
ld_48 = ad_12 + ld_92;
ad_28 = MathMax(ad_28, ld_48);
} else {
ld_48 = ad_12 - ld_92;
ad_28 = MathMin(ad_28, ld_48);
}
ad_28 = NormalizeDouble(ad_28, MarketInfo(a_symbol_0, MODE_DIGITS));
}
}
if (ad_20 != ld_72) f0_8("SL was too close to brokers min distance (" + l_stoplevel_88 + "); moved SL to: " + ad_20);
if (ad_28 != ld_80) f0_8("TP was too close to brokers min distance (" + l_stoplevel_88 + "); moved TP to: " + ad_28);
gs_1060 = ls_56;
}
void f0_32(double ad_0, double ad_8) {
double ld_16;
int li_24;
double ld_28;
if (IsTesting() == FALSE) {
ld_16 = MathCeil(ad_0 / 0.1);
if (ld_16 > 0.0) {
li_24 = MathRound(ad_8 / 0.1);
ld_28 = 1.0 - 1.0 / ld_16;
Sleep(20);
for (int l_count_36 = 0; l_count_36 < li_24; l_count_36++) {
if (MathRand() > 32768.0 * ld_28) break;
Sleep(20);
}
}
}
}
int f0_10(int a_ticket_0, string &a_symbol_4, int &a_cmd_12, int &a_digits_16, double &ad_20, double &a_ord_stoploss_28, double &a_ord_takeprofit_36, double &ad_44, double &ad_52, bool ai_60 = TRUE) {
int l_ticket_64;
string ls_68;
if (ai_60) {
l_ticket_64 = OrderTicket();
if (!OrderSelect(a_ticket_0, SELECT_BY_TICKET, MODE_TRADES)) {
f0_8("OrderSelect() error: " + ErrorDescription(GetLastError()));
return (0);
}
a_symbol_4 = OrderSymbol();
a_cmd_12 = OrderType();
a_ord_takeprofit_36 = OrderTakeProfit();
a_ord_stoploss_28 = OrderStopLoss();
if (l_ticket_64 >= 0) OrderSelect(l_ticket_64, SELECT_BY_TICKET, MODE_TRADES);
}
ad_44 = NormalizeDouble(MarketInfo(a_symbol_4, MODE_BID), MarketInfo(a_symbol_4, MODE_DIGITS));
ad_52 = NormalizeDouble(MarketInfo(a_symbol_4, MODE_ASK), MarketInfo(a_symbol_4, MODE_DIGITS));
ad_20 = MarketInfo(a_symbol_4, MODE_POINT);
if (ad_20 == 0.001 || ad_20 == 0.00001) ad_20 = 10.0 * ad_20;
a_digits_16 = MarketInfo(a_symbol_4, MODE_DIGITS);
if (a_digits_16 == 0) {
ls_68 = gs_1060;
gs_1060 = "GetDigits";
f0_8("error: MarketInfo(symbol, MODE_DIGITS) == 0");
gs_1060 = ls_68;
return (0);
}
if (ai_60) {
a_ord_takeprofit_36 = NormalizeDouble(a_ord_takeprofit_36, a_digits_16);
a_ord_stoploss_28 = NormalizeDouble(a_ord_stoploss_28, a_digits_16);
ad_44 = NormalizeDouble(ad_44, a_digits_16);
ad_52 = NormalizeDouble(ad_52, a_digits_16);
}
return (1);
}
int init() {
// код доступен только после оплаты
}
Comment(" Please only set the ea to timeframe M1! Algobasket EA 1.93 waiting for Authentication...");
gi_820 = 0;
gi_824 = FALSE;
if (IsDllsAllowed() == FALSE) {
MessageBox("DLL calls are not enabled. Algobasket EA will not be running. Please enable DLL calls and rerun EA.", "Warning...");
Print("DLL calls disabled. Algobasket EA suspended.");
return (0);
}
if (Period() != PERIOD_M1) {
MessageBox("Please put Algobasket EA to timeframe M1 only.", "Warning...");
Print("Wrong Period loaded. Algobasket EA suspended.");
return (0);
}
gd_144 = 20;
if (iRiskLevel == 1) gd_144 = 10;
if (iRiskLevel == 2) gd_144 = 20;
if (iRiskLevel == 3) gd_144 = 30;
if (iRiskLevel == 4) gd_144 = 40;
if (iRiskLevel == 5) gd_144 = 50;
if (iRiskLevel == 6) gd_144 = 60;
if (iRiskLevel == 7) gd_144 = 70;
if (iRiskLevel == 8) gd_144 = 80;
if (iRiskLevel == 9) gd_144 = 90;
if (iRiskLevel == 10) gd_144 =100;
if (iRiskLevel < 1) gd_144 = 10;
if (iRiskLevel > Показано первые 50% кода (символов: 51162)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.