shurgin_collector.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.