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

shurgin_collector.mq4

Вы автор или правообладатель?

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

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

О программе

Данный код представляет собой торгового советника для платформы MetaTrader 4 (язык MQL4), работающего с двумя валютными парами одновременно. Советник использует магические числа для разделения ордеров на две независимые группы и управления ими.

Советник отслеживает открытые позиции, суммирует их прибыль с учётом свопа и комиссии, и закрывает ордера при достижении заданных пороговых значений прибыли. Также он открывает новые позиции с размером лотов, который может изменяться в зависимости от настроенного множителя.

В коде реализованы стандартные проверки: включён ли советник, разрешена ли торговля, а также нормализация лотов в пределах лимитов брокера. Для живого аккаунта предусмотрена проверка наличия лицензионного ключа. На графике отображается информационный текст с авторскими правами.

Настройки программы

НастройкаОписание
MagicNumber Магическое число — Магическое число для идентификации ордеров, управляемых советником
Pair_1 Валютная пара 1 — Первая валютная пара для торговли
Pair_2 Валютная пара 2 — Вторая валютная пара для торговли
Lots_1 Лоты для пары 1 — Начальный размер лота для первой валютной пары
Lots_2 Лоты для пары 2 — Начальный размер лота для второй валютной пары
KoeffLots Множитель лотов — Множитель для увеличения размера лота при открытии позиций на следующих уровнях
LossInValute Убыток в валюте — Порог убытка в валюте счёта, при достижении которого происходит открытие дополнительных позиций
ProfitInValute Прибыль в валюте — Порог прибыли в валюте счёта, при достижении которого происходит закрытие позиций
SumProfitInValute Суммарная прибыль в валюте — Общий порог прибыли в валюте счёта для закрытия всех ордеров группы
Slippage Проскальгивание — Допустимое проскальгивание в пунктах при исполнении ордеров
OrdersComment Комментарий ордеров — Комментарий, добавляемый к ордерам советника
Получить полный код

Поиск по коду файла

extern int MagicNumber = 1;
extern string Pair_1 = "EURUSD";
extern string Pair_2 = "GBPUSD";
extern double Lots_1 = 0.01;
extern double Lots_2 = 0.01;
extern double KoeffLots = 2.0;
extern double LossInValute = 3.0;
extern double ProfitInValute = 3.0;
extern double SumProfitInValute = 2.0;
extern int Slippage = 3;
extern string OrdersComment = "Shurgin_Collector";
int gi_160;
int g_magic_164;
int g_ticket_168;
int g_count_172;
int gi_176;
int gi_180;
int gi_184;
double g_lots_188;
double g_maxlot_212;
double g_minlot_220;
double g_lotstep_228;
double g_maxlot_236;
double g_minlot_244;
double g_lotstep_252;
double gda_260[500];
double gda_264[500];
double gd_268;
double gd_276;
string g_comment_284;
string g_comment_292;
string g_text_300;
bool gba_308[500];
bool gba_312[500];
bool gba_316[500];
bool gba_320[500];

int init() {
      // код доступен только после оплаты
   }

int start() {
      // код доступен только после оплаты
   }
   int li_4;
   int li_8;
   if (!IsTesting()) {
      if (!IsExpertEnabled()) {
         Comment("The trading terminal of experts do not run.");
         return (0);
      }
      if (!IsTradeAllowed()) {
         Comment("Trade is disabled or trade flow is busy.");
         return (0);
      }
      Comment("");
   }
   if ((!IsTesting()) && !IsOptimization() && (!IsDemo())) {
      if (gi_184 != gi_184) {
         Comment("To trade a live account I need the license key.");
         return (0);
      }
   }
   for (int pos_0 = 0; pos_0 < 500; pos_0++) {
      gda_260[pos_0] = 0;
      gda_264[pos_0] = 0;
      gba_308[pos_0] = 0;
      gba_312[pos_0] = 0;
      gba_316[pos_0] = 0;
      gba_320[pos_0] = 0;
   }
   gd_268 = 0;
   gd_276 = 0;
   int li_12 = -1;
   int li_16 = -1;
   for (pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
      if (OrderSelect(pos_0, SELECT_BY_POS)) {
         if ((OrderSymbol() != Pair_1 && OrderSymbol() != Pair_2) || OrderMagicNumber() < gi_160 || OrderMagicNumber() >= gi_160 + 1000) continue;
         if (OrderMagicNumber() < gi_160 + 500) {
            li_4 = OrderMagicNumber() - gi_160;
            li_8 = 1;
            if (li_12 < li_4) li_12 = li_4;
            gd_268 += OrderProfit() + OrderSwap() + OrderCommission();
            gda_260[li_4] += (OrderProfit() + OrderSwap() + OrderCommission());
         } else {
            li_4 = OrderMagicNumber() - gi_160 - 500;
            li_8 = 2;
            if (li_16 < li_4) li_16 = li_4;
            gd_276 += OrderProfit() + OrderSwap() + OrderCommission();
            gda_264[li_4] += (OrderProfit() + OrderSwap() + OrderCommission());
         }
         if (OrderType() == OP_SELL) {
            if (li_8 == 1) {
               gba_312[li_4] = 1;
               continue;
            }
            gba_320[li_4] = 1;
            continue;
         }
         if (OrderType() == OP_BUY) {
            if (li_8 == 1) {
               gba_308[li_4] = 1;
               continue;
            }
            gba_316[li_4] = 1;
         }
      }
   }
   if (li_12 >= 2 && gd_268 >= SumProfitInValute) {
      Print("*** Closure of all first orders at (SumProfitInValute) of profit ", gd_268);
      CloseAll(1, -1);
      return (0);
   }
   if (li_16 >= 2 && gd_276 >= SumProfitInValute) {
      Print("*** Closure of second order in (SumProfitInValute) of profit ", gd_276);
      CloseAll(2, -1);
      return (0);
   }
   if (gda_260[li_12] >= ProfitInValute) {
      Print("*** Closure ", li_12 + 1," a pair of first order in (ProfitInValute) of profit ", gda_260[li_12]);
      CloseAll(1, li_12);
      return (0);
   }
   if (gda_264[li_16] >= ProfitInValute) {
      Print("*** Closure ", li_16 + 1," a pair of second order (ProfitInValute) of profit ", gda_264[li_16]);
      CloseAll(2, li_16);
      return (0);
   }
   RefreshRates();
   if (li_12 < 0) {
      Print("*** Opening of the first order of the first pair");
      g_lots_188 = NRL1(Lots_1);
      g_magic_164 = gi_160;
   } else {
      if (li_12 >= 0 && (!gba_308[li_12]) && gba_312[li_12]) {
         Print("*** Opening of the first order of the first pair");
         g_lots_188 = NRL1(Lots_1 * MathPow(KoeffLots, li_12));
         g_magic_164 = gi_160 + li_12;
      } else {
         if (li_12 >= 0 && gba_308[li_12] && gba_312[li_12] && gda_260[li_12] <= (-LossInValute) * MathPow(KoeffLots, li_12)) {
            Print("*** Opening ", li_12 + 1," orders the first couple of orders. The loss of the previous level ", gda_260[li_12]);
            g_lots_188 = NRL1(Lots_1 * MathPow(KoeffLots, li_12 + 1));
            g_magic_164 = gi_160 + li_12 + 1;
         } else g_lots_188 = 0;
      }
   }
   if (g_lots_188 > 0.0) {
      g_ticket_168 = OrderSend(Pair_1, OP_BUY, g_lots_188, MarketInfo(Pair_1, MODE_ASK), Slippage, 0, 0, g_comment_284, g_magic_164, 0, Blue);
      if (g_ticket_168 > 0) {

Показано первые 50% кода (символов: 8798)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
879,80₽ ≈ $10.75