private ea v1.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «private ea v1.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 5, предназначенный для автоматического управления позициями на валютном рынке. Он отслеживает рыночную ситуацию и размещает ордера на покупку и продажу с использованием сеточной логики, контролируя при этом уровень рисков через проверку просадки и минимального баланса. В коде реализована защита по максимальной просадке и проверка истечения лицензионной даты.
Настройки программы
| Настройка | Описание |
|---|---|
| InpStartLot | Начальный лот — Размер лота для первого ордера в корзине. |
| InpLotIncrement | Приращение лота — Шаг увеличения размера лота при наращивании позиции. |
| InpOrdersPerLevel | Ордеров на уровень — Количество ордеров, размещаемых на каждом уровне сетки. |
| InpGridSpacing | Шаг сетки — Ценовой интервал между уровнями сетки. |
| InpMaxOrdersSide | Максимум ордеров на сторону — Предельное количество открытых ордеров на одну сторону (покупка или продажа). |
| InpTakeProfit | Тейк-профит — Целевой уровень прибыли корзины для закрытия всех ордеров стороны. |
| InpMaxDDPercent | Максимальная просадка — Допустимый процент убытка от баланса, при достижении которого все позиции закрываются. |
| InpMinEquityPct | Минимальный процент equity — Минимальный процент equity от баланса, ниже которого новые ордера не размещаются. |
| InpSlippage | Проскальзывание — Допустимое отклонение цены при исполнении ордера в пунктах. |
| InpMaxSpread | Максимальный спред — Допустимый максимальный спред для размещения нового ордера. |
| InpOrderDelay | Задержка ордера — Минимальный временной интервал между размещением последовательных ордеров в миллисекундах. |
Поиск по коду файла
#property version ""
input double InpStartLot = 0.01;
input double InpLotIncrement = 0.01;
input int InpOrdersPerLevel = 4;
input double InpGridSpacing = 2.0;
input int InpMaxOrdersSide = 40;
input double InpTakeProfit = 2.0;
input double InpMaxDDPercent = 50.0;
input double InpMinEquityPct = 50.0;
input int InpSlippage = 50;
input double InpMaxSpread = 0.5;
input int InpOrderDelay = 500;
datetime ExpiryDate = D'2036.04.12 23:59'; // Expiry Date: 20 May 2026
#define CLR_GOLD C'255,185,0'
#define CLR_BG C'10,12,25'
#define CLR_BORD C'45,45,65'
#define CLR_SUPPORT C'30,150,220'
#define MAGIC_BUY 1111
#define MAGIC_SELL 2222
datetime m_lastOrderTime = 0;
bool m_isExpired = false;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason) { ObjectsDeleteAll(0, "pnl_"); }
void OnTick()
{
// код доступен только после оплаты
}
void HandleGridSide(ENUM_ORDER_TYPE type, int magic)
{
double pnl = GetBasketProfit(magic);
if(pnl >= InpTakeProfit) { CloseAllByMagic(magic); return; }
int count = CountOrders(magic);
if(count == 0 && AccountInfoDouble(ACCOUNT_EQUITY) >= (AccountInfoDouble(ACCOUNT_BALANCE) * (InpMinEquityPct/100))) {
SendTrade(type, InpStartLot, magic);
}
else if(count > 0 && count < InpMaxOrdersSide) {
double lastP = GetLastOrderPrice(magic);
double curP = (type == ORDER_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);
double gap = (type == ORDER_TYPE_BUY) ? (lastP - curP) : (curP - lastP);
if(gap >= InpGridSpacing && (int)GetTickCount() - (int)m_lastOrderTime > InpOrderDelay) {
double nextLot = InpStartLot + ((count / InpOrdersPerLevel) * InpLotIncrement);
SendTrade(type, NormalizeDouble(nextLot, 2), magic);
}
}
}
void DrawExactPanel()
{
CreateBox("pnl_bg", 5, 5, 235, 510, CLR_BG, CLR_BORD);
CreateText("pnl_title", 15, 15, "PRIVATE EA", 13, CLR_GOLD, "Arial Black");
CreateText("pnl_ver", 125, 18, "v1.0", 7, clrGray);
CreateBox("pnl_sym_bg", 165, 13, 65, 18, CLR_BG, clrGray);
CreateText("pnl_sym", 170, 16, _Symbol + " " + string(Period()), 7, CLR_GOLD);
int y = 50;
if(m_isExpired)
{
CreateText("pnl_exp_h", 15, y, "STATUS: EXPIRED", 10, clrCrimson, "Arial Bold");
y+=30;
CreateText("pnl_exp_m", 15, y, "License ended on 20 May 2026", 8, clrWhite);
y+=20;
CreateText("pnl_exp_c", 15, y, "Contact owner to renew", 8, clrWhite);
}
else
{
CreateText("pnl_acc_h", 15, y, "ACCOUNT", 8, clrCornflowerBlue);
y+=22; CreateRow("Bal", "Balance", DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE), 2)+" USD", y);
y+=18; CreateRow("Eq", "Equity", DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY), 2)+" USD", y);
double fl = AccountInfoDouble(ACCOUNT_EQUITY)-AccountInfoDouble(ACCOUNT_BALANCE);
y+=18; CreateRow("Fl", "Floating P/L", (fl>=0?"+":"")+DoubleToString(fl, 2)+" USD", y, (fl>=0?clrLime:clrCrimson));
double dd = (AccountInfoDouble(ACCOUNT_BALANCE)>0)?(MathAbs(fl)/AccountInfoDouble(ACCOUNT_BALANCE)*100):0;
y+=18; CreateRow("Dd", "Drawdown", DoubleToString(dd, 2)+"%", y, clrLime);
y+=30; CreateText("pnl_set_h", 15, y, "SETTINGS", 8, clrCornflowerBlue);
y+=22; CreateRowSet("G", "Grid", "$"+DoubleToString(InpGridSpacing, 2), "L", "Lot", DoubleToString(InpStartLot, 2), y);
y+=18; CreateRowSet("S", "Step", "+"+DoubleToString(InpLotIncrement, 2)+" x"+string(InpOrdersPerLevel), "T", "TP", DoubleToString(InpTakeProfit, 2), y);
y+=35; CreateText("pnl_b_h", 15, y, "• BUY BASKET", 8, clrLime);
UpdateBasketUI(MAGIC_BUY, "B", y+22);
y+=100; CreateText("pnl_s_h", 15, y, "• SELL BASKET", 8, clrCrimson);
UpdateBasketUI(MAGIC_SELL, "S", y+22);
}
y = 390; // Market Section fixed position
CreateText("pnl_m_h", 15, y, "MARKET", 8, clrCornflowerBlue);
y+=22; CreateRowSet("Sp", "Spread", "$"+DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_ASK)-SymbolInfoDouble(_Symbol, SYMBOL_BID), 3), "St", "Status", (m_isExpired ? "Expired" : (CountOrders(MAGIC_BUY)+CountOrders(MAGIC_SELL)>0?"Trade":"Wait")), y);
y+=18; CreateText("pnl_sv_l", 15, y, "Server", 8, clrGray);
CreateText("pnl_sv_v", 65, y, TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), 8, clrWhite);
y+=30;
CreateBox("pnl_btn", 12, y, 220, 32, CLR_SUPPORT, CLR_NONE);
CreateText("pnl_btn_t", 40, y+8, "Contact Owner t.me/free_fx_pro", 9, clrWhite, "Arial Bold");
y+=42;
CreateText("pnl_footer", 15, y, "t.me/free_fx_pro | Telegram", 7, clrDarkSlateGray);
Показано первые 50% кода (символов: 8282)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.