← К каталогу
Исходный код · ID 3893

alg.mq4

Похожие материалы по тегам

! macd+.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!macd_adx.mq4MQL4 / MetaTrader 4 · 1 общих теговxauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 1 общих теговtm sniper pro.pineTradingView · 1 общих теговsource code of grid with 100 pips stop loss.mq4MQL4 / MetaTrader 4 · 1 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для платформы 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 и перейдите к оплате.

Стоимость полного кода
5 116,20₽ ≈ $62.54